PageSourceSearch

https://meshtastic-bice.vercel.app/assets/js/95fa565e.495a0680.js

js meshtastic-bice.vercel.app collected 2026-10-03 07:18:51 UTC 34,623 bytes, 93 lines download raw bytes

1"use strict";(self.webpackChunkmeshtastic=self.webpackChunkmeshtastic||[]).push([["11370"],{83378(e,t,s){s.r(t),s.d(t,{metadata:()=>r,default:()=>p,frontMatter:()=>d,contentTitle:()=>c,toc:()=>h,assets:()=>u});var r=JSON.parse('{"id":"about/introduction","title":"Introduction","description":"Discover Meshtastic: a community-driven, open-source project using LoRa radios for long-range, off-grid communication.","source":"@site/docs/about/introduction.mdx","sourceDirName":"about","slug":"/introduction","permalink":"/docs/introduction","draft":false,"unlisted":false,"editUrl":"https://github.com/meshtastic/meshtastic/edit/master/docs/about/introduction.mdx","tags":[],"version":"current","lastUpdatedBy":"rcarteraz","sidebarPosition":1,"frontMatter":{"title":"Introduction","sidebar_label":"Introduction","slug":"/introduction","sidebar_position":1,"description":"Discover Meshtastic: a community-driven, open-source project using LoRa radios for long-range, off-grid communication."},"sidebar":"Sidebar","previous":{"title":"About","permalink":"/docs/about"},"next":{"title":"Overview","permalink":"/docs/overview"}}'),i=s(91987),n=s(67008),o=s(87622),a=s(57121),l=s(77683);let d={title:"Introduction",sidebar_label:"Introduction",slug:"/introduction",sidebar_position:1,description:"Discover Meshtastic: a community-driven, open-source project using LoRa radios for long-range, off-grid communication."},c,u={},h=[{value:"Features",id:"features",level:2},{value:"How it works",id:"how-it-works",level:2},{value:"Contributors",id:"contributors",level:2},{value:"Start using Meshtastic",id:"start-using-meshtastic",level:2}];function m(e){let t={a:"a",em:"em",h2:"h2",li:"li",p:"p",ul:"ul",...(0,n.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(t.p,{children:["Meshtastic\xae is a project that enables you to use inexpensive ",(0,i.jsx)(o.A,{term:"LoRa",definition:"A low-power, long-range wireless communication technology used by Meshtastic devices to enable communication over distances of several kilometers without the need for cellular, Wi-Fi, or other traditional network infrastructures.",routePath:"/docs/terms/",children:"LoRa"})," radios as a long range off-grid communication platform in areas without existing or reliable communications infrastructure. This project is 100% community driven and open source!"]}),"\n",(0,i.jsx)(l.j,{}),"\n",(0,i.jsx)(t.h2,{id:"features",children:"Features"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["Long range (",(0,i.jsx)(t.a,{href:"/docs/overview/range-tests#current-ground-record-331km",children:(0,i.jsx)(t.em,{children:"331km record by MartinR7 & alleg"})}),")"]}),"\n",(0,i.jsx)(t.li,{children:"No phone required for mesh communication"}),"\n",(0,i.jsx)(t.li,{children:"Decentralized communication - no dedicated router required"}),"\n",(0,i.jsx)(t.li,{children:"Encrypted communication"}),"\n",(0,i.jsx)(t.li,{children:"Excellent battery life"}),"\n",(0,i.jsx)(t.li,{children:"Send and receive text messages between members of the mesh"}),"\n",(0,i.jsxs)(t.li,{children:["Optional ",(0,i.jsx)(o.A,{term:"GPS",definition:"A satellite positioning system. A node with a GPS module determines its own location and can report that position to the mesh.",routePath:"/docs/terms/",children:"GPS"})," based location features"]}),"\n",(0,i.jsx)(t.li,{children:"And more!"}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"how-it-works",children:"How it works"}),"\n",(0,i.jsxs)(t.p,{children:["Meshtastic utilizes ",(0,i.jsx)(o.A,{term:"LoRa",definition:"A low-power, long-range wireless communication technology used by Meshtastic devices to enable communication over distances of several kilometers without the need for cellular, Wi-Fi, or other traditional network infrastructures.",routePath:"/docs/terms/",children:"LoRa"}),", a long-range radio protocol, which is widely accessible in most regions without the need for additional licenses or certifications, unlike ham radio operations."]}),"\n",(0,i.jsx)(t.p,{children:"These radios are designed to rebroadcast messages they receive, forming a mesh network. This setup ensures that every group member, including those at the furthest distance, can receive messages."}),"\n",(0,i.jsx)(t.p,{children:"Additionally, Meshtastic radios can be paired with a single phone, allowing friends and family to 
1send messages directly to your specific radio. It's important to note that each device is capable of supporting a connection from only one user at a time."}),"\n",(0,i.jsx)(t.p,{children:"If you are interested in a more technical overview of how Meshtastic works, visit the overview section below:"}),"\n",(0,i.jsx)("div",{className:"indexCtasBody",children:(0,i.jsx)(a.A,{className:"button button--outline  button--lg cta--button",to:"/docs/overview",children:(0,i.jsx)(t.p,{children:"Technical Overview"})})}),"\n",(0,i.jsx)(t.h2,{id:"contributors",children:"Contributors"}),"\n",(0,i.jsxs)(t.p,{children:["Meshtastic is an open source project available on GitHub. Our generous volunteers donate their personal time to write and maintain this codebase. If you would like to contribute see our ",(0,i.jsx)(t.a,{href:"https://github.com/meshtastic",children:"GitHub"}),", join our ",(0,i.jsx)(t.a,{href:"https://discord.gg/ktMAKGBnBs",children:"Discord server"}),", and read up on our ",(0,i.jsx)(t.a,{href:"https://github.com/orgs/meshtastic/discussions",children:"Meshtastic Discussions"}),"."]}),"\n",(0,i.jsx)("div",{className:"indexCtasBody",children:(0,i.jsx)(a.A,{className:"button button--outline  button--lg cta--button",to:"/docs/contributing",children:(0,i.jsx)(t.p,{children:"Contribute!"})})}),"\n",(0,i.jsx)(t.h2,{id:"start-using-meshtastic",children:"Start using Meshtastic"}),"\n",(0,i.jsx)(t.p,{children:'Hopefully your "Getting Started" experience is straight forward and headache free. If you encounter any issues, please consider updating our documentation to improve future user experiences or reach out on the forum or Discord.'}),"\n",(0,i.jsx)(t.p,{children:"Our support is 100% volunteer based. We are passionate about the project and hope to help newcomers become Meshtastic experts!"}),"\n",(0,i.jsx)("div",{className:"indexCtasBody",children:(0,i.jsx)(a.A,{className:"button button--outline  button--lg cta--button",to:"/docs/getting-started",children:(0,i.jsx)(t.p,{children:"Getting Started"})})})]})}function p(e={}){let{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(m,{...e})}):m(e)}},77683(e,t,s){s.d(t,{j:()=>b});var r=s(91987),i=s(71763),n=s(84994),o=s(11827),a=s(34262),l=s(74136),d=s(60231),c=s(87671),u=s(43190),h=s(1818);let m=[{id:0,x:55,y:5,device:"rak_wismesh_tag.svg",label:"Client"},{id:1,x:25,y:25,device:"tracker-t1000-e.svg",label:"Client"},{id:2,x:85,y:25,device:"thinknode_m1.svg",label:"Client"},{id:3,x:18,y:60,device:"t-deck.svg",label:"Client"},{id:4,x:55,y:50,device:"station-g2.svg",label:"Router"},{id:5,x:92,y:60,device:"rak4631.svg",label:"Client"},{id:6,x:35,y:85,device:"heltec_mesh_pocket.svg",label:"Client"},{id:7,x:75,y:85,device:"muzi_r1_neo.svg",label:"Client"}],p=[[0,1],[0,2],[1,3],[1,4],[2,4],[2,5],[3,6],[4,6],[4,7],[5,7],[6,7],[1,6],[2,7]],x=new Map;p.forEach(([e,t])=>{x.has(e)||x.set(e,[]),x.has(t)||x.set(t,[]),x.get(e).push(t),x.get(t).push(e)});let g=(e,t)=>p.findIndex(([s,r])=>s===e&&r===t||s===t&&r===e),f=({device:e,alt:t,className:s=""})=>(0,r.jsx)("img",{src:`https://flasher.meshtastic.org/img/devices/${e}`,alt:t,className:s,loading:"lazy"}),y=({node:e,isActive:t,connection:s})=>{let i=e.x<50;return(0,r.jsxs)("div",{className:"absolute transform -translate-x-1/2 -translate-y-1/2 flex flex-col items-center z-10",style:{left:`${e.x}%`,top:`${e.y}%`},children:[(0,r.jsxs)("div",{className:"relative",children:[(0,r.jsx)("div",{className:`absolute inset-0 rounded-full transition-all duration-700 ${t?"bg-primary/15 scale-125":"bg-transparent scale-100"}`}),(0,r.jsx)(f,{device:e.device,alt:e.label,className:"mtopo-device object-contain relative z-10"}),s&&(0,r.jsxs)("div",{className:`mtopo-badge ${i?"mtopo-badge-left":"mtopo-badge-right"} z-20`,children:["bt"===s&&(0,r.jsx)(n.A,{className:"mtopo-badge-icon text-[#0082FC]","aria-label":"Bluetooth connection",role:"img"}),"wifi"===s&&(0,r.jsx)(o.A,{className:"mtopo-badge-icon text-primary","aria-label":"WiFi connection",role:"img"}),"usb"===s&&(0,r.jsx)(a.A,{className:"mtopo-badge-icon text-muted-foreground","aria-label":"USB connection",role:"img"})]})]}),(0,r.jsx)("span",{className:"mtopo-label font-mono text-muted-foreground mt-1",children:e.label})]})},w=h.standaloneMessages;function b(){let[e,t]=(0,i.useState)(new Map),[s,h]=(0,i.useState)([]),[f,b]=(0,i.useState)(new Set),[v,j]=(0,i.useState)(""),[k,N]=(0,i.useState)([]),[I,M]=(0,i.useState)([]),[A,S]=(0,i.useState)(!1),[C,L]=(0,i.useState)(!1),[T,$]=(0,i.useState)(!1),B=(0,i.useRef)(0),R=(0,i.useRef)(null),z=(0,i.useRef)(null),[E,W]=(0,i.useState)(()=>new Date().toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit",hour12:!1})),G=(0,i.useRef)([]),F=(0,i.useRef)(null);(0,i.useEffect)(()=>{let e=setInterval(()=>{W(new Date().toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit",hour12:!1}))},1e3);return()=>clearInterval(e)},[]);let P=(0,i.useCallback)((e,s)=>{let r;
1G.current.forEach(e=>clearTimeout(e)),G.current=[];let i=6===e;if(void 0!==e)z.current={text:s||"Hello mesh!",nodeId:r=e};else{let e=m.filter(e=>"Client"===e.label&&6!==e.id).map(e=>e.id),t=Math.floor(Math.random()*e.length);r=e[t];let s=w[B.current%w.length];B.current++,R.current={text:s,nodeId:r},z.current={text:s,nodeId:r}}let n=e=>{if(i||!R.current)return;let t=R.current;R.current=null;let s=setTimeout(()=>{L(!0);let e=setTimeout(()=>{N(e=>[...e.slice(-4),{text:t.text,from:"mesh",nodeId:t.nodeId}]),L(!1)},800);G.current.push(e)},e);G.current.push(s)},o=e=>{if(!z.current)return;let t=z.current;z.current=null;let s=setTimeout(()=>{$(!0);let e=setTimeout(()=>{M(e=>[...e.slice(-5),{text:t.text,from:"mesh",nodeId:t.nodeId}]),$(!1)},800);G.current.push(e)},e);G.current.push(s)},a=new Set([r]);h([r]);let l=[],d=setTimeout(()=>{let e=x.get(r)||[],s=new Map;e.forEach(e=>{let t=g(r,e);-1!==t&&(s.set(t,r),l.push(e),a.add(e))}),t(s),h([r,...l]),b(e=>{let t=new Set(e);return s.forEach((e,s)=>t.add(s)),t}),l.includes(6)&&n(1e3),l.includes(5)&&o(1e3)},500);G.current.push(d);let c=[],u=[],p=setTimeout(()=>{let e=new Map;l.forEach(t=>{(x.get(t)||[]).forEach(s=>{if(!a.has(s)){let r=g(t,s);-1!==r&&!e.has(r)&&(e.set(r,t),c.push(s),a.add(s),u.includes(t)||u.push(t))}})}),e.size>0?(t(e),h([...u,...c]),b(t=>{let s=new Set(t);return e.forEach((e,t)=>s.add(t)),s}),c.includes(6)&&n(1e3),c.includes(5)&&o(1e3)):(t(new Map),h([]))},2e3);G.current.push(p);let f=setTimeout(()=>{let e=new Map,s=[],r=[];c.forEach(t=>{(x.get(t)||[]).forEach(i=>{if(!a.has(i)){let n=g(t,i);-1!==n&&!e.has(n)&&(e.set(n,t),s.push(i),a.add(i),r.includes(t)||r.push(t))}})}),e.size>0?(t(e),h([...r,...s]),b(t=>{let s=new Set(t);return e.forEach((e,t)=>s.add(t)),s}),s.includes(6)&&n(1e3),s.includes(5)&&o(1e3)):(t(new Map),h([]))},3500);G.current.push(f);let y=setTimeout(()=>{t(new Map),h([])},5e3);G.current.push(y)},[]);(0,i.useEffect)(()=>{let e=setTimeout(()=>P(),1e3);return F.current=setInterval(()=>P(),8e3),()=>{clearTimeout(e),F.current&&clearInterval(F.current),G.current.forEach(e=>clearTimeout(e))}},[P]);let q=()=>{if(!v.trim())return;N(e=>[...e.slice(-4),{text:v,from:"me"}]),j(""),S(!0);let e=window.setTimeout(()=>S(!1),1500);G.current.push(e),F.current&&clearInterval(F.current),P(6,v),F.current=setInterval(()=>P(),8e3)};return(0,r.jsxs)("div",{className:"relative w-full max-w-4xl mx-auto",children:[(0,r.jsx)("style",{children:`
2          @keyframes ping-travel {
3            0% { offset-distance: 0%; opacity: 1; }
4            100% { offset-distance: 100%; opacity: 0.3; }
5          }
6          @keyframes ping-glow {
7            0% { r: 1; opacity: 0.8; }
8            50% { r: 3; opacity: 0.4; }
9            100% { r: 5; opacity: 0; }
10          }
11          @keyframes bt-pulse {
12            0% { opacity: 0; }
13            20% { opacity: 1; }
14            100% { opacity: 0.6; }
15          }
16
17          /*
18           * The topology lays nodes out in percentages, so every gap between
19           * them shrinks with the canvas. Size the things drawn inside a node
20           * against that same canvas (cqw) so the diagram stays self-similar:
21           * a clearance that holds at the reference width holds at every width.
22           * Values are calibrated to the 496px reference canvas, and clamped so
23           * labels stay legible once the canvas gets very small.
24           */
25          .mtopo-canvas {
26            container-type: inline-size;
27            container-name: mtopo;
28          }
29          .mtopo-device {
30            display: block;
31            margin: 0;
32            width: 48px;
33            height: 56px;
34            width: clamp(29px, 9.68cqw, 48px);
35            height: clamp(34px, 11.29cqw, 56px);
36          }
37          .mtopo-label {
38            font-size: 10px;
39            font-size: clamp(8px, 2.02cqw, 10px);
40            line-height: 1.2;
41          }
42          /*
43           * The connection icon rides on the device's top corner rather than
44           * hanging off its side, so a node never takes more horizontal room
45           * than its own artwork. It carries a filled chip behind it: most
46           * device art is dark, and a bare glyph would disappear into 
46it.
47           */
48          .mtopo-badge {
49            position: absolute;
50            top: 0;
51            display: grid;
52            place-items: center;
53            width: 24px;
54            height: 24px;
55            width: clamp(17px, 4.84cqw, 24px);
56            height: clamp(17px, 4.84cqw, 24px);
57            border-radius: 9999px;
58            background: var(--ifm-background-color);
59            box-shadow: 0 0 0 1px var(--ifm-color-emphasis-200);
60          }
61          .mtopo-badge-left {
62            left: 0;
63            transform: translate(-35%, -35%);
64          }
65          .mtopo-badge-right {
66            right: 0;
67            transform: translate(35%, -35%);
68          }
69          .mtopo-badge-icon {
70            width: 62%;
71            height: 62%;
72          }
73
74          /*
75           * The phone and terminal mockups are a fixed 176px and 192px wide, so
76           * on a narrow row they take their width out of the canvas and leave
77           * the topology cramped. Let them give ground instead of disappearing:
78           * both shrink with the row, down to a floor that keeps their own text
79           * readable, so the canvas keeps a workable width at every size.
80           */
81          .mtopo-row {
82            container-type: inline-size;
83            container-name: mtopo-row;
84          }
85          @container mtopo-row (max-width: 820px) {
86            .mtopo-phone { zoom: 0.88; }
87            .mtopo-terminal { zoom: 0.88; }
88          }
89          @container mtopo-row (max-width: 720px) {
90            .mtopo-phone { zoom: 0.78; }
91            .mtopo-terminal { zoom: 0.78; }
92          }
93        `}),(0,r.jsxs)("div",{className:"mtopo-row flex items-end gap-4 relative overflow-visible",children:[(0,r.jsx)("div",{className:"mtopo-phone hidden sm:block flex-shrink-0 w-44",children:(0,r.jsx)("div",{className:"rounded-[1.5rem] bg-gradient-to-b from-stone-300 to-stone-400 dark:from-gray-800 dark:to-gray-900 p-2 shadow-xl ring-1 ring-stone-400 dark:ring-gray-600/50",children:(0,r.jsx)("div",{className:"rounded-[1.25rem] bg-stone-100 dark:bg-gray-900 p-1.5",children:(0,r.jsxs)("div",{className:"relative overflow-hidden rounded-[1rem] bg-stone-50 dark:bg-gray-950",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between bg-stone-200/80 dark:bg-gray-900/80 px-2 py-0.5 text-[9px] text-primary",children:[(0,r.jsx)("span",{className:"font-mono",children:E}),(0,r.jsxs)("div",{className:"flex items-center gap-1",children:[(0,r.jsx)(l.A,{className:"h-2.5 w-2.5"}),(0,r.jsx)(o.A,{className:"h-2.5 w-2.5"}),(0,r.jsx)(d.A,{className:"h-2.5 w-2.5"})]})]}),(0,r.jsx)("div",{className:"border-b border-primary/20 bg-stone-100/50 dark:bg-gray-900/50 px-2 py-0.5",children:(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"font-mono text-[9px] font-bold text-primary leading-none",children:"MESHTASTIC"}),(0,r.jsx)("p",{className:"font-mono text-[6px] text-primary/70 leading-none mt-0.5",children:"Primary Channel"})]}),(0,r.jsx)("div",{className:"flex h-4 w-4 items-center justify-center rounded-full bg-primary/20",children:(0,r.jsx)(c.A,{className:"h-2 w-2 text-primary"})})]})}),(0,r.jsxs)("div",{className:"h-24 flex flex-col-reverse gap-0.5 overflow-y-auto p-1.5 bg-stone-50 dark:bg-transparent",children:[k.slice().reverse().map((e,t)=>(0,r.jsxs)("div",{className:`rounded border px-1 py-px ${"me"===e.from?"ml-3 border-primary/30 bg-primary/20":"mr-3 border-blue-400/30 bg-blue-500/20"}`,children:["mesh"===e.from&&(0,r.jsxs)("p",{className:"font-mono text-[5px] text-blue-500 dark:text-blue-400 leading-none",children:["Node ",e.nodeId]}),(0,r.jsx)("p",{className:`font-mono text-[7px] leading-none ${"me"===e.from?"text-stone-700 dark:text-gray-200":"text-stone-600 dar
93k:text-gray-300"}`,children:e.text})]},`msg-${k.length-t}`)),0===k.length&&(0,r.jsx)("p",{className:"text-center font-mono text-[8px] text-muted-foreground",children:"Send a message to the mesh"})]}),(0,r.jsx)("div",{className:"bg-stone-100/50 dark:bg-gray-900/50 px-2 py-2",children:(0,r.jsxs)("div",{className:"flex items-center gap-1.5 rounded-full bg-stone-200 dark:bg-gray-800 px-2 py-1.5",children:[(0,r.jsx)("input",{type:"text",value:v,onChange:e=>j(e.target.value),onKeyDown:e=>{"Enter"===e.key&&q()},placeholder:"Type...","aria-label":"Message to send",className:"flex-1 w-full min-w-0 border-0 bg-transparent font-mono text-[10px] text-stone-800 dark:text-gray-200 placeholder-stone-400 dark:placeholder-gray-500 outline-none"}),(0,r.jsx)("button",{type:"button",onClick:q,"aria-label":"Send message",className:`flex h-5 w-5 flex-shrink-0 items-center justify-center rounded-full border-0 transition-colors ${v.trim()?"bg-primary text-white dark:text-gray-900":"bg-primary/30 text-primary/60"}`,children:(0,r.jsx)(u.A,{className:"h-2.5 w-2.5"})})]})})]})})})}),(0,r.jsxs)("div",{className:"mtopo-canvas flex-1 relative overflow-visible",children:[(0,r.jsxs)("svg",{className:"absolute inset-0 w-full h-full overflow-visible",viewBox:"0 0 100 100",preserveAspectRatio:"none",role:"img","aria-label":"Mesh network connections",children:[(0,r.jsx)("title",{children:"Mesh network topology connections"}),(0,r.jsx)("defs",{children:(0,r.jsxs)("filter",{id:"glow",children:[(0,r.jsx)("feGaussianBlur",{stdDeviation:"0.5",result:"coloredBlur"}),(0,r.jsxs)("feMerge",{children:[(0,r.jsx)("feMergeNode",{in:"coloredBlur"}),(0,r.jsx)("feMergeNode",{in:"SourceGraphic"})]})]})}),p.map(([t,s],i)=>{let n=m[t],o=m[s],a=e.get(i);if(!f.has(i))return null;let l=a===t?n:o,d=a===t?o:n;return(0,r.jsxs)("g",{children:[(0,r.jsx)("line",{x1:n.x,y1:n.y,x2:o.x,y2:o.y,className:"stroke-primary/20",strokeWidth:"0.15"}),void 0!==a&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("line",{x1:n.x,y1:n.y,x2:o.x,y2:o.y,className:"stroke-primary",strokeWidth:"0.3",filter:"url(#glow)",style:{opacity:.6}}),(0,r.jsx)("circle",{r:"1.2",className:"fill-primary",filter:"url(#glow)",style:{offsetPath:`path('M ${l.x} ${l.y} L ${d.x} ${d.y}')`,animation:"ping-travel 1.5s ease-out forwards"}}),(0,r.jsx)("circle",{cx:l.x,cy:l.y,r:"1",className:"fill-none stroke-primary",strokeWidth:"0.3",style:{animation:"ping-glow 1.5s ease-out forwards"}}),(0,r.jsx)("circle",{cx:d.x,cy:d.y,r:"1",className:"fill-none stroke-primary",strokeWidth:"0.3",style:{animation:"ping-glow 1.5s ease-out 0.8s forwards"}})]})]},`${t}-${s}`)}),A&&(0,r.jsxs)("g",{children:[(0,r.jsx)("defs",{children:(0,r.jsxs)("filter",{id:"bt-line-glow",children:[(0,r.jsx)("feGaussianBlur",{stdDeviation:"1",result:"coloredBlur"}),(0,r.jsxs)("feMerge",{children:[(0,r.jsx)("feMergeNode",{in:"coloredBlur"}),(0,r.jsx)("feMergeNode",{in:"SourceGraphic"})]})]})}),(0,r.jsx)("line",{x1:"0",y1:"90",x2:m[6].x-5,y2:m[6].y,stroke:"#0082FC",strokeWidth:"0.5",filter:"url(#bt-line-glow)",strokeDasharray:"2 1",style:{animation:"bt-pulse 0.5s ease-out forwards"}}),(0,r.jsx)("circle",{r:"1.5",fill:"#0082FC",filter:"url(#bt-line-glow)",style:{offsetPath:`path('M 0 90 L ${m[6].x-5} ${m[6].y}')`,animation:"ping-travel 0.8s ease-out forwards"}})]}),C&&(0,r.jsxs)("g",{children:[(0,r.jsx)("defs",{children:(0,r.jsxs)("filter",{id:"bt-line-glow-in",children:[(0,r.jsx)("feGaussianBlur",{stdDeviation:"1",result:"coloredBlur"}),(0,r.jsxs)("feMerge",{children:[(0,r.jsx)("feMergeNode",{in:"coloredBlur"}),(0,r.jsx)("feMergeNode",{in:"SourceGraphic"})]})]})}),(0,r.jsx)("line",{x1:m[6].x-5,y1:m[6].y,x2:"0",y2:"90",stroke:"#0082FC",strokeWidth:"0.5",filter:"url(#bt-line-glow-in)",strokeDasharray:"2 1",style:{animation:"bt-pulse 0.5s ease-out forwards"}}),(0,r.jsx)("circle",{r:"1.5",fill:"#0082FC",filter:"url(#bt-line-glow-in)",style:{offsetPath:`path('M ${m[6].x-5} ${m[6].y} L 0 90')`,animation:"ping-travel 0.8s ease-out forwards"}})]}),T&&(0,r.jsxs)("g",{children:[(0,r.jsx)("defs",{children:(0,r.jsxs)("filter",{id:"usb-line-glow-in",x:"-50%",y:"-50%",width:"200%",height:"200%",children:[(0,r.jsx)("feGaussianBlur",{stdDeviation:"1",result:"blur"}),(0,r.jsxs)("feMerge",{children:[(0,r.jsx)("feMergeNode",{in:"blur"}),(0,r.jsx)("feMergeNode",{in:"SourceGraphic"})]})]})}),(0,r.jsx)("line",{x1:"100",y1:"65",x2:m[5].x+3,y2:m[5].y,stroke:"#888888",strokeWidth:"0.5",filter:"url
93(#usb-line-glow-in)",strokeDasharray:"2 1",style:{animation:"bt-pulse 0.5s ease-out forwards"}}),(0,r.jsx)("circle",{r:"1.5",fill:"#888888",filter:"url(#usb-line-glow-in)",style:{offsetPath:`path('M ${m[5].x+3} ${m[5].y} L 100 65')`,animation:"ping-travel 0.8s ease-out forwards"}})]})]}),(0,r.jsx)("div",{className:"relative pt-[75%]",children:m.map(e=>(0,r.jsx)(y,{node:e,isActive:s.includes(e.id),connection:{3:"wifi",5:"usb",6:"bt"}[e.id]},e.id))})]}),(0,r.jsx)("div",{className:"mtopo-terminal hidden xl:block flex-shrink-0 w-48",children:(0,r.jsxs)("div",{className:"rounded-lg bg-gradient-to-b from-stone-400 to-stone-500 dark:from-gray-700 dark:to-gray-800 p-1.5 shadow-xl ring-1 ring-stone-500 dark:ring-gray-600/50",children:[(0,r.jsx)("div",{className:"rounded bg-stone-900 dark:bg-gray-950 p-1",children:(0,r.jsxs)("div",{className:"rounded-sm bg-stone-950 dark:bg-black overflow-hidden",children:[(0,r.jsxs)("div",{className:"flex items-center gap-1 bg-stone-800 dark:bg-gray-900 px-2 py-0.5",children:[(0,r.jsxs)("div",{className:"flex gap-1",children:[(0,r.jsx)("div",{className:"w-1.5 h-1.5 rounded-full bg-red-500/80"}),(0,r.jsx)("div",{className:"w-1.5 h-1.5 rounded-full bg-yellow-500/80"}),(0,r.jsx)("div",{className:"w-1.5 h-1.5 rounded-full bg-green-500/80"})]}),(0,r.jsx)("span",{className:"flex-1 text-center font-mono text-[6px] text-stone-400",children:"meshtastic-cli"})]}),(0,r.jsx)("div",{className:"p-1.5 h-20 overflow-hidden font-mono text-[6px] leading-relaxed flex flex-col justify-end",children:0===I.length?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("p",{className:"text-green-400",children:"$ meshtastic --listen"}),(0,r.jsx)("p",{className:"text-stone-500",children:"Listening for messages..."})]}):I.slice(-6).map(e=>(0,r.jsxs)("p",{className:"text-cyan-400",children:["[Node ",e.nodeId,"]: ",e.text]},`cli-${e.from}-${e.nodeId??"me"}-${e.text.slice(0,8)}`))})]})}),(0,r.jsx)("div",{className:"mt-1 h-2 rounded-sm bg-gradient-to-b from-stone-300 to-stone-400 dark:from-gray-600 dark:to-gray-700"})]})})]}),(0,r.jsxs)("div",{className:"flex flex-wrap justify-center gap-4 sm:gap-6 mt-4 text-xs font-mono text-muted-foreground",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("div",{className:"w-6 h-0.5 bg-primary rounded-full"}),(0,r.jsx)("span",{children:"LoRa"})]}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)(n.A,{className:"w-4 h-4 text-[#0082FC]"}),(0,r.jsx)("span",{children:"Bluetooth"})]}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)(o.A,{className:"w-4 h-4 text-primary"}),(0,r.jsx)("span",{children:"WiFi"})]}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)(a.A,{className:"w-4 h-4"}),(0,r.jsx)("span",{children:"USB"})]})]})]})}},67008(e,t,s){s.d(t,{R:()=>o,x:()=>a});var r=s(71763);let i={},n=r.createContext(i);function o(e){let t=r.useContext(n);return r.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(i):e.components||i:o(e.components),r.createElement(n.Provider,{value:t},e.children)}},11765(e,t,s){s.d(t,{A:()=>d});var r=s(71763);let i=(...e)=>e.filter((e,t,s)=>!!e&&""!==e.trim()&&s.indexOf(e)===t).join(" ").trim(),n=e=>{let t=e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,s)=>s?s.toUpperCase():t.toLowerCase());return t.charAt(0).toUpperCase()+t.slice(1)};var o={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let a=(0,r.createContext)({}),l=(0,r.forwardRef)(({color:e,size:t,strokeWidth:s,absoluteStrokeWidth:n,className:l="",children:d,iconNode:c,...u},h)=>{let{size:m=24,strokeWidth:p=2,absoluteStrokeWidth:x=!1,color:g="currentColor",className:f=""}=(0,r.useContext)(a)??{},y=n??x?24*Number(s??p)/Number(t??m):s??p;return(0,r.createElement)("svg",{ref:h,...o,width:t??m??o.width,height:t??m??o.height,stroke:e??g,strokeWidth:y,className:i("lucide",f,l),...!d&&!(e=>{for(let t in e)if(t.startsWith("aria-")||"role"===t||"title"===t)return!0;return!1})(u)&&{"aria-hidden":"true"},...u},[...c.map(([e,t])=>(0,r.createElement)(e,t)),...Array.isArray(d)?d:[d]])}),d=(e,t)=>{let s=(0,r.forwardRef)(({className:s,...o},a)=>(0,r.createElement)(l,{ref:a,iconNode:t,className:i(`lucide-${n(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}`,`lucide-${e}`,s),...o}));return s.displayName=n(e),s}},60231(e,t,s){s.d(t,{A:()=>r});
93let r=(0,s(11765).A)("battery-full",[["path",{d:"M10 10v4",key:"1mb2ec"}],["path",{d:"M14 10v4",key:"1nt88p"}],["path",{d:"M22 14v-4",key:"14q9d5"}],["path",{d:"M6 10v4",key:"1n77qd"}],["rect",{x:"2",y:"6",width:"16",height:"12",rx:"2",key:"13zb55"}]])},84994(e,t,s){s.d(t,{A:()=>r});let r=(0,s(11765).A)("bluetooth",[["path",{d:"m7 7 10 10-5 5V2l5 5L7 17",key:"1q5490"}]])},87671(e,t,s){s.d(t,{A:()=>r});let r=(0,s(11765).A)("message-square",[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}]])},43190(e,t,s){s.d(t,{A:()=>r});let r=(0,s(11765).A)("send",[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]])},74136(e,t,s){s.d(t,{A:()=>r});let r=(0,s(11765).A)("signal",[["path",{d:"M2 20h.01",key:"4haj6o"}],["path",{d:"M7 20v-4",key:"j294jx"}],["path",{d:"M12 20v-8",key:"i3yub9"}],["path",{d:"M17 20V8",key:"1tkaf5"}],["path",{d:"M22 4v16",key:"sih9yq"}]])},34262(e,t,s){s.d(t,{A:()=>r});
93let r=(0,s(11765).A)("usb",[["circle",{cx:"10",cy:"7",r:"1",key:"dypaad"}],["circle",{cx:"4",cy:"20",r:"1",key:"22iqad"}],["path",{d:"M4.7 19.3 19 5",key:"1enqfc"}],["path",{d:"m21 3-3 1 2 2Z",key:"d3ov82"}],["path",{d:"M9.26 7.68 5 12l2 5",key:"1esawj"}],["path",{d:"m10 14 5 2 3.5-3.5",key:"v8oal5"}],["path",{d:"m18 12 1-1 1 1-1 1Z",key:"1bh22v"}]])},11827(e,t,s){s.d(t,{A:()=>r});let r=(0,s(11765).A)("wifi",[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M2 8.82a15 15 0 0 1 20 0",key:"dnpr2z"}],["path",{d:"M5 12.859a10 10 0 0 1 14 0",key:"1x1e6c"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}]])},87622(e,t,s){s.d(t,{A:()=>o});var r=s(71763),i=s(37773),n=s(91987);function o({term:e,definition:t,abbreviation:s,routePath:a="/glossary",children:l}){let[d,c]=(0,r.useState)(!1),[u,h]=(0,r.useState)(null),[m,p]=(0,r.useState)("top"),x=(0,r.useRef)(null),g=(0,r.useRef)(null),f=(0,r.useCallback)(()=>{let e;if(!x.current||!g.current)return;let t=x.current.getBoundingClientRect(),s=g.current.getBoundingClientRect(),r=window.innerWidth,i=window.innerHeight,n=document.querySelector(".navbar"),o=n?n.getBoundingClientRect().bottom:0,a=t.to
93p-o>=s.height+8,l=i-t.bottom>=s.height+8,d=a||!l?"top":"bottom";e="top"===d?t.top-s.height-8:t.bottom+8;let c=t.left+t.width/2-s.width/2;c=Math.max(8,Math.min(c,r-s.width-8)),p(d),h({top:Math.max(o+4,e),left:c})},[]);(0,r.useEffect)(()=>{let e;if(!d)return;let t=requestAnimationFrame(()=>{e=requestAnimationFrame(()=>{f()})}),s=()=>f(),r=()=>f();return window.addEventListener("scroll",s,!0),window.addEventListener("resize",r),()=>{cancelAnimationFrame(t),e&&cancelAnimationFrame(e),window.removeEventListener("scroll",s,!0),window.removeEventListener("resize",r)}},[d,f]);let y=(0,i.P_)("docusaurus-plugin-glossary"),w=(0,r.useMemo)(()=>{if(t&&"string"==typeof t&&t.length>0)return t;let s=(y&&y.terms||[]).find(t=>"string"==typeof t.term&&t.term.toLowerCase()===String(e).toLowerCase());return s&&s.definition?s.definition:void 0},[t,y,e]),b=(0,r.useMemo)(()=>{let t=s;if(!t){let s=(y&&y.terms||[]).find(t=>"string"==typeof t.term&&t.term.toLowerCase()===String(e).toLowerCase());t=s&&s.abbreviation}if("string"!=typeof t)return;let r=t.trim();if(r&&r.toLowerCase()!==String(e).toLowerCase())return r},[s,y,e]),v=(0,r.useMemo)(()=>a&&"string"==typeof a&&a.length>0?a:y&&y.routePath||"/glossary",[y,a]),j=l||e,k=e.toLowerCase().replace(/\s+/g,"-");return(0,n.jsxs)("span",{ref:x,className:"glossaryTermWrapper_ud7W",children:[(0,n.jsx)("a",{href:`${v}#${k}`,className:"glossaryTerm_x2nJ",onMouseEnter:()=>c(!0),onMouseLeave:()=>c(!1),onFocus:()=>c(!0),onBlur:()=>c(!1),"aria-describedby":`tooltip-${k}`,children:j}),w&&(0,n.jsxs)("span",{ref:g,id:`tooltip-${k}`,className:`tooltip_WjgA ${d?"tooltipVisible_AjfD":""} ${"top"===m?"tooltipTop_uMN4":"tooltipBottom_U9P5"} tooltipFloating_nLk7`,role:"tooltip",style:d&&u?{top:`${u.top}px`,left:`${u.left}px`}:void 0,children:[(0,n.jsx)("strong",{children:e}),b?` (${b}). `:"",w]})]})}},1818(e){e.exports=JSON.parse('{"conversationThreads":[{"messages":[{"text":"Good morning mesh!","userId":"user3"},{"text":"Morning! How\'s the signal today?","userId":"user7"},{"text":"Strong here, -102 dBm","userId":"user3"},{"text":"Nice! Perfect day for a hike","userId":"user7"},{"text":"Agreed, heading out soon","userId":"user3"}]},{"messages":[{"text":"Starting the summit trail","userId":"user1"},{"text":"Weather looks good?","userId":"user5"},{"text":"Clear skies, perfect conditions!","userId":"user1"},{"text":"Stay safe out there","userId":"user5"},{"text":"Copy that, will check in at the top","userId":"user1"}]},{"messages":[{"text":"Base camp check-in","userId":"user2"},{"text":"Copy, reading you loud and clear","userId":"user8"},{"text":"All teams accounted for?","userId":"user2"},{"text":"Team Alpha and Bravo confirmed","userId":"user8"},{"text":"Great, check in again in an hour","userId":"user2"}]},{"messages":[{"text":"Anyone copy? Testing new antenna","userId":"user4"},{"text":"Loud and clear from downtown!","userId":"user10"},{"text":"Excellent! What\'s your distance?","userId":"user4"},{"text":"About 8km line of sight","userId":"user10"},{"text":"New setup is working great","userId":"user4"}]},{"messages":[{"text":"Net check-in for emergency prep drill","userId":"user6"},{"text":"Station 1 standing by","userId":"user9"},{"text":"Station 2 online","userId":"user6"},{"text":"All stations confirmed, drill complete","userId":"user9"},{"text":"Thanks everyone, same time next week","userId":"user6"}]},{"messages":[{"text":"Found the perfect campsite!","userId":"user7"},{"text":"Nice! How\'s the view?","userId":"user2"},{"text":"Amazing sunset from here","userId":"user7"},{"text":"Jealous! Send pics when you can","userId":"user2"},{"text":"Will do, signal is solid here","userId":"user7"}]},{"messages":[{"text":"Weather update from ridge","userId":"user5"},{"text":"What\'s it looking like?","userId":"user3"},{"text":"Storm moving in from the west","userId":"user5"},{"text":"ETA?","userId":"user3"},{"text":"About 2 hours, heading down now","userId":"user5"}]},{"messages":[{"text":"New node online at the water tower","userId":"user8"},{"text":"Great coverage spot!","userId":"user4"},{"text":"Should extend mesh by 5km","userId":"user8"},{"text":"Testing from the park now...","userId":"user4"},{"text":"Reading you 5 by 5!","userId":"user8"}]},{"messages":[{"text":"Group hike starting at trailhead","userId":"user10"},{"text":"On my way, 10 min out","userId":"user1"},{"text":"Copy, we\'ll wait at the sign","userId":"user10"},{"text":"Just parked, walking over now","userId":"user1"},{"text":"See you! Look for the green pack","userId":"user10"}]},{"messages":[{"text":"Solar node is up and running!","userId":"user9"},{"text":"What panel are you using?","userId":"user6"},{"text":"6W panel with 3000mAh battery","userId":"user9"},{"text":"Should last through the night?","userId":"user6"},{"text":"Easily, battery at 94% at sunset","userId":"user9"}]},{"messages":[{"text":"Mesh meetup this Saturday!","userId":"user1"},{"text":"Count me in! Location?","userId":"user4"},{"text":"City park pavilion, noon","userId":"user1"},{"text":"Perfect, bringing my new T-Beam","userId":"user4"},{"text":"Awesome, see you there!","userId":"user1"}]},{"messages":[{"text":"Starting range test from hilltop","userId":"user3"},{"text":"Standing by at base","userId":"user10"},{"text":"Sending test packet now...","userId":"user3"},{"text":"Received! SNR is excellent","userId":"user10"},{"text":"New personal record, 12km!","userId":"user3"}]}],"standaloneMessages":["Position update","All clear","Standing by","Periodic beacon","Node online","Good day","Channel clear","Health check OK","Battery at 85%","Signal strong","Mesh route updated","3 hops to destination","Back on freq","Checking in","Routine status update","Node rebooted","Link quality good","Temperature nominal","Wind speed low","Still here"],"autoResponses":["Got it","Thanks for the update","Loud and clear","I re
93ceived your message","Roger that","On my way","Rx you","Perfect","Nice","All good here","Understood","Thanks, hows the weather where you are?","Sweet","Getting a strong signal here","Great news","Thanks for letting me know","I will check in soon","Appreciate the info"]}')}}]);

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.