Unified Styrene library and headless daemon for RNS/LXMF mesh networking
Project description
styrened
Daemon, library, and TUI for Reticulum mesh networks.
Overview
styrened is the core of the Styrene mesh networking stack. It provides a headless daemon for edge devices, a terminal UI for interactive fleet management, and a Python library for building mesh applications on RNS/LXMF.
Key Features:
- Mesh daemon — headless operation on edge devices (Raspberry Pi, NixOS, containers)
- Terminal UI — full-featured TUI for fleet management, chat, device provisioning
- RPC over LXMF — remote device management (status, exec, reboot, config)
- Device discovery — automatic mesh topology tracking
- Auto-reply — automated message responses with cooldown
- Direct links — point-to-point RNS links for status queries and speedtests
- Mesh VPN — WireGuard tunnels bootstrapped over LXMF (IPv6 ULA addressing)
- HTTP API (optional) — REST/WebSocket endpoints for external integration
- Nix flake — declarative NixOS deployment with OCI container builds
Installation
# Full stack: daemon + TUI (via meta-package)
pip install styrene
# Daemon only (minimal dependencies)
pip install styrened
# Daemon + TUI
pip install styrened[tui]
# All extras
pip install styrened[tui,web,metrics,yubikey]
Nix Flake
nix run github:styrene-lab/styrened
Container
docker pull ghcr.io/styrene-lab/styrened:latest
Usage
# Run daemon
styrened daemon
# Run TUI
styrene
# CLI tools
styrened devices # List discovered mesh devices
styrened devices -w 10 # Wait 10s for announces
styrened status # Local daemon health
styrened status <dest> # Query remote node
styrened send <dest> "hello" # Send message
styrened exec <dest> uptime # Remote command execution
styrened doctor # Installation diagnostics
styrened doctor --setup # Interactive setup wizard
styrened identity # Show local identity
Architecture
┌──────────────────────────────────────┐
│ styrened │
│ ├── tui/ Terminal UI │ pip install styrened[tui]
│ ├── services/ Business logic │
│ ├── protocols/ LXMF routing │
│ ├── rpc/ Remote mgmt │
│ ├── models/ Data models │
│ └── web/ HTTP API │ pip install styrened[web]
├──────────────────────────────────────┤
│ RNS + LXMF (Reticulum Stack) │
└──────────────────────────────────────┘
Async-first — all network operations use asyncio. The daemon runs an event loop with periodic tasks for announces, discovery, and mesh maintenance.
Protocol discrimination — LXMF messages are routed to handlers based on fields["protocol"], supporting chat (NomadNet/MeshChat), Styrene wire protocol, and VPN handshake messages.
Configuration
Config file: ~/.styrene/config.yaml
identity:
display_name: "My Node"
reticulum:
mode: standalone
interfaces:
peers:
- host: rns.styrene.io
port: 4242
rpc:
enabled: true
chat:
auto_reply_mode: template
auto_reply_message: "Automated node"
mesh_vpn:
enabled: false
gateway: false
Installation Extras
| Extra | Adds |
|---|---|
[tui] |
Terminal UI (textual, psutil) |
[web] |
HTTP API (fastapi, uvicorn) |
[metrics] |
Prometheus metrics |
[yubikey] |
YubiKey authentication |
Development
git clone https://github.com/styrene-lab/styrened
cd styrened
pip install -e ".[tui,dev]"
just test-unit # ~5s, 2200+ tests
just test # Full suite
make lint # ruff
make typecheck # mypy
make validate # lint + typecheck + test
Related Projects
- styrene-rs — Rust RNS/LXMF implementation (interoperable wire protocol)
- styrene-pypi — PyPI meta-package (
pip install styrene) - Reticulum — The underlying mesh networking stack
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file styrened-0.17.2.tar.gz.
File metadata
- Download URL: styrened-0.17.2.tar.gz
- Upload date:
- Size: 2.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
10d44de15d7c33d4cda45d3d3281adfd6c5e27d39755f6a1f109643a235eb52b
|
|
| MD5 |
e0a74f7a93d23a8a0efd3b7e32fdc343
|
|
| BLAKE2b-256 |
971a0cad85b27a2396af7befbfb89eac9204e4377296d4687843252c551408aa
|
File details
Details for the file styrened-0.17.2-py3-none-any.whl.
File metadata
- Download URL: styrened-0.17.2-py3-none-any.whl
- Upload date:
- Size: 824.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d3bb9c9aa42bca99d9cf15f9f2d103a42d4fa1c20dce90164afbdc36b42f045
|
|
| MD5 |
7b8fe54023514d8dc7ef9751858af05a
|
|
| BLAKE2b-256 |
143644e62cf76e9f4ea657cd99708d2e2fd1fb7772d649640196b8616e3be095
|