You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Show a node's user-authored status — a short "away message" a node broadcasts to the mesh ("Going to the farm.. to grow wheat.", "Battery Low", "Ready to mesh"). Clients display other nodes' status on the node card and in node details, and let the local node edit its own. Empty status renders nothing — no placeholder. It's untrusted user free text: show it verbatim, as plain text.
Let a node owner publish a short free-text status, and let every client show other nodes' status where their identity already appears — node list/card (glanceable) and node details (full). The local node edits its own status in a settings module.
Data model
Field
Type
Constraint
Notes
node_status
UTF‑8 string
max 80 bytes
Free text. Counted in bytes, not characters — emoji / non-Latin scripts eat the budget faster.
One status per node. Setting a new value replaces the old; clearing sends an empty string.
Optional / nullable. Treat empty and unset identically (see States).
Arrives either from the node's module config or as a broadcast node-status update — a current status can be known before the config is read.
Note
Capability gate — firmware ≥ 2.8.0. On older firmware the feature is unsupported: hide or disable the editor, don't show a broken/empty field.
Where it appears (read-only displays)
Both surfaces show another node's broadcast status. Editing happens only in the config editor.
Node list / node card (glanceable)
A single row directly beneath the node's name/role, only when status is non-empty.
Leading Notes glyph, ~16dp, low-emphasis (outline) tint — it labels the row, it isn't the content.
Status text in body/medium, standard on-surface content color — not node-identity tint, not status-indicator colors.
Clamp to 2 lines + ellipsis. Status must never grow the card without bound.
Node details (full, labeled)
A labeled detail row in the node-details surface, only when present, with the standard section divider above.
Label: "Status Message" · Value: the full status · same Notes glyph for continuity.
More room here — may show the full text rather than the 2-line clamp.
Consistency: the same Notes icon identifies the status on every surface and every client. Don't substitute a different glyph per platform.
Editing (config editor — local node only)
Screen title: "Status Message" · Section: "Status Message Config" · Field label: "The actual status string".
Single-line plain-text input; a trailing clear (×) appears only when non-empty.
Disabled while disconnected — editable only when connected to the node.
Prefill from the node's current broadcast status if no config value has been read yet, so the user edits the live status, not a blank.
Enforce the 80-byte ceiling at input; prefer a graceful limit / remaining-budget hint over silent truncation. Surface that the limit is bytes if multi-byte text overflows early.
States
State
Behavior
Set
Display per Where it appears.
Empty / unset / whitespace-only
Omit the row entirely — no icon, no label, no placeholder, no "—".
The leading Notes icon is decorative — hide it from assistive tech; the status text is the accessible content.
Node details exposes "Status Message" label + value as one readable pair.
Clear (×) needs an accessible label ("Clear").
Standard on-surface text color and body type — keep ≥ 4.5:1 contrast. Honor Dynamic Type / OS text scaling; the clamp is on line count, not a fixed height.
Localization & content
The field label, screen title, and "Status Message" detail label are localized chrome.
node_status is user content — never translate/transform/reflow it; display verbatim (subject only to truncation).
It's untrusted free text from the mesh — render as plain text, never markup/links/HTML; reuse the emoji/RTL handling used for message text.
Don't
Don't show a placeholder ("No status") or em-dash for empty status.
Don't color the text with node-identity tint or status-indicator colors.
Don't let status grow the card unbounded.
Don't expose the editor on firmware < 2.8.0 or while disconnected.
Don't render the value as anything but plain text.
📝 Status Message — client UI spec
Important
Show a node's user-authored status — a short "away message" a node broadcasts to the mesh ("Going to the farm.. to grow wheat.", "Battery Low", "Ready to mesh"). Clients display other nodes' status on the node card and in node details, and let the local node edit its own. Empty status renders nothing — no placeholder. It's untrusted user free text: show it verbatim, as plain text.
Tracking: design#115 · Firmware: 2.8 (
ModuleConfig.StatusMessageConfig+NodeStatusbroadcast) · Reference build: Meshtastic-Android — #4163 + #4577 + #5070 (merged)Goal
Let a node owner publish a short free-text status, and let every client show other nodes' status where their identity already appears — node list/card (glanceable) and node details (full). The local node edits its own status in a settings module.
Data model
node_statusNote
Capability gate — firmware ≥ 2.8.0. On older firmware the feature is unsupported: hide or disable the editor, don't show a broken/empty field.
Where it appears (read-only displays)
Both surfaces show another node's broadcast status. Editing happens only in the config editor.
Node list / node card (glanceable)
A single row directly beneath the node's name/role, only when status is non-empty.
Node details (full, labeled)
A labeled detail row in the node-details surface, only when present, with the standard section divider above.
Editing (config editor — local node only)
States
Accessibility
Localization & content
node_statusis user content — never translate/transform/reflow it; display verbatim (subject only to truncation).Don't
Reference strings (en)
status_messagestatus_message_confignode_status_summaryPer-client status