LXMF-rs Monorepo
Rust monorepo for LXMF and Reticulum with strict library/app boundaries and enterprise quality gates.
Start Here
- Contributor workflow:
CONTRIBUTING.md - Docs map and retention rules:
docs/README.md - SDK guide:
docs/sdk/README.md - Support policy:
docs/contracts/support-policy.md
Workspace Layout
LXMF-rs/
├── crates/
│ ├── libs/
│ │ ├── lxmf/
│ │ ├── lxmf-core/
│ │ ├── lxmf-sdk/
│ │ ├── reticulum-rs/
│ │ ├── rns-core/
│ │ ├── rns-embedded-core/
│ │ ├── rns-embedded-ffi/
│ │ ├── rns-embedded-runtime/
│ │ ├── rns-transport/
│ │ ├── rns-rpc/
│ │ └── test-support/
│ ├── apps/
│ │ ├── lxmf-cli/
│ │ ├── reticulumd/
│ │ └── rns-tools/
│ └── internal/
│ └── legacy crates kept outside the workspace
├── docs/
├── adr/
├── architecture/
├── contracts/
├── fixtures/
├── migrations/
├── runbooks/
├── schemas/
└── sdk/
├── examples/
├── tools/
│ └── scripts/
├── scripts/
├── xtask/
└── wrappers/
Cargo.toml is the source of truth for active workspace members. Some crate
directories are intentionally present on disk but excluded from the workspace.
Active Libraries
lxmf-wire(crates/libs/lxmf-core): message/payload/identity primitives.lxmf: umbrella crate forlxmf-sdkandlxmf-wire.lxmf-sdk: host-facing client API (start/send/cancel/status/configure/poll/snapshot/shutdown).rns-embedded-runtime: node-centric embedded runtime facade with lifecycle, event, and managedstddriver support.rns-embedded-ffi: C ABI for embedded/manual-tick compatibility and the v1 node-centric API.rns-embedded-core: shared embedded/runtime types and fixtures.reticulum-rs: umbrella crate for the Reticulum stack crates.reticulum-rs-core(crates/libs/rns-core): Reticulum cryptographic and packet primitives.reticulum-rs-transport(crates/libs/rns-transport): transport + iface + receipt/resource API.reticulum-rs-rpc(crates/libs/rns-rpc): RPC request/response/event contracts and bridges.test-support: schema/fixture validation and integration-test helpers.
Active Applications
lxmf-clireticulumdrns-tools
Bootstrap
Recommended:
Direct script form:
Verification-only mode:
Build and Validation
or via xtask:
For fast local iteration on one binary, prefer narrow commands:
Binaries
lxmf-clilxmdreticulumdrncp,rnid,rnir,rnodeconf,rnpath,rnpkg,rnprobe,rnsd,rnstatus,rnx
Run examples:
Documentation Entry Points
- Docs map:
docs/README.md - API surface and stability:
docs/lxmf-rs-api.md - CLI quick reference:
docs/lxmf-cli.md - Architecture overview:
docs/architecture/overview.md - JSON and wire-field mapping:
docs/architecture/json-lxmf-fields.md - Compatibility contract:
docs/contracts/compatibility-contract.md - Compatibility matrix:
docs/contracts/compatibility-matrix.md - Third-party compatibility kit:
docs/contracts/third-party-compatibility-kit.md - Support and LTS policy:
docs/contracts/support-policy.md - Extension registry:
docs/contracts/extension-registry.md - RPC contract:
docs/contracts/rpc-contract.md - Payload contract:
docs/contracts/payload-contract.md - crates.io publish plan:
docs/runbooks/crates-io-publish-plan.md - Release readiness:
docs/runbooks/release-readiness.md
SDK Guide
- Guide index:
docs/sdk/README.md - Quickstart:
docs/sdk/quickstart.md - Profiles/configuration:
docs/sdk/configuration-profiles.md - Config cookbook:
docs/runbooks/sdk-config-cookbook.md - Lifecycle/events:
docs/sdk/lifecycle-and-events.md - Advanced embedding:
docs/sdk/advanced-embedding.md
Release Bundles
cargo xtask package-daemon-bundle builds the host-native lxmd and
reticulumd binaries, generates lxmd.example.config, copies README.md, and
writes a release archive under target/release-bundles/. The command emits
.zip bundles on Windows and .tar.gz bundles on macOS/Linux.
On macOS, Gatekeeper may quarantine a downloaded release bundle because the project does not currently ship signed/notarized binaries. If that happens, remove the quarantine attribute after extracting the archive:
Embedded Node FFI
- Header:
crates/libs/rns-embedded-ffi/include/rns_embedded_ffi.h - Guide and example:
crates/libs/rns-embedded-ffi/README.md - Stable core contract: lifecycle, status, capability probe, send/broadcast, subscriptions, structured errors
- Compatibility surface: legacy manual tick, raw wire ingress/egress, low-level queueing
- Extension surface: numeric extension IDs validated by
docs/fixtures/embedded/public-node-api-v1/extension-ids.json v1node-centric API:rns_embedded_v1_node_new/start/stop/restart/get_status/send/broadcast/set_log_level/subscribe_events- legacy compatibility API remains available for manual tick, raw wire ingress/egress, and low-level queueing
Governance
- Security policy:
SECURITY.md - Code ownership:
.github/CODEOWNERS
Linux daemon setup (systemd)
The following installs a long-running lxmd service. lxmd also launches reticulumd, so a single unit is enough for most deployments.
- Install binaries (from source)
- Create a dedicated service user and daemon directories
- Create a starting config file for
lxmd
Optional: set an explicit Reticulum config for reticulumd (instead of relying on generated defaults).
- Install a systemd unit for the daemon
If you are not using /etc/lxmf/reticulumd/config.toml, remove --rnsconfig /etc/lxmf/reticulumd/config.toml from ExecStart and run only with --config.
- Enable and start the service
- Tail logs and verify health
Using the official GitHub release binaries
Latest release artifacts are published at:
https://github.com/FreeTAKTeam/LXMF-rs/releases
-
Open the release page and download the package for your platform.
-
Linux/macOS
- Windows
Expand-Archive lxmd-daemon-<version>-windows-x86_64.zip .
- Run directly for validation
- Generate a starter
lxmdconfig and follow the same daemon setup flow as above
If you are using Linux and the Linux daemon guide above, point --config at the downloaded config file and keep binaries in place via your package manager path or your custom install path.
Notes
- If
sccacheis installed and you want to use it, setRUSTC_WRAPPER=sccachebefore building. - Cross-language benchmark configuration lives in
tools/benchmarks/python_impl.toml, and the operating runbook isdocs/runbooks/python-impl-benchmarking.md. - For daemon-level mixed-runtime smoke coverage,
make python-lxmd-smokelaunches a Rustlxmdnode and an installed Pythonlxmdnode together.
License
MIT