Packages

Elixir NIF wrapper for the Reticulum cryptographic mesh networking stack.

Current section

Files

Jump to
ex_reticulum CHANGELOG.md
Raw

CHANGELOG.md

# Changelog
## 0.2.0
### Added
- **Jason.Encoder** for all structs — `Identity`, `Destination`, `Link`, `Announce`, `LinkEvent`, and `ReceivedData` now encode to JSON with hex-encoded binary fields (address hashes, link IDs) instead of raw bytes.
- **`Identity.encrypt/2` and `Identity.decrypt/2`** — asymmetric encryption using X25519 ECDH key exchange with Fernet (AES-CBC + HMAC-SHA256). Encrypt to any identity's public key; decrypt with your private key.
- **`Identity.public_hex/1`** — returns the hex-encoded public key directly.
- **`Config.parse_file/1` and `Config.parse_string/1`** — parse RNS `~/.reticulum/config` INI files into interface tuples compatible with `Transport.add_interface/3`.
## Unreleased
### Fixed
- **Cargo dependency** — NIF crate now pulls `reticulum` from the GitHub repo instead of a broken local path dependency.
- **Event forwarders survive backpressure** — broadcast receivers for announces, link events, and data now handle `Lagged` by continuing instead of silently dying, preventing permanent event loss after bursts of >16 events.
- **Invalid subscription types return an error**`subscribe/3` and `unsubscribe/3` now return `{:error, :invalid_argument}` for unrecognized event types instead of crashing the transport GenServer.
- **`link_send/3` preserves `LinkClosed` reason** — sending on a closed link now returns `{:error, :link_closed}` instead of the generic `{:error, :packet_error}`.
### Documentation
- Documented that `add_interface/3` reports success before the interface has actually bound or connected (async retry behavior in the underlying Rust library).
- Updated README setup instructions to reflect the git dependency (no local Reticulum-rs checkout needed).