# What is the difference between a Repeater and Room Client in MeshCore?

## What Is the Difference Between a Repeater and Room Client in MeshCore?

MeshCore ships several firmware variants. This page compares the **Repeater** firmware with the **Companion (room) client** firmware - the variant a user-carried node runs to connect to a room server. (Note: across the rest of this wiki this client is referred to as the **Companion** variant; "Room Client" here means the same Companion firmware used to interact with a room server. The room server itself - the node that actually stores and serves message history - runs separate Room Server firmware and is not covered in detail here.) Choosing the wrong one is a common source of confusion. This page explains both in detail.

### REPEATER\_FIRMWARE

A node flashed with REPEATER\_FIRMWARE acts as pure RF infrastructure. Its job is to forward MeshCore packets toward their destination to extend the reach of the mesh. Unlike flood-based mesh systems, a MeshCore repeater forwards **selectively** (route/path-based) - it does not rebroadcast every packet it receives. Key characteristics:

- **No screen required:** Repeater firmware is designed to run on minimal hardware - a bare ESP32 or nRF52 board with a LoRa module. It has no UI and does not need a display.
- **Minimal power consumption:** Because it does not maintain Bluetooth, Wi-Fi, or app connections, a repeater node consumes significantly less power than a room client. This makes it ideal for solar-powered or battery-backed infrastructure deployments.
- **On-mesh identity:** A repeater has its own on-mesh identity (a keypair and a name) so it can be discovered and administered, but it does not originate or receive user messages; it only forwards packets at the radio layer.
- **No room server interaction:** Repeater firmware does not connect to a room server. It has no concept of message storage or retrieval.

**Best for:** Hilltop relays, tower-mounted infrastructure nodes, solar repeaters in remote locations - any deployment where the goal is coverage extension rather than message origination.

### ROOM\_CLIENT\_FIRMWARE

A node running the Companion ("room client") firmware has a full client identity and can connect to a MeshCore **room server** to retrieve stored messages. Note that the message storage and retrieval capability lives in the *room server* firmware; the room client is simply a Companion node that logs in to that server to fetch history it missed. Key characteristics:

- **Client identity:** The node generates a public/private key pair on first boot. This keypair is its identity on the mesh and with room servers. Messages can be addressed to it specifically.
- **Room server connectivity:** A room client connects to a room server primarily over RF through the mesh (or via BLE to a paired room server) to send messages and download stored messages it missed while offline. The room server, not the client, holds the stored message history.
- **Higher power use:** Maintaining a client identity and processing addressed messages consumes more CPU cycles and radio time than a pure repeater.
- **Does not relay:** A Companion/room client does *not* rebroadcast or relay mesh traffic the way a repeater does. Only Repeater firmware forwards packets for other nodes. If you need range extension, deploy a repeater node.

**Best for:** User-carried nodes, [base station nodes](https://wiki.meshamerica.com/books/hardware-guide/page/base-station-nodes) that interact with a room server, nodes that need to send and receive addressed messages.

### Can a node be both?

No. You must choose one firmware at flash time. A single physical node cannot simultaneously run the Repeater firmware and the Companion (room client) firmware. If you need both roles at one location - for example, a hilltop site that also needs a room-server-connected client - you need two separate physical nodes: a repeater for range extension and a separate client node.

### Summary comparison

<table id="bkmrk-featurerepeater_firm"> <thead><tr><th>Feature</th><th>REPEATER\_FIRMWARE</th><th>ROOM\_CLIENT\_FIRMWARE</th></tr></thead> <tbody> <tr><td>Relays/forwards packets for others</td><td>Yes (selectively, route-based)</td><td>No</td></tr> <tr><td>Has on-mesh identity</td><td>Yes (infrastructure)</td><td>Yes (user)</td></tr> <tr><td>Connects to room server</td><td>No</td><td>Yes</td></tr> <tr><td>Sends/receives user messages</td><td>No</td><td>Yes</td></tr> <tr><td>Power use</td><td>Low</td><td>Higher</td></tr> <tr><td>Screen needed</td><td>No</td><td>Optional</td></tr> </tbody></table>