RFC: Bounded local client app metadata storage#12
Open
gotnull wants to merge 1 commit into
Open
Conversation
Add an RFC for a bounded, local-node-only AdminMessage metadata store
for companion apps. The store is intended for small, non-secret
convenience metadata and avoids encouraging clients to overload
user-visible fields or unrelated configuration surfaces.
Each record is keyed by app_id (^[a-z0-9._-]{1,32}$), carries an opaque
payload up to 512 bytes plus a small schema/version integer and a
firmware-set timestamp, survives reboot, and never leaves the locally-
connected node. Capped at 4 records per node (worst-case ~2.3 KB).
Important caveat: namespaced, not owned. Firmware enforces shape and
capacity but does not authenticate which client is writing. Any
admin-capable client may overwrite or delete any app_id. Documented
explicitly throughout the RFC, with a do-not-store list for secrets,
identity keys, paid-entitlement state, and any data used for security/
routing/authentication/purchase decisions.
Wire-additive only: no breaking changes. buf format/lint/breaking
against master all pass. Native firmware tests pass clean against the
implementation drafted on local feature branches.
RFC PR placeholder Meshtastic/rfcs#0000 should be replaced with the
real PR number after the RFC PR is opened.
b08a798 to
db92426
Compare
This was referenced May 5, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Propose a small, bounded, local-node-only metadata store for Meshtastic companion applications, exposed through
AdminMessage. Each record is keyed by a short ASCIIapp_id, carries an opaque payload up to 512 bytes plus a small schema/version integer and a firmware-set timestamp, survives reboot, and never leaves the locally-connected node.The feature is intentionally namespaced, not owned: the firmware enforces shape and capacity, but it does NOT authenticate which companion app is writing. Any admin-capable client may overwrite or delete any
app_id. Clients must therefore treat stored payloads as untrusted, optional, and recoverable.Full RFC text in
rfcs/2026-05-05-client-app-data.md.Why an RFC
This change touches a frequently-edited proto (
admin.proto), introduces a small new on-disk file in the firmware's/prefstree, and lands a wire-additive surface that companion apps will rely on. The trust-model framing (namespaced, not owned) is also a design choice worth socializing before code lands. Surfacing it here so the maintainers can push back on:app_idget-miss sentinel (instead of a new status envelope)app_idnaming should be convention-only or registry-basedbefore implementation lands upstream.
Affected components
meshtastic/protobufs: additive (1 new top-level message, 1 new wrapper, 4 new oneof fields, nanopb sizing).buf format/lint/breakingagainstmasterall pass.meshtastic/firmware: 1 new module (ClientAppDataStore), 1 new/prefs/clientappdata.protofile, 4 new dispatch cases inAdminModule, 1 new init line inmain.cpp, 1 new file path constant inNodeDB.h. 27 new native tests. Twovirtualkeywords onNodeDB::loadProto/saveProtofor testability (mirrors the existingMockNodeDB::getMeshNode overrideprecedent intest_traffic_management).Linked PRs
Request for input
The full Unresolved Questions section of the RFC enumerates 11 open points. The most important ones for early maintainer feedback:
client_app_data, or should all operations be local-only?MESHTASTIC_EXCLUDE_CLIENT_APP_DATAcompile-out flag?app_idget-miss sentinel acceptable, or do you want to wait for a future broader admin-wide status-envelope model?session_passkeyis a node-minted nonce;admin_key[3]identifies operators, not apps). Adding one is out of scope for v1, but would change the trust model substantially.Happy to revise the RFC and the implementation PRs based on the discussion here.