1"use strict";(self.webpackChunkmeshtastic=self.webpackChunkmeshtastic||[]).push([["19812"],{43932(e,t,n){n.r(t),n.d(t,{metadata:()=>o,default:()=>u,frontMatter:()=>a,contentTitle:()=>d,toc:()=>c,assets:()=>l});var o=JSON.parse('{"id":"software/android/user/index","title":"User Guide","description":"Documentation for using the Meshtastic Android and Desktop app.","source":"@site/docs/software/android/user/index.md","sourceDirName":"software/android/user","slug":"/software/android/user/","permalink":"/docs/software/android/user/","draft":false,"unlisted":false,"editUrl":"https://github.com/meshtastic/meshtastic/edit/master/docs/software/android/user/index.md","tags":[],"version":"current","lastUpdatedBy":"rcarteraz","sidebarPosition":1,"frontMatter":{"title":"User Guide","layout":"default","sidebar_position":1,"has_children":true,"parent":"User Guide"},"sidebar":"Sidebar","previous":{"title":"Android App","permalink":"/docs/software/android/"},"next":{"title":"Getting Started","permalink":"/docs/software/android/user/onboarding"}}'),r=n(91987),i=n(67008),s=n(87622);let a={title:"User Guide",layout:"default",sidebar_position:1,has_children:!0,parent:"User Guide"},d="User Guide",l={},c=[{value:"What's New in the Docs",id:"whats-new-in-the-docs",level:2}];function h(e){let t={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",hr:"hr",p:"p",strong:"strong",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"user-guide",children:"User Guide"})}),"\n",(0,r.jsx)(t.p,{children:"Documentation for using the Meshtastic Android and Desktop app."}),"\n",(0,r.jsx)(t.hr,{}),"\n",(0,r.jsx)(t.h2,{id:"whats-new-in-the-docs",children:"What's New in the Docs"}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"July 2026"})," \u2014 ",(0,r.jsx)(t.a,{href:"/docs/software/android/user/discovery",children:"Discovery"})," \u2014 New Mesh Beacon: broadcast invitations to your mesh and receive Mesh invitations from others, with one-tap join or a preset-seeded Discovery scan."]}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"July 2026"})," \u2014 ",(0,r.jsx)(t.a,{href:"/docs/software/android/user/settings-radio-user",children:"Settings \u2014 Radio & User"})," \u2014 Security config now offers encrypted on-device key backup/restore and a packet-authenticity Protection Level (Strict / Balanced / Compatible)."]}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"July 2026"})," \u2014 ",(0,r.jsx)(t.a,{href:"/docs/software/android/user/mqtt",children:"MQTT"}),' \u2014 Documented the "',(0,r.jsx)(s.A,{term:"MQTT",definition:"A lightweight messaging protocol designed for small sensors and mobile devices, enabling efficient data transmission in the Meshtastic network for Internet connectivity and integration with IoT platforms. See https://en.wikipedia.org/wiki/MQTT. In Meshtastic, MQTT is used to connect a node to the internet, and can be used to connect multiple meshes to each other.",routePath:"/docs/terms/",children:"MQTT"}),' proxy on this phone" toggle: see whether your phone is relaying ',(0,r.jsx)(s.A,{term:"MQTT",definition:"A lightweight messaging protocol designed for small sensors and mobile devices, enabling efficient data transmission in the Meshtastic network for Internet connectivity and integration with IoT platforms. See https://en.wikipedia.org/wiki/MQTT. In Meshtastic, MQTT is used to connect a node to the internet, and can be used to connect multiple meshes to each other.",routePath:"/docs/terms/",children:"MQTT"})," for the node and cut it off immediately."]}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"July 2026"})," \u2014 ",(0,r.jsx)(t.a,{href:"/docs/software/android/user/map-and-waypoints",children:"Map & Waypoints"})," \u2014 Waypoints can now define a geofence: get notified when nodes enter or leave an area. Creator-only by default, with a per-geofence opt-in for others."]}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"July 2026"})," \u2014 ",(0,r.jsx)(t.a,{href:"/docs/software/android/user/map-and-waypoints",children:"Map & Waypoints"})," \u2014 Map Layers (import your own ",(0,r.jsx)(t.code,{children:".kml"}),"/",(0,r.jsx)(t.code,{children:".kmz"}),"/GeoJSON overlays) and Site Planner (",(0,r.jsx)(s.A,{term:"RF",definition:"The radio signal a node transmits and receives over LoRa.",routePath:"/docs/terms/",children:"RF"})," coverage estimation) are now available on F-Droid, not just Google Play."]}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"July 2026"})," \u2014 ",(0,r.jsx)(t.a,{href:"/docs/software/android/user/nodes",children:"Nodes"}),' \u2014 Added a "Nodes per Hop" histogram showing how many nodes sit at each hop distance, filterable to a last-heard time window.']})]})}function u(e={}){let{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},67008(e,t,n){n.d(t,{R:()=>s,x:()=>a});var o=n(71763);let r={},i=o.createContext(r);function s(e){let t=o.useContext(i);return o.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),o.createElement(i.Provider,{value:t},e.children)}},87622(e,t,n){n.d(t,{A:()=>s});var o=n(71763),r=n(37773),i=n(91987);function s({term:e,definition:t,abbreviation:n,routePath:a="/glossary",children:d}){let[l,c]=(0,o.useState)(!1),[h,u]=(0,o.useState)(null),[p,f]=(0,o.useState)("top"),m=(0,o.useRef)(null),g=(0,o.useRef)(null),w=(0,o.useCallback)(()=>{let e;if(!m.current||!g.current)return;let t=m.current.getBoundingClientRect(),n=g.current.getBoundingClientRect(),o=window.innerWidth,r=window.innerHeight,i=document.querySelector(".navbar"),s=i?i.getBoundingClientRect().bottom:0,a=t.to
1p-s>=n.height+8,d=r-t.bottom>=n.height+8,l=a||!d?"top":"bottom";e="top"===l?t.top-n.height-8:t.bottom+8;let c=t.left+t.width/2-n.width/2;c=Math.max(8,Math.min(c,o-n.width-8)),f(l),u({top:Math.max(s+4,e),left:c})},[]);(0,o.useEffect)(()=>{let e;if(!l)return;let t=requestAnimationFrame(()=>{e=requestAnimationFrame(()=>{w()})}),n=()=>w(),o=()=>w();return window.addEventListener("scroll",n,!0),window.addEventListener("resize",o),()=>{cancelAnimationFrame(t),e&&cancelAnimationFrame(e),window.removeEventListener("scroll",n,!0),window.removeEventListener("resize",o)}},[l,w]);let y=(0,r.P_)("docusaurus-plugin-glossary"),x=(0,o.useMemo)(()=>{if(t&&"string"==typeof t&&t.length>0)return t;let n=(y&&y.terms||[]).find(t=>"string"==typeof t.term&&t.term.toLowerCase()===String(e).toLowerCase());return n&&n.definition?n.definition:void 0},[t,y,e]),j=(0,o.useMemo)(()=>{let t=n;if(!t){let n=(y&&y.terms||[]).find(t=>"string"==typeof t.term&&t.term.toLowerCase()===String(e).toLowerCase());t=n&&n.abbreviation}if("string"!=typeof t)return;let o=t.trim();if(o&&o.toLowerCase()!==String(e).toLowerCase())return o},[n,y,e]),v=(0,o.useMemo)(()=>a&&"string"==typeof a&&a.length>0?a:y&&y.routePath||"/glossary",[y,a]),b=d||e,M=e.toLowerCase().replace(/\s+/g,"-");return(0,i.jsxs)("span",{ref:m,className:"glossaryTermWrapper_ud7W",children:[(0,i.jsx)("a",{href:`${v}#${M}`,className:"glossaryTerm_x2nJ",onMouseEnter:()=>c(!0),onMouseLeave:()=>c(!1),onFocus:()=>c(!0),onBlur:()=>c(!1),"aria-describedby":`tooltip-${M}`,children:b}),x&&(0,i.jsxs)("span",{ref:g,id:`tooltip-${M}`,className:`tooltip_WjgA ${l?"tooltipVisible_AjfD":""} ${"top"===p?"tooltipTop_uMN4":"tooltipBottom_U9P5"} tooltipFloating_nLk7`,role:"tooltip",style:l&&h?{top:`${h.top}px`,left:`${h.left}px`}:void 0,children:[(0,i.jsx)("strong",{children:e}),j?` (${j}). `:"",x]})]})}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.