{"id":46426521,"url":"https://github.com/freetakteam/lxmf-rs","last_synced_at":"2026-06-14T14:01:00.333Z","repository":{"id":334264849,"uuid":"1140710107","full_name":"FreeTAKTeam/LXMF-rs","owner":"FreeTAKTeam","description":"full port of Reticulum and LXMF to Rust with added SDK","archived":false,"fork":false,"pushed_at":"2026-06-13T23:03:50.000Z","size":7201,"stargazers_count":18,"open_issues_count":7,"forks_count":8,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-13T23:13:00.419Z","etag":null,"topics":["embedded","lxmf","reticulum","rust","sdk","zeromq"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"markqvist/LXMF","license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/FreeTAKTeam.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":".github/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"liberapay":"Reticulum","ko_fi":"markqvist","custom":"https://unsigned.io/donate"}},"created_at":"2026-01-23T16:47:26.000Z","updated_at":"2026-06-13T19:58:35.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/FreeTAKTeam/LXMF-rs","commit_stats":null,"previous_names":["freetakteam/lxmf-rs"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/FreeTAKTeam/LXMF-rs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FreeTAKTeam%2FLXMF-rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FreeTAKTeam%2FLXMF-rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FreeTAKTeam%2FLXMF-rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FreeTAKTeam%2FLXMF-rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FreeTAKTeam","download_url":"https://codeload.github.com/FreeTAKTeam/LXMF-rs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FreeTAKTeam%2FLXMF-rs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34323994,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-14T02:00:07.365Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["embedded","lxmf","reticulum","rust","sdk","zeromq"],"created_at":"2026-03-05T17:53:02.374Z","updated_at":"2026-06-14T14:01:00.326Z","avatar_url":"https://github.com/FreeTAKTeam.png","language":"Rust","funding_links":["https://liberapay.com/Reticulum","https://ko-fi.com/markqvist","https://unsigned.io/donate"],"categories":[],"sub_categories":[],"readme":"# LXMF-rs Monorepo\n\n[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/FreeTAKTeam/LXMF-rs)\n\nRust monorepo for LXMF and Reticulum with strict library/app boundaries and\nenterprise quality gates. The `0.4.0` line is a usable sub-1.0\ndaemon/product release with strong core protocol coverage, published crates,\nGitHub daemon bundles, and a typed ZeroMQ SDK integration foundation for\nREM/RCH clients; it is not a complete drop-in replacement for every Python\nReticulum/LXMF behavior.\n\n## Start Here\n\n- Contributor workflow: `CONTRIBUTING.md`\n- Current status and execution order: `docs/status/current-roadmap.md`\n- Release notes: `docs/release-notes-v0.4.0.md`\n- Docs map and retention rules: `docs/README.md`\n- SDK guide: `docs/sdk/README.md`\n- Support policy: `docs/contracts/support-policy.md`\n\n## Release Status\n\nCurrent release train: `0.4.0`.\n\nUse `docs/release-notes-v0.4.0.md` for the release summary and\n`docs/runbooks/release-readiness.md` for the release gate record. The\nrepository-level parity source of truth remains\n`docs/status/current-roadmap.md`; the detailed parity supplements are\n`docs/status/reticulum-parity-matrix.md` and\n`docs/status/lxmf-parity-matrix.md`.\n\nThe `0.4.0` release scope covers the Rust libraries, SDK entry points, `lxmd`,\n`reticulumd`, and `rns-tools`, plus host-native GitHub bundles for daemon\ndeployment. Its main release-train addition is the typed\n`ZmqPipelineBackendClient` path needed by REM/RCH for field preservation, peer\ndiscovery/capability metadata, durable direct chat, and propagation-first\ndelivery/recovery. Propagation interoperability and operational\nsubstitutability are usable but still partial. External-client compatibility\nclaims for Sideband, MeshChatX, Columba, or other third-party clients require\nseparate interop gate evidence.\n\n## Workspace Layout\n\n```text\nLXMF-rs/\n├── crates/\n│   ├── libs/\n│   │   ├── lxmf/\n│   │   ├── lxmf-core/\n│   │   ├── lxmf-sdk/\n│   │   ├── reticulum-rs/\n│   │   ├── rns-core/\n│   │   ├── rns-embedded-core/\n│   │   ├── rns-embedded-ffi/\n│   │   ├── rns-embedded-runtime/\n│   │   ├── rns-transport/\n│   │   ├── rns-rpc/\n│   │   └── test-support/\n│   ├── apps/\n│   │   ├── lxmf-cli/\n│   │   ├── reticulumd/\n│   │   └── rns-tools/\n├── docs/\n    ├── adr/\n    ├── architecture/\n    ├── contracts/\n    ├── fixtures/\n    ├── migrations/\n    ├── runbooks/\n    ├── schemas/\n    └── sdk/\n├── examples/\n├── tools/\n│   └── scripts/\n├── scripts/\n└── xtask/\n```\n\n`Cargo.toml` is the source of truth for active workspace members. Retired\nmigration-era crates are not kept in the repository surface.\n\n## Active Libraries\n\n- `lxmf-wire` (`crates/libs/lxmf-core`): message/payload/identity primitives.\n- `lxmf`: umbrella crate for `lxmf-sdk` and `lxmf-wire`.\n- `lxmf-sdk`: host-facing client API (`start/send/cancel/status/configure/poll/snapshot/shutdown`).\n- `rns-embedded-runtime`: node-centric embedded runtime facade with lifecycle, event, and managed `std` driver support.\n- `rns-embedded-ffi`: C ABI for embedded/manual-tick compatibility and the v1 node-centric API.\n- `rns-embedded-core`: shared embedded/runtime types and fixtures.\n- `reticulum-rs`: umbrella crate for the Reticulum stack crates.\n- `reticulum-rs-core` (`crates/libs/rns-core`): Reticulum cryptographic and packet primitives.\n- `reticulum-rs-transport` (`crates/libs/rns-transport`): transport + iface + receipt/resource API.\n- `reticulum-rs-rpc` (`crates/libs/rns-rpc`): JSON-RPC request/response/event contracts and bridges.\n- `test-support`: schema/fixture validation and integration-test helpers.\n\nPublished crates.io entry points:\n\n- `lxmf`\n- `lxmf-sdk`\n- `lxmf-wire`\n- `reticulum-rs`\n- `reticulum-rs-core`\n- `reticulum-rs-transport`\n- `reticulum-rs-rpc`\n\n## Published Crates\n\nMain entry points:\n\n- [`lxmf`](https://crates.io/crates/lxmf) ![Crates.io Version](https://img.shields.io/crates/v/lxmf) ([docs.rs](https://docs.rs/lxmf)): umbrella crate for LXMF wire types and the high-level SDK.\n- [`reticulum-rs`](https://crates.io/crates/reticulum-rs) ![Crates.io Version](https://img.shields.io/crates/v/reticulum-rs) ([docs.rs](https://docs.rs/reticulum-rs)): umbrella crate for the Reticulum stack crates.\n\nComponent crates:\n\n- [`lxmf-sdk`](https://crates.io/crates/lxmf-sdk) ![Crates.io Version](https://img.shields.io/crates/v/lxmf-sdk) ([docs.rs](https://docs.rs/lxmf-sdk)): high-level Rust SDK for LXMF clients.\n- [`lxmf-wire`](https://crates.io/crates/lxmf-wire) ![Crates.io Version](https://img.shields.io/crates/v/lxmf-wire) ([docs.rs](https://docs.rs/lxmf-wire)): LXMF wire format, message primitives, and identity helpers.\n- [`reticulum-rs-core`](https://crates.io/crates/reticulum-rs-core) ![Crates.io Version](https://img.shields.io/crates/v/reticulum-rs-core) ([docs.rs](https://docs.rs/reticulum-rs-core)): core Reticulum cryptographic and packet primitives.\n- [`reticulum-rs-transport`](https://crates.io/crates/reticulum-rs-transport) ![Crates.io Version](https://img.shields.io/crates/v/reticulum-rs-transport) ([docs.rs](https://docs.rs/reticulum-rs-transport)): transport, interface, receipt, and resource layers.\n- [`reticulum-rs-rpc`](https://crates.io/crates/reticulum-rs-rpc) ![Crates.io Version](https://img.shields.io/crates/v/reticulum-rs-rpc) ([docs.rs](https://docs.rs/reticulum-rs-rpc)): JSON-RPC request, response, event, and daemon bridge contracts.\n\n## Active Applications\n\n- `lxmf-cli`\n- `reticulumd`\n- `rns-tools`\n\n## Bootstrap\n\nRecommended:\n\n```bash\nmake bootstrap\n```\n\nDirect script form:\n\n```bash\n./tools/scripts/bootstrap-dev.sh\n```\n\nVerification-only mode:\n\n```bash\n./tools/scripts/bootstrap-dev.sh --check --skip-smoke\n```\n\n## Build and Validation\n\n```bash\ncargo check --workspace --all-targets\ncargo test --workspace\ncargo clippy --workspace --all-targets --all-features --no-deps -- -D warnings\ncargo doc --workspace --no-deps\n./tools/scripts/check-boundaries.sh\n```\n\nor via `xtask`:\n\n```bash\ncargo xtask ci\ncargo run -p xtask -- architecture-checks\ncargo run -p xtask -- sdk-docs-check\ncargo run -p xtask -- sdk-migration-check\ncargo xtask release-check\ncargo xtask package-daemon-bundle --version 0.4.0\ncargo xtask api-diff\ncargo xtask python-impl-bench-compare\ncargo xtask python-impl-bench-compare --profile report\ncargo xtask python-impl-bench-report\n```\n\nFor fast local iteration on one binary, prefer narrow commands:\n\n```bash\nmake check-bin PKG=lxmf-cli BIN=lxmd\nmake run-bin PKG=rns-tools BIN=rnsd ARGS=\"--help\"\nmake package-daemon-bundle VERSION=0.4.0\nmake python-lxmd-smoke\n```\n\n## Binaries\n\n- `lxmf-cli`\n- `lxmd`\n- `reticulumd`\n- `rnsd`, `rnx`\n\nRun examples:\n\n```bash\ncargo run -p lxmf-cli -- --help\ncargo run -p reticulumd -- --help\ncargo run -p rns-tools --bin rnx -- e2e --timeout-secs 20\n```\n\n## Documentation Entry Points\n\n- Docs map: `docs/README.md`\n- Current status: `docs/status/current-roadmap.md`\n- API surface and stability: `docs/lxmf-rs-api.md`\n- CLI quick reference: `docs/lxmf-cli.md`\n- Architecture overview: `docs/architecture/overview.md`\n- JSON and wire-field mapping: `docs/architecture/json-lxmf-fields.md`\n- Compatibility contract: `docs/contracts/compatibility-contract.md`\n- Compatibility matrix: `docs/contracts/compatibility-matrix.md`\n- Third-party compatibility kit: `docs/contracts/third-party-compatibility-kit.md`\n- Support and LTS policy: `docs/contracts/support-policy.md`\n- Extension registry: `docs/contracts/extension-registry.md`\n- RPC contract: `docs/contracts/rpc-contract.md`\n- Payload contract: `docs/contracts/payload-contract.md`\n- Historical performance comparison report: `docs/PerformancesComparison.html`\n- reticulumd operational deployment: `docs/runbooks/reticulumd-operational-deployment.md`\n- crates.io publish plan: `docs/runbooks/crates-io-publish-plan.md`\n- Release readiness: `docs/runbooks/release-readiness.md`\n\n## crates.io Consumers\n\nFor library consumers, prefer the published package names rather than the\nworkspace directory names:\n\n```toml\n[dependencies]\nlxmf = \"0.3.0\"\nreticulum-rs = \"0.2.0\"\n```\n\nOr depend on the component crates directly:\n\n```toml\n[dependencies]\nlxmf-sdk = \"0.2.1\"\nreticulum-rs-rpc = \"0.3.0\"\n```\n\n## SDK Guide\n\n- Guide index: `docs/sdk/README.md`\n- Quickstart: `docs/sdk/quickstart.md`\n- Profiles/configuration: `docs/sdk/configuration-profiles.md`\n- Config cookbook: `docs/runbooks/sdk-config-cookbook.md`\n- Lifecycle/events: `docs/sdk/lifecycle-and-events.md`\n- Remote mTLS: `docs/sdk/remote-mtls.md`\n- Delivery states: `docs/sdk/delivery-states.md`\n- Error handling: `docs/sdk/error-handling.md`\n- Advanced embedding: `docs/sdk/advanced-embedding.md`\n\n## Release Bundles\n\n`cargo xtask package-daemon-bundle` builds the host-native `lxmd` and\n`reticulumd` binaries, generates `lxmd.example.config`, copies `README.md`, and\nwrites a release archive under `target/release-bundles/`. The command emits\n`.zip` bundles on Windows and `.tar.gz` bundles on macOS/Linux.\n\nOn macOS, Gatekeeper may quarantine a downloaded release bundle because the\nproject does not currently ship signed/notarized binaries. If that happens,\nremove the quarantine attribute after extracting the archive:\n\n```bash\nxattr -dr com.apple.quarantine /path/to/lxmd-daemon-\u003cversion\u003e-macos-arm64\nchmod +x /path/to/lxmd-daemon-\u003cversion\u003e-macos-arm64/lxmd\nchmod +x /path/to/lxmd-daemon-\u003cversion\u003e-macos-arm64/reticulumd\n```\n\n## Embedded Node FFI\n\n- Header: `crates/libs/rns-embedded-ffi/include/rns_embedded_ffi.h`\n- Guide and example: `crates/libs/rns-embedded-ffi/README.md`\n- Stable core contract: lifecycle, status, capability probe, send/broadcast, subscriptions, structured errors\n- Compatibility surface: legacy manual tick, raw wire ingress/egress, low-level queueing\n- Extension surface: numeric extension IDs validated by `docs/fixtures/embedded/public-node-api-v1/extension-ids.json`\n- `v1` node-centric API: `rns_embedded_v1_node_new/start/stop/restart/get_status/send/broadcast/set_log_level/subscribe_events`\n- legacy compatibility API remains available for manual tick, raw wire ingress/egress, and low-level queueing\n\n## Governance\n\n- Security policy: `SECURITY.md`\n- Code ownership: `.github/CODEOWNERS`\n\n## Linux daemon setup (systemd)\n\nThe following installs a long-running `lxmd` service. `lxmd` also launches `reticulumd`, so a single unit is enough for most deployments.\n\n1. Install binaries (from source)\n\n```bash\ncargo build --release -p lxmf-cli -p reticulumd\nsudo install -m 0755 target/release/lxmd /usr/local/bin/lxmd\nsudo install -m 0755 target/release/reticulumd /usr/local/bin/reticulumd\n```\n\n2. Create a dedicated service user and daemon directories\n\n```bash\nsudo useradd --system --create-home --shell /usr/sbin/nologin lxmd\nsudo mkdir -p /etc/lxmf/lxmd /etc/lxmf/reticulumd /var/log/lxmf\nsudo chown -R lxmd:lxmd /etc/lxmf /var/log/lxmf\n```\n\n3. Create a starting config file for `lxmd`\n\n```bash\nsudo mkdir -p /etc/lxmf/lxmd\nsudo chown lxmd:lxmd /etc/lxmf/lxmd\nsudo -u lxmd /usr/local/bin/lxmd --exampleconfig \u003e /etc/lxmf/lxmd/config\nsudo chmod 600 /etc/lxmf/lxmd/config\n```\n\nOptional: set an explicit Reticulum config for `reticulumd` (instead of relying on generated defaults).\n\n```bash\nsudo cp crates/apps/reticulumd/examples/service-reference.toml /etc/lxmf/reticulumd/config.toml\nsudo chown lxmd:lxmd /etc/lxmf/reticulumd/config.toml\n```\n\n4. Install a systemd unit for the daemon\n\n```bash\nsudo tee /etc/systemd/system/lxmd.service \u003e /dev/null \u003c\u003c'EOF'\n[Unit]\nDescription=LXMF daemon (lxmd + reticulumd)\nAfter=network-online.target\nWants=network-online.target\n\n[Service]\nType=simple\nUser=lxmd\nGroup=lxmd\nWorkingDirectory=/etc/lxmf/lxmd\nExecStart=/usr/local/bin/lxmd --config /etc/lxmf/lxmd/config --rnsconfig /etc/lxmf/reticulumd/config.toml\nRestart=on-failure\nRestartSec=5\nStandardOutput=journal\nStandardError=journal\nEnvironment=RUST_LOG=info\n\n[Install]\nWantedBy=multi-user.target\nEOF\n```\n\nIf you are not using `/etc/lxmf/reticulumd/config.toml`, remove `--rnsconfig /etc/lxmf/reticulumd/config.toml` from `ExecStart` and run only with `--config`.\n\n5. Enable and start the service\n\n```bash\nsudo systemctl daemon-reload\nsudo systemctl enable --now lxmd.service\nsudo systemctl status lxmd.service --no-pager\n```\n\n6. Tail logs and verify health\n\n```bash\nsudo journalctl -u lxmd.service -f\n```\n\n## Using the official GitHub release binaries\n\nRelease artifacts are published on the GitHub releases page:\n\n[https://github.com/FreeTAKTeam/LXMF-rs/releases](https://github.com/FreeTAKTeam/LXMF-rs/releases)\n\nFor `v0.4.0`, use the release at:\n\n[https://github.com/FreeTAKTeam/LXMF-rs/releases/tag/v0.4.0](https://github.com/FreeTAKTeam/LXMF-rs/releases/tag/v0.4.0)\n\n1. Open the release page and download the package and matching `.sha256` file\n   for your platform.\n\n2. Linux/macOS\n\n```bash\nsha256sum -c lxmd-daemon-v0.4.0-linux-x64.tar.gz.sha256\ntar -xzf lxmd-daemon-v0.4.0-linux-x64.tar.gz\n\nsha256sum -c lxmd-daemon-v0.4.0-macos-arm64.tar.gz.sha256\ntar -xzf lxmd-daemon-v0.4.0-macos-arm64.tar.gz\n```\n\n3. Windows\n\n```powershell\nGet-FileHash .\\lxmd-daemon-v0.4.0-windows-x64.zip -Algorithm SHA256\nGet-Content .\\lxmd-daemon-v0.4.0-windows-x64.zip.sha256\nExpand-Archive .\\lxmd-daemon-v0.4.0-windows-x64.zip .\n```\n\n4. Run directly for validation\n\n```bash\n./lxmd --help\n./reticulumd --help\n```\n\n5. Generate a starter `lxmd` config and follow the same daemon setup flow as above\n\n```bash\n./lxmd --exampleconfig \u003e /tmp/lxmd.config\n```\n\nIf 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.\n\n## Notes\n\n- If `sccache` is installed and you want to use it, set\n  `RUSTC_WRAPPER=sccache` before building.\n- Cross-language benchmark configuration lives in\n  `tools/benchmarks/python_impl.toml`, and the operating runbook is\n  `docs/runbooks/python-impl-benchmarking.md`.\n- For daemon-level mixed-runtime smoke coverage, `make python-lxmd-smoke`\n  launches a Rust `lxmd` node and an installed Python `lxmd` node together.\n\n## License\n\nEPL\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffreetakteam%2Flxmf-rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffreetakteam%2Flxmf-rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffreetakteam%2Flxmf-rs/lists"}