An in-progress, implementation of the Reticulum Network Stack written in Javascript.
This implementation is extremely limited, will likely have breaking changes and is probably not what you should be using.
I am implementing this to learn the RNS stack at the protocol level, while writing it in a language I am very familiar with.
At this stage, I will only be working on the features I want to use, rather than building a complete alternative transport stack.
You should probably look at the official reference stack written in Python;
- Create a new Identity
- Load an existing Identity from Public Keys or Private Keys
- Connect with a
TCPClientInterface
to an existing RNSTCPServerInterface
- Listen for incoming announces
- Register a Destination
- Listen for inbound packets to a Destination
- Send outbound packets to a Destination
- Send and receive opportunistic LXMF messages over single packets
- Send and receive direct LXMF messages over an inbound Link
- Accept inbound Links to a Destination
- Create outbound Links to a Destination
- Close Links and listen for when they are closed by the other side
- Send and receive data packets over an established Link
npm install @liamcottle/rns.js
import { Reticulum, TCPClientInterface } from "@liamcottle/rns.js";
// create rns instance
const rns = new Reticulum();
// add interfaces
rns.addInterface(new TCPClientInterface("Test Net", "amsterdam.connect.reticulum.network", 4965));
rns.addInterface(new TCPClientInterface("Between the Borders", "reticulum.betweentheborders.com", 4242));
rns.addInterface(new TCPClientInterface("V0ltTech", "v0lttech.com", 4242));
// listen for announces
rns.on("announce", (event) => {
console.log(`Announce Received: ${event.announce.destinationHash.toString("hex")} is now ${event.hops + 1} hops away on interface [${event.interface_name}]`);
});
There's a few scripts in the examples folder for reference on what currently works.
- Make it work in web browsers by not using NodeJS specific APIs
- Implement websocket client to connect via web browsers
- Tidy up logic for sending packets and packet types
- Implement Link heartbeat packets
- Validate LXMF message signatures
- Only send packets to relevant interface. Some packets still send to all interfaces
- Implement Ratchets
- Implement Resources over Links
- Support LXMF messages over Link Resources
- Support LXMF stamps and tickets
- Implement rate limits
- Support being a Transport node
- https://reticulum.network
- https://github.com/markqvist/Reticulum
- https://github.com/markqvist/Reticulum/wiki/Wire-Packet-Formats
- https://gist.github.com/liamcottle/e85953bccd6a4f8b436ac4284b29af49
MIT