Skip to main content

LoRa Mesh - Knowledge Base

LoRa Mesh Field Manual
LoRa Mesh Field Manual
Meshtastic 2.7.26 / 2.8 · MeshCore 1.17.1
// Field manual · updated Sep 25, 2026

LoRa Mesh
Made Simple

Pick a device, set it up right, and know how far it will reach — Meshtastic and MeshCore, explained for beginners and experts.

What do you want to do?
Current versions
Meshtastic Firmware — Stable
2.7.26.54e0d8d
Beta channel · Jun 24, 2026
The "Latest" release on GitHub and the right choice for any node your group depends on. Bug-fix release: T-Deck touch fix, GPS sets the clock every 30 min, LoRa RX LED, Station G3 configs.
Meshtastic Firmware — Next
2.8.0.47db0e3
Alpha · Sep 1, 2026
Major protocol release (the earlier 2.8.0.7239fe8 build was revoked over an LR1110/T1000-E bug). Test on a spare node first — see the 2.8 box below.
MeshCore Firmware
1.17.1
Companion / Repeater / Room Server · Aug 14, 2026
Point release on 1.17.0 (Aug 9): rewritten listen-before-talk with real preamble detection, config migrated to JSON, CC310 hardware crypto on nRF52, LR2021 radio support, SenseCAP X1, ThinkNode M7/M9, Heltec V4 R8, RC32, Tower V2.
Apps
Meshtastic · MeshCore
Android / iOS / Web / Desktop
Meshtastic: Android, iOS/iPadOS/macOS, client.meshtastic.org web, Python CLI. MeshCore: Liam Cottle's app for Android, iOS, Windows and Mac, the web app at app.meshcore.nz, and config.meshcore.io for repeaters.
Meshtastic 2.8: read before upgradingNew default preset, node IDs, opt-in position
Meshtastic 2.8 — read before you upgrade
  • New US nodes default to LONG_TURBO, not LONG_FAST (only when the region is picked for the first time on the device screen). The two presets cannot hear each other — set LONG_FAST manually to join an existing mesh.
  • Node ID now comes from the node's public key, not the MAC address. Expect your node number to change.
  • Packet signing (XEdDSA) lets receivers verify who sent a packet; unsigned-packet policy is being tightened.
  • Position and telemetry broadcasts are opt-in. A fresh 2.8 node stays quiet until you turn them on.
  • Precise position is no longer allowed on public/known-key channels — use a private channel to share exact location.
  • Long name capped at 25 bytes; new Traffic Management module (dedup, rate limiting, role-aware policing); automatic variable hop limits; noise-floor tracking; new region table including ham 2 m / 1.25 m / 70 cm carve-outs; LoRa changes apply without a reboot; new presets (Long Turbo, Medium Turbo, Lite, Narrow and Tiny families).
  • If an upgraded node boot-loops, export your config, then do a full erase and flash.
Which version should I run?Upgrade advice by user type
You areRun thisWhy
New user joining a local meshMeshtastic 2.7.26 on LONG_FAST (or whatever your mesh uses)Matches what nearly every existing US node is running today.
Rooftop / solar router operator2.7.26 until your community agrees to moveAn infrastructure node on an alpha can break a whole area; 2.8 changes node IDs and defaults.
Tinkerer with a spare node2.8.0 alpha on the spareTry signing, traffic management and the new presets; report bugs.
MeshCore user1.17.1 on everythingBig collision-avoidance improvement; config auto-migrates to JSON (old blob kept for rollback).
LoRa mesh in 60 secondsStart here if you are brand new

LoRa is a long-range, low-power radio. A small $20–$100 radio talks to your phone over Bluetooth and sends short text messages to other radios miles away — no cell towers, no internet, no license.

A mesh means radios pass messages along for each other, so a message can hop across a whole city.

  • Meshtastic: every radio helps relay. Works anywhere, great for groups, hiking, events and GPS tracking.
  • MeshCore: only dedicated repeaters relay. Scales better across big cities, but needs repeaters to reach beyond direct range.

Both run on the same hardware. The biggest range upgrades are height and a good antenna, not more power.

Learn

How LoRa and the two mesh systems work. Tap a topic to open it.

The basics
How LoRa radio worksChirps, spreading factor, bandwidth, airtime

LoRa sends data as chirps — tones that sweep across the channel from low to high frequency. Each symbol is a chirp that starts at a different point in the sweep, and that starting offset is the data. Because the receiver correlates against the known chirp shape, LoRa tolerates Doppler, crystal drift, multipath and narrow interference unusually well, and it can decode signals that sit below the noise floor.

Spreading factor, bandwidth and coding rate

Spreading factor (SF) sets how many chips make one symbol (2SF). Each step up doubles time on air and buys about 2.5 dB of sensitivity. Bandwidth (BW) is the width of the sweep; halving it gains ~3 dB but halves speed. Coding rate (CR) adds error-correction bits (4/5 = 25% overhead, 4/8 = 100%).

SF7
5.47 kbps
-123.5 dBm
SF8
3.13 kbps
-126 dBm
SF9
1.76 kbps
-128.5 dBm
SF10
0.98k
-131 dBm
SF11
0.54k
-133.5 dBm
SF12
0.29k
-136 dBm

Bar length = raw bit rate at 125 kHz BW, CR 4/5. Sensitivity is typical SX1262 (6 dB noise figure) at 125 kHz.

Processing gain

The ratio of chip rate to bit rate gives LoRa roughly 10·log10(2SF/SF) dB of processing gain — about 13 dB at SF7 and 25 dB at SF12. In practice the demodulator can pull a signal out at -7.5 dB SNR (SF7) down to -20 dB SNR (SF12). That is why a LoRa node shows negative SNR on packets it decodes perfectly.

Time on air — the hidden cost of range

Every transmission occupies the channel for everyone. On a busy mesh, airtime — not range — is usually the limit. Numbers below are calculated for a typical 66-byte Meshtastic packet (16-byte header + 50-byte payload) with a 16-symbol preamble.

PresetSF / BW / CRTime on airRX sensitivity (est.)
SHORT_TURBO7 / 500 / 4/5~33 ms-118.5 dBm
SHORT_FAST7 / 250 / 4/5~66 ms-121.5 dBm
MEDIUM_FAST9 / 250 / 4/5~211 ms-126.5 dBm
MeshCore US narrow7 / 62.5 / 4/5~263 ms-127.5 dBm
MEDIUM_SLOW10 / 250 / 4/5~402 ms-129 dBm
LONG_TURBO11 / 500 / 4/8~509 ms-128.5 dBm
LONG_FAST11 / 250 / 4/5~723 ms-131.5 dBm
LONG_MODERATE11 / 125 / 4/8~2.4 s-134.5 dBm
LONG_SLOW (deprecated)12 / 125 / 4/8~4.6 s-137 dBm
Rule of thumb

A 3 dB gain in link budget is worth about 1.4× more range in cluttered terrain. You can buy that 3 dB with a slower preset (costing airtime for everyone), or with a better antenna and more height (costing nobody anything). Height and antennas first; slow presets last.

Frequencies & legal limitsUS 915 MHz, power rules, where meshes sit

LoRa mesh uses license-free ISM/SRD bands. The band is set by your hardware (a 915 MHz board will not work on 433 MHz) and the region setting, which must be set before a node will transmit.

902–928 MHz
US / Canada (Meshtastic US)
Up to +30 dBm (1 W) conducted; no duty cycle
869.4–869.65
EU 868
+27 dBm ERP, 10% duty cycle
433–434 MHz
EU 433 / UA / PH / MY
+10 dBm typical, 10% duty
915–928 MHz
Australia / NZ (ANZ)
+30 dBm
920–923.5
Japan / Korea / Taiwan
+13 to +27 dBm, varies
2400–2483.5
Worldwide (LORA_24)
+10 dBm, SX128x only

Where US meshes actually sit

NetworkCenter frequencySettingsNotes
Meshtastic default (LONG_FAST)906.875 MHzSF11 / 250 kHz / 4/5Frequency slot 0 = hash of the primary channel name, which lands on slot 20 of 104 for "LongFast".
Meshtastic 2.8 new-US default (LONG_TURBO)Varies by slotSF11 / 500 kHz / 4/8Only on first-time region selection; not compatible with LONG_FAST.
MeshCore "USA/Canada (Recommended)"910.525 MHzSF7 / 62.5 kHz / 4/5The "narrow" preset most US MeshCore meshes adopted from Oct 2025. Older meshes may still be on 250 kHz / SF10–11 — ask locally.
US power rules in plain English

Under FCC Part 15 the common interpretation for 902–928 MHz is 1 W (+30 dBm) into the antenna and no more than +36 dBm EIRP — for every dB of antenna gain above 6 dBi, reduce transmit power by 1 dB. High-power boards (Station G2/G3, 1 W and 2 W E22 modules) can exceed this and must be turned down unless you operate as a licensed ham under Part 97. Part 97 operation means no encryption and identifying with your callsign — set is_licensed (Meshtastic "Licensed amateur radio") and use unencrypted channels.

LoRa vs LoRaWAN vs meshWhat is and is not the same thing
FeatureRaw LoRaLoRaWANMeshtasticMeshCore
TopologyPoint-to-pointStar (nodes → gateways)Mesh, every client can relayMesh, only repeaters relay
Infrastructure neededNoGateways + network serverNo (routers help)Repeaters for anything past direct range
InternetNoRequiredOptional (MQTT bridge)Optional (bridges, observers)
Channel encryptionNoneAES-128 session keysAES-128/256-CTR per channel PSKAES-128 per channel secret
Direct messages——X25519 public-key (PKC) since 2.5; XEdDSA signing in 2.8Ed25519 identity, ECDH shared secret per contact
Typical useCustom linksSensors, metersGroups, events, hiking, emergencyCity-scale messaging networks
The two mesh systems
Meshtastic: how it worksRouting, roles, encryption, presets

Meshtastic was started in 2020 by Kevin Hester (geeksville) and has grown into the largest LoRa mesh project, with firmware for ESP32, nRF52840, RP2040/RP2350, STM32WL and Linux (meshtasticd). A phone connects over Bluetooth, Wi-Fi, USB serial or Ethernet; the radio does all the mesh work.

Routing: managed flooding + next-hop

  1. Every packet carries a hop limit (default 3, max 7) and a hop start so receivers know how far it has traveled.
  2. A node that hears a new packet waits a short random time before rebroadcasting. The wait is shorter for weaker signals (farther nodes relay first, extending coverage) and shortest for ROUTER roles.
  3. If it hears someone else rebroadcast the same packet during its wait, a CLIENT cancels its own rebroadcast. ROUTERs always rebroadcast; ROUTER_LATE rebroadcasts after everyone else.
  4. Since firmware 2.6, direct messages learn a next-hop: once a reply path is known, only the chosen relay repeats the DM, falling back to flooding if it fails.
  5. 2.8 adds a Traffic Management module (dedup, rate limits, role-aware policing) and automatic variable hop limits based on how busy the mesh is.
The scaling limit

Broadcasts (channel messages, positions, telemetry, node info) still flood. On LONG_FAST each packet is ~0.7 s of airtime, and a busy city mesh with 150+ nodes can spend more than half its airtime on background chatter. Keep hop limit at 3, keep position/telemetry intervals long, and use ROUTER roles only on truly high sites.

Packet format

Preamble16 symbolssync word 0x2B
LoRa PHY headerexplicitlength, CR, CRC flag
Mesh header16 bytesdest, sender, packet ID, flags/hops, channel hash, next-hop, relay node
Payloadup to ~237 bytesencrypted protobuf Data message (text, position, telemetry...)
CRC2 bytesLoRa PHY CRC

Text messages are limited to about 200 characters. Direct messages using PKC carry an extra 12 bytes (auth tag + nonce extra) inside the payload.

Device roles (2.7 / 2.8)

CLIENT
Default. Messaging device that rebroadcasts only if nobody else already did. Right for 90% of nodes, including most home nodes.
CLIENT_MUTE
Never relays. Use for a second radio in the same house or car, or on a crowded mesh where you add nothing.
CLIENT_HIDDEN
Transmits only when needed, not listed. Stealth or battery-saving use.
CLIENT_BASE
Personal base station (attic/roof). Always relays traffic to and from your favorited nodes; otherwise acts like CLIENT. Best choice for a home base serving your own handhelds.
ROUTER
Always rebroadcasts, first. Only for sites with a commanding view (tower, hilltop, tall building) agreed with your local mesh. Misused routers are the #1 cause of congested meshes.
ROUTER_LATE
Always rebroadcasts, but only after everyone else. Fills a local dead spot (a valley, a building complex) without competing with the backbone.
TRACKER / TAK_TRACKER
Prioritizes GPS position (or TAK PLI) broadcasts; can sleep between fixes.
SENSOR
Prioritizes telemetry; sleeps between readings for long battery life.
TAK
For use with the ATAK plugin; reduces routine broadcasts.
LOST_AND_FOUND
Periodically broadcasts its location as a text message to help recover a lost device.
REPEATER (deprecated 2.7.11)
Old invisible relay role. Use ROUTER or ROUTER_LATE instead. ROUTER_CLIENT was removed in 2.3.15.

Channels & encryption

  • Channels are defined by a name and a pre-shared key (PSK). A node holds 1 primary + up to 7 secondary channels. The primary channel's name also picks the default frequency slot.
  • The default channel (LongFast, PSK AQ==) uses a publicly known key — treat it as a public CB channel.
  • Private channels use a random 128- or 256-bit AES key in CTR mode. Anyone with the key can read and send — channel keys identify a group, not a person.
  • Direct messages (firmware 2.5+) use each node's X25519 key pair for true end-to-end encryption and authentication. 2.8 adds XEdDSA packet signing so receivers can verify the sender of broadcasts too.
  • Remote admin uses admin keys (Security config) instead of the old shared "admin" channel.

Modem presets

SHORT_TURBO
SF/BW/CR 7 / 500 / 4/5
Rate 21.9 kbps
Budget 140 dB
Use events, dense short hops
SHORT_FAST
SF/BW/CR 7 / 250 / 4/5
Rate 10.9 kbps
Budget 143 dB
Use campus, festival
SHORT_SLOW
SF/BW/CR 8 / 250 / 4/5
Rate 6.25 kbps
Budget 145.5 dB
MEDIUM_FAST
SF/BW/CR 9 / 250 / 4/5
Rate 3.52 kbps
Budget 148 dB
Use dense city meshes
MEDIUM_SLOW
SF/BW/CR 10 / 250 / 4/5
Rate 1.95 kbps
Budget 150.5 dB
LONG_TURBO
SF/BW/CR 11 / 500 / 4/8
Rate 1.34 kbps
Budget 150 dB
Note 2.8 new-US default
LONG_FAST ★
SF/BW/CR 11 / 250 / 4/5
Rate 1.07 kbps
Budget 153 dB
Use most existing meshes
LONG_MODERATE
SF/BW/CR 11 / 125 / 4/8
Rate 0.34 kbps
Budget 156 dB
Use rural, few nodes
LONG_SLOW
SF/BW/CR 12 / 125 / 4/8
Rate 0.18 kbps
Budget 158.5 dB
Note deprecated

Link budgets assume +22 dBm and 0 dBi antennas (official Meshtastic table). VERY_LONG_SLOW has been removed. 2.8 also lists Medium Turbo plus Lite, Narrow and Tiny preset families, mainly for new EU narrow allocations and licensed bands. Every node on a mesh must use the same preset and frequency slot.

MeshCore: how it worksCompanions, repeaters, room servers, paths

MeshCore (firmware by Scott Powell / Ripple Radios, apps by Liam Cottle, MIT-licensed firmware) was built for one job: reliable text messaging across a city without the rebroadcast storms of pure flooding. It does that with separate firmware for separate jobs and learned paths for direct messages.

COMPANION (BLE / USB / Wi-Fi)
Your personal radio, paired to the phone, desktop or web app. Never repeats other people's packets.
REPEATER
Infrastructure. Forwards packets, keeps a neighbor list, remotely administered over RF with a password. No Bluetooth app connection.
ROOM SERVER
A tiny BBS: stores posts and pushes up to 32 unseen messages when you log in — messages wait for you, unlike channels.
SENSOR
Telemetry node that reports readings to authorized contacts.
ULTRA (T-Deck etc.)
Standalone firmware for T-Deck, T-Pager, T-Watch and T-Display Pro with maps; some extras need a paid unlock key.

Routing: flood once, then direct

  1. Adverts announce a node's name, location and signed public key. Companions advert only when you tap Advert (zero-hop or flood); repeaters flood-advert every 12 h by default.
  2. Your first DM to a contact floods through repeaters (up to 64 hops internally).
  3. The recipient's delivery report comes back carrying the list of repeaters it traveled through. Your app stores that path on the contact.
  4. Later DMs carry the path in the packet; only repeaters named in it forward. If the path breaks, the app retries, then resets the path and floods on the last retry.
  5. Channels (public or private group chats) always flood, because they have no single destination. Repeater admins can cap flood hops and use regions/scopes to keep floods local.
Why it scales

Clients are silent unless you are talking, repeaters are the only relays, and most DM traffic follows one path instead of flooding. A 200-client city mesh with 20 repeaters carries far less background chatter than the same city on Meshtastic. The trade-off: you need repeaters — two companions out of each other's range cannot relay for each other.

Security model

  • Every node has an Ed25519 identity key; adverts are signed so names cannot be spoofed.
  • DMs use a per-contact shared secret derived with ECDH, then AES-128 with an HMAC. On nRF52 1.17 uses the CC310 hardware crypto engine.
  • The Public channel key is published (8b3387e9c5cdea6ac9e5edbaa115cd72); #hashtag channels derive their key from the name (anyone who knows the name can join); private channels use a random secret shared by QR.
  • Repeaters and room servers use an admin password (default password — change it) and optional guest password; the ACL grants guest/read-only/read-write/admin per public key.
Meshtastic vs MeshCoreWhich one fits you
Meshtastic
Ease of first setup9/10
Works with zero infrastructure10/10
Features (GPS, telemetry, TAK, MQTT)10/10
Airtime efficiency when busy5/10
Scales past ~150 nodes5/10
MeshCore
Ease of first setup7/10
Works with zero infrastructure5/10
Features (GPS, telemetry, TAK, MQTT)6/10
Airtime efficiency when busy9/10
Scales past ~150 nodes9/10

Scores are this guide's editorial judgment, not benchmarks.

FeatureMeshtastic 2.7 / 2.8MeshCore 1.17
Who relaysEvery node (CLIENT relays if nobody else did)Only repeaters (and room servers with repeat on)
RoutingManaged flood; next-hop for DMsFlood to discover, then source-routed direct path
Default hops3 (max 7)Up to 64 (capped by repeater flood.max)
US default radioLONG_FAST 906.875 MHz, SF11/250 (2.8 new-US: LONG_TURBO)910.525 MHz, SF7/62.5
DM encryptionX25519 PKC + AES; XEdDSA signing (2.8)Ed25519 identity, ECDH + AES-128/HMAC
Offline message storageStore & Forward module (ESP32 PSRAM)Room servers (built for it)
GPS / telemetryRich, many sensorsLocation in adverts, sensor telemetry on request
MQTT / internetBuilt inCommunity bridges and observers
ATAKNative plugin, TAK rolesNot on roadmap
AppsAndroid, iOS/macOS, web, Python CLI, many third-partyAndroid, iOS, Windows, Mac, web; T-Deck Ultra firmware
LicenseGPL-3.0 (firmware)MIT (firmware); native apps closed-source freemium
Pick it forGroups, hiking, events, ARES/TAK, sensors, anywhere with no repeatersReliable city-wide messaging where people will host repeaters
Can they talk to each other?

No. Different packet formats, and usually different frequencies. The same hardware runs either firmware, so many people keep one node on each.

Which platform for which jobQuick decision table
Use casePlatformWhy / key setting
Family comms when cell service failsEither; Meshtastic if no local repeatersPrivate channel; one CLIENT_BASE or repeater on the roof.
Hiking / hunting / backcountry groupMeshtasticEvery radio relays; no infrastructure needed.
City-wide community chatMeshCore (or Meshtastic with good router discipline)MeshCore scales better when many people join.
ARES / SAR / CERT with ATAKMeshtasticTAK roles, MGRS, telemetry.
Vehicle / asset / pet trackingMeshtastic TRACKERGPS priority, sleep between fixes.
Remote weather / gate / water-level sensorsMeshtastic SENSOR / Detection SensorLong sleep, environment telemetry.
Message board that holds posts for laterMeshCore Room ServerBuilt for offline pickup.
Festival / conventionMeshtastic on SHORT_FASTFast preset for hundreds of nodes.
Deeper
PropagationTerrain, trees, buildings, ducting
  • Free space — 6 dB more loss per doubling of distance. Only true with clear line of sight and Fresnel clearance.
  • Two-ray / ground reflection — beyond a break-point distance loss grows 12 dB per doubling, and raising either antenna directly reduces loss (6 dB per doubling of height).
  • Okumura-Hata / COST-231 — empirical urban/suburban models; reasonable for planning from base-station heights.
  • ITM / Longley-Rice — terrain-aware; used by HeyWhatsThat, Radio Mobile and many coverage tools. Best for siting a specific repeater.

Environmental factors

  • Trees: roughly 0.2–0.5 dB per meter of foliage at 900 MHz; worse wet and in leaf. Summer range in wooded suburbs is noticeably shorter than winter.
  • Buildings: 5–15 dB per exterior wall (brick/stucco/low-E glass on the high end); metal roofs and foil insulation can block attic nodes almost completely.
  • Vehicles: a node on the dashboard loses 10–20 dB versus a roof antenna.
  • Rain: negligible at 915 MHz.
  • Tropospheric ducting: temperature inversions (common on still Texas nights) occasionally carry signals 100+ miles.
LoRa history & radio chipsSemtech SX1262, LR1110, LR2021

LoRa (Long Range) modulation was invented at Cycleo, a startup in Grenoble, France, founded in 2009. In 2012 Cycleo was acquired by Semtech Corporation (Camarillo, California), which holds the patents and sells the radio chips that every Meshtastic and MeshCore node is built around.

The first-generation SX1272/SX1276 transceivers made LoRa cheap and common. The second-generation SX126x family (SX1261/SX1262/SX1268) cut receive current roughly in half, improved sensitivity and added spreading factors 5 and 6; it is the chip in almost every modern mesh node. The LR11xx line adds GNSS and Wi-Fi scanning (the T1000-E uses an LR1110), and the newest LR2021 is now supported by MeshCore 1.17.

Key distinction

LoRa is the radio modulation (physical layer). LoRaWAN is a separate star-network protocol run by the LoRa Alliance. Meshtastic and MeshCore ignore LoRaWAN entirely and send raw LoRa packets with their own mesh protocols.

Semtech silicon you will meet in mesh nodes

ChipGenerationKey featuresFound in
SX1276 / SX12781st gen (~2013–15)SF7–12, +20 dBm, ~11 mA RXOld T-Beam v0.7/v1.0, TTGO T3 v1.6, RFM95 modules
SX12622nd genSF5–12, +22 dBm, ~5 mA RX, boosted-gain RX modeHeltec V3/V4, T114, RAK4631, T-Deck, T-Echo, T-Beam Supreme, Station G2/G3
SX12682nd gen410–810 MHz variant of SX1262433/470 MHz boards
LR1110 / LR1121LR11xxLoRa + GNSS scan + Wi-Fi scan; LR1121 adds 2.4 GHzSeeed T1000-E, some trackers
SX1280 / SX12812.4 GHzLoRa at 2.4 GHz, shorter range, worldwide bandMeshtastic LORA_24 region builds
LR2021NewestMulti-band, higher data ratesMeshnology W12 (MeshCore 1.17)
GlossaryEvery term in plain English
TermMeaning
AdvertMeshCore announcement of a node's name, key and optional location.
AGCAutomatic gain control in the receiver; can get "stuck" near strong signals.
BW / SF / CRBandwidth, spreading factor, coding rate — the three LoRa modem settings.
CADChannel Activity Detection — hardware check for LoRa energy before transmitting.
Channel utilization / airtimePercent of time the channel is busy / your node transmitted. Above ~25% utilization a Meshtastic mesh starts dropping packets.
dBm / dBiPower relative to 1 mW / antenna gain relative to an isotropic radiator. +3 dB = double power.
EIRPTX power + antenna gain − losses; the number the FCC limits (36 dBm).
FEM / PA / LNAFront-end module / power amplifier / low-noise amplifier on high-performance boards.
Flood / directBroadcast relayed by everyone vs. relayed only along a known path.
Frequency slotMeshtastic's numbered channel within a region (104 slots in US on LONG_FAST).
Fresnel zoneFootball-shaped region around the direct path that must be mostly clear.
Hop limitMaximum relays a packet may take.
MQTTInternet publish/subscribe protocol used to bridge Meshtastic meshes.
nRF52840 / ESP32-S3The two common MCU families: low-power Nordic vs Wi-Fi-capable Espressif.
PKCPublic-key cryptography used for Meshtastic DMs and admin (X25519).
PSKPre-shared key for a channel.
Room serverMeshCore store-and-forward message board.
RSSI / SNRReceived signal strength / signal-to-noise ratio. LoRa decodes at negative SNR.
Time on air (ToA)How long one packet occupies the channel.
VSWRMeasure of antenna match; 1.0 perfect, under 1.5 good.

Setup & Settings

Every option, what it does, and what to pick.

Beginner mode — hide expert-only settings
Quick start: first 5 minutesDo these and you are on the air
First 5 minutes with a new node
  1. LoRa → Region = US (the radio will not transmit until this is set).
  2. LoRa → Modem preset = whatever your local mesh uses (almost always LONG_FAST in the US today; check a local Discord or meshmap.net).
  3. User: set a long name and a 4-character short name people will recognize.
  4. Device → Role = CLIENT (leave it).
  5. Add a private channel for family/friends as a secondary channel and share its QR code.
  6. Decide on position sharing: on 2.7 it is on by default; on 2.8 you opt in. Set channel position precision to what you are comfortable sharing.
Radio configuration

Menus are named the same in the Android app, the Apple apps and the web client (Settings → Radio Configuration / Module Configuration). CLI names are shown in code. Recommendation tags: EVERYONE safe advice for all, EXPERT change only if you know why, CAUTION can break things or break rules.

UserName, short name, ham mode
Long name ownerMeshtastic xxxx

Full display name shown in node lists (max 25 bytes on 2.8; emoji take several bytes).

EVERYONEName + area or callsign, e.g. "Bryan - Lake Highlands". Avoid your full real name on public channels.
Short name owner_shortlast 4 hex of ID

Up to 4 characters shown on maps and small screens.

EVERYONEInitials or an emoji.
Licensed amateur is_licensedoff

Ham mode: uses your callsign, disables encryption, lifts software power limits. 2.8 blocks licensed nodes from relaying unlicensed traffic.

CAUTIONOnly with an FCC amateur license and when you need >1 W or ham-band frequencies. You lose private channels and DMs.
Unmessageable is_unmessagableoff

Tells others this node does not accept DMs (for unattended infrastructure).

EXPERTTurn on for routers and repeaters nobody monitors.
ChannelsKeys, privacy, position precision, MQTT
Name(blank = "LongFast")

Up to 11 characters. Name + key identify the channel. The primary channel name also selects the frequency slot when slot = 0.

EVERYONELeave the primary channel default to talk to the public mesh; put your private group on a secondary channel.
PSK (key)AQ== (public)

Encryption key: none, default (public), or random 128/256-bit.

EVERYONEGenerate a random 256-bit key for private channels and share only by QR in person.
RolePRIMARY / SECONDARY

Index 0 is primary (used for broadcasts like node info); 1–7 are secondary; DISABLED hides a slot.

EXPERTMaking a private channel primary moves you off the public frequency slot unless the frequency slot is set manually.
Position precision13 bits (~1.8 mi) on the default channel

How precisely your location is shared on that channel (10 bits ~14 mi, 13 bits ~1.8 mi, 16 bits ~0.2 mi, 32 bits = exact). 2.8 clamps public/known-key channels.

EVERYONEPublic: 13–14 bits (about a mile). Family private channel: full precision if you want live tracking.
Mute (client muted)off

Silences notifications for that channel on the device.

Handy for busy public channels.
DeviceRole, rebroadcast, timezone, buzzer
Role device.roleCLIENT

How the node behaves on the mesh (see roles above).

EVERYONECLIENT for handhelds and most homes; CLIENT_BASE for your own attic/roof node; CLIENT_MUTE for second radios. ROUTER only with local coordination.
Rebroadcast modeALL

ALL relays everything with matching modem settings; LOCAL_ONLY skips foreign/undecryptable channels; KNOWN_ONLY also skips unknown nodes; CORE_PORTNUMS_ONLY relays only text/position/telemetry/nodeinfo/routing; NONE for sensor/tracker.

EVERYONEALL for public meshes. EXPERTCORE_PORTNUMS_ONLY on busy routers to drop range-test/PAX/TAK spam.
Node info broadcast node_info_broadcast_secs10800 (3 h)

How often your name/key is announced. Nodes also answer on demand.

EVERYONELeave at 3 h. Routers: 6–12 h.
Time zone tzdefUTC

POSIX TZ string for the on-screen clock.

EVERYONEDallas: CST6CDT,M3.2.0,M11.1.0
LED heartbeat disabledoff

Turns off the blinking status LED.

On for bedside or stealth nodes; saves a tiny bit of power.
Buzzer modeAll enabled

Which events beep: all, notifications only, system only, DMs only, disabled.

DMs only on handhelds you carry to work.
Double tap as buttonoff

Accelerometer double-tap acts as a button press.

Only on boards with an accelerometer.
Button GPIO / Buzzer GPIO0 (board default)

Pin overrides for DIY builds.

EXPERTDIY boards only.
PositionGPS, broadcast intervals, fixed position
GPS modeENABLED or NOT_PRESENT

Turns the onboard GPS on/off. Without GPS the node can use your phone's location.

EVERYONEDISABLED on fixed home nodes (use Fixed position) — GPS is the biggest battery drain after the screen.
Broadcast interval position_broadcast_secs0 = 15 min

How often position is sent when smart broadcast is off (and the ceiling when it is on). On 2.8 broadcasting is opt-in.

EVERYONE15–30 min for people; 1–4 h for fixed nodes.
Smart positionon

Sends more often while moving, less when still.

EVERYONEKeep on for handhelds and vehicles.
Smart min distance0 = 100 m

Distance you must move before a smart update.

Vehicles: 250–500 m to reduce chatter.
Smart min interval0 = 30 s

Minimum time between smart updates.

Keep ≥60 s on busy meshes; 300 s for vehicles.
Fixed positionoff

Use a saved lat/lon/alt instead of live GPS.

EVERYONEOn for home, rooftop and solar nodes (set once from the phone map).
GPS update interval0 = 2 min

How often the GPS wakes for a fix.

Trackers: 30–60 s. Battery hikers: 5–10 min.
Position flagsUNSET

Extra fields: altitude, MSL, DOP, sats in view, heading, speed, timestamp...

EXPERTEach flag adds bytes to every position packet; add only what you use.
GPS RX/TX/EN GPIOboard default

Pins for an add-on GPS.

DIY only.
PowerSleep, shutdown, battery calibration
Power saving is_power_savingoff (forced on for ROUTER on ESP32)

ESP32: light-sleeps the CPU and turns off Bluetooth, Wi-Fi, serial and screen while the LoRa radio keeps listening.

EVERYONEOn for ESP32 solar nodes you manage remotely. Leave off on nRF52 (already efficient) and on phone-paired handhelds.
Shutdown after losing power0 = off

Shuts down N seconds after external power disappears.

Vehicle nodes: 300–900 s so a parked car does not drain the pack.
Wait Bluetooth wait_bluetooth_secs0 = 60 s

How long Bluetooth stays up with no phone connected before sleep.

Leave default.
Light sleep ls_secs0 = 300 s

ESP32 light-sleep interval.

EXPERTLeave default.
Minimum wake min_wake_secs0 = 10 s

Stay awake this long after handling a packet.

Leave default.
ADC multiplier override0 = board value

Calibrates the battery voltage reading.

Only if battery % is clearly wrong (charge to 4.2 V, then calibrate).
INA2xx battery address0

Use an I2C current/voltage monitor as the battery source.

Solar builds with an INA219/INA226/INA3221.
Network (Wi-Fi / Ethernet)Wi-Fi, Ethernet, NTP, syslog
Wi-Fi enabled / SSID / PSKoff

Joins your Wi-Fi (ESP32 only). Enables the TCP API (port 4403), web server (ESP32-S3) and MQTT. Turning Wi-Fi on turns Bluetooth off on ESP32.

EVERYONEUse for a home base or MQTT gateway; connect with the app by IP address.
Ethernet enabledoff (on for Ethernet boards)

Wired network on RAK13800/W5100S, RP2350+W5500 and similar.

Best option for rooftop gateways — PoE, no Wi-Fi drops.
NTP servermeshtastic.pool.ntp.org

Time source when on a network.

Leave default.
IPv4 mode / static IP / gateway / DNSDHCP

Static addressing.

Static for gateways you port-forward or monitor.
rsyslog serverblank

Ships device logs to a syslog server.

Great for diagnosing a remote node.
UDP broadcast (enabled protocols)off

Shares mesh packets with other nodes on the same LAN via multicast.

EXPERTLinks two nodes in one building without MQTT.
DisplayScreen timeout, units, formats
Screen timeout screen_on_secs0 = default (about 1 min)

How long the screen stays on after activity.

EVERYONE15–30 s on battery. OLED/TFT screens are a major drain on ESP32 boards.
UnitsMetric

Metric or Imperial for distances/altitude.

Imperial in the US.
GPS coordinate formatDecimal

DEC, DMS, UTM, MGRS, OLC, OSGR.

MGRS for SAR/ARES teams; decimal otherwise.
12-hour clock / Long namesoff

Clock style; show long names in lists.

Personal preference.
Wake on tap or motionoff

Accelerometer wakes the screen.

On for handhelds with an accelerometer.
Flip screen / Compass north top / Compass orientationoff

Screen and compass orientation fixes.

Match how the device is mounted.
OLED type / Display mode / Bold headingAuto / Default

Force SSD1306/SH1106/SH1107 driver; two-color, inverted or color mode.

Only if the screen looks wrong.
LoRaRegion, preset, hops, power, frequency slot
RegionUNSET

Legal band and power limits. Node will not transmit until set.

EVERYONEUS
Use preseton

Use a named modem preset instead of manual BW/SF/CR.

EVERYONEKeep on.
Modem presetLONG_FAST (2.8 new-US: LONG_TURBO)

Speed vs range trade-off. Must match the mesh.

EVERYONEMatch your local mesh. Only change as a community.
Max hops hop_limit3

How many relays a packet you originate may take (1–7).

EVERYONE3. Raising it multiplies congestion for everyone. 4–5 only in sparse rural meshes.
Transmit power tx_power0 = max legal for the board

Radio output in dBm (0–30).

EVERYONELeave 0. CAUTIONOn PA boards (Station G2/G3, Heltec V4 high power, E22-30/33) the number is the chip drive level, not the output — follow the board's table.
Frequency slot channel_num0 = hash of primary channel name

Picks the actual center frequency. US LONG_FAST has 104 slots; "LongFast" hashes to slot 20 (906.875 MHz).

EVERYONELeave 0 on the public mesh. Set a fixed slot if your private group makes its channel primary.
RX boosted gain sx126x_rx_boosted_gainoff (some boards on)

SX126x high-sensitivity RX mode for ~1–2 mA more current.

EVERYONEOn for routers and base stations; worth it on handhelds too unless battery is critical.
OK to MQTToff

Asks other gateways to allow (or not) your packets onto MQTT.

Your choice. Off keeps your default-channel traffic off the public map.
Ignore MQTToff

Drop packets that arrived via MQTT somewhere on their path.

On if internet-bridged traffic floods your local airtime.
Transmit enabledon

Kill switch for the transmitter.

Turn off before swapping antennas — never transmit without an antenna.
Bandwidth / Spread factor / Coding rate250 / 11 / 5 (unused with preset)

Manual modem settings when Use preset is off. SF 5–12 on SX126x.

EXPERTCustom settings isolate you from the public mesh.
Frequency offset0

Crystal error correction in Hz.

Only with a spectrum analyzer.
Override frequency0

Transmit on an exact MHz, bypassing slots.

CAUTIONHams on 33 cm, or to match a non-standard group.
Override duty cycleoff

Ignore EU hourly duty-cycle limits.

Irrelevant in the US; illegal to abuse in the EU.
PA fan disabled / FEM LNA modeboard default

Controls cooling fan on 1 W boards; external LNA on Heltec V4-class boards.

Leave defaults.
Ignore incomingempty

Deprecated list of node IDs to ignore.

Use "Ignore node" in the app instead.
BluetoothPairing mode and PIN
Enabledon

Phone app connection.

Off on Wi-Fi/Ethernet gateways and unattended routers (saves power, reduces attack surface).
Pairing modeRandom PIN (screen) / Fixed PIN (no screen)

Random PIN shows on the display; Fixed PIN uses the set number; No PIN allows anyone nearby.

EVERYONENever use No PIN. On screenless devices change the fixed PIN from 123456.
Fixed PIN123456

6-digit PIN for Fixed PIN mode.

Change it.
SecurityKeys, admin keys, managed mode
Public / private keygenerated at first boot

X25519 identity for encrypted, authenticated DMs and (2.8) node ID and signing.

EVERYONEBack up the private key if you want to keep your identity after a full erase.
Admin keys (up to 3)empty

Public keys of nodes allowed to remotely configure this node over the mesh.

EVERYONEAdd your handheld's public key to every remote/rooftop node before you install it.
Managed mode is_managedoff

Locks local config; only admin-key holders can change settings.

CAUTIONSet admin keys first or you lock yourself out.
Serial console enabledon

USB serial API/console.

Off on public-access nodes.
Debug log APIoff

Streams debug logs to the connected client.

Troubleshooting only.
Legacy admin channeloff

Old shared "admin" channel method (pre-2.5 nodes).

Only to manage very old nodes.
Modules
ModulesMQTT, telemetry, S&F, range test and more
MQTToff

Bridges mesh traffic to an MQTT broker (default mqtt.meshtastic.org, root topic msh/US). Settings: server, username/password, encryption, JSON output, TLS, "proxy to client" (use the phone's internet), map reporting (interval, position precision).

EVERYONELeave off unless you run a gateway. Keep "encryption enabled" on. Map reporting is a nice way to appear on public maps with coarse location.
Telemetrydevice metrics on (2.8: opt-in)

Device metrics (battery, voltage, channel utilization, airtime) and environment (BME280/680, SHT, etc.), air quality, power (INA), health. Intervals default to 30 min.

Device: 30–60 min. Environment on solar/weather nodes: 15–30 min. Longer is kinder to the mesh.
Canned Messagesoff

Preset messages selectable from a rotary encoder, up/down buttons, CardKB or T-Deck keyboard.

Great on screen-only devices for "OK", "Home", "Need help".
External Notificationoff

Drives LED, buzzer or vibration on message/bell. Nag timeout, alert on DM or on bell character only.

On for handhelds carried in a pocket; alert on DMs only.
Store & Forwardoff

An ESP32 with PSRAM stores recent messages and replays them to nodes that were offline (records, history window, heartbeat).

EXPERTOne per mesh, on an always-powered node.
Range Testoff

Sender transmits a numbered message every N seconds; receiver logs RSSI/SNR/position to CSV.

CAUTIONUse on a private channel and turn off afterward — it floods airtime.
Neighbor Infooff

Shares which nodes you hear directly (for topology maps). Minimum interval is hours.

Routers/infrastructure only.
Traceroutealways available

Shows the hop path and SNR to a node.

Use sparingly on busy meshes.
Serialoff

Exposes the mesh over a UART (text, NMEA, CalTopo, Winlink-style proto).

Connecting GPS/weather gear or a data logger.
Detection Sensoroff

Sends an alert when a GPIO changes (door switch, PIR motion).

Gates, mailbox, driveway alarms.
Remote Hardwareoff

Read/write GPIO pins over the mesh.

EXPERTRequires admin keys.
Audiooff

Codec2 push-to-talk voice on ESP32 (very low quality, heavy airtime).

Experimental; avoid on shared meshes.
Ambient Lighting / Paxcounteroff

RGB LED control; counts nearby Wi-Fi/BLE devices.

Paxcounter only on your own channel.
Status Messageoff

Short status text shown in node lists (2.7.19+).

"Home", "Mobile", "Solar relay"...
Traffic Management (2.8)per role

Dedup, rate limiting and role-aware policing of forwarded packets.

EXPERTLeave defaults while 2.8 is alpha.
Ready-made setups
Recommended setups by useHandheld, car, home base, relay, solar, tracker...
UseRolePreset / HopsPositionPower & other
Pocket handheld (everyday carry)CLIENTMesh default / 3Smart on, 15–30 min, 13–14 bits on publicScreen 15 s, BT on, ext. notification on DMs. nRF52 device for multi-day battery.
VehicleCLIENT (CLIENT_BASE if it serves family handhelds)Default / 3Smart on, min distance 300 m, min interval 300 s12 V power, shutdown-after-power-loss 600 s, roof NMO antenna.
Home base (attic/roof)CLIENT_BASE (favorite your own nodes)Default / 3Fixed position, GPS off, 1–4 hWi-Fi or Ethernet, RX boosted gain on, BT off if on network.
Tall-site relay (tower, hill, 10+ story)ROUTER (coordinate locally)Default / 3Fixed, 6–12 hAdmin keys set, BT off, unmessageable on, rebroadcast CORE_PORTNUMS_ONLY on busy meshes.
Dead-spot fillerROUTER_LATEDefault / 3FixedCovers a cul-de-sac, school or low area without competing with routers.
Solar nodeROUTER / ROUTER_LATE / CLIENT_BASEDefault / 3Fixed, 12 hnRF52 (RAK4631, T114, Xiao) preferred; telemetry 30–60 min; power saving on if ESP32.
Hiking / backcountry groupCLIENTLONG_FAST or LONG_MODERATE on a private channel / 3–4Smart on, 5–10 minGPS update 2–5 min; carry a spare power bank; one person with a small mast antenna helps enormously.
Asset / kid / pet trackerTRACKERDefault / 3Private channel, full precision, 1–5 minPower saving on; T1000-E or Wio Tracker class device.
Weather / sensor stationSENSORDefault / 3FixedEnvironment telemetry 15–30 min, power saving on, rebroadcast NONE if on battery.
Event / festivalCLIENTSHORT_FAST or MEDIUM_FAST on an event channel / 2–3Smart onFaster preset keeps hundreds of nodes from jamming each other.
ARES / EmCommCLIENT / CLIENT_BASE at EOC / ROUTER at high sitesCommunity preset / 3MGRS display formatPrivate channels; TAK role for ATAK users; pre-staged admin keys. Licensed ops may use ham mode (no encryption).
Quick start: first 5 minutesFlash, pair, pick the US preset, advert
First 5 minutes
  1. Flash Companion BLE firmware at flasher.meshcore.io (repeater firmware for a relay).
  2. Pair the app (default BLE PIN 123456 on screenless boards).
  3. Settings → Radio: pick the USA/Canada (Recommended) preset — 910.525 MHz, BW 62.5, SF7, CR5 — unless your local group uses something else.
  4. Set your name, then tap Advert → Flood once so repeaters and people learn you exist.
  5. Join the Public channel (built in) and any local #hashtag channel your area uses.
Configuration
Diagnostics commandsStats, neighbors, OTA, reboot

Diagnostics you will use

ver, board, clock / clock sync, neighbors, discover.neighbors, stats-core (battery, uptime, queue), stats-radio (noise floor, last RSSI/SNR, airtime), stats-packets, advert, start ota, reboot, erase (serial only, destructive).

Ready-made setups
Recommended setups by useMessenger, home relay, solar repeater, room server
UseFirmwareKey settings
Pocket messengerCompanion BLERegional preset, auto-add manual in dense cities, share location off.
Home relay in attic/roofRepeaterName + lat/lon, new admin password, rxgain on, advert.interval 120, flood.max 16.
Solar hilltop / tower repeaterRepeater (nRF52)powersaving on, txdelay 1.0, loop.detect minimal, flood.max per regional plan.
Group message boardRoom Server (separate device)guest.password set, repeat off.
Standalone (no phone)Ultra on T-Deck / T-PagerSame radio preset; load map tiles to SD card.
Apps & tools
Apps, flashers & integrationsPhone apps, web clients, CLI, Home Assistant, ATAK
ToolWorks withWhat it is for
Meshtastic app (Android, iOS/iPadOS/macOS)MeshtasticMessaging, maps, full configuration over BLE, TCP or USB.
client.meshtastic.org / flasher.meshtastic.orgMeshtasticWeb client and browser-based firmware flasher (Chrome/Edge).
Python CLI pip install meshtasticMeshtasticScripting, bulk config, backups (--export-config).
meshtasticdMeshtasticNative Linux node on a Raspberry Pi + LoRa HAT (Station G3, RAK HATs).
Meshtastic MCP serverMeshtasticAI-agent and test-framework access to devices (split into its own repo in 2.8).
MeshCore app (Android, iOS, Windows, Mac)MeshCoreCompanion messaging, repeater admin over RF; some admin conveniences are an in-app purchase.
app.meshcore.nz / config.meshcore.io / flasher.meshcore.ioMeshCoreWeb companion app, USB repeater configurator, firmware flasher with console.
Home AssistantBoth (community integrations)Node telemetry, presence and alerts as HA entities.
ATAK plugin (V2 in 2.8)MeshtasticTeam positions and chat on TAK maps.
Node-RED / Grafana via MQTTMeshtasticDashboards, logging, alert forwarding.

Python example

import meshtastic.serial_interface
from pubsub import pub

def on_receive(packet, interface):
    text = packet.get("decoded", {}).get("text")
    if text:
        print(packet["fromId"], text)

pub.subscribe(on_receive, "meshtastic.receive")
iface = meshtastic.serial_interface.SerialInterface()
iface.sendText("Hello from Python")

Gear

Find the right radio, compare devices, GPS chips, antennas and power.

Device finder
All devices

Prices are typical US street prices in 2026. Specs vary by batch and version; check the maker's page before buying. Always buy the 915 MHz version in the US.

Components & power
Range by device & antennaInternal vs external, stock vs upgraded

Estimated reliable range for each device with the antenna it ships with, a tuned whip, and a rooftop antenna. Suburban neighborhood, LONG_FAST, 90% delivery, device held at 5 ft with body loss (rooftop column: mounted at 30 ft). The weaker direction of the link is used, so a louder radio only helps if it also hears well. Each cell shows range to another handheld / range to a rooftop base. Tap a device name to open its full card.

DeviceAntennaStock / internalTuned whipRooftop 6 dBi

Estimates use this page's empirical neighborhood model and estimated antenna gains; real terrain, trees and buildings can halve or double them. Use them to compare options, not as guarantees.

Best antenna for maximum rangeExact specs for handheld, hiking, car, base, backbone

The antenna that gives the most range is, in order: tuned for 915 MHz, vertical, as high as possible, fed with short, low-loss cable — and only then higher gain. Gain does not create power; it squeezes the pattern flatter toward the horizon. That helps a fixed antenna on a roof and hurts a handheld that tilts in your hand.

Handheld: most range

Type1/2-wave whip or sleeve dipole, flexible
Gain2–3 dBi (not a "6 dBi" handheld stick)
Tuning902–928 MHz, VSWR ≤ 1.5:1 at 906–915
Length~17–22 cm radiating element
ConnectorDirect SMA male (check SMA vs RP-SMA); no adapters
U.FL boards≤15 cm IPEX-to-SMA bulkhead pigtail
Gain vs stock+2 to +5 dB (1.3–1.8× range)

Hiking / field: most range

Type1/2-wave or roll-up J-pole / slim-jim
Gain2–3 dBi
HeightOn a 2–3 m telescopic pole or hung in a tree
Feed≤3 m of RG-316/LMR-100 (short!)
Gain vs stock+8 to +15 dB from height alone

Vehicle: most range

TypeNMO 5/8-over-1/4 or 1/2-wave, 915 MHz
Gain3–5 dBi over the metal roof
MountCenter of the roof, through-hole NMO best
CoaxRG-58 ≤ 17 ft or LMR-195/240
Gain vs dash node+12 to +20 dB

Home base / relay: most range

TypeFiberglass collinear omni, vertical
Gain5.8–6 dBi suburban; 8 dBi in flat terrain like DFW
Height≥10 ft above the roof peak (25–40 ft AGL)
ConnectorN-female, weather-sealed
CoaxLMR-400 ≤ 25 ft (<1 dB) or radio at the mast
ExtrasLightning arrestor + ground; 915 MHz bandpass filter near noise
Gain vs attic stock+15 to +25 dB

Backbone link: most range

TypeYagi or panel, point to point
Gain10–13 dBi
AimAt one distant site; keep the Fresnel zone clear
LegalEIRP ≤ 36 dBm: 22 dBm + 13 dBi − 1 dB = 34 OK

Gain vs pattern

Antenna gainVertical beam (approx.)Best forWatch out
0–2 dBi (stubby, flex)Very wideTiny devices, inside casesOften poorly tuned; lowest range
2–3 dBi half-wave~70–80°Handhelds, packs, cars without a ground planeBest all-round handheld choice
5–6 dBi collinear~25–30°Suburban rooftops, relaysMust be vertical
8–10 dBi collinear~12–16°Tall or hilltop sites, flat terrainCan under-serve nodes close below a tall mast; watch EIRP with 1 W radios
10–13 dBi Yagi / panelNarrow both waysSite-to-site linksOnly covers where it points
EIRP with high-power radios

TX + antenna gain − losses must stay ≤ 36 dBm unlicensed. A 1 W (30 dBm) radio on an 8 dBi antenna is 38 dBm — turn the radio down to 28 dBm. A 22 dBm radio can use up to about 14 dBi.

Choose-your-antenna devices

The T-Deck Plus is sold in two versions: internal antenna (915 MHz part H737-A) for a clean pocket device, or external SMA (H737-03) for range and upgrades. Boards with a U.FL connector (Heltec, T114, RAK, XIAO, Wio Tracker) can use either a flex antenna inside a case or a pigtail to an external antenna.

Internal-antenna devices

T1000-E, Nano G2 Ultra, MeshPocket, WisMesh Tag and similar have no connector. Their "antenna upgrade" is placement: carry them high (shoulder strap, hat, top of the dashboard), keep them off your body and out of metal enclosures, and have a strong rooftop base or repeater nearby.

GPS chips comparedL76K, u-blox M10, AG3335, UC6580 and more

GPS lets a node share its location, set its own clock and show you on the map. It is also the biggest battery drain after the screen. Newer chips track more satellite systems at once, get a fix faster and use far less power.

ChipConstellationsTypical currentFound inNotes
GPS tips
  • Fixed nodes don't need GPS: set Fixed position once and turn GPS off (Meshtastic GPS mode = DISABLED; MeshCore gps off).
  • A first fix (cold start) takes 30 s to several minutes; it needs open sky. Later fixes (hot start) take seconds.
  • The ceramic patch antenna must face the sky. A node in a pocket or car cabin may not get a fix at all.
  • No GPS on the radio? Meshtastic can use your phone's location instead.
  • Battery hikers: GPS update interval 5–10 min. Trackers: 30–60 s.
  • Dual-band chips (UC6580) handle downtown reflections much better than single-band ones.
  • Current figures are approximate tracking current for the chip alone.
Antennas: handheld, mobile, baseTypes, gain, coax loss, mounting

The antenna and its height matter more than anything else you can change. A stock whip that ships with a cheap board is often tuned for 868 MHz, not 915. A properly tuned half-wave antenna held at head height can double your handheld range for $15.

What "good" looks like at 915 MHz
  • Tuned for 902–928 MHz, VSWR under 1.5:1 across 903–915 MHz. Verify with a NanoVNA (~$60) if you can.
  • Connector matches: SMA vs RP-SMA look alike but do not mate properly; IPEX/U.FL is fragile (rated for ~30 connections).
  • Gain is not free: higher-gain omnis flatten the pattern. Great from a rooftop looking at the horizon, worse for a handheld that tilts.
  • Vertical polarization everywhere — a horizontal handheld antenna can lose 10–20 dB to vertical ones.
  • Never transmit without an antenna connected; it can damage the radio's PA.

Handheld (HT) setup

Antenna type1/2-wave whip or sleeve dipole (flexible)
Gain2–3 dBi
Length~16–20 cm for 1/2 wave
ConnectorSMA male (check your board)
CoaxNone, or <15 cm IPEX pigtail
TX power+20 to +22 dBm (100–160 mW)
HeightChest/head, not in a pocket
Upgrade pathTuned 915 whip; a "slim-jim" or 1/2-wave on a short telescopic pole for hikes

A node in a pocket or on a belt loses 6–15 dB to your body. Clipping it high on a backpack strap is the single best free upgrade.

Mobile (vehicle) setup

Antenna typeNMO 1/4-wave or 5/8-over-1/4 whip
Gain2–5 dBi (over ground plane)
MountCenter of metal roof; NMO through-hole, or magnet mount
CoaxRG-58 ≤17 ft (~2.5 dB) or LMR-195/240
ConnectorNMO to SMA
TX power+22 to +30 dBm (1 W max unlicensed)
Power12 V to USB-C with a quality buck converter
NodeHeltec V4, Station G2 (turned down), T-Beam, RAK

The metal roof is part of the antenna. Fiberglass or panoramic-roof cars need a no-ground-plane (NGP) antenna. Keep the node out of direct windshield sun.

Base station (home) setup

Antenna typeFiberglass collinear omni
Gain5–6 dBi suburban; 8–10 dBi only on tall sites
HeightAbove roof peak; 20–40 ft AGL
CoaxLMR-400 (~3.9 dB/100 ft) — keep under 50 ft
ConnectorsN-type at antenna and arrestor
ProtectionLightning arrestor + ground, drip loop, weatherproof tape
Node locationWeatherproof box at the mast (short coax) or indoors (long coax)
EIRP checkTX + gain − loss ≤ 36 dBm

Best practice: put the radio at the antenna in an enclosure and run power (PoE or low-voltage DC) up instead of RF down. Twenty feet of LMR-400 costs 0.8 dB; twenty feet of RG-58 costs about 3 dB.

Antenna types at a glance

Stubby / stock whip
-2 to 2 dBi
Often mistuned. Replace on any node you care about.
Tuned 1/2-wave whip
2–3 dBi
The right handheld antenna. Works without a ground plane.
Fiberglass collinear
3–10 dBi
Rooftop standard. 5–6 dBi is the sweet spot for neighborhood coverage; 8+ dBi from high sites.
NMO mobile whip
2–5 dBi
Needs the vehicle roof as ground plane.
Yagi
8–14 dBi
Point-to-point backbone links between repeaters. Watch the 36 dBm EIRP limit.
Ground plane / J-pole (DIY)
2–3 dBi
Cheap, effective attic or mast antenna from wire and an SO-239/N chassis connector.

Coax loss at 915 MHz

CableLoss per 100 ftLoss per 10 ftUse
RG-174 / RG-316~27–30 dB~3 dBPigtails under 1 ft only
RG-58~15 dB~1.5 dBShort mobile runs
LMR-195~10 dB~1 dBMobile, jumpers
RG-8X~10 dB~1 dBShort base runs
LMR-240~7.6 dB~0.8 dBRuns up to ~25 ft
LMR-400~3.9 dB~0.4 dBRecommended base station feedline
LMR-600~2.5 dB~0.25 dBTowers, long runs
1/2" hardline~2.2 dB~0.2 dBProfessional installs
Cable math

A 6 dBi antenna fed with 50 ft of RG-58 (~7.5 dB loss) performs worse than a 0 dBi antenna on the radio. Add ~0.2 dB per connector/adapter.

Battery lifeWhat drains power and how long it lasts

Battery life is dominated by three things: the MCU family (nRF52 vs ESP32), the screen, and GPS. LoRa receive is cheap (~5 mA on SX1262); transmit is expensive but brief.

State / device classTypical average current2000 mAh battery lastsNotes
nRF52 client, no screen/GPS (T114, RAK, XIAO)4–8 mA10–20 daysMeshCore repeaters with powersaving can go lower still.
nRF52 with GPS every 2 min (T-Echo, T1000-E)10–20 mA4–8 daysLonger GPS interval = big gains.
ESP32-S3 client, BT connected, screen timeout45–90 mA1–2 daysHeltec V3/V4, T-Beam, T3-S3.
ESP32 with Wi-Fi (MQTT gateway)90–150 mA~15 hRun from wall power.
ESP32 power saving (light sleep)15–25 mA3–5 daysBluetooth off while asleep.
T-Deck Plus, screen on120–200 mA~10–15 h (2000 mAh built in)Dim the screen; shorten timeout.
Transmit burst, +22 dBm~110–120 mA—0.7 s per LONG_FAST packet.
Transmit burst, 1 W PA~500–900 mA—Needs a supply that can deliver it; 3 W+ PAs need 12–15 V.

Figures are typical community measurements and vary with firmware, traffic, temperature and battery health. Heavy mesh traffic raises everyone's average because every node receives (and may relay) every packet.

Biggest battery wins
  • Choose nRF52 for anything carried or solar powered.
  • Screen timeout 15–30 s; LED heartbeat off.
  • GPS off on fixed nodes; GPS interval 5+ min when hiking.
  • Leave Wi-Fi off on battery ESP32 nodes.
  • Telemetry and position intervals of 30–60 min.
Solar repeater buildsSizing math, parts, installation

A well-placed solar node with a 5–6 dBi antenna at 30 ft typically extends coverage 2–4× in radius over ground-level handhelds. Use an nRF52 board; ESP32 boards need panels and batteries several times larger.

Sizing math (Dallas example)

// Load: nRF52 router on a busy mesh, ~10 mA avg at 3.7 V
Daily   = 10 mA x 24 h = 240 mAh/day  (~0.9 Wh)
// Autonomy: 5 cloudy days, use 80% of capacity
Battery = 240 x 5 / 0.8 = 1,500 mAh minimum -> use 2 x 18650 (6,000+ mAh)
// Winter sun in Dallas ~3.5-4 peak sun hours, 60% overall efficiency
Panel   = 0.9 Wh / (3.5 h x 0.6) = ~0.45 W -> use 2-5 W for margin
// ESP32 router at ~60 mA avg needs ~6x more battery and a 6-10 W panel.
RAK WisBlock solar build
Proven standard
Node: RAK4631 on 19007 base
Battery: 2–4 × 18650 Li-ion or LiFePO4 (with correct charger)
Panel: 5 V 2–6 W
Enclosure: IP65/67, N-type bulkhead
~$100–$180 complete
Budget solar build
T114 or XIAO nRF52 kit
Charger: CN3791 MPPT or board's solar input
Battery: 1–2 × 18650
Panel: 6 V 2–3 W
~$50–$80
All-in-one
SenseCAP P1-Pro, Heltec Tower V2, ThinkNode M6
Bolt on, set it up, done. Less flexible antenna options.
~$50–$120

Installation best practices

  • Batteries and heat: Texas attics and sun-baked boxes pass 60–70 °C. Use a white/shaded enclosure and venting. Li-ion must not be charged below 0 °C; LiFePO4 (3.2 V nominal, needs its own charge profile) tolerates heat and cycling better.
  • Panel angle: face south, tilted about latitude + 15° (~47° in Dallas) to favor winter sun.
  • Lightning: coax arrestor bonded to a real ground on any mast-mounted antenna.
  • Remote management: Meshtastic admin keys or MeshCore admin password set before it goes up the pole.
  • Antenna spacing: keep the antenna at least 1/2 wavelength (~16 cm) from metal and the panel frame.

Range

How far your setup will reach, and how to plan a network.

Range estimator

Pick a device for each end and how its antenna is set up. Transmit power, receive sensitivity (LNA/boosted gain) and antenna gain are filled in from the device; you can still edit any number. Both directions are calculated and the weaker one sets the range.

Side A — your radio
Side B — the other radio
Estimated range—
Estimated range
—
Likely spread
—
A → B range
—
B → A range
—
EIRP A / B
—

Typical range in a city neighborhoodHandheld, car, rooftop, tower

"How far will it go?" depends mostly on what is between the two antennas and how high they are. The ranges below are typical results reported by US community meshes for a flat suburban neighborhood (one- and two-story houses, mature trees — think most of Dallas–Fort Worth) on LONG_FAST at +22 dBm. MeshCore's narrow SF7/62.5 preset has ~4 dB less link budget, so expect roughly 25–30% less distance per hop, which its repeater-based design compensates for.

Handheld ↔ handheld, both indoors0.1–0.5 mi (0.2–0.8 km)
Handheld ↔ handheld, outdoors on the street0.3–1.2 mi (0.5–2 km)
Handheld ↔ car roof antenna0.6–2 mi (1–3 km)
Handheld ↔ attic base station0.5–2 mi (0.8–3 km)
Handheld ↔ rooftop base (5 dBi, 25–35 ft)1–3.5 mi (1.5–5.5 km)
Rooftop base ↔ rooftop base3–10 mi (5–16 km)
Handheld ↔ tower / 10+ story / hilltop router4–15 mi (6–25 km)
Rooftop base ↔ tower / hilltop router10–30+ mi (15–50+ km)
02.5 mi5 mi7.5 mi10+ mi
LinkDense urban (downtown, mid-rise)Suburban neighborhoodRural / openClear line of sight
HT ↔ HT (street level)0.2–0.6 mi0.3–1.2 mi1–4 mi5–10+ mi
HT ↔ mobile0.3–1 mi0.6–2 mi2–6 mi10+ mi
HT ↔ rooftop base0.5–1.5 mi1–3.5 mi4–10 mi15+ mi
Base ↔ base (rooftops)1–4 mi3–10 mi8–20 mi30+ mi
HT ↔ tower/hill router2–6 mi4–15 mi10–30 mi40+ mi
Base ↔ tower/hill router3–10 mi10–30 mi20–60 mi100+ mi mountain-to-mountain
How to get more rangeBest upgrades first
How to add range, best first
  1. Height. Moving a base from the attic floor to 10 ft above the roof peak is often +10 dB — triple the coverage area.
  2. Get out of the pocket / out of the car. Body and vehicle-cabin losses are 6–15 dB.
  3. A tuned 915 MHz antenna instead of the stock whip: 2–6 dB.
  4. Short, low-loss coax: recover 3–6 dB on base stations.
  5. RX boosted gain on / LNA boards (Heltec V4, Station G2): 2–4 dB on receive.
  6. More power last: going from 0.16 W to 1 W is only +8 dB and only helps outbound.
Link budget & Fresnel zoneThe math behind the numbers

A link budget adds up every gain and loss between two radios. If the received signal is stronger than the receiver's sensitivity, the link works; the difference is your margin. Aim for 10 dB or more.

TX POWER+22 dBmBASE ANTENNA+5 dBiPATH LOSS 5 km(suburban)-135 dBHT ANTENNA+2 dBiRX -106 dBmsens. LONG_FAST -131.5MARGIN: 22 + 5 - 135 + 2 - (-131.5) = +25.5 dB

Free-space path loss

// FSPL (dB) = 32.44 + 20 log10(d_km) + 20 log10(f_MHz)
// At 915 MHz (20 log10(915) = 59.2):
0.5 km  FSPL = 85.7 dB
1 km    FSPL = 91.7 dB
5 km    FSPL = 105.6 dB
10 km   FSPL = 111.7 dB
50 km   FSPL = 125.6 dB
// Real neighborhoods add 20-45 dB of clutter loss on top of FSPL.
// Margin = TX + Gtx - Ltx - PathLoss + Grx - Lrx - Sensitivity

Fresnel zone

r1 (m) = 8.66 * sqrt( d_km / f_GHz )   // radius at the midpoint
// 2 km link at 0.915 GHz:  r1 = 8.66 * 1.48 = ~12.8 m
// 10 km link:             r1 = 8.66 * 3.31 = ~28.6 m
// Keep 60% of r1 clear of trees, roofs and terrain for near-free-space loss.
Why height wins

At 915 MHz the Fresnel zone for a 2 km neighborhood link is ~13 m (40 ft) in radius at mid-path. Two antennas at 5 ft are almost completely inside roofs and trees; raising one to 35 ft clears a large part of the zone, which is why a rooftop base hears handhelds several times farther away.

Interference & congestionDiagnosing noise, keeping airtime free

902–928 MHz is shared with smart meters, toll tags, RFID, baby monitors, amateur radio and other LoRa networks (including Helium/LoRaWAN gateways).

Diagnosing

  • Strong RSSI but poor SNR (e.g. -80 dBm at -5 dB) means noise or interference, not distance.
  • Check the noise floor: Meshtastic 2.8 tracks it; MeshCore shows it in stats-radio. Anything above about -110 dBm on 915 MHz is a noisy site.
  • Use an RTL-SDR with SDR++ to look at 902–928 MHz for smart-meter bursts or continuous carriers.
  • Repeaters that stop hearing anything after a while may have AGC deafness — MeshCore set agc.reset.interval 4; recent Meshtastic builds reset AGC automatically.

Reducing congestion

  • Keep hop limit at 3; do not use ROUTER on low sites.
  • Lengthen position (30–60 min) and telemetry (30–60 min) intervals; leave node info at 3 h+.
  • Turn off range test, PAX counter and store-and-forward when not needed.
  • Very busy meshes move to faster presets (MEDIUM_FAST) as a community decision.
  • A 915 MHz cavity or SAW bandpass filter helps repeaters near cell sites or pagers.
Planning a networkTools, relay spacing, bridging

Planning tools

Backbone spacing

EnvironmentRelay spacingHeightMeshtastic roleMeshCore
Dense urban1–2 miRooftops 50–150 ftROUTER only on the tallest; ROUTER_LATE fillersRepeaters every building cluster
Suburban3–6 miRoof masts 30–50 ft, water towersCLIENT_BASE homes + few ROUTERs1 repeater per neighborhood + tall backbone
Rural8–20 miHills, towers, grain elevatorsROUTERRepeaters on high points

Bridging distant meshes

Meshtastic uses MQTT gateways (Wi-Fi/Ethernet nodes with uplink/downlink on chosen channels). The public broker can make busy meshes busier — many regions use a private broker and bridge only one channel. MeshCore relies on RF repeaters, with community observers feeding analyzers such as analyzer.letsmesh.net.

Privacy

Anything on the default Meshtastic channel or MeshCore Public channel should be treated as public, including anything bridged to the internet.