ROUTER vs ROUTER_CLIENT vs REPEATER Role: Deep Dive
Meshtastic provides three infrastructure-orientedseveral device roles for infrastructure nodes that exist to extend network reach rather than serve end users. On current firmware the relevant roles are ROUTER, ROUTER_LATE, and REPEATER (with CLIENT being the right choice for the overwhelming majority of ordinary nodes, since CLIENT nodes already rebroadcast via managed flooding). Choosing the wrong role wastes resources, creates unnecessary air-time, or silently breaks the capabilities operators expect. This page dissects each role at the firmware level so you can make an informed decision for every node you deploy.
The Three Infrastructure Roles at a Glance
| Capability | ROUTER | REPEATER (deprecated) | |
|---|---|---|---|
| Rebroadcasts |
Yes | Yes (rebroadcasts last, after other nodes) | Yes |
power.is_power_saving
All of ROUTER, ROUTER_LATE, and REPEATER rebroadcast each packet once with higher priority than ordinary CLIENT nodes. The retired ROUTER_CLIENT role has been omitted from this table; it is not settable on current firmware.
ROUTER Role
A ROUTER node is the canonical fixed-infrastructure role.role, designed for stationary, well-placed nodes. When you set a node to ROUTER it immediately adjusts its behavior in the following ways:
- ROUTER automatically enables power-saving sleep (ESP32) via
power.is_power_saving, and this cannot be turned off. The LoRa radio stays in standby to wake onfull-timeincoming-packetsno—sleepitmodes,isnonotduty-cyclearestrictionsnodebeyondthatregulatoryignoreslimits.power management. EveryItreceiveddefaultspacketBLEthat/passesWiFithe/ Serial connectivity off, so you don't normally connect to it to text directly.
NodeInfo Setting the ROUTER role via CLI
meshtastic --set device.role ROUTER
Verifying the role was applied
meshtastic --get device.role
The --get verb is the standard counterpart to --set for reading any config field in the Python CLI.
ROUTER_LATE Role
ROUTER_LATE is the modern infrastructure role for a node that should rebroadcast only after other nodes have had a chance to, rather than with top priority. It is useful within a local cluster where you want a relay that fills gaps without dominating airtime. Unlike ROUTER, it does not force power-saving sleep on, and it keeps client-style app connectivity available. For most stationary backbone infrastructure prefer ROUTER; choose ROUTER_LATE for nodes that should defer to the rest of the mesh first.
ROUTER_CLIENT Role (retired — legacy reference only)
ROUTER_CLIENT was retired in firmware 2.3.15 and is not a settable role on current firmware. Historically it was described as a "superset of ROUTER.ROUTER" Itthat retainsretained everyROUTER's relay behaviour of ROUTER
(radio always on, rebroadcast all packets, full node database, NodeInfo broadcasts) while also enablingletting the node to originate messages as a first-classclient. client:This is preserved here only for operators encountering older documentation or very old firmware:
TextIt was described as allowing text messagescanto be composed and sent from thedevicedevice. On current firmware, if you need a relay that an operator can also message from, use CLIENT (which relays viaapp,managedweb UI, or serial CLI)flooding).PositionItdatawas described as broadcasting position from the device's own GPS(ormanuallyconfiguredcoordinates)coordinates.isThat position-broadcastonbehaviourthenowpositionappliesupdatetointerval.CLIENT-family roles.TheIt was promoted for an operatoratwhothewantedrepeater site canto use the nodefor voice-channel communicationinteractively during events or emergency activations without compromising the relay function. Today, use a CLIENT node for that. (Note: Meshtastic carries text, position, and telemetry — it does not carry voice — so "voice-channel communication" was never accurate terminology.)
TheDo trade-offnot use the legacy command below on current firmware — it will fail because ROUTER_CLIENT is marginal:no originatinglonger positionan andaccepted telemetrydevice.role packetsvalue. increases local
air-time slightly. OnFor a busyrelay channelthat thisan addsoperator aalso fewuses percentageinteractively, pointsset ofdevice.role channelCLIENTutilisation
compared to a pure ROUTER.instead.
Setting theLegacy ROUTER_CLIENT roleCLI via(no CLIlonger valid)
# Retired in firmware 2.3.15 — this command fails on current firmware.
# Use: meshtastic --set device.role ROUTER_CLIENTCLIENT
# (legacy: meshtastic --set device.role ROUTER_CLIENT)
REPEATER Role (deprecated)
The REPEATER role is the most minimal relay option. It isoption, designed for nodes that should retransmit packets butwith consumeminimal the absolute minimum resourcesoverhead and produce no additional
air-timebroadcasts of their own:own. Note: REPEATER was deprecated as of firmware ~2.7.x; for new infrastructure consider ROUTER or ROUTER_LATE. Its documented behaviour:
- Received packets are rebroadcast
afteronce,thewithstandardhigherforwardingprioritydelaythan-CLIENTidenticalroles — similar to ROUTER inthistherespect.act of relaying. TheIt is not visible in the node list and does notmaintain a node database. It does not track neighbours, does not respond to traceroute requests, and does not build a picture of the mesh topology.
NodeInfo The anonymity of the REPEATER role is a deliberate design choice: pure relay nodes that cannotaren't beindividually addressed individually produce less management overhead on the mesh. However, this also means
you lose visibility - you cannot pingBecause a REPEATER by node ID, and it willis not show signal-strength
data for incoming packets in the node list, you generally cannot select or ping it by node ID in the app the way you can a ROUTER does.ROUTER.
Setting the REPEATER role via CLI
meshtastic --set device.role REPEATER
Hop Count Handling Across Roles
All threerelaying roles participate in hop-count decrement identically. When a packet arrives with a remaining hop count of N, the forwarding node decrements it to N-1 before rebroadcasting. If N is already 0, the packet is consumed locally but not forwarded. NeitherROUTER roleand hasREPEATER ahave bypassrebroadcast forpriority the(they hopmay counterrebroadcast -sooner, and defer less to other rebroadcasters) but they still decrement and honour hop_limit — there is no hop-counter bypass or "always forward regardless" mode.
The practical consequence is that placing a REPEATERrelay mid-path does use a hop. PlanDefault yourhop_limit networkis so3 thatand the maximum is 7; "really, 3 is fine" per the docs. Ensure the number of infrastructurerelay hops between any two end clientsendpoints does not exceed your configured hop_limit. minusRaising 1.hop_limit to "fix" dropped messages can worsen congestion (more airtime and collisions), so pair any increase with a check on channel utilisation.
Choosing the Right Role
Community fixed repeater on a hilltop or tower
Use ROUTER. The node should be visible to the community (appears in node list, respondssends toNodeInfo, relays traceroutes), but it should not begenerate generatinguser traffic of its own. Operators can still access the serial console locally for configurationconfiguration. withoutFor enablinga ROUTER_CLIENT.node that should defer to the rest of the mesh before rebroadcasting, consider ROUTER_LATE.
meshtastic --set device.role ROUTER
Ham operator's home station that also relays
Use ROUTER_CLIENTCLIENT. YouCLIENT wantnodes thealready relayrebroadcast capabilityvia ofmanaged ROUTERflooding, butso alsoa needhome station set to CLIENT both relays and lets you participate in mesh conversations -— sending emergency alerts, coordinating with your community, or running net check-ins from the same hardware. (The old advice to use ROUTER_CLIENT here is obsolete; ROUTER_CLIENT was retired in 2.3.15.)
meshtastic --set device.role ROUTER_CLIENTCLIENT
Minimal-overhead anonymous relay
UseHistorically REPEATER. Idealwas the choice for a small ESP32-based node tucked into a building to bridge two otherwise disconnected areas,areas wherewith no topology visibility. Because REPEATER is deprecated as of firmware ~2.7.x, prefer ROUTER (or ROUTER_LATE) for new deployments; only use REPEATER if you do notspecifically need topologyan visibilityanonymous relay and wantunderstand theit lowestis possiblebeing firmwarephased overhead.out.
meshtastic --set device.role ROUTER # preferred; REPEATER is deprecated
Power Consumption Comparison
AllIdle threepower rolesprofiles keepdiffer by role. A REPEATER keeps the radio onactive continuously,and does not force sleep, whereas a ROUTER uses forced power-saving sleep (ESP32) that cannot be disabled — so thetheir dominant poweridle draw is similar.not the same. The differences otherwise arise from background processing:
- REPEATER
winshasonminimalidleoverheadCPUperandtheRAMofficialusagedocs, because it skipsnodeoriginatingdatabasebroadcastsmaintenanceandentirely.node-presenceOnmaintenance.an(WeESP32dorunningnotatcite240aMHzspecificthis typically saves 20 - 40 kB ofkilobyte heapandfigure,eliminatesasperiodicnodatabasefirmwareserialisation.sourceInquantifiesheavily node-dense networks this can be the difference between stable operation and heap exhaustion.it.) - ROUTER
andforces power-saving sleep on (ESP32);ROUTER_CLIENTROUTER_LATEuseleavessimilarsleep configurable viapower.is_power_saving.ROUTER_CLIENTIfadds negligible overhead unlessa GPS is active,in which caseGPS moduledrawcurrent (typicallywhich20varies-widely50bymAmodulefor— consult the module's datasheet) can dominate other draw.
power.is_power_saving to most roles (all except TRACKER and SENSOR). It is not exclusive to CLIENT: ROUTER forces it on Quick CLI power-related settings for infrastructure nodes
# Disable Bluetooth to save ~5power mA(figure continuouslyis approximate; verify against the Bluetooth config docs)
meshtastic --set bluetooth.enabled false
# DisableReduce the screen backlighton-time ifto presentsave (savespower. 20-80Note: mAthe whendocumented displayfield is on)display.screen_on_secs.
# A value of 0 is the 10-minute DEFAULT, not "off"; set a small nonzero value to dim sooner.
meshtastic --set display.backlight_secsscreen_on_secs 010
# Set a lower TX power only if nodes are nearby (reduces TX draw and channel utilisation).
# tx_power 0 is the default and means "use the region-legal maximum." Never set a higher fixed
# value than your region/antenna combination legally allows (note the >6 dBi gain-reduction rule).
meshtastic --set lora.tx_power 17