# Messages & Channels Meshtastic supports two communication modes: **channel broadcasts** and **direct messages**. ## Channels Channels are shared communication groups. All nodes configured with the same channel key can read and send messages on that channel. ### Default Channel Every Meshtastic device comes with a default **LongFast** channel. This is an unencrypted channel used for general mesh communication. ### Channel Security Channels support multiple encryption levels: Icon | Security Level | Description | ------|----------------|-------------| π | PSK (256-bit AES) | Fully encrypted with a strong pre-shared key. Only nodes with the matching key can read messages. | π | PSK (128-bit AES) | Encrypted with a shorter key. Secure for most uses but 256-bit is preferred for sensitive data. | π | Default / Open | Uses the well-known default key. **Any Meshtastic device** on the same preset can read these messages. | β οΈ | Insecure + Position | Open channel that also broadcasts your GPS position. Use with caution in public meshes. | > π **Security Tip:** Always configure a unique PSK for private communications. The default channel is intentionally open so new users can discover the mesh β but you should create a separate encrypted channel for anything sensitive. ### Adding a Channel 1. Navigate to **Settings β Channels**. 2. Tap **Add Channel** or scan a QR code. 3. Configure the channel name and encryption key. 4. Share the channel URL/QR code with others who need access. Tapping a channel shows its details and sharing options. ## Direct Messages Direct messages (DMs) are point-to-point encrypted communications between two specific nodes. ### Sending a Direct Message 1. Open the **Messages** tab. 2. Select a node from your contacts list or tap a node in the node list. 3. Type your message and tap **Send**. ### Message States A status label appears under **your own** outgoing messages only (incoming messages from others show no status label): State | Meaning | -------|---------| Sendingβ¦ | Queued or already handed to the radio, not yet resolved either way (queued and en-route both show this same text) | Delivered to recipient | The strongest confirmation for a direct message β an acknowledgment came back | Delivered to mesh | For a channel broadcast, the message reached the mesh (broadcasts have no per-recipient ack) | Relayed, not confirmed by recipient | For a direct message, shown in a warning color β the message was relayed but no acknowledgment has come back yet | Routing via SF++ chainβ¦ | Being routed/buffered by the Store & Forward Plus Plus chain | Confirmed on SF++ chain | Confirmed delivered via the SF++ chain | Error | Delivery failed β tap the status for the specific reason (see Delivery Errors below) | ### Delivery Errors When a message fails to deliver, the error indicator shows what went wrong: Error | Meaning | What to Do | -------|---------|------------| No Route | No path exists to the destination node | The recipient may be offline or out of mesh range. Try later or move closer. | Got NAK | The next-hop node refused to relay | The relay node may be congested. Wait and retry. | Timeout | No acknowledgment within retry window | The recipient may be just out of range. Try increasing hop limit or moving to a better position. | No radio interface | No radio interface available to send | Check that your radio is connected and available. | Failed to deliver to mesh | All retry attempts exhausted | Move closer, improve signal, or wait for mesh conditions to improve. | Channel/key mismatch | Destination channel/key does not match | Verify both nodes share the same channel and PSK. | Message is too large to send | Message exceeds maximum payload size | Shorten the message and try again. | No app response | App or plugin did not respond to the request | Retry or check the destination app or module state. | Duty cycle limit | Regional airtime limit reached | Wait for the duty cycle window to reset. | Invalid request | Malformed or invalid request | Retry after updating or restarting the app if this persists. | > π‘ **Tip:** Most delivery errors resolve themselves. If a node is intermittently reachable, the mesh will retry. For persistent "No Route" errors, check that intermediate Router nodes are online. ## Message Features ### Quick Chat Pre-configured messages for rapid communication: - Access via the Quick Chat button in the message input area - Choose from built-in phrases or custom messages - Customize quick chat messages in **Settings β Quick Chat** - Useful when typing is impractical (gloves, small screen, urgent)  Each quick chat entry has a short **Name** (the button label), the **Message** it inserts, and an **Instantly send** toggle β when enabled, tapping the button sends the message immediately instead of placing it in the input field for editing:  The channel list shows each channel with its latest message preview. ### Searching Messages You can search the full history of any conversation directly from the chat screen: 1. Open a conversation (a channel or a direct message). 2. Tap the **search icon** in the top bar. 3. Type into the **Search messagesβ¦** field. The search runs as you type, across all stored messages in that conversation. 4. Use the **N / M** result counter and the **previous / next arrows** to jump between matches, which are highlighted in the conversation.  > π‘ **Tip:** Search is full-text and stays within the conversation you opened it from β it doesn't search across other channels or contacts. It matches against the messages already stored on your device, so it works fully offline. ### Message Bubbles Messages appear as chat bubbles β sent messages on the right, received messages on the left. Each bubble shows the sender, timestamp, and delivery status. Messages with replies include a quoted preview of the original message above the response. ### Text Formatting Messages support lightweight inline **Markdown**. Received messages render the styling with the syntax characters removed: Type | Syntax | Renders as | ------|--------|------------| Bold | `**bold**` | **bold** | Italic | `*italic*` | *italic* | Strikethrough | `~~strike~~` | ~~strike~~ | Inline code | `` `code` `` | monospace `code` | Link | `[label](https://example.com)` | a tappable **label** | When composing, focus the message field and type at least three characters to reveal a **formatting toolbar** below the input. Select text and tap a style to wrap it (tap again to remove it); with no selection, a style inserts an empty pair with the cursor between the markers. The link button opens a dialog to enter a URL. As you type, the draft styles live in the field while the underlying text keeps its Markdown characters. > π‘ **Tip:** Formatting is carried as literal characters on the mesh β the same bytes iOS sends. Clients that don't support Markdown (older apps, plain firmware clients) will show the raw `**`/`~~` characters. URLs, email addresses, and phone numbers are still auto-linked whether or not you use Markdown. ### Mentions Type `@` while composing to mention a node β a picker suggests matching contacts as you type. In a received message, a mention appears as a highlighted chip showing the node's name; tap it to jump straight to that node's detail page. ### Reactions React to messages with emoji: - **Long-press** a message to open the actions menu - Tap **Add Reaction** to choose an emoji - Reactions appear below the message bubble - Multiple users can react to the same message - React to your own messages or others' messages  > π‘ **Tip:** Reactions are lightweight β they use minimal mesh bandwidth compared to full text messages. ### Message Actions Long-press any message to access: - **Copy** β copy message text to clipboard - **Reply** β quote the message in your response - **React** β add an emoji reaction - **Translate** β translate a received message into your device language and toggle between the original and translated text (Google Play build only; uses on-device translation) - **Delete** β remove a message you sent (local deletion) ### Message Priority Messages are queued and transmitted based on priority: 1. Emergency/alert messages (highest) 2. Direct messages 3. Channel broadcasts (lowest) ### Message Limits - **Maximum length:** 200 bytes (approximately 200 characters for ASCII text) - The 200-byte cap applies to the in-app composer β the mesh payload limit itself is ~233 bytes, so messages from other senders (e.g., App Functions or Android Auto) may arrive slightly longer - **Rate limiting:** The mesh enforces airtime fairness; heavy message volume may be throttled - **Delivery:** Messages are retried automatically if no acknowledgment is received ## Best Practices - Use channels for group coordination - Use direct messages for private person-to-person communication - Keep messages short β mesh bandwidth is limited - Configure encryption for sensitive communications ## Related Topics - [Nodes](nodes) β tap a node to start a direct message - [Settings β Radio & User](settings-radio-user) β configure channel encryption and presets - [MQTT](mqtt) β bridge channel messages to the internet - [Channel configuration](https://meshtastic.org/docs/configuration/radio/channels) β detailed channel settings on meshtastic.org ---