Updated github build

This commit is contained in:
Mark Qvist 2025-11-03 16:50:04 +01:00
parent 40a5b704b1
commit 7b3bfa99b6
36 changed files with 2679 additions and 2031 deletions

Binary file not shown.

Binary file not shown.

View file

@ -12,7 +12,7 @@ Standalone Reticulum Installation
If you simply want to install Reticulum and related utilities on a system, If you simply want to install Reticulum and related utilities on a system,
the easiest way is via the ``pip`` package manager: the easiest way is via the ``pip`` package manager:
.. code:: .. code:: shell
pip install rns pip install rns
@ -23,9 +23,18 @@ of your system with a command like ``sudo apt install python3-pip``,
You can also dowload the Reticulum release wheels from GitHub, or other release channels, You can also dowload the Reticulum release wheels from GitHub, or other release channels,
and install them offline using ``pip``: and install them offline using ``pip``:
.. code:: .. code:: shell
pip install ./rns-0.5.1-py3-none-any.whl pip install ./rns-1.0.1-py3-none-any.whl
On platforms that limit user package installation via ``pip``, you may need to manually
allow this using the ``--break-system-packages`` command line flag when installing. This
will not actually break any packages, unless you have installed Reticulum directly via
your operating system's package manager.
.. code:: shell
pip install rns --break-system-packages
For more detailed installation instructions, please see the For more detailed installation instructions, please see the
:ref:`Platform-Specific Install Notes<install-guides>` section. :ref:`Platform-Specific Install Notes<install-guides>` section.
@ -39,7 +48,7 @@ On some platforms, there may not be binary packages available for all dependenci
``pip`` installation may fail with an error message. In these cases, the issue can usually ``pip`` installation may fail with an error message. In these cases, the issue can usually
be resolved by installing the development essentials packages for your platform: be resolved by installing the development essentials packages for your platform:
.. code:: .. code:: shell
# Debian / Ubuntu / Derivatives # Debian / Ubuntu / Derivatives
sudo apt install build-essential sudo apt install build-essential
@ -245,17 +254,16 @@ easier setup, use TCP.
Connect to the Public Testnet Connect to the Public Testnet
=========================================== ===========================================
An experimental public testnet has been made accessible over both I2P and TCP. You can join it An experimental public testnet has been made accessible by volunteers in the community. You
by adding one of the following interfaces to your ``.reticulum/config`` file: can find interface definitions for adding to your ``.reticulum/config`` file on the
`Reticulum Website <https://reticulum.network/connect.html>`_ or the
`Community Wiki <https://github.com/markqvist/Reticulum/wiki/Community-Node-List>`_
.. code:: You can connect your devices or instances to one or more of these to gain access to any
Reticulum networks they are physically connected to. Simply add one or more interface
snippets to your config file in the ``[interface]`` section, like in the example below:
# TCP/IP interface to the RNS Amsterdam Hub .. code:: ini
[[RNS Testnet Amsterdam]]
type = TCPClientInterface
enabled = yes
target_host = amsterdam.connect.reticulum.network
target_port = 4965
# TCP/IP interface to the BetweenTheBorders Hub (community-provided) # TCP/IP interface to the BetweenTheBorders Hub (community-provided)
[[RNS Testnet BetweenTheBorders]] [[RNS Testnet BetweenTheBorders]]
@ -264,11 +272,11 @@ by adding one of the following interfaces to your ``.reticulum/config`` file:
target_host = reticulum.betweentheborders.com target_host = reticulum.betweentheborders.com
target_port = 4242 target_port = 4242
# Interface to Testnet I2P Hub
[[RNS Testnet I2P Hub]] .. tip::
type = I2PInterface Ideally, set up a Reticulum Transport Node that your own devices can reach locally, and then
enabled = yes connect that transport node to a couple of public entrypoints. This will provide efficient
peers = g3br23bvx3lq5uddcsjii74xgmn6y5q325ovrkq2zw2wbzbqgbuq.b32.i2p connections and redundancy in case any of them go down.
Many other Reticulum instances are connecting to this testnet, and you can also join it Many other Reticulum instances are connecting to this testnet, and you can also join it
via other entry points if you know them. There is absolutely no control over the network via other entry points if you know them. There is absolutely no control over the network
@ -276,13 +284,65 @@ topography, usage or what types of instances connect. It will also occasionally
to test various failure scenarios, and there are no availability or service guarantees. to test various failure scenarios, and there are no availability or service guarantees.
Expect weird things to happen on this network, as people experiment and try out things. Expect weird things to happen on this network, as people experiment and try out things.
It probably goes without saying, but *don't use the testnet entry-points as .. warning::
hardcoded or default interfaces in any applications you ship to users*. When It probably goes without saying, but *don't use the testnet entry-points as
shipping applications, the best practice is to provide your own default hardcoded or default interfaces in any applications you ship to users*. When
connectivity solutions, if needed and applicable, or in most cases, simply shipping applications, the best practice is to provide your own default
leave it up to the user which networks to connect to, and how. connectivity solutions, if needed and applicable, or in most cases, simply
leave it up to the user which networks to connect to, and how.
Hosting Public Entrypoints
===========================================
If you want to host a public (or private) entry-point to a Reticulum network over the
Internet, this section offers some helpful pointers. You will need a machine, physical or
virtual with a public IP address, that can be reached by other devices on the Internet.
The most efficient and performant way to host a connectable entry-point supporting many
users is to use the ``BackboneInterface``. This interface type is fully compatible with
the ``TCPClientInterface`` and ``TCPServerInterface`` types, but much faster and uses
less system resources, allowing your device to handle thousands of connections even on
small systems.
It is also important to set your connectable interface to ``gateway`` mode, since this
will greatly improve network convergence time and path resolution for anyone connecting
to your entry-point.
.. code:: ini
# This example demonstrates a backbone interface
# configured for acting as a gateway for users to
# connect to either a public or private network
[[Public Gateway]]
type = BackboneInterface
enabled = yes
mode = gateway
listen_on = 0.0.0.0
port = 4242
If instead you want to make a private entry-point from the Internet, you can use the
:ref:`IFAC name and passphrase options<interfaces-options>` to secure your interface with a network name and passphrase.
.. code:: ini
# A private entry-point requiring a pre-shared
# network name and passphrase to connect to.
[[Private Gateway]]
type = BackboneInterface
enabled = yes
mode = gateway
listen_on = 0.0.0.0
port = 4242
network_name = private_ret
passphrase = 2owjajquafIanPecAc
If you are hosting an entry-point on an operating system that does not support
``BackboneInterface``, you can use ``TCPServerInterface`` instead, although it will
not be as performant.
Adding Radio Interfaces Adding Radio Interfaces
============================================== ==============================================
Once you have Reticulum installed and working, you can add radio interfaces with Once you have Reticulum installed and working, you can add radio interfaces with
@ -349,7 +409,7 @@ If you want to participate in the development of Reticulum and associated
utilities, you'll want to get the latest source from GitHub. In that case, utilities, you'll want to get the latest source from GitHub. In that case,
don't use pip, but try this recipe: don't use pip, but try this recipe:
.. code:: .. code:: shell
# Install dependencies # Install dependencies
pip install cryptography pyserial pip install cryptography pyserial
@ -415,7 +475,7 @@ build into Termux. After that, you can use ``pip`` to install Reticulum.
From within Termux, execute the following: From within Termux, execute the following:
.. code:: .. code:: shell
# First, make sure indexes and packages are up to date. # First, make sure indexes and packages are up to date.
pkg update pkg update
@ -434,7 +494,7 @@ If for some reason the ``python-cryptography`` package is not available for
your platform via the Termux package manager, you can attempt to build it your platform via the Termux package manager, you can attempt to build it
locally on your device using the following command: locally on your device using the following command:
.. code:: .. code:: shell
# First, make sure indexes and packages are up to date. # First, make sure indexes and packages are up to date.
pkg update pkg update
@ -470,7 +530,7 @@ On some architectures, including ARM64, not all dependencies have precompiled
binaries. On such systems, you may need to install ``python3-dev`` (or similar) before binaries. On such systems, you may need to install ``python3-dev`` (or similar) before
installing Reticulum or programs that depend on Reticulum. installing Reticulum or programs that depend on Reticulum.
.. code:: .. code:: shell
# Install Python and development packages # Install Python and development packages
sudo apt update sudo apt update
@ -491,7 +551,7 @@ use the replacement ``pipx`` command instead, which places installed packages in
isolated environment. This should not negatively affect Reticulum, but will not work isolated environment. This should not negatively affect Reticulum, but will not work
for including and using Reticulum in your own scripts and programs. for including and using Reticulum in your own scripts and programs.
.. code:: .. code:: shell
# Install pipx # Install pipx
sudo apt install pipx sudo apt install pipx
@ -506,7 +566,7 @@ Alternatively, you can restore normal behaviour to ``pip`` by creating or editin
the configuration file located at ``~/.config/pip/pip.conf``, and adding the the configuration file located at ``~/.config/pip/pip.conf``, and adding the
following section: following section:
.. code:: text .. code:: ini
[global] [global]
break-system-packages = true break-system-packages = true
@ -514,7 +574,7 @@ following section:
For a one-shot installation of Reticulum, without globally enabling the ``break-system-packages`` For a one-shot installation of Reticulum, without globally enabling the ``break-system-packages``
option, you can use the following command: option, you can use the following command:
.. code:: text .. code:: shell
pip install rns --break-system-packages pip install rns --break-system-packages
@ -539,7 +599,7 @@ Python manually.
When Python and ``pip`` is available on your system, simply open a terminal window When Python and ``pip`` is available on your system, simply open a terminal window
and use one of the following commands: and use one of the following commands:
.. code:: .. code:: shell
# Install Reticulum and utilities with pip: # Install Reticulum and utilities with pip:
pip3 install rns pip3 install rns
@ -560,7 +620,7 @@ manually add your installed ``pip`` packages directory to your `PATH` environmen
variable, before you can use installed commands in your terminal. Usually, adding variable, before you can use installed commands in your terminal. Usually, adding
the following line to your shell init script (for example ``~/.zshrc``) will be enough: the following line to your shell init script (for example ``~/.zshrc``) will be enough:
.. code:: .. code:: shell
export PATH=$PATH:~/Library/Python/3.9/bin export PATH=$PATH:~/Library/Python/3.9/bin
@ -583,7 +643,7 @@ Reticulum and related utilities using the `opkg` package manager and `pip`.
To install Reticulum on OpenWRT, first log into a command line session, and To install Reticulum on OpenWRT, first log into a command line session, and
then use the following instructions: then use the following instructions:
.. code:: .. code:: shell
# Install dependencies # Install dependencies
opkg install python3 python3-pip python3-cryptography python3-pyserial opkg install python3 python3-pip python3-cryptography python3-pyserial
@ -620,7 +680,7 @@ don't always have packages available for some dependencies. If Python and the
`pip` package manager is not already installed, do that first, and then `pip` package manager is not already installed, do that first, and then
install Reticulum using `pip`. install Reticulum using `pip`.
.. code:: .. code:: shell
# Install dependencies # Install dependencies
sudo apt install python3 python3-pip python3-cryptography python3-pyserial sudo apt install python3 python3-pip python3-cryptography python3-pyserial
@ -646,7 +706,7 @@ On some architectures, including RISC-V, not all dependencies have precompiled
binaries. On such systems, you may need to install ``python3-dev`` (or similar) before binaries. On such systems, you may need to install ``python3-dev`` (or similar) before
installing Reticulum or programs that depend on Reticulum. installing Reticulum or programs that depend on Reticulum.
.. code:: .. code:: shell
# Install Python and development packages # Install Python and development packages
sudo apt update sudo apt update
@ -667,7 +727,7 @@ use the replacement ``pipx`` command instead, which places installed packages in
isolated environment. This should not negatively affect Reticulum, but will not work isolated environment. This should not negatively affect Reticulum, but will not work
for including and using Reticulum in your own scripts and programs. for including and using Reticulum in your own scripts and programs.
.. code:: .. code:: shell
# Install pipx # Install pipx
sudo apt install pipx sudo apt install pipx
@ -717,7 +777,7 @@ use the ``pip`` installer, or run the included Reticulum utility programs (such
After installing Python, open the command prompt or Windows Powershell, and type: After installing Python, open the command prompt or Windows Powershell, and type:
.. code:: .. code:: shell
pip install rns pip install rns

View file

@ -17,6 +17,9 @@ for example the :ref:`PipeInterface<interfaces-pipe>` or the :ref:`TCPClientInte
in combination with code like `TCP KISS Server <https://github.com/simplyequipped/tcpkissserver>`_ in combination with code like `TCP KISS Server <https://github.com/simplyequipped/tcpkissserver>`_
by `simplyequipped <https://github.com/simplyequipped>`_. by `simplyequipped <https://github.com/simplyequipped>`_.
It is also very easy to write and load :ref:`custom interface modules<interfaces-custom>`
into Reticulum, allowing you to communicate with more or less anything you can think of.
While this broad support and flexibility is very useful, an abundance of options While this broad support and flexibility is very useful, an abundance of options
can sometimes make it difficult to know where to begin, especially when you are can sometimes make it difficult to know where to begin, especially when you are
starting from scratch. starting from scratch.
@ -232,7 +235,7 @@ LilyGO T-Echo
Heltec T114 Heltec T114
""""""""""" """""""""""
- **Transceiver IC** Semtech SX1262 or SX1268 - **Transceiver IC** Semtech SX1262 or SX1268
- **Device Platform** ESP32 - **Device Platform** nRF52
- **Manufacturer** `Heltec Automation <https://heltec.org>`_ - **Manufacturer** `Heltec Automation <https://heltec.org>`_
------------ ------------

View file

@ -25,8 +25,8 @@ to participate in the development of Reticulum itself.
hardware hardware
interfaces interfaces
networks networks
examples
support support
examples
.. toctree:: .. toctree::
:maxdepth: 2 :maxdepth: 2

View file

@ -39,6 +39,11 @@ nodes over any kind of local Ethernet or WiFi-based medium. Even though it uses
discovery, and UDP for packet transport, it **does not** need any functional IP discovery, and UDP for packet transport, it **does not** need any functional IP
infrastructure like routers or DHCP servers, on your physical network. infrastructure like routers or DHCP servers, on your physical network.
.. warning::
If you have **firewall** software running on your computer, it may block traffic
required for ``AutoInterface`` to work. If this is the case, you will have to
allow UDP traffic on port ``29716`` and ``42671``.
As long as there is at least some sort of switching medium present between peers (a As long as there is at least some sort of switching medium present between peers (a
wired switch, a hub, a WiFi access point or similar, or simply two devices connected wired switch, a hub, a WiFi access point or similar, or simply two devices connected
directly by Ethernet cable), it will work without any configuration, setup or intermediary devices. directly by Ethernet cable), it will work without any configuration, setup or intermediary devices.
@ -55,7 +60,7 @@ current operating systems, both desktop and mobile.
most commonly seen on very cheap, ISP-supplied WiFi routers, and can sometimes most commonly seen on very cheap, ISP-supplied WiFi routers, and can sometimes
be turned off in the router configuration. be turned off in the router configuration.
.. code:: .. code:: ini
# This example demonstrates a bare-minimum setup # This example demonstrates a bare-minimum setup
# of an Auto Interface. It will allow communica- # of an Auto Interface. It will allow communica-
@ -99,7 +104,7 @@ autodiscover other Reticulum nodes within your selected Group ID. You can specif
the discovery scope by setting it to one of ``link``, ``admin``, ``site``, the discovery scope by setting it to one of ``link``, ``admin``, ``site``,
``organisation`` or ``global``. ``organisation`` or ``global``.
.. code:: .. code:: ini
[[Default Interface]] [[Default Interface]]
type = AutoInterface type = AutoInterface
@ -145,7 +150,7 @@ Listeners
The following examples illustrates various ways to set up ``BackboneInterface`` listeners. The following examples illustrates various ways to set up ``BackboneInterface`` listeners.
.. code:: .. code:: ini
# This example demonstrates a backbone interface # This example demonstrates a backbone interface
# that listens for incoming connections on the # that listens for incoming connections on the
@ -173,7 +178,7 @@ The following examples illustrates various ways to set up ``BackboneInterface``
If you are using the interface on a device which has both IPv4 and IPv6 addresses available, If you are using the interface on a device which has both IPv4 and IPv6 addresses available,
you can use the ``prefer_ipv6`` option to bind to the IPv6 address: you can use the ``prefer_ipv6`` option to bind to the IPv6 address:
.. code:: .. code:: ini
# This example demonstrates a backbone interface # This example demonstrates a backbone interface
# listening on the IPv6 address of a specified # listening on the IPv6 address of a specified
@ -188,7 +193,7 @@ you can use the ``prefer_ipv6`` option to bind to the IPv6 address:
To use the ``BackboneInterface`` over `Yggdrasil <https://yggdrasil-network.github.io/>`_, you To use the ``BackboneInterface`` over `Yggdrasil <https://yggdrasil-network.github.io/>`_, you
can simply specify the Yggdrasil ``tun`` device and a listening port, like so: can simply specify the Yggdrasil ``tun`` device and a listening port, like so:
.. code:: .. code:: ini
# This example demonstrates a backbone interface # This example demonstrates a backbone interface
# listening for connections over Yggdrasil. # listening for connections over Yggdrasil.
@ -204,7 +209,7 @@ The following examples illustrates various ways to connect to remote ``BackboneI
As noted above, ``BackboneInterface`` interfaces can also connect to remote ``TCPServerInterface``, As noted above, ``BackboneInterface`` interfaces can also connect to remote ``TCPServerInterface``,
and as such these interface types can be used interchangably. and as such these interface types can be used interchangably.
.. code:: .. code:: ini
# Here's an example of a backbone interface that # Here's an example of a backbone interface that
# connects to a remote listener. # connects to a remote listener.
@ -217,7 +222,7 @@ and as such these interface types can be used interchangably.
To connect to remotes over `Yggdrasil <https://yggdrasil-network.github.io/>`_, simply To connect to remotes over `Yggdrasil <https://yggdrasil-network.github.io/>`_, simply
specify the target Yggdrasil IPv6 address and port, like so: specify the target Yggdrasil IPv6 address and port, like so:
.. code:: .. code:: ini
[[Yggdrasil Remote]] [[Yggdrasil Remote]]
type = BackboneInterface type = BackboneInterface
@ -234,7 +239,7 @@ The TCP Server interface is suitable for allowing other peers to connect over
the Internet or private IPv4 and IPv6 networks. When a TCP server interface has been the Internet or private IPv4 and IPv6 networks. When a TCP server interface has been
configured, other Reticulum peers can connect to it with a TCP Client interface. configured, other Reticulum peers can connect to it with a TCP Client interface.
.. code:: .. code:: ini
# This example demonstrates a TCP server interface. # This example demonstrates a TCP server interface.
# It will listen for incoming connections on all IP # It will listen for incoming connections on all IP
@ -262,7 +267,7 @@ configured, other Reticulum peers can connect to it with a TCP Client interface.
If you are using the interface on a device which has both IPv4 and IPv6 addresses available, If you are using the interface on a device which has both IPv4 and IPv6 addresses available,
you can use the ``prefer_ipv6`` option to bind to the IPv6 address: you can use the ``prefer_ipv6`` option to bind to the IPv6 address:
.. code:: .. code:: ini
# This example demonstrates a TCP server interface. # This example demonstrates a TCP server interface.
# It will listen for incoming connections on the # It will listen for incoming connections on the
@ -278,7 +283,7 @@ you can use the ``prefer_ipv6`` option to bind to the IPv6 address:
To use the TCP Server Interface over `Yggdrasil <https://yggdrasil-network.github.io/>`_, you To use the TCP Server Interface over `Yggdrasil <https://yggdrasil-network.github.io/>`_, you
can simply specify the Yggdrasil ``tun`` device and a listening port, like so: can simply specify the Yggdrasil ``tun`` device and a listening port, like so:
.. code:: .. code:: ini
[[Yggdrasil TCP Server Interface]] [[Yggdrasil TCP Server Interface]]
type = TCPServerInterface type = TCPServerInterface
@ -315,7 +320,7 @@ The TCP interface types can also tolerate intermittency in the IP link layer.
This means that Reticulum will gracefully handle IP links that go up and down, This means that Reticulum will gracefully handle IP links that go up and down,
and restore connectivity after a failure, once the other end of a TCP interface reappears. and restore connectivity after a failure, once the other end of a TCP interface reappears.
.. code:: .. code:: ini
# Here's an example of a TCP Client interface. The # Here's an example of a TCP Client interface. The
# target_host can be a hostname or an IPv4 or IPv6 address. # target_host can be a hostname or an IPv4 or IPv6 address.
@ -328,7 +333,7 @@ and restore connectivity after a failure, once the other end of a TCP interface
To use the TCP Client Interface over `Yggdrasil <https://yggdrasil-network.github.io/>`_, simply To use the TCP Client Interface over `Yggdrasil <https://yggdrasil-network.github.io/>`_, simply
specify the target Yggdrasil IPv6 address and port, like so: specify the target Yggdrasil IPv6 address and port, like so:
.. code:: .. code:: ini
[[Yggdrasil TCP Client Interface]] [[Yggdrasil TCP Client Interface]]
type = TCPClientInterface type = TCPClientInterface
@ -340,7 +345,7 @@ It is also possible to use this interface type to connect via other programs
or hardware devices that expose a KISS interface on a TCP port, for example or hardware devices that expose a KISS interface on a TCP port, for example
software-based soundmodems. To do this, use the ``kiss_framing`` option: software-based soundmodems. To do this, use the ``kiss_framing`` option:
.. code:: .. code:: ini
# Here's an example of a TCP Client interface that connects # Here's an example of a TCP Client interface that connects
# to a software TNC soundmodem on a KISS over TCP port. # to a software TNC soundmodem on a KISS over TCP port.
@ -363,7 +368,7 @@ intermittent TCP links.
The TCP interfaces support tunneling over I2P, but to do so reliably, The TCP interfaces support tunneling over I2P, but to do so reliably,
you must use the i2p_tunneled option: you must use the i2p_tunneled option:
.. code:: .. code:: ini
[[TCP Client over I2P]] [[TCP Client over I2P]]
type = TCPClientInterface type = TCPClientInterface
@ -387,10 +392,10 @@ with all other peers on a local area network.
Using broadcast UDP traffic has performance implications, Using broadcast UDP traffic has performance implications,
especially on WiFi. If your goal is simply to enable easy communication especially on WiFi. If your goal is simply to enable easy communication
with all peers in your local Ethernet broadcast domain, the with all peers in your local Ethernet broadcast domain, the
:ref:`Auto Interface<interfaces-auto>` performs better, and is even :ref:`Auto Interface<interfaces-auto>` performs *much* better, and is even
easier to use. easier to use.
.. code:: .. code:: ini
# This example enables communication with other # This example enables communication with other
# local Reticulum peers over UDP. # local Reticulum peers over UDP.
@ -460,7 +465,7 @@ of the ``i2pd`` package. For more details about I2P, see the
When an I2P router is running on your system, you can simply add When an I2P router is running on your system, you can simply add
an I2P interface to Reticulum: an I2P interface to Reticulum:
.. code:: .. code:: ini
[[I2P]] [[I2P]]
type = I2PInterface type = I2PInterface
@ -477,7 +482,7 @@ also inspect the status of the interface using the ``rnstatus`` utility.
To connect to other Reticulum instances over I2P, just add a comma-separated To connect to other Reticulum instances over I2P, just add a comma-separated
list of I2P base32 addresses to the ``peers`` option of the interface: list of I2P base32 addresses to the ``peers`` option of the interface:
.. code:: .. code:: ini
[[I2P]] [[I2P]]
type = I2PInterface type = I2PInterface
@ -516,7 +521,7 @@ can be used, and offers full control over LoRa parameters.
varies widely around the world. It is your responsibility to be aware of any varies widely around the world. It is your responsibility to be aware of any
relevant regulation for your location, and to make decisions accordingly. relevant regulation for your location, and to make decisions accordingly.
.. code:: .. code:: ini
# Here's an example of how to add a LoRa interface # Here's an example of how to add a LoRa interface
# using the RNode LoRa transceiver. # using the RNode LoRa transceiver.
@ -608,7 +613,7 @@ Multi interface can be used to configure sub-interfaces individually.
varies widely around the world. It is your responsibility to be aware of any varies widely around the world. It is your responsibility to be aware of any
relevant regulation for your location, and to make decisions accordingly. relevant regulation for your location, and to make decisions accordingly.
.. code:: .. code:: ini
# Here's an example of how to add an RNode Multi interface # Here's an example of how to add an RNode Multi interface
# using the RNode LoRa transceiver. # using the RNode LoRa transceiver.
@ -724,7 +729,7 @@ Reticulum can be used over serial ports directly, or over any device with a
serial port, that will transparently pass data. Useful for communicating serial port, that will transparently pass data. Useful for communicating
directly over a wire-pair, or for using devices such as data radios and lasers. directly over a wire-pair, or for using devices such as data radios and lasers.
.. code:: .. code:: ini
[[Serial Interface]] [[Serial Interface]]
type = SerialInterface type = SerialInterface
@ -749,7 +754,7 @@ Using this interface, Reticulum can use any program as an interface via `stdin`
`stdout`. This can be used to easily create virtual interfaces, or to interface with `stdout`. This can be used to easily create virtual interfaces, or to interface with
custom hardware or other systems. custom hardware or other systems.
.. code:: .. code:: ini
[[Pipe Interface]] [[Pipe Interface]]
type = PipeInterface type = PipeInterface
@ -780,7 +785,7 @@ for station identification purposes.
varies widely around the world. It is your responsibility to be aware of any varies widely around the world. It is your responsibility to be aware of any
relevant regulation for your location, and to make decisions accordingly. relevant regulation for your location, and to make decisions accordingly.
.. code:: .. code:: ini
[[Packet Radio KISS Interface]] [[Packet Radio KISS Interface]]
type = KISSInterface type = KISSInterface
@ -848,7 +853,7 @@ beaconing functionality described above.
varies widely around the world. It is your responsibility to be aware of any varies widely around the world. It is your responsibility to be aware of any
relevant regulation for your location, and to make decisions accordingly. relevant regulation for your location, and to make decisions accordingly.
.. code:: .. code:: ini
[[Packet Radio AX.25 KISS Interface]] [[Packet Radio AX.25 KISS Interface]]
type = AX25KISSInterface type = AX25KISSInterface

View file

@ -53,7 +53,7 @@ The entire configuration of Reticulum is found in the ``~/.reticulum/config``
file. When Reticulum is first started on a new system, a basic, but fully functional file. When Reticulum is first started on a new system, a basic, but fully functional
configuration file is created. The default configuration looks like this: configuration file is created. The default configuration looks like this:
.. code:: .. code:: ini
# This is the default Reticulum config file. # This is the default Reticulum config file.
# You should probably edit it to include any additional, # You should probably edit it to include any additional,
@ -265,6 +265,7 @@ various configuration options, and interface configuration examples:
-v, --verbose -v, --verbose
-q, --quiet -q, --quiet
-s, --service rnsd is running as a service and should log to file -s, --service rnsd is running as a service and should log to file
-i, --interactive drop into interactive shell after initialisation
--exampleconfig print verbose configuration example to stdout and exit --exampleconfig print verbose configuration example to stdout and exit
--version show program's version number and exit --version show program's version number and exit
@ -436,31 +437,30 @@ Decrypt a file using the Reticulum Identity it was encrypted for:
options: options:
-h, --help show this help message and exit -h, --help show this help message and exit
--config path path to alternative Reticulum config directory --config path path to alternative Reticulum config directory
-i identity, --identity identity -i, --identity identity
hexadecimal Reticulum Destination hash or path to Identity file hexadecimal Reticulum identity or destination hash, or path to Identity file
-g path, --generate path -g, --generate file generate a new Identity
generate a new Identity -m, --import identity_data
import Reticulum identity in hex, base32 or base64 format
-x, --export export identity to hex, base32 or base64 format
-v, --verbose increase verbosity -v, --verbose increase verbosity
-q, --quiet decrease verbosity -q, --quiet decrease verbosity
-a aspects, --announce aspects -a, --announce aspects
announce a destination based on this Identity announce a destination based on this Identity
-H aspects, --hash aspects -H, --hash aspects show destination hashes for other aspects for this Identity
show destination hashes for other aspects for this Identity -e, --encrypt file encrypt file
-e path, --encrypt path -d, --decrypt file decrypt file
encrypt file -s, --sign path sign file
-d path, --decrypt path -V, --validate path validate signature
decrypt file -r, --read file input file path
-s path, --sign path sign file -w, --write file output file path
-V path, --validate path
validate signature
-r path, --read path input file path
-w path, --write path
output file path
-f, --force write output even if it overwrites existing files -f, --force write output even if it overwrites existing files
-R, --request request unknown Identities from the network -R, --request request unknown Identities from the network
-t seconds identity request timeout before giving up -t seconds identity request timeout before giving up
-p, --print-identity print identity info and exit -p, --print-identity print identity info and exit
-P, --print-private allow displaying private keys -P, --print-private allow displaying private keys
-b, --base64 Use base64-encoded input and output
-B, --base32 Use base32-encoded input and output
--version show program's version number and exit --version show program's version number and exit
@ -640,14 +640,18 @@ Or fetch a file from the remote system:
-q, --quiet decrease verbosity -q, --quiet decrease verbosity
-S, --silent disable transfer progress output -S, --silent disable transfer progress output
-l, --listen listen for incoming transfer requests -l, --listen listen for incoming transfer requests
-C, --no-compress disable automatic compression
-F, --allow-fetch allow authenticated clients to fetch files -F, --allow-fetch allow authenticated clients to fetch files
-f, --fetch fetch file from remote listener instead of sending -f, --fetch fetch file from remote listener instead of sending
-j path, --jail path restrict fetch requests to specified path -j, --jail path restrict fetch requests to specified path
-s, --save path save received files in specified path
-O, --overwrite Allow overwriting received files, instead of adding postfix
-b seconds announce interval, 0 to only announce at startup -b seconds announce interval, 0 to only announce at startup
-a allowed_hash allow this identity -a allowed_hash allow this identity (or add in ~/.rncp/allowed_identities)
-n, --no-auth accept requests from anyone -n, --no-auth accept requests from anyone
-p, --print-identity print identity and destination info and exit -p, --print-identity print identity and destination info and exit
-w seconds sender timeout before giving up -w seconds sender timeout before giving up
-P, --phy-rates display physical layer transfer rates
--version show program's version number and exit --version show program's version number and exit
@ -755,31 +759,36 @@ to create and provision new :ref:`RNodes<rnode-main>` from any supported hardwar
-i, --info Show device info -i, --info Show device info
-a, --autoinstall Automatic installation on various supported devices -a, --autoinstall Automatic installation on various supported devices
-u, --update Update firmware to the latest version -u, --update Update firmware to the latest version
-U, --force-update Update to specified firmware even if version matches -U, --force-update Update to specified firmware even if version matches or is older than installed version
or is older than installed version --fw-version version Use a specific firmware version for update or autoinstall
--fw-version version Use a specific firmware version for update or
autoinstall
--fw-url url Use an alternate firmware download URL --fw-url url Use an alternate firmware download URL
--nocheck Don't check for firmware updates online --nocheck Don't check for firmware updates online
-e, --extract Extract firmware from connected RNode for later use -e, --extract Extract firmware from connected RNode for later use
-E, --use-extracted Use the extracted firmware for autoinstallation or -E, --use-extracted Use the extracted firmware for autoinstallation or update
update
-C, --clear-cache Clear locally cached firmware files -C, --clear-cache Clear locally cached firmware files
--baud-flash baud_flash --baud-flash baud_flash
Set specific baud rate when flashing device. Default Set specific baud rate when flashing device. Default is 921600
is 921600
-N, --normal Switch device to normal mode -N, --normal Switch device to normal mode
-T, --tnc Switch device to TNC mode -T, --tnc Switch device to TNC mode
-b, --bluetooth-on Turn device bluetooth on -b, --bluetooth-on Turn device bluetooth on
-B, --bluetooth-off Turn device bluetooth off -B, --bluetooth-off Turn device bluetooth off
-p, --bluetooth-pair Put device into bluetooth pairing mode -p, --bluetooth-pair Put device into bluetooth pairing mode
-D i, --display i Set display intensity (0-255) -D, --display i Set display intensity (0-255)
-t, --timeout s Set display timeout in seconds, 0 to disable
-R, --rotation rotation
Set display rotation, valid values are 0 through 3
--display-addr byte Set display address as hex byte (00 - FF) --display-addr byte Set display address as hex byte (00 - FF)
--recondition-display
Start display reconditioning
--np i Set NeoPixel intensity (0-255)
--freq Hz Frequency in Hz for TNC mode --freq Hz Frequency in Hz for TNC mode
--bw Hz Bandwidth in Hz for TNC mode --bw Hz Bandwidth in Hz for TNC mode
--txp dBm TX power in dBm for TNC mode --txp dBm TX power in dBm for TNC mode
--sf factor Spreading factor for TNC mode (7 - 12) --sf factor Spreading factor for TNC mode (7 - 12)
--cr rate Coding rate for TNC mode (5 - 8) --cr rate Coding rate for TNC mode (5 - 8)
-x, --ia-enable Enable interference avoidance
-X, --ia-disable Disable interference avoidance
-c, --config Print device configuration
--eeprom-backup Backup EEPROM to file --eeprom-backup Backup EEPROM to file
--eeprom-dump Dump EEPROM to console --eeprom-dump Dump EEPROM to console
--eeprom-wipe Unlock and wipe EEPROM --eeprom-wipe Unlock and wipe EEPROM
@ -790,8 +799,8 @@ to create and provision new :ref:`RNodes<rnode-main>` from any supported hardwar
-r, --rom Bootstrap EEPROM without flashing firmware -r, --rom Bootstrap EEPROM without flashing firmware
-k, --key Generate a new signing key and exit -k, --key Generate a new signing key and exit
-S, --sign Display public part of signing key -S, --sign Display public part of signing key
-H FIRMWARE_HASH, --firmware-hash FIRMWARE_HASH -H, --firmware-hash FIRMWARE_HASH
Display installed firmware hash Set installed firmware hash
--platform platform Platform specification for device bootstrap --platform platform Platform specification for device bootstrap
--product product Product specification for device bootstrap --product product Product specification for device bootstrap
--model model Model code for device bootstrap --model model Model code for device bootstrap

View file

@ -1,12 +1,5 @@
/* /*
* basic.css
* ~~~~~~~~~
*
* Sphinx stylesheet -- basic theme. * Sphinx stylesheet -- basic theme.
*
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/ */
/* -- main layout ----------------------------------------------------------- */ /* -- main layout ----------------------------------------------------------- */
@ -115,15 +108,11 @@ img {
/* -- search page ----------------------------------------------------------- */ /* -- search page ----------------------------------------------------------- */
ul.search { ul.search {
margin: 10px 0 0 20px; margin-top: 10px;
padding: 0;
} }
ul.search li { ul.search li {
padding: 5px 0 5px 20px; padding: 5px 0;
background-image: url(file.png);
background-repeat: no-repeat;
background-position: 0 7px;
} }
ul.search li a { ul.search li a {
@ -237,6 +226,10 @@ a.headerlink {
visibility: hidden; visibility: hidden;
} }
a:visited {
color: #551A8B;
}
h1:hover > a.headerlink, h1:hover > a.headerlink,
h2:hover > a.headerlink, h2:hover > a.headerlink,
h3:hover > a.headerlink, h3:hover > a.headerlink,
@ -324,6 +317,7 @@ aside.sidebar {
p.sidebar-title { p.sidebar-title {
font-weight: bold; font-weight: bold;
} }
nav.contents, nav.contents,
aside.topic, aside.topic,
div.admonition, div.topic, blockquote { div.admonition, div.topic, blockquote {
@ -331,6 +325,7 @@ div.admonition, div.topic, blockquote {
} }
/* -- topics ---------------------------------------------------------------- */ /* -- topics ---------------------------------------------------------------- */
nav.contents, nav.contents,
aside.topic, aside.topic,
div.topic { div.topic {
@ -606,6 +601,7 @@ ol.simple p,
ul.simple p { ul.simple p {
margin-bottom: 0; margin-bottom: 0;
} }
aside.footnote > span, aside.footnote > span,
div.citation > span { div.citation > span {
float: left; float: left;
@ -667,6 +663,16 @@ dd {
margin-left: 30px; margin-left: 30px;
} }
.sig dd {
margin-top: 0px;
margin-bottom: 0px;
}
.sig dl {
margin-top: 0px;
margin-bottom: 0px;
}
dl > dd:last-child, dl > dd:last-child,
dl > dd:last-child > :last-child { dl > dd:last-child > :last-child {
margin-bottom: 0; margin-bottom: 0;

View file

@ -1,12 +1,5 @@
/* /*
* doctools.js
* ~~~~~~~~~~~
*
* Base JavaScript utilities for all Sphinx HTML documentation. * Base JavaScript utilities for all Sphinx HTML documentation.
*
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/ */
"use strict"; "use strict";

View file

@ -1,6 +1,5 @@
var DOCUMENTATION_OPTIONS = { const DOCUMENTATION_OPTIONS = {
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), VERSION: '1.0.1',
VERSION: '1.0.0',
LANGUAGE: 'en', LANGUAGE: 'en',
COLLAPSE_INDEX: false, COLLAPSE_INDEX: false,
BUILDER: 'html', BUILDER: 'html',

View file

@ -1,19 +1,12 @@
/* /*
* language_data.js
* ~~~~~~~~~~~~~~~~
*
* This script contains the language-specific data used by searchtools.js, * This script contains the language-specific data used by searchtools.js,
* namely the list of stopwords, stemmer, scorer and splitter. * namely the list of stopwords, stemmer, scorer and splitter.
*
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/ */
var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"];
/* Non-minified version is copied as a separate JS file, is available */ /* Non-minified version is copied as a separate JS file, if available */
/** /**
* Porter Stemmer * Porter Stemmer

View file

@ -3,85 +3,77 @@
.highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } .highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
.highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #ffffcc } .highlight .hll { background-color: #fdf2e2 }
.highlight { background: #f8f8f8; } .highlight { background: #f2f2f2; color: #1E1E1E }
.highlight .c { color: #8F5902; font-style: italic } /* Comment */ .highlight .c { color: #515151 } /* Comment */
.highlight .err { color: #A40000; border: 1px solid #EF2929 } /* Error */ .highlight .err { color: #D71835 } /* Error */
.highlight .g { color: #000 } /* Generic */ .highlight .k { color: #8045E5 } /* Keyword */
.highlight .k { color: #204A87; font-weight: bold } /* Keyword */ .highlight .l { color: #7F4707 } /* Literal */
.highlight .l { color: #000 } /* Literal */ .highlight .n { color: #1E1E1E } /* Name */
.highlight .n { color: #000 } /* Name */ .highlight .o { color: #163 } /* Operator */
.highlight .o { color: #CE5C00; font-weight: bold } /* Operator */ .highlight .p { color: #1E1E1E } /* Punctuation */
.highlight .x { color: #000 } /* Other */ .highlight .ch { color: #515151 } /* Comment.Hashbang */
.highlight .p { color: #000; font-weight: bold } /* Punctuation */ .highlight .cm { color: #515151 } /* Comment.Multiline */
.highlight .ch { color: #8F5902; font-style: italic } /* Comment.Hashbang */ .highlight .cp { color: #515151 } /* Comment.Preproc */
.highlight .cm { color: #8F5902; font-style: italic } /* Comment.Multiline */ .highlight .cpf { color: #515151 } /* Comment.PreprocFile */
.highlight .cp { color: #8F5902; font-style: italic } /* Comment.Preproc */ .highlight .c1 { color: #515151 } /* Comment.Single */
.highlight .cpf { color: #8F5902; font-style: italic } /* Comment.PreprocFile */ .highlight .cs { color: #515151 } /* Comment.Special */
.highlight .c1 { color: #8F5902; font-style: italic } /* Comment.Single */ .highlight .gd { color: #00749C } /* Generic.Deleted */
.highlight .cs { color: #8F5902; font-style: italic } /* Comment.Special */ .highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gd { color: #A40000 } /* Generic.Deleted */ .highlight .gh { color: #00749C } /* Generic.Heading */
.highlight .ge { color: #000; font-style: italic } /* Generic.Emph */ .highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .ges { color: #000; font-weight: bold; font-style: italic } /* Generic.EmphStrong */ .highlight .gu { color: #00749C } /* Generic.Subheading */
.highlight .gr { color: #EF2929 } /* Generic.Error */ .highlight .kc { color: #8045E5 } /* Keyword.Constant */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ .highlight .kd { color: #8045E5 } /* Keyword.Declaration */
.highlight .gi { color: #00A000 } /* Generic.Inserted */ .highlight .kn { color: #8045E5 } /* Keyword.Namespace */
.highlight .go { color: #000; font-style: italic } /* Generic.Output */ .highlight .kp { color: #8045E5 } /* Keyword.Pseudo */
.highlight .gp { color: #8F5902 } /* Generic.Prompt */ .highlight .kr { color: #8045E5 } /* Keyword.Reserved */
.highlight .gs { color: #000; font-weight: bold } /* Generic.Strong */ .highlight .kt { color: #7F4707 } /* Keyword.Type */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ .highlight .ld { color: #7F4707 } /* Literal.Date */
.highlight .gt { color: #A40000; font-weight: bold } /* Generic.Traceback */ .highlight .m { color: #7F4707 } /* Literal.Number */
.highlight .kc { color: #204A87; font-weight: bold } /* Keyword.Constant */ .highlight .s { color: #163 } /* Literal.String */
.highlight .kd { color: #204A87; font-weight: bold } /* Keyword.Declaration */ .highlight .na { color: #7F4707 } /* Name.Attribute */
.highlight .kn { color: #204A87; font-weight: bold } /* Keyword.Namespace */ .highlight .nb { color: #7F4707 } /* Name.Builtin */
.highlight .kp { color: #204A87; font-weight: bold } /* Keyword.Pseudo */ .highlight .nc { color: #00749C } /* Name.Class */
.highlight .kr { color: #204A87; font-weight: bold } /* Keyword.Reserved */ .highlight .no { color: #00749C } /* Name.Constant */
.highlight .kt { color: #204A87; font-weight: bold } /* Keyword.Type */ .highlight .nd { color: #7F4707 } /* Name.Decorator */
.highlight .ld { color: #000 } /* Literal.Date */ .highlight .ni { color: #163 } /* Name.Entity */
.highlight .m { color: #0000CF; font-weight: bold } /* Literal.Number */ .highlight .ne { color: #8045E5 } /* Name.Exception */
.highlight .s { color: #4E9A06 } /* Literal.String */ .highlight .nf { color: #00749C } /* Name.Function */
.highlight .na { color: #C4A000 } /* Name.Attribute */ .highlight .nl { color: #7F4707 } /* Name.Label */
.highlight .nb { color: #204A87 } /* Name.Builtin */ .highlight .nn { color: #1E1E1E } /* Name.Namespace */
.highlight .nc { color: #000 } /* Name.Class */ .highlight .nx { color: #1E1E1E } /* Name.Other */
.highlight .no { color: #000 } /* Name.Constant */ .highlight .py { color: #00749C } /* Name.Property */
.highlight .nd { color: #5C35CC; font-weight: bold } /* Name.Decorator */ .highlight .nt { color: #00749C } /* Name.Tag */
.highlight .ni { color: #CE5C00 } /* Name.Entity */ .highlight .nv { color: #D71835 } /* Name.Variable */
.highlight .ne { color: #C00; font-weight: bold } /* Name.Exception */ .highlight .ow { color: #8045E5 } /* Operator.Word */
.highlight .nf { color: #000 } /* Name.Function */ .highlight .pm { color: #1E1E1E } /* Punctuation.Marker */
.highlight .nl { color: #F57900 } /* Name.Label */ .highlight .w { color: #1E1E1E } /* Text.Whitespace */
.highlight .nn { color: #000 } /* Name.Namespace */ .highlight .mb { color: #7F4707 } /* Literal.Number.Bin */
.highlight .nx { color: #000 } /* Name.Other */ .highlight .mf { color: #7F4707 } /* Literal.Number.Float */
.highlight .py { color: #000 } /* Name.Property */ .highlight .mh { color: #7F4707 } /* Literal.Number.Hex */
.highlight .nt { color: #204A87; font-weight: bold } /* Name.Tag */ .highlight .mi { color: #7F4707 } /* Literal.Number.Integer */
.highlight .nv { color: #000 } /* Name.Variable */ .highlight .mo { color: #7F4707 } /* Literal.Number.Oct */
.highlight .ow { color: #204A87; font-weight: bold } /* Operator.Word */ .highlight .sa { color: #163 } /* Literal.String.Affix */
.highlight .pm { color: #000; font-weight: bold } /* Punctuation.Marker */ .highlight .sb { color: #163 } /* Literal.String.Backtick */
.highlight .w { color: #F8F8F8 } /* Text.Whitespace */ .highlight .sc { color: #163 } /* Literal.String.Char */
.highlight .mb { color: #0000CF; font-weight: bold } /* Literal.Number.Bin */ .highlight .dl { color: #163 } /* Literal.String.Delimiter */
.highlight .mf { color: #0000CF; font-weight: bold } /* Literal.Number.Float */ .highlight .sd { color: #163 } /* Literal.String.Doc */
.highlight .mh { color: #0000CF; font-weight: bold } /* Literal.Number.Hex */ .highlight .s2 { color: #163 } /* Literal.String.Double */
.highlight .mi { color: #0000CF; font-weight: bold } /* Literal.Number.Integer */ .highlight .se { color: #163 } /* Literal.String.Escape */
.highlight .mo { color: #0000CF; font-weight: bold } /* Literal.Number.Oct */ .highlight .sh { color: #163 } /* Literal.String.Heredoc */
.highlight .sa { color: #4E9A06 } /* Literal.String.Affix */ .highlight .si { color: #163 } /* Literal.String.Interpol */
.highlight .sb { color: #4E9A06 } /* Literal.String.Backtick */ .highlight .sx { color: #163 } /* Literal.String.Other */
.highlight .sc { color: #4E9A06 } /* Literal.String.Char */ .highlight .sr { color: #D71835 } /* Literal.String.Regex */
.highlight .dl { color: #4E9A06 } /* Literal.String.Delimiter */ .highlight .s1 { color: #163 } /* Literal.String.Single */
.highlight .sd { color: #8F5902; font-style: italic } /* Literal.String.Doc */ .highlight .ss { color: #00749C } /* Literal.String.Symbol */
.highlight .s2 { color: #4E9A06 } /* Literal.String.Double */ .highlight .bp { color: #7F4707 } /* Name.Builtin.Pseudo */
.highlight .se { color: #4E9A06 } /* Literal.String.Escape */ .highlight .fm { color: #00749C } /* Name.Function.Magic */
.highlight .sh { color: #4E9A06 } /* Literal.String.Heredoc */ .highlight .vc { color: #D71835 } /* Name.Variable.Class */
.highlight .si { color: #4E9A06 } /* Literal.String.Interpol */ .highlight .vg { color: #D71835 } /* Name.Variable.Global */
.highlight .sx { color: #4E9A06 } /* Literal.String.Other */ .highlight .vi { color: #D71835 } /* Name.Variable.Instance */
.highlight .sr { color: #4E9A06 } /* Literal.String.Regex */ .highlight .vm { color: #7F4707 } /* Name.Variable.Magic */
.highlight .s1 { color: #4E9A06 } /* Literal.String.Single */ .highlight .il { color: #7F4707 } /* Literal.Number.Integer.Long */
.highlight .ss { color: #4E9A06 } /* Literal.String.Symbol */
.highlight .bp { color: #3465A4 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #000 } /* Name.Function.Magic */
.highlight .vc { color: #000 } /* Name.Variable.Class */
.highlight .vg { color: #000 } /* Name.Variable.Global */
.highlight .vi { color: #000 } /* Name.Variable.Instance */
.highlight .vm { color: #000 } /* Name.Variable.Magic */
.highlight .il { color: #0000CF; font-weight: bold } /* Literal.Number.Integer.Long */
@media not print { @media not print {
body[data-theme="dark"] .highlight pre { line-height: 125%; } body[data-theme="dark"] .highlight pre { line-height: 125%; }
body[data-theme="dark"] .highlight td.linenos .normal { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } body[data-theme="dark"] .highlight td.linenos .normal { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,12 +1,5 @@
/* /*
* searchtools.js
* ~~~~~~~~~~~~~~~~
*
* Sphinx JavaScript utilities for the full-text search. * Sphinx JavaScript utilities for the full-text search.
*
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/ */
"use strict"; "use strict";
@ -20,7 +13,7 @@ if (typeof Scorer === "undefined") {
// and returns the new score. // and returns the new score.
/* /*
score: result => { score: result => {
const [docname, title, anchor, descr, score, filename] = result const [docname, title, anchor, descr, score, filename, kind] = result
return score return score
}, },
*/ */
@ -47,6 +40,14 @@ if (typeof Scorer === "undefined") {
}; };
} }
// Global search result kind enum, used by themes to style search results.
class SearchResultKind {
static get index() { return "index"; }
static get object() { return "object"; }
static get text() { return "text"; }
static get title() { return "title"; }
}
const _removeChildren = (element) => { const _removeChildren = (element) => {
while (element && element.lastChild) element.removeChild(element.lastChild); while (element && element.lastChild) element.removeChild(element.lastChild);
}; };
@ -57,16 +58,20 @@ const _removeChildren = (element) => {
const _escapeRegExp = (string) => const _escapeRegExp = (string) =>
string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
const _displayItem = (item, searchTerms) => { const _displayItem = (item, searchTerms, highlightTerms) => {
const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; const docBuilder = DOCUMENTATION_OPTIONS.BUILDER;
const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT;
const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX;
const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX;
const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY;
const contentRoot = document.documentElement.dataset.content_root;
const [docName, title, anchor, descr, score, _filename] = item; const [docName, title, anchor, descr, score, _filename, kind] = item;
let listItem = document.createElement("li"); let listItem = document.createElement("li");
// Add a class representing the item's type:
// can be used by a theme's CSS selector for styling
// See SearchResultKind for the class names.
listItem.classList.add(`kind-${kind}`);
let requestUrl; let requestUrl;
let linkUrl; let linkUrl;
if (docBuilder === "dirhtml") { if (docBuilder === "dirhtml") {
@ -75,28 +80,35 @@ const _displayItem = (item, searchTerms) => {
if (dirname.match(/\/index\/$/)) if (dirname.match(/\/index\/$/))
dirname = dirname.substring(0, dirname.length - 6); dirname = dirname.substring(0, dirname.length - 6);
else if (dirname === "index/") dirname = ""; else if (dirname === "index/") dirname = "";
requestUrl = docUrlRoot + dirname; requestUrl = contentRoot + dirname;
linkUrl = requestUrl; linkUrl = requestUrl;
} else { } else {
// normal html builders // normal html builders
requestUrl = docUrlRoot + docName + docFileSuffix; requestUrl = contentRoot + docName + docFileSuffix;
linkUrl = docName + docLinkSuffix; linkUrl = docName + docLinkSuffix;
} }
let linkEl = listItem.appendChild(document.createElement("a")); let linkEl = listItem.appendChild(document.createElement("a"));
linkEl.href = linkUrl + anchor; linkEl.href = linkUrl + anchor;
linkEl.dataset.score = score; linkEl.dataset.score = score;
linkEl.innerHTML = title; linkEl.innerHTML = title;
if (descr) if (descr) {
listItem.appendChild(document.createElement("span")).innerHTML = listItem.appendChild(document.createElement("span")).innerHTML =
" (" + descr + ")"; " (" + descr + ")";
// highlight search terms in the description
if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js
highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted"));
}
else if (showSearchSummary) else if (showSearchSummary)
fetch(requestUrl) fetch(requestUrl)
.then((responseData) => responseData.text()) .then((responseData) => responseData.text())
.then((data) => { .then((data) => {
if (data) if (data)
listItem.appendChild( listItem.appendChild(
Search.makeSearchSummary(data, searchTerms) Search.makeSearchSummary(data, searchTerms, anchor)
); );
// highlight search terms in the summary
if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js
highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted"));
}); });
Search.output.appendChild(listItem); Search.output.appendChild(listItem);
}; };
@ -108,27 +120,46 @@ const _finishSearch = (resultCount) => {
"Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories."
); );
else else
Search.status.innerText = _( Search.status.innerText = Documentation.ngettext(
`Search finished, found ${resultCount} page(s) matching the search query.` "Search finished, found one page matching the search query.",
); "Search finished, found ${resultCount} pages matching the search query.",
resultCount,
).replace('${resultCount}', resultCount);
}; };
const _displayNextItem = ( const _displayNextItem = (
results, results,
resultCount, resultCount,
searchTerms searchTerms,
highlightTerms,
) => { ) => {
// results left, load the summary and display it // results left, load the summary and display it
// this is intended to be dynamic (don't sub resultsCount) // this is intended to be dynamic (don't sub resultsCount)
if (results.length) { if (results.length) {
_displayItem(results.pop(), searchTerms); _displayItem(results.pop(), searchTerms, highlightTerms);
setTimeout( setTimeout(
() => _displayNextItem(results, resultCount, searchTerms), () => _displayNextItem(results, resultCount, searchTerms, highlightTerms),
5 5
); );
} }
// search finished, update title and status message // search finished, update title and status message
else _finishSearch(resultCount); else _finishSearch(resultCount);
}; };
// Helper function used by query() to order search results.
// Each input is an array of [docname, title, anchor, descr, score, filename, kind].
// Order the results by score (in opposite order of appearance, since the
// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically.
const _orderResultsByScoreThenName = (a, b) => {
const leftScore = a[4];
const rightScore = b[4];
if (leftScore === rightScore) {
// same score: sort alphabetically
const leftTitle = a[1].toLowerCase();
const rightTitle = b[1].toLowerCase();
if (leftTitle === rightTitle) return 0;
return leftTitle > rightTitle ? -1 : 1; // inverted is intentional
}
return leftScore > rightScore ? 1 : -1;
};
/** /**
* Default splitQuery function. Can be overridden in ``sphinx.search`` with a * Default splitQuery function. Can be overridden in ``sphinx.search`` with a
@ -152,13 +183,26 @@ const Search = {
_queued_query: null, _queued_query: null,
_pulse_status: -1, _pulse_status: -1,
htmlToText: (htmlString) => { htmlToText: (htmlString, anchor) => {
const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html');
htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); for (const removalQuery of [".headerlink", "script", "style"]) {
const docContent = htmlElement.querySelector('[role="main"]'); htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() });
if (docContent !== undefined) return docContent.textContent; }
if (anchor) {
const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`);
if (anchorContent) return anchorContent.textContent;
console.warn( console.warn(
"Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.`
);
}
// if anchor not specified or not found, fall back to main content
const docContent = htmlElement.querySelector('[role="main"]');
if (docContent) return docContent.textContent;
console.warn(
"Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template."
); );
return ""; return "";
}, },
@ -211,6 +255,7 @@ const Search = {
searchSummary.classList.add("search-summary"); searchSummary.classList.add("search-summary");
searchSummary.innerText = ""; searchSummary.innerText = "";
const searchList = document.createElement("ul"); const searchList = document.createElement("ul");
searchList.setAttribute("role", "list");
searchList.classList.add("search"); searchList.classList.add("search");
const out = document.getElementById("search-results"); const out = document.getElementById("search-results");
@ -231,16 +276,7 @@ const Search = {
else Search.deferQuery(query); else Search.deferQuery(query);
}, },
/** _parseQuery: (query) => {
* execute search (requires search index to be loaded)
*/
query: (query) => {
const filenames = Search._index.filenames;
const docNames = Search._index.docnames;
const titles = Search._index.titles;
const allTitles = Search._index.alltitles;
const indexEntries = Search._index.indexentries;
// stem the search terms and add them to the correct list // stem the search terms and add them to the correct list
const stemmer = new Stemmer(); const stemmer = new Stemmer();
const searchTerms = new Set(); const searchTerms = new Set();
@ -276,22 +312,40 @@ const Search = {
// console.info("required: ", [...searchTerms]); // console.info("required: ", [...searchTerms]);
// console.info("excluded: ", [...excludedTerms]); // console.info("excluded: ", [...excludedTerms]);
// array of [docname, title, anchor, descr, score, filename] return [query, searchTerms, excludedTerms, highlightTerms, objectTerms];
let results = []; },
/**
* execute search (requires search index to be loaded)
*/
_performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => {
const filenames = Search._index.filenames;
const docNames = Search._index.docnames;
const titles = Search._index.titles;
const allTitles = Search._index.alltitles;
const indexEntries = Search._index.indexentries;
// Collect multiple result groups to be sorted separately and then ordered.
// Each is an array of [docname, title, anchor, descr, score, filename, kind].
const normalResults = [];
const nonMainIndexResults = [];
_removeChildren(document.getElementById("search-progress")); _removeChildren(document.getElementById("search-progress"));
const queryLower = query.toLowerCase(); const queryLower = query.toLowerCase().trim();
for (const [title, foundTitles] of Object.entries(allTitles)) { for (const [title, foundTitles] of Object.entries(allTitles)) {
if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) {
for (const [file, id] of foundTitles) { for (const [file, id] of foundTitles) {
let score = Math.round(100 * queryLower.length / title.length) const score = Math.round(Scorer.title * queryLower.length / title.length);
results.push([ const boost = titles[file] === title ? 1 : 0; // add a boost for document titles
normalResults.push([
docNames[file], docNames[file],
titles[file] !== title ? `${titles[file]} > ${title}` : title, titles[file] !== title ? `${titles[file]} > ${title}` : title,
id !== null ? "#" + id : "", id !== null ? "#" + id : "",
null, null,
score, score + boost,
filenames[file], filenames[file],
SearchResultKind.title,
]); ]);
} }
} }
@ -300,46 +354,48 @@ const Search = {
// search for explicit entries in index directives // search for explicit entries in index directives
for (const [entry, foundEntries] of Object.entries(indexEntries)) { for (const [entry, foundEntries] of Object.entries(indexEntries)) {
if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) {
for (const [file, id] of foundEntries) { for (const [file, id, isMain] of foundEntries) {
let score = Math.round(100 * queryLower.length / entry.length) const score = Math.round(100 * queryLower.length / entry.length);
results.push([ const result = [
docNames[file], docNames[file],
titles[file], titles[file],
id ? "#" + id : "", id ? "#" + id : "",
null, null,
score, score,
filenames[file], filenames[file],
]); SearchResultKind.index,
];
if (isMain) {
normalResults.push(result);
} else {
nonMainIndexResults.push(result);
}
} }
} }
} }
// lookup as object // lookup as object
objectTerms.forEach((term) => objectTerms.forEach((term) =>
results.push(...Search.performObjectSearch(term, objectTerms)) normalResults.push(...Search.performObjectSearch(term, objectTerms))
); );
// lookup as search terms in fulltext // lookup as search terms in fulltext
results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms));
// let the scorer override scores with a custom scoring function // let the scorer override scores with a custom scoring function
if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); if (Scorer.score) {
normalResults.forEach((item) => (item[4] = Scorer.score(item)));
// now sort the results by score (in opposite order of appearance, since the nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item)));
// display function below uses pop() to retrieve items) and then
// alphabetically
results.sort((a, b) => {
const leftScore = a[4];
const rightScore = b[4];
if (leftScore === rightScore) {
// same score: sort alphabetically
const leftTitle = a[1].toLowerCase();
const rightTitle = b[1].toLowerCase();
if (leftTitle === rightTitle) return 0;
return leftTitle > rightTitle ? -1 : 1; // inverted is intentional
} }
return leftScore > rightScore ? 1 : -1;
}); // Sort each group of results by score and then alphabetically by name.
normalResults.sort(_orderResultsByScoreThenName);
nonMainIndexResults.sort(_orderResultsByScoreThenName);
// Combine the result groups in (reverse) order.
// Non-main index entries are typically arbitrary cross-references,
// so display them after other results.
let results = [...nonMainIndexResults, ...normalResults];
// remove duplicate search results // remove duplicate search results
// note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept
@ -353,14 +409,19 @@ const Search = {
return acc; return acc;
}, []); }, []);
results = results.reverse(); return results.reverse();
},
query: (query) => {
const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query);
const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms);
// for debugging // for debugging
//Search.lastresults = results.slice(); // a copy //Search.lastresults = results.slice(); // a copy
// console.info("search results:", Search.lastresults); // console.info("search results:", Search.lastresults);
// print the results // print the results
_displayNextItem(results, results.length, searchTerms); _displayNextItem(results, results.length, searchTerms, highlightTerms);
}, },
/** /**
@ -424,6 +485,7 @@ const Search = {
descr, descr,
score, score,
filenames[match[0]], filenames[match[0]],
SearchResultKind.object,
]); ]);
}; };
Object.keys(objects).forEach((prefix) => Object.keys(objects).forEach((prefix) =>
@ -451,22 +513,28 @@ const Search = {
// perform the search on the required terms // perform the search on the required terms
searchTerms.forEach((word) => { searchTerms.forEach((word) => {
const files = []; const files = [];
// find documents, if any, containing the query word in their text/title term indices
// use Object.hasOwnProperty to avoid mismatching against prototype properties
const arr = [ const arr = [
{ files: terms[word], score: Scorer.term }, { files: terms.hasOwnProperty(word) ? terms[word] : undefined, score: Scorer.term },
{ files: titleTerms[word], score: Scorer.title }, { files: titleTerms.hasOwnProperty(word) ? titleTerms[word] : undefined, score: Scorer.title },
]; ];
// add support for partial matches // add support for partial matches
if (word.length > 2) { if (word.length > 2) {
const escapedWord = _escapeRegExp(word); const escapedWord = _escapeRegExp(word);
if (!terms.hasOwnProperty(word)) {
Object.keys(terms).forEach((term) => { Object.keys(terms).forEach((term) => {
if (term.match(escapedWord) && !terms[word]) if (term.match(escapedWord))
arr.push({ files: terms[term], score: Scorer.partialTerm }); arr.push({ files: terms[term], score: Scorer.partialTerm });
}); });
}
if (!titleTerms.hasOwnProperty(word)) {
Object.keys(titleTerms).forEach((term) => { Object.keys(titleTerms).forEach((term) => {
if (term.match(escapedWord) && !titleTerms[word]) if (term.match(escapedWord))
arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); arr.push({ files: titleTerms[term], score: Scorer.partialTitle });
}); });
} }
}
// no match but word was a required one // no match but word was a required one
if (arr.every((record) => record.files === undefined)) return; if (arr.every((record) => record.files === undefined)) return;
@ -481,16 +549,16 @@ const Search = {
// set score for the word in each file // set score for the word in each file
recordFiles.forEach((file) => { recordFiles.forEach((file) => {
if (!scoreMap.has(file)) scoreMap.set(file, {}); if (!scoreMap.has(file)) scoreMap.set(file, new Map());
scoreMap.get(file)[word] = record.score; const fileScores = scoreMap.get(file);
fileScores.set(word, record.score);
}); });
}); });
// create the mapping // create the mapping
files.forEach((file) => { files.forEach((file) => {
if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) if (!fileMap.has(file)) fileMap.set(file, [word]);
fileMap.get(file).push(word); else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word);
else fileMap.set(file, [word]);
}); });
}); });
@ -522,7 +590,7 @@ const Search = {
break; break;
// select one (max) score for the file. // select one (max) score for the file.
const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); const score = Math.max(...wordList.map((w) => scoreMap.get(file).get(w)));
// add result to the result list // add result to the result list
results.push([ results.push([
docNames[file], docNames[file],
@ -531,6 +599,7 @@ const Search = {
null, null,
score, score,
filenames[file], filenames[file],
SearchResultKind.text,
]); ]);
} }
return results; return results;
@ -541,8 +610,8 @@ const Search = {
* search summary for a given text. keywords is a list * search summary for a given text. keywords is a list
* of stemmed words. * of stemmed words.
*/ */
makeSearchSummary: (htmlText, keywords) => { makeSearchSummary: (htmlText, keywords, anchor) => {
const text = Search.htmlToText(htmlText); const text = Search.htmlToText(htmlText, anchor);
if (text === "") return null; if (text === "") return null;
const textLower = text.toLowerCase(); const textLower = text.toLowerCase();

View file

@ -29,14 +29,19 @@ const _highlight = (node, addItems, text, className) => {
} }
span.appendChild(document.createTextNode(val.substr(pos, text.length))); span.appendChild(document.createTextNode(val.substr(pos, text.length)));
const rest = document.createTextNode(val.substr(pos + text.length));
parent.insertBefore( parent.insertBefore(
span, span,
parent.insertBefore( parent.insertBefore(
document.createTextNode(val.substr(pos + text.length)), rest,
node.nextSibling node.nextSibling
) )
); );
node.nodeValue = val.substr(0, pos); node.nodeValue = val.substr(0, pos);
/* There may be more occurrences of search term in this node. So call this
* function recursively on the remaining fragment.
*/
_highlight(rest, addItems, text, className);
if (isInSVG) { if (isInSVG) {
const rect = document.createElementNS( const rect = document.createElementNS(
@ -140,5 +145,10 @@ const SphinxHighlight = {
}, },
}; };
_ready(SphinxHighlight.highlightSearchWords); _ready(() => {
_ready(SphinxHighlight.initEscapeListener); /* Do not call highlightSearchWords() when we are on the search page.
* It will highlight words from the *previous* search query.
*/
if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords();
SphinxHighlight.initEscapeListener();
});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,25 +1,26 @@
<!doctype html> <!doctype html>
<html class="no-js" lang="en"> <html class="no-js" lang="en" data-content_root="./">
<head><meta charset="utf-8"/> <head><meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1"/> <meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Support Reticulum" href="support.html" /><link rel="prev" title="Building Networks" href="networks.html" /> <link rel="index" title="Index" href="genindex.html"><link rel="search" title="Search" href="search.html"><link rel="next" title="API Reference" href="reference.html"><link rel="prev" title="Support Reticulum" href="support.html">
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
<meta name="generator" content="sphinx-5.3.0, furo 2022.09.29.dev1"/> <!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
<title>Code Examples - Reticulum Network Stack 1.0.0 documentation</title> <title>Code Examples - Reticulum Network Stack 1.0.1 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" /> <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=189ec851f9bb375a2509b67be1f64f0cf212b702" /> <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" /> <link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" /> <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=8dab3a3b" />
<link rel="stylesheet" type="text/css" href="_static/custom.css" /> <link rel="stylesheet" type="text/css" href="_static/custom.css?v=bb3cebc5" />
<style> <style>
body { body {
--color-code-background: #f8f8f8; --color-code-background: #f2f2f2;
--color-code-foreground: black; --color-code-foreground: #1e1e1e;
} }
@media not print { @media not print {
@ -86,7 +87,7 @@
<symbol id="svg-sun" viewBox="0 0 24 24"> <symbol id="svg-sun" viewBox="0 0 24 24">
<title>Light mode</title> <title>Light mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
<circle cx="12" cy="12" r="5"></circle> <circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line> <line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line> <line x1="12" y1="21" x2="12" y2="23"></line>
@ -101,34 +102,73 @@
<symbol id="svg-moon" viewBox="0 0 24 24"> <symbol id="svg-moon" viewBox="0 0 24 24">
<title>Dark mode</title> <title>Dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
<path stroke="none" d="M0 0h24v24H0z" fill="none" /> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" /> <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
</svg> </svg>
</symbol> </symbol>
<symbol id="svg-sun-half" viewBox="0 0 24 24"> <symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
<title>Auto light/dark mode</title> <title>Auto light/dark, in light mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> class="icon-custom-derived-from-feather-sun-and-tabler-moon">
<circle cx="12" cy="12" r="9" /> <path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
<path d="M13 12h5" /> <line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
<path d="M13 15h4" /> <line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
<path d="M13 18h1" /> <line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
<path d="M13 9h4" /> <line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
<path d="M13 6h1" /> <line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
<circle cx="14.5" cy="9.55" r="3.6"/>
</svg>
</symbol>
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
<title>Auto light/dark, in dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
</svg>
</symbol>
<symbol id="svg-pencil" viewBox="0 0 24 24">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
<path d="M13.5 6.5l4 4" />
<path d="M20 21l2 -2l-2 -2" />
<path d="M17 17l-2 2l2 2" />
</svg>
</symbol>
<symbol id="svg-eye" viewBox="0 0 24 24">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
<path
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
<path d="M20 21l2 -2l-2 -2" />
<path d="M17 17l-2 2l2 2" />
</svg> </svg>
</symbol> </symbol>
</svg> </svg>
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation"> <input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc"> <input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
<label class="overlay sidebar-overlay" for="__navigation"> <label class="overlay sidebar-overlay" for="__navigation"></label>
<div class="visually-hidden">Hide navigation sidebar</div> <label class="overlay toc-overlay" for="__toc"></label>
</label>
<label class="overlay toc-overlay" for="__toc"> <a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
<div class="visually-hidden">Hide table of contents sidebar</div>
</label>
@ -136,38 +176,35 @@
<header class="mobile-header"> <header class="mobile-header">
<div class="header-left"> <div class="header-left">
<label class="nav-overlay-icon" for="__navigation"> <label class="nav-overlay-icon" for="__navigation">
<div class="visually-hidden">Toggle site navigation sidebar</div> <span class="icon"><svg><use href="#svg-menu"></use></svg></span>
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
</label> </label>
</div> </div>
<div class="header-center"> <div class="header-center">
<a href="index.html"><div class="brand">Reticulum Network Stack 1.0.0 documentation</div></a> <a href="index.html"><div class="brand">Reticulum Network Stack 1.0.1 documentation</div></a>
</div> </div>
<div class="header-right"> <div class="header-right">
<div class="theme-toggle-container theme-toggle-header"> <div class="theme-toggle-container theme-toggle-header">
<button class="theme-toggle"> <button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div> <svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg> <svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg> <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg> <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button> </button>
</div> </div>
<label class="toc-overlay-icon toc-header-icon" for="__toc"> <label class="toc-overlay-icon toc-header-icon" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div> <span class="icon"><svg><use href="#svg-toc"></use></svg></span>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label> </label>
</div> </div>
</header> </header>
<aside class="sidebar-drawer"> <aside class="sidebar-drawer">
<div class="sidebar-container"> <div class="sidebar-container">
<div class="sidebar-sticky"><a class="sidebar-brand centered" href="index.html"> <div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
<div class="sidebar-logo-container"> <div class="sidebar-logo-container">
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/> <img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
</div> </div>
<span class="sidebar-brand-text">Reticulum Network Stack 1.0.0 documentation</span> <span class="sidebar-brand-text">Reticulum Network Stack 1.0.1 documentation</span>
</a><form class="sidebar-search-container" method="get" action="search.html" role="search"> </a><form class="sidebar-search-container" method="get" action="search.html" role="search">
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search"> <input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
@ -183,8 +220,8 @@
<li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li> <li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li>
<li class="toctree-l1"><a class="reference internal" href="interfaces.html">Configuring Interfaces</a></li> <li class="toctree-l1"><a class="reference internal" href="interfaces.html">Configuring Interfaces</a></li>
<li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li> <li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li>
<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Code Examples</a></li>
<li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li> <li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li>
<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Code Examples</a></li>
</ul> </ul>
<ul> <ul>
<li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li> <li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li>
@ -208,25 +245,24 @@
</a> </a>
<div class="content-icon-container"> <div class="content-icon-container">
<div class="theme-toggle-container theme-toggle-content"> <div class="theme-toggle-container theme-toggle-content">
<button class="theme-toggle"> <button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div> <svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg> <svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg> <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg> <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button> </button>
</div> </div>
<label class="toc-overlay-icon toc-content-icon" for="__toc"> <label class="toc-overlay-icon toc-content-icon" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div> <span class="icon"><svg><use href="#svg-toc"></use></svg></span>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label> </label>
</div> </div>
<article role="main"> <article role="main" id="furo-main-content">
<section id="code-examples"> <section id="code-examples">
<span id="examples-main"></span><h1>Code Examples<a class="headerlink" href="#code-examples" title="Permalink to this heading">#</a></h1> <span id="examples-main"></span><h1>Code Examples<a class="headerlink" href="#code-examples" title="Link to this heading"></a></h1>
<p>A number of examples are included in the source distribution of Reticulum. <p>A number of examples are included in the source distribution of Reticulum.
You can use these examples to learn how to write your own programs.</p> You can use these examples to learn how to write your own programs.</p>
<section id="minimal"> <section id="minimal">
<span id="example-minimal"></span><h2>Minimal<a class="headerlink" href="#minimal" title="Permalink to this heading">#</a></h2> <span id="example-minimal"></span><h2>Minimal<a class="headerlink" href="#minimal" title="Link to this heading"></a></h2>
<p>The <em>Minimal</em> example demonstrates the bare-minimum setup required to connect to <p>The <em>Minimal</em> example demonstrates the bare-minimum setup required to connect to
a Reticulum network from your program. In about five lines of code, you will a Reticulum network from your program. In about five lines of code, you will
have the Reticulum Network Stack initialised, and ready to pass traffic in your have the Reticulum Network Stack initialised, and ready to pass traffic in your
@ -338,7 +374,7 @@ program.</p>
<p>This example can also be found at <a class="reference external" href="https://github.com/markqvist/Reticulum/blob/master/Examples/Minimal.py">https://github.com/markqvist/Reticulum/blob/master/Examples/Minimal.py</a>.</p> <p>This example can also be found at <a class="reference external" href="https://github.com/markqvist/Reticulum/blob/master/Examples/Minimal.py">https://github.com/markqvist/Reticulum/blob/master/Examples/Minimal.py</a>.</p>
</section> </section>
<section id="announce"> <section id="announce">
<span id="example-announce"></span><h2>Announce<a class="headerlink" href="#announce" title="Permalink to this heading">#</a></h2> <span id="example-announce"></span><h2>Announce<a class="headerlink" href="#announce" title="Link to this heading"></a></h2>
<p>The <em>Announce</em> example builds upon the previous example by exploring how to <p>The <em>Announce</em> example builds upon the previous example by exploring how to
announce a destination on the network, and how to let your program receive announce a destination on the network, and how to let your program receive
notifications about announces from relevant destinations.</p> notifications about announces from relevant destinations.</p>
@ -519,7 +555,7 @@ notifications about announces from relevant destinations.</p>
<p>This example can also be found at <a class="reference external" href="https://github.com/markqvist/Reticulum/blob/master/Examples/Announce.py">https://github.com/markqvist/Reticulum/blob/master/Examples/Announce.py</a>.</p> <p>This example can also be found at <a class="reference external" href="https://github.com/markqvist/Reticulum/blob/master/Examples/Announce.py">https://github.com/markqvist/Reticulum/blob/master/Examples/Announce.py</a>.</p>
</section> </section>
<section id="broadcast"> <section id="broadcast">
<span id="example-broadcast"></span><h2>Broadcast<a class="headerlink" href="#broadcast" title="Permalink to this heading">#</a></h2> <span id="example-broadcast"></span><h2>Broadcast<a class="headerlink" href="#broadcast" title="Link to this heading"></a></h2>
<p>The <em>Broadcast</em> example explores how to transmit plaintext broadcast messages <p>The <em>Broadcast</em> example explores how to transmit plaintext broadcast messages
over the network.</p> over the network.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1">##########################################################</span> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1">##########################################################</span>
@ -648,7 +684,7 @@ over the network.</p>
<p>This example can also be found at <a class="reference external" href="https://github.com/markqvist/Reticulum/blob/master/Examples/Broadcast.py">https://github.com/markqvist/Reticulum/blob/master/Examples/Broadcast.py</a>.</p> <p>This example can also be found at <a class="reference external" href="https://github.com/markqvist/Reticulum/blob/master/Examples/Broadcast.py">https://github.com/markqvist/Reticulum/blob/master/Examples/Broadcast.py</a>.</p>
</section> </section>
<section id="echo"> <section id="echo">
<span id="example-echo"></span><h2>Echo<a class="headerlink" href="#echo" title="Permalink to this heading">#</a></h2> <span id="example-echo"></span><h2>Echo<a class="headerlink" href="#echo" title="Link to this heading"></a></h2>
<p>The <em>Echo</em> example demonstrates communication between two destinations using <p>The <em>Echo</em> example demonstrates communication between two destinations using
the Packet interface.</p> the Packet interface.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1">##########################################################</span> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1">##########################################################</span>
@ -988,7 +1024,7 @@ the Packet interface.</p>
<p>This example can also be found at <a class="reference external" href="https://github.com/markqvist/Reticulum/blob/master/Examples/Echo.py">https://github.com/markqvist/Reticulum/blob/master/Examples/Echo.py</a>.</p> <p>This example can also be found at <a class="reference external" href="https://github.com/markqvist/Reticulum/blob/master/Examples/Echo.py">https://github.com/markqvist/Reticulum/blob/master/Examples/Echo.py</a>.</p>
</section> </section>
<section id="link"> <section id="link">
<span id="example-link"></span><h2>Link<a class="headerlink" href="#link" title="Permalink to this heading">#</a></h2> <span id="example-link"></span><h2>Link<a class="headerlink" href="#link" title="Link to this heading"></a></h2>
<p>The <em>Link</em> example explores establishing an encrypted link to a remote <p>The <em>Link</em> example explores establishing an encrypted link to a remote
destination, and passing traffic back and forth over the link.</p> destination, and passing traffic back and forth over the link.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1">##########################################################</span> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1">##########################################################</span>
@ -1286,7 +1322,7 @@ destination, and passing traffic back and forth over the link.</p>
<p>This example can also be found at <a class="reference external" href="https://github.com/markqvist/Reticulum/blob/master/Examples/Link.py">https://github.com/markqvist/Reticulum/blob/master/Examples/Link.py</a>.</p> <p>This example can also be found at <a class="reference external" href="https://github.com/markqvist/Reticulum/blob/master/Examples/Link.py">https://github.com/markqvist/Reticulum/blob/master/Examples/Link.py</a>.</p>
</section> </section>
<section id="example-identify"> <section id="example-identify">
<span id="identification"></span><h2>Identification<a class="headerlink" href="#example-identify" title="Permalink to this heading">#</a></h2> <span id="identification"></span><h2>Identification<a class="headerlink" href="#example-identify" title="Link to this heading"></a></h2>
<p>The <em>Identify</em> example explores identifying an intiator of a link, once <p>The <em>Identify</em> example explores identifying an intiator of a link, once
the link has been established.</p> the link has been established.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1">##########################################################</span> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1">##########################################################</span>
@ -1607,7 +1643,7 @@ the link has been established.</p>
<p>This example can also be found at <a class="reference external" href="https://github.com/markqvist/Reticulum/blob/master/Examples/Identify.py">https://github.com/markqvist/Reticulum/blob/master/Examples/Identify.py</a>.</p> <p>This example can also be found at <a class="reference external" href="https://github.com/markqvist/Reticulum/blob/master/Examples/Identify.py">https://github.com/markqvist/Reticulum/blob/master/Examples/Identify.py</a>.</p>
</section> </section>
<section id="requests-responses"> <section id="requests-responses">
<span id="example-request"></span><h2>Requests &amp; Responses<a class="headerlink" href="#requests-responses" title="Permalink to this heading">#</a></h2> <span id="example-request"></span><h2>Requests &amp; Responses<a class="headerlink" href="#requests-responses" title="Link to this heading"></a></h2>
<p>The <em>Request</em> example explores sending requests and receiving responses.</p> <p>The <em>Request</em> example explores sending requests and receiving responses.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1">##########################################################</span> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1">##########################################################</span>
<span class="c1"># This RNS example demonstrates how to perform requests #</span> <span class="c1"># This RNS example demonstrates how to perform requests #</span>
@ -1900,7 +1936,7 @@ the link has been established.</p>
<p>This example can also be found at <a class="reference external" href="https://github.com/markqvist/Reticulum/blob/master/Examples/Request.py">https://github.com/markqvist/Reticulum/blob/master/Examples/Request.py</a>.</p> <p>This example can also be found at <a class="reference external" href="https://github.com/markqvist/Reticulum/blob/master/Examples/Request.py">https://github.com/markqvist/Reticulum/blob/master/Examples/Request.py</a>.</p>
</section> </section>
<section id="channel"> <section id="channel">
<span id="example-channel"></span><h2>Channel<a class="headerlink" href="#channel" title="Permalink to this heading">#</a></h2> <span id="example-channel"></span><h2>Channel<a class="headerlink" href="#channel" title="Link to this heading"></a></h2>
<p>The <em>Channel</em> example explores using a <code class="docutils literal notranslate"><span class="pre">Channel</span></code> to send structured <p>The <em>Channel</em> example explores using a <code class="docutils literal notranslate"><span class="pre">Channel</span></code> to send structured
data between peers of a <code class="docutils literal notranslate"><span class="pre">Link</span></code>.</p> data between peers of a <code class="docutils literal notranslate"><span class="pre">Link</span></code>.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1">##########################################################</span> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1">##########################################################</span>
@ -2297,7 +2333,7 @@ data between peers of a <code class="docutils literal notranslate"><span class="
<p>This example can also be found at <a class="reference external" href="https://github.com/markqvist/Reticulum/blob/master/Examples/Channel.py">https://github.com/markqvist/Reticulum/blob/master/Examples/Channel.py</a>.</p> <p>This example can also be found at <a class="reference external" href="https://github.com/markqvist/Reticulum/blob/master/Examples/Channel.py">https://github.com/markqvist/Reticulum/blob/master/Examples/Channel.py</a>.</p>
</section> </section>
<section id="buffer"> <section id="buffer">
<h2>Buffer<a class="headerlink" href="#buffer" title="Permalink to this heading">#</a></h2> <h2>Buffer<a class="headerlink" href="#buffer" title="Link to this heading"></a></h2>
<p>The <em>Buffer</em> example explores using buffered readers and writers to send <p>The <em>Buffer</em> example explores using buffered readers and writers to send
binary data between peers of a <code class="docutils literal notranslate"><span class="pre">Link</span></code>.</p> binary data between peers of a <code class="docutils literal notranslate"><span class="pre">Link</span></code>.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1">##########################################################</span> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1">##########################################################</span>
@ -2627,7 +2663,7 @@ binary data between peers of a <code class="docutils literal notranslate"><span
<p>This example can also be found at <a class="reference external" href="https://github.com/markqvist/Reticulum/blob/master/Examples/Buffer.py">https://github.com/markqvist/Reticulum/blob/master/Examples/Buffer.py</a>.</p> <p>This example can also be found at <a class="reference external" href="https://github.com/markqvist/Reticulum/blob/master/Examples/Buffer.py">https://github.com/markqvist/Reticulum/blob/master/Examples/Buffer.py</a>.</p>
</section> </section>
<section id="filetransfer"> <section id="filetransfer">
<span id="example-filetransfer"></span><h2>Filetransfer<a class="headerlink" href="#filetransfer" title="Permalink to this heading">#</a></h2> <span id="example-filetransfer"></span><h2>Filetransfer<a class="headerlink" href="#filetransfer" title="Link to this heading"></a></h2>
<p>The <em>Filetransfer</em> example implements a basic file-server program that <p>The <em>Filetransfer</em> example implements a basic file-server program that
allow clients to connect and download files. The program uses the Resource allow clients to connect and download files. The program uses the Resource
interface to efficiently pass files of any size over a Reticulum <a class="reference internal" href="reference.html#api-link"><span class="std std-ref">Link</span></a>.</p> interface to efficiently pass files of any size over a Reticulum <a class="reference internal" href="reference.html#api-link"><span class="std std-ref">Link</span></a>.</p>
@ -3239,7 +3275,7 @@ interface to efficiently pass files of any size over a Reticulum <a class="refer
<p>This example can also be found at <a class="reference external" href="https://github.com/markqvist/Reticulum/blob/master/Examples/Filetransfer.py">https://github.com/markqvist/Reticulum/blob/master/Examples/Filetransfer.py</a>.</p> <p>This example can also be found at <a class="reference external" href="https://github.com/markqvist/Reticulum/blob/master/Examples/Filetransfer.py">https://github.com/markqvist/Reticulum/blob/master/Examples/Filetransfer.py</a>.</p>
</section> </section>
<section id="custom-interfaces"> <section id="custom-interfaces">
<span id="example-custominterface"></span><h2>Custom Interfaces<a class="headerlink" href="#custom-interfaces" title="Permalink to this heading">#</a></h2> <span id="example-custominterface"></span><h2>Custom Interfaces<a class="headerlink" href="#custom-interfaces" title="Link to this heading"></a></h2>
<p>The <em>ExampleInterface</em> demonstrates creating custom interfaces for Reticulum. <p>The <em>ExampleInterface</em> demonstrates creating custom interfaces for Reticulum.
Any number of custom interfaces can be loaded and utilised by Reticulum, and Any number of custom interfaces can be loaded and utilised by Reticulum, and
will be fully on-par with natively included interfaces, including all supported will be fully on-par with natively included interfaces, including all supported
@ -3552,23 +3588,23 @@ will be fully on-par with natively included interfaces, including all supported
<footer> <footer>
<div class="related-pages"> <div class="related-pages">
<a class="next-page" href="support.html"> <a class="next-page" href="reference.html">
<div class="page-info"> <div class="page-info">
<div class="context"> <div class="context">
<span>Next</span> <span>Next</span>
</div> </div>
<div class="title">Support Reticulum</div> <div class="title">API Reference</div>
</div> </div>
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg> <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
</a> </a>
<a class="prev-page" href="networks.html"> <a class="prev-page" href="support.html">
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg> <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
<div class="page-info"> <div class="page-info">
<div class="context"> <div class="context">
<span>Previous</span> <span>Previous</span>
</div> </div>
<div class="title">Building Networks</div> <div class="title">Support Reticulum</div>
</div> </div>
</a> </a>
@ -3576,18 +3612,16 @@ will be fully on-par with natively included interfaces, including all supported
<div class="bottom-of-page"> <div class="bottom-of-page">
<div class="left-details"> <div class="left-details">
<div class="copyright"> <div class="copyright">
Copyright &#169; 2023, Mark Qvist Copyright &#169; 2025, Mark Qvist
</div> </div>
Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and
<a href="https://github.com/pradyunsg/furo">Furo</a> <a href="https://github.com/pradyunsg/furo">Furo</a>
</div> </div>
<div class="right-details"> <div class="right-details">
<div class="icons">
</div> </div>
</div> </div>
</div>
</footer> </footer>
</div> </div>
@ -3626,14 +3660,11 @@ will be fully on-par with natively included interfaces, including all supported
</aside> </aside>
</div> </div>
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> </div><script src="_static/documentation_options.js?v=292eb321"></script>
<script src="_static/jquery.js"></script> <script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/underscore.js"></script> <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script> <script src="_static/scripts/furo.js?v=46bd48cc"></script>
<script src="_static/doctools.js"></script> <script src="_static/clipboard.min.js?v=a7894cd8"></script>
<script src="_static/sphinx_highlight.js"></script> <script src="_static/copybutton.js?v=f281be69"></script>
<script src="_static/scripts/furo.js"></script>
<script src="_static/clipboard.min.js"></script>
<script src="_static/copybutton.js"></script>
</body> </body>
</html> </html>

View file

@ -1,25 +1,26 @@
<!doctype html> <!doctype html>
<html class="no-js" lang="en"> <html class="no-js" lang="en" data-content_root="./">
<head><meta charset="utf-8"/> <head><meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1"/> <meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /> <link rel="index" title="Index" href="genindex.html"><link rel="search" title="Search" href="search.html">
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
<meta name="generator" content="sphinx-5.3.0, furo 2022.09.29.dev1"/> <!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
<title>An Explanation of Reticulum for Human Beings - Reticulum Network Stack 1.0.0 documentation</title> <title>An Explanation of Reticulum for Human Beings - Reticulum Network Stack 1.0.1 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" /> <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=189ec851f9bb375a2509b67be1f64f0cf212b702" /> <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" /> <link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" /> <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=8dab3a3b" />
<link rel="stylesheet" type="text/css" href="_static/custom.css" /> <link rel="stylesheet" type="text/css" href="_static/custom.css?v=bb3cebc5" />
<style> <style>
body { body {
--color-code-background: #f8f8f8; --color-code-background: #f2f2f2;
--color-code-foreground: black; --color-code-foreground: #1e1e1e;
} }
@media not print { @media not print {
@ -86,7 +87,7 @@
<symbol id="svg-sun" viewBox="0 0 24 24"> <symbol id="svg-sun" viewBox="0 0 24 24">
<title>Light mode</title> <title>Light mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
<circle cx="12" cy="12" r="5"></circle> <circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line> <line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line> <line x1="12" y1="21" x2="12" y2="23"></line>
@ -101,34 +102,73 @@
<symbol id="svg-moon" viewBox="0 0 24 24"> <symbol id="svg-moon" viewBox="0 0 24 24">
<title>Dark mode</title> <title>Dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
<path stroke="none" d="M0 0h24v24H0z" fill="none" /> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" /> <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
</svg> </svg>
</symbol> </symbol>
<symbol id="svg-sun-half" viewBox="0 0 24 24"> <symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
<title>Auto light/dark mode</title> <title>Auto light/dark, in light mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> class="icon-custom-derived-from-feather-sun-and-tabler-moon">
<circle cx="12" cy="12" r="9" /> <path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
<path d="M13 12h5" /> <line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
<path d="M13 15h4" /> <line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
<path d="M13 18h1" /> <line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
<path d="M13 9h4" /> <line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
<path d="M13 6h1" /> <line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
<circle cx="14.5" cy="9.55" r="3.6"/>
</svg>
</symbol>
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
<title>Auto light/dark, in dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
</svg>
</symbol>
<symbol id="svg-pencil" viewBox="0 0 24 24">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
<path d="M13.5 6.5l4 4" />
<path d="M20 21l2 -2l-2 -2" />
<path d="M17 17l-2 2l2 2" />
</svg>
</symbol>
<symbol id="svg-eye" viewBox="0 0 24 24">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
<path
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
<path d="M20 21l2 -2l-2 -2" />
<path d="M17 17l-2 2l2 2" />
</svg> </svg>
</symbol> </symbol>
</svg> </svg>
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation"> <input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc"> <input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
<label class="overlay sidebar-overlay" for="__navigation"> <label class="overlay sidebar-overlay" for="__navigation"></label>
<div class="visually-hidden">Hide navigation sidebar</div> <label class="overlay toc-overlay" for="__toc"></label>
</label>
<label class="overlay toc-overlay" for="__toc"> <a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
<div class="visually-hidden">Hide table of contents sidebar</div>
</label>
@ -136,38 +176,35 @@
<header class="mobile-header"> <header class="mobile-header">
<div class="header-left"> <div class="header-left">
<label class="nav-overlay-icon" for="__navigation"> <label class="nav-overlay-icon" for="__navigation">
<div class="visually-hidden">Toggle site navigation sidebar</div> <span class="icon"><svg><use href="#svg-menu"></use></svg></span>
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
</label> </label>
</div> </div>
<div class="header-center"> <div class="header-center">
<a href="index.html"><div class="brand">Reticulum Network Stack 1.0.0 documentation</div></a> <a href="index.html"><div class="brand">Reticulum Network Stack 1.0.1 documentation</div></a>
</div> </div>
<div class="header-right"> <div class="header-right">
<div class="theme-toggle-container theme-toggle-header"> <div class="theme-toggle-container theme-toggle-header">
<button class="theme-toggle"> <button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div> <svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg> <svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg> <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg> <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button> </button>
</div> </div>
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc"> <label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div> <span class="icon"><svg><use href="#svg-toc"></use></svg></span>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label> </label>
</div> </div>
</header> </header>
<aside class="sidebar-drawer"> <aside class="sidebar-drawer">
<div class="sidebar-container"> <div class="sidebar-container">
<div class="sidebar-sticky"><a class="sidebar-brand centered" href="index.html"> <div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
<div class="sidebar-logo-container"> <div class="sidebar-logo-container">
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/> <img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
</div> </div>
<span class="sidebar-brand-text">Reticulum Network Stack 1.0.0 documentation</span> <span class="sidebar-brand-text">Reticulum Network Stack 1.0.1 documentation</span>
</a><form class="sidebar-search-container" method="get" action="search.html" role="search"> </a><form class="sidebar-search-container" method="get" action="search.html" role="search">
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search"> <input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
@ -183,8 +220,8 @@
<li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li> <li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li>
<li class="toctree-l1"><a class="reference internal" href="interfaces.html">Configuring Interfaces</a></li> <li class="toctree-l1"><a class="reference internal" href="interfaces.html">Configuring Interfaces</a></li>
<li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li> <li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
<li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li> <li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
</ul> </ul>
<ul> <ul>
<li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li> <li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li>
@ -208,21 +245,20 @@
</a> </a>
<div class="content-icon-container"> <div class="content-icon-container">
<div class="theme-toggle-container theme-toggle-content"> <div class="theme-toggle-container theme-toggle-content">
<button class="theme-toggle"> <button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div> <svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg> <svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg> <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg> <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button> </button>
</div> </div>
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc"> <label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div> <span class="icon"><svg><use href="#svg-toc"></use></svg></span>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label> </label>
</div> </div>
<article role="main"> <article role="main" id="furo-main-content">
<section id="an-explanation-of-reticulum-for-human-beings"> <section id="an-explanation-of-reticulum-for-human-beings">
<h1>An Explanation of Reticulum for Human Beings<a class="headerlink" href="#an-explanation-of-reticulum-for-human-beings" title="Permalink to this heading">#</a></h1> <h1>An Explanation of Reticulum for Human Beings<a class="headerlink" href="#an-explanation-of-reticulum-for-human-beings" title="Link to this heading"></a></h1>
</section> </section>
</article> </article>
@ -236,18 +272,16 @@
<div class="bottom-of-page"> <div class="bottom-of-page">
<div class="left-details"> <div class="left-details">
<div class="copyright"> <div class="copyright">
Copyright &#169; 2023, Mark Qvist Copyright &#169; 2025, Mark Qvist
</div> </div>
Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and
<a href="https://github.com/pradyunsg/furo">Furo</a> <a href="https://github.com/pradyunsg/furo">Furo</a>
</div> </div>
<div class="right-details"> <div class="right-details">
<div class="icons">
</div> </div>
</div> </div>
</div>
</footer> </footer>
</div> </div>
@ -257,14 +291,11 @@
</aside> </aside>
</div> </div>
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> </div><script src="_static/documentation_options.js?v=292eb321"></script>
<script src="_static/jquery.js"></script> <script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/underscore.js"></script> <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script> <script src="_static/scripts/furo.js?v=46bd48cc"></script>
<script src="_static/doctools.js"></script> <script src="_static/clipboard.min.js?v=a7894cd8"></script>
<script src="_static/sphinx_highlight.js"></script> <script src="_static/copybutton.js?v=f281be69"></script>
<script src="_static/scripts/furo.js"></script>
<script src="_static/clipboard.min.js"></script>
<script src="_static/copybutton.js"></script>
</body> </body>
</html> </html>

View file

@ -1,23 +1,24 @@
<!doctype html> <!doctype html>
<html class="no-js" lang="en"> <html class="no-js" lang="en" data-content_root="./">
<head><meta charset="utf-8"/> <head><meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1"/> <meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="#" /><link rel="search" title="Search" href="search.html" /> <meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="#"><link rel="search" title="Search" href="search.html">
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
<meta name="generator" content="sphinx-5.3.0, furo 2022.09.29.dev1"/><title>Index - Reticulum Network Stack 1.0.0 documentation</title> <!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 --><title>Index - Reticulum Network Stack 1.0.1 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" /> <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=189ec851f9bb375a2509b67be1f64f0cf212b702" /> <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" /> <link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" /> <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=8dab3a3b" />
<link rel="stylesheet" type="text/css" href="_static/custom.css" /> <link rel="stylesheet" type="text/css" href="_static/custom.css?v=bb3cebc5" />
<style> <style>
body { body {
--color-code-background: #f8f8f8; --color-code-background: #f2f2f2;
--color-code-foreground: black; --color-code-foreground: #1e1e1e;
} }
@media not print { @media not print {
@ -84,7 +85,7 @@
<symbol id="svg-sun" viewBox="0 0 24 24"> <symbol id="svg-sun" viewBox="0 0 24 24">
<title>Light mode</title> <title>Light mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
<circle cx="12" cy="12" r="5"></circle> <circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line> <line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line> <line x1="12" y1="21" x2="12" y2="23"></line>
@ -99,34 +100,73 @@
<symbol id="svg-moon" viewBox="0 0 24 24"> <symbol id="svg-moon" viewBox="0 0 24 24">
<title>Dark mode</title> <title>Dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
<path stroke="none" d="M0 0h24v24H0z" fill="none" /> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" /> <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
</svg> </svg>
</symbol> </symbol>
<symbol id="svg-sun-half" viewBox="0 0 24 24"> <symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
<title>Auto light/dark mode</title> <title>Auto light/dark, in light mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> class="icon-custom-derived-from-feather-sun-and-tabler-moon">
<circle cx="12" cy="12" r="9" /> <path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
<path d="M13 12h5" /> <line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
<path d="M13 15h4" /> <line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
<path d="M13 18h1" /> <line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
<path d="M13 9h4" /> <line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
<path d="M13 6h1" /> <line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
<circle cx="14.5" cy="9.55" r="3.6"/>
</svg>
</symbol>
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
<title>Auto light/dark, in dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
</svg>
</symbol>
<symbol id="svg-pencil" viewBox="0 0 24 24">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
<path d="M13.5 6.5l4 4" />
<path d="M20 21l2 -2l-2 -2" />
<path d="M17 17l-2 2l2 2" />
</svg>
</symbol>
<symbol id="svg-eye" viewBox="0 0 24 24">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
<path
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
<path d="M20 21l2 -2l-2 -2" />
<path d="M17 17l-2 2l2 2" />
</svg> </svg>
</symbol> </symbol>
</svg> </svg>
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation"> <input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc"> <input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
<label class="overlay sidebar-overlay" for="__navigation"> <label class="overlay sidebar-overlay" for="__navigation"></label>
<div class="visually-hidden">Hide navigation sidebar</div> <label class="overlay toc-overlay" for="__toc"></label>
</label>
<label class="overlay toc-overlay" for="__toc"> <a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
<div class="visually-hidden">Hide table of contents sidebar</div>
</label>
@ -134,38 +174,35 @@
<header class="mobile-header"> <header class="mobile-header">
<div class="header-left"> <div class="header-left">
<label class="nav-overlay-icon" for="__navigation"> <label class="nav-overlay-icon" for="__navigation">
<div class="visually-hidden">Toggle site navigation sidebar</div> <span class="icon"><svg><use href="#svg-menu"></use></svg></span>
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
</label> </label>
</div> </div>
<div class="header-center"> <div class="header-center">
<a href="index.html"><div class="brand">Reticulum Network Stack 1.0.0 documentation</div></a> <a href="index.html"><div class="brand">Reticulum Network Stack 1.0.1 documentation</div></a>
</div> </div>
<div class="header-right"> <div class="header-right">
<div class="theme-toggle-container theme-toggle-header"> <div class="theme-toggle-container theme-toggle-header">
<button class="theme-toggle"> <button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div> <svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg> <svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg> <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg> <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button> </button>
</div> </div>
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc"> <label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div> <span class="icon"><svg><use href="#svg-toc"></use></svg></span>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label> </label>
</div> </div>
</header> </header>
<aside class="sidebar-drawer"> <aside class="sidebar-drawer">
<div class="sidebar-container"> <div class="sidebar-container">
<div class="sidebar-sticky"><a class="sidebar-brand centered" href="index.html"> <div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
<div class="sidebar-logo-container"> <div class="sidebar-logo-container">
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/> <img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
</div> </div>
<span class="sidebar-brand-text">Reticulum Network Stack 1.0.0 documentation</span> <span class="sidebar-brand-text">Reticulum Network Stack 1.0.1 documentation</span>
</a><form class="sidebar-search-container" method="get" action="search.html" role="search"> </a><form class="sidebar-search-container" method="get" action="search.html" role="search">
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search"> <input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
@ -181,8 +218,8 @@
<li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li> <li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li>
<li class="toctree-l1"><a class="reference internal" href="interfaces.html">Configuring Interfaces</a></li> <li class="toctree-l1"><a class="reference internal" href="interfaces.html">Configuring Interfaces</a></li>
<li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li> <li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
<li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li> <li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
</ul> </ul>
<ul> <ul>
<li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li> <li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li>
@ -206,19 +243,18 @@
</a> </a>
<div class="content-icon-container"> <div class="content-icon-container">
<div class="theme-toggle-container theme-toggle-content"> <div class="theme-toggle-container theme-toggle-content">
<button class="theme-toggle"> <button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div> <svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg> <svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg> <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg> <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button> </button>
</div> </div>
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc"> <label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div> <span class="icon"><svg><use href="#svg-toc"></use></svg></span>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label> </label>
</div> </div>
<article role="main"> <article role="main" id="furo-main-content">
<section class="genindex-section"> <section class="genindex-section">
<h1 id="index">Index</h1> <h1 id="index">Index</h1>
@ -764,18 +800,16 @@
<div class="bottom-of-page"> <div class="bottom-of-page">
<div class="left-details"> <div class="left-details">
<div class="copyright"> <div class="copyright">
Copyright &#169; 2023, Mark Qvist Copyright &#169; 2025, Mark Qvist
</div> </div>
Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and
<a href="https://github.com/pradyunsg/furo">Furo</a> <a href="https://github.com/pradyunsg/furo">Furo</a>
</div> </div>
<div class="right-details"> <div class="right-details">
<div class="icons">
</div> </div>
</div> </div>
</div>
</footer> </footer>
</div> </div>
@ -785,14 +819,11 @@
</aside> </aside>
</div> </div>
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> </div><script src="_static/documentation_options.js?v=292eb321"></script>
<script src="_static/jquery.js"></script> <script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/underscore.js"></script> <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script> <script src="_static/scripts/furo.js?v=46bd48cc"></script>
<script src="_static/doctools.js"></script> <script src="_static/clipboard.min.js?v=a7894cd8"></script>
<script src="_static/sphinx_highlight.js"></script> <script src="_static/copybutton.js?v=f281be69"></script>
<script src="_static/scripts/furo.js"></script>
<script src="_static/clipboard.min.js"></script>
<script src="_static/copybutton.js"></script>
</body> </body>
</html> </html>

View file

@ -1,25 +1,26 @@
<!doctype html> <!doctype html>
<html class="no-js" lang="en"> <html class="no-js" lang="en" data-content_root="./">
<head><meta charset="utf-8"/> <head><meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1"/> <meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Using Reticulum on Your System" href="using.html" /><link rel="prev" title="What is Reticulum?" href="whatis.html" /> <link rel="index" title="Index" href="genindex.html"><link rel="search" title="Search" href="search.html"><link rel="next" title="Using Reticulum on Your System" href="using.html"><link rel="prev" title="What is Reticulum?" href="whatis.html">
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
<meta name="generator" content="sphinx-5.3.0, furo 2022.09.29.dev1"/> <!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
<title>Getting Started Fast - Reticulum Network Stack 1.0.0 documentation</title> <title>Getting Started Fast - Reticulum Network Stack 1.0.1 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" /> <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=189ec851f9bb375a2509b67be1f64f0cf212b702" /> <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" /> <link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" /> <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=8dab3a3b" />
<link rel="stylesheet" type="text/css" href="_static/custom.css" /> <link rel="stylesheet" type="text/css" href="_static/custom.css?v=bb3cebc5" />
<style> <style>
body { body {
--color-code-background: #f8f8f8; --color-code-background: #f2f2f2;
--color-code-foreground: black; --color-code-foreground: #1e1e1e;
} }
@media not print { @media not print {
@ -86,7 +87,7 @@
<symbol id="svg-sun" viewBox="0 0 24 24"> <symbol id="svg-sun" viewBox="0 0 24 24">
<title>Light mode</title> <title>Light mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
<circle cx="12" cy="12" r="5"></circle> <circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line> <line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line> <line x1="12" y1="21" x2="12" y2="23"></line>
@ -101,34 +102,73 @@
<symbol id="svg-moon" viewBox="0 0 24 24"> <symbol id="svg-moon" viewBox="0 0 24 24">
<title>Dark mode</title> <title>Dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
<path stroke="none" d="M0 0h24v24H0z" fill="none" /> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" /> <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
</svg> </svg>
</symbol> </symbol>
<symbol id="svg-sun-half" viewBox="0 0 24 24"> <symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
<title>Auto light/dark mode</title> <title>Auto light/dark, in light mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> class="icon-custom-derived-from-feather-sun-and-tabler-moon">
<circle cx="12" cy="12" r="9" /> <path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
<path d="M13 12h5" /> <line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
<path d="M13 15h4" /> <line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
<path d="M13 18h1" /> <line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
<path d="M13 9h4" /> <line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
<path d="M13 6h1" /> <line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
<circle cx="14.5" cy="9.55" r="3.6"/>
</svg>
</symbol>
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
<title>Auto light/dark, in dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
</svg>
</symbol>
<symbol id="svg-pencil" viewBox="0 0 24 24">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
<path d="M13.5 6.5l4 4" />
<path d="M20 21l2 -2l-2 -2" />
<path d="M17 17l-2 2l2 2" />
</svg>
</symbol>
<symbol id="svg-eye" viewBox="0 0 24 24">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
<path
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
<path d="M20 21l2 -2l-2 -2" />
<path d="M17 17l-2 2l2 2" />
</svg> </svg>
</symbol> </symbol>
</svg> </svg>
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation"> <input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc"> <input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
<label class="overlay sidebar-overlay" for="__navigation"> <label class="overlay sidebar-overlay" for="__navigation"></label>
<div class="visually-hidden">Hide navigation sidebar</div> <label class="overlay toc-overlay" for="__toc"></label>
</label>
<label class="overlay toc-overlay" for="__toc"> <a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
<div class="visually-hidden">Hide table of contents sidebar</div>
</label>
@ -136,38 +176,35 @@
<header class="mobile-header"> <header class="mobile-header">
<div class="header-left"> <div class="header-left">
<label class="nav-overlay-icon" for="__navigation"> <label class="nav-overlay-icon" for="__navigation">
<div class="visually-hidden">Toggle site navigation sidebar</div> <span class="icon"><svg><use href="#svg-menu"></use></svg></span>
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
</label> </label>
</div> </div>
<div class="header-center"> <div class="header-center">
<a href="index.html"><div class="brand">Reticulum Network Stack 1.0.0 documentation</div></a> <a href="index.html"><div class="brand">Reticulum Network Stack 1.0.1 documentation</div></a>
</div> </div>
<div class="header-right"> <div class="header-right">
<div class="theme-toggle-container theme-toggle-header"> <div class="theme-toggle-container theme-toggle-header">
<button class="theme-toggle"> <button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div> <svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg> <svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg> <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg> <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button> </button>
</div> </div>
<label class="toc-overlay-icon toc-header-icon" for="__toc"> <label class="toc-overlay-icon toc-header-icon" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div> <span class="icon"><svg><use href="#svg-toc"></use></svg></span>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label> </label>
</div> </div>
</header> </header>
<aside class="sidebar-drawer"> <aside class="sidebar-drawer">
<div class="sidebar-container"> <div class="sidebar-container">
<div class="sidebar-sticky"><a class="sidebar-brand centered" href="index.html"> <div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
<div class="sidebar-logo-container"> <div class="sidebar-logo-container">
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/> <img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
</div> </div>
<span class="sidebar-brand-text">Reticulum Network Stack 1.0.0 documentation</span> <span class="sidebar-brand-text">Reticulum Network Stack 1.0.1 documentation</span>
</a><form class="sidebar-search-container" method="get" action="search.html" role="search"> </a><form class="sidebar-search-container" method="get" action="search.html" role="search">
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search"> <input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
@ -183,8 +220,8 @@
<li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li> <li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li>
<li class="toctree-l1"><a class="reference internal" href="interfaces.html">Configuring Interfaces</a></li> <li class="toctree-l1"><a class="reference internal" href="interfaces.html">Configuring Interfaces</a></li>
<li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li> <li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
<li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li> <li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
</ul> </ul>
<ul> <ul>
<li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li> <li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li>
@ -208,29 +245,28 @@
</a> </a>
<div class="content-icon-container"> <div class="content-icon-container">
<div class="theme-toggle-container theme-toggle-content"> <div class="theme-toggle-container theme-toggle-content">
<button class="theme-toggle"> <button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div> <svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg> <svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg> <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg> <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button> </button>
</div> </div>
<label class="toc-overlay-icon toc-content-icon" for="__toc"> <label class="toc-overlay-icon toc-content-icon" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div> <span class="icon"><svg><use href="#svg-toc"></use></svg></span>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label> </label>
</div> </div>
<article role="main"> <article role="main" id="furo-main-content">
<section id="getting-started-fast"> <section id="getting-started-fast">
<h1>Getting Started Fast<a class="headerlink" href="#getting-started-fast" title="Permalink to this heading">#</a></h1> <h1>Getting Started Fast<a class="headerlink" href="#getting-started-fast" title="Link to this heading"></a></h1>
<p>The best way to get started with the Reticulum Network Stack depends on what <p>The best way to get started with the Reticulum Network Stack depends on what
you want to do. This guide will outline sensible starting paths for different you want to do. This guide will outline sensible starting paths for different
scenarios.</p> scenarios.</p>
<section id="standalone-reticulum-installation"> <section id="standalone-reticulum-installation">
<h2>Standalone Reticulum Installation<a class="headerlink" href="#standalone-reticulum-installation" title="Permalink to this heading">#</a></h2> <h2>Standalone Reticulum Installation<a class="headerlink" href="#standalone-reticulum-installation" title="Link to this heading"></a></h2>
<p>If you simply want to install Reticulum and related utilities on a system, <p>If you simply want to install Reticulum and related utilities on a system,
the easiest way is via the <code class="docutils literal notranslate"><span class="pre">pip</span></code> package manager:</p> the easiest way is via the <code class="docutils literal notranslate"><span class="pre">pip</span></code> package manager:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pip</span> <span class="n">install</span> <span class="n">rns</span> <div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>pip<span class="w"> </span>install<span class="w"> </span>rns
</pre></div> </pre></div>
</div> </div>
<p>If you do not already have pip installed, you can install it using the package manager <p>If you do not already have pip installed, you can install it using the package manager
@ -238,7 +274,14 @@ of your system with a command like <code class="docutils literal notranslate"><s
<code class="docutils literal notranslate"><span class="pre">sudo</span> <span class="pre">pamac</span> <span class="pre">install</span> <span class="pre">python-pip</span></code> or similar.</p> <code class="docutils literal notranslate"><span class="pre">sudo</span> <span class="pre">pamac</span> <span class="pre">install</span> <span class="pre">python-pip</span></code> or similar.</p>
<p>You can also dowload the Reticulum release wheels from GitHub, or other release channels, <p>You can also dowload the Reticulum release wheels from GitHub, or other release channels,
and install them offline using <code class="docutils literal notranslate"><span class="pre">pip</span></code>:</p> and install them offline using <code class="docutils literal notranslate"><span class="pre">pip</span></code>:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pip</span> <span class="n">install</span> <span class="o">./</span><span class="n">rns</span><span class="o">-</span><span class="mf">0.5.1</span><span class="o">-</span><span class="n">py3</span><span class="o">-</span><span class="n">none</span><span class="o">-</span><span class="nb">any</span><span class="o">.</span><span class="n">whl</span> <div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>pip<span class="w"> </span>install<span class="w"> </span>./rns-1.0.1-py3-none-any.whl
</pre></div>
</div>
<p>On platforms that limit user package installation via <code class="docutils literal notranslate"><span class="pre">pip</span></code>, you may need to manually
allow this using the <code class="docutils literal notranslate"><span class="pre">--break-system-packages</span></code> command line flag when installing. This
will not actually break any packages, unless you have installed Reticulum directly via
your operating systems package manager.</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>pip<span class="w"> </span>install<span class="w"> </span>rns<span class="w"> </span>--break-system-packages
</pre></div> </pre></div>
</div> </div>
<p>For more detailed installation instructions, please see the <p>For more detailed installation instructions, please see the
@ -246,18 +289,18 @@ and install them offline using <code class="docutils literal notranslate"><span
<p>After installation is complete, it might be helpful to refer to the <p>After installation is complete, it might be helpful to refer to the
<a class="reference internal" href="using.html#using-main"><span class="std std-ref">Using Reticulum on Your System</span></a> chapter.</p> <a class="reference internal" href="using.html#using-main"><span class="std std-ref">Using Reticulum on Your System</span></a> chapter.</p>
<section id="resolving-dependency-installation-issues"> <section id="resolving-dependency-installation-issues">
<h3>Resolving Dependency &amp; Installation Issues<a class="headerlink" href="#resolving-dependency-installation-issues" title="Permalink to this heading">#</a></h3> <h3>Resolving Dependency &amp; Installation Issues<a class="headerlink" href="#resolving-dependency-installation-issues" title="Link to this heading"></a></h3>
<p>On some platforms, there may not be binary packages available for all dependencies, and <p>On some platforms, there may not be binary packages available for all dependencies, and
<code class="docutils literal notranslate"><span class="pre">pip</span></code> installation may fail with an error message. In these cases, the issue can usually <code class="docutils literal notranslate"><span class="pre">pip</span></code> installation may fail with an error message. In these cases, the issue can usually
be resolved by installing the development essentials packages for your platform:</p> be resolved by installing the development essentials packages for your platform:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># Debian / Ubuntu / Derivatives</span> <div class="highlight-shell notranslate"><div class="highlight"><pre><span></span><span class="c1"># Debian / Ubuntu / Derivatives</span>
<span class="n">sudo</span> <span class="n">apt</span> <span class="n">install</span> <span class="n">build</span><span class="o">-</span><span class="n">essential</span> sudo<span class="w"> </span>apt<span class="w"> </span>install<span class="w"> </span>build-essential
<span class="c1"># Arch / Manjaro / Derivatives</span> <span class="c1"># Arch / Manjaro / Derivatives</span>
<span class="n">sudo</span> <span class="n">pamac</span> <span class="n">install</span> <span class="n">base</span><span class="o">-</span><span class="n">devel</span> sudo<span class="w"> </span>pamac<span class="w"> </span>install<span class="w"> </span>base-devel
<span class="c1"># Fedora</span> <span class="c1"># Fedora</span>
<span class="n">sudo</span> <span class="n">dnf</span> <span class="n">groupinstall</span> <span class="s2">&quot;Development Tools&quot;</span> <span class="s2">&quot;Development Libraries&quot;</span> sudo<span class="w"> </span>dnf<span class="w"> </span>groupinstall<span class="w"> </span><span class="s2">&quot;Development Tools&quot;</span><span class="w"> </span><span class="s2">&quot;Development Libraries&quot;</span>
</pre></div> </pre></div>
</div> </div>
<p>With the base development packages installed, <code class="docutils literal notranslate"><span class="pre">pip</span></code> should be able to compile any missing <p>With the base development packages installed, <code class="docutils literal notranslate"><span class="pre">pip</span></code> should be able to compile any missing
@ -266,7 +309,7 @@ compiled packages available.</p>
</section> </section>
</section> </section>
<section id="try-using-a-reticulum-based-program"> <section id="try-using-a-reticulum-based-program">
<h2>Try Using a Reticulum-based Program<a class="headerlink" href="#try-using-a-reticulum-based-program" title="Permalink to this heading">#</a></h2> <h2>Try Using a Reticulum-based Program<a class="headerlink" href="#try-using-a-reticulum-based-program" title="Link to this heading"></a></h2>
<p>If you simply want to try using a program built with Reticulum, a few different <p>If you simply want to try using a program built with Reticulum, a few different
programs exist that allow basic communication and a range of other useful functions, programs exist that allow basic communication and a range of other useful functions,
even over extremely low-bandwidth Reticulum networks.</p> even over extremely low-bandwidth Reticulum networks.</p>
@ -278,7 +321,7 @@ transceivers or infrastructure just to try it out. Launching the programs on sep
devices connected to the same WiFi network is enough to get started, and physical devices connected to the same WiFi network is enough to get started, and physical
radio interfaces can then be added later.</p> radio interfaces can then be added later.</p>
<section id="remote-shell"> <section id="remote-shell">
<h3>Remote Shell<a class="headerlink" href="#remote-shell" title="Permalink to this heading">#</a></h3> <h3>Remote Shell<a class="headerlink" href="#remote-shell" title="Link to this heading"></a></h3>
<p>The <a class="reference external" href="https://github.com/acehoss/rnsh">rnsh</a> program lets you establish fully interactive <p>The <a class="reference external" href="https://github.com/acehoss/rnsh">rnsh</a> program lets you establish fully interactive
remote shell sessions over Reticulum. It also allows you to pipe any program to or from a remote shell sessions over Reticulum. It also allows you to pipe any program to or from a
remote system, and is similar to how <code class="docutils literal notranslate"><span class="pre">ssh</span></code> works. The <code class="docutils literal notranslate"><span class="pre">rnsh</span></code> is very efficient, and remote system, and is similar to how <code class="docutils literal notranslate"><span class="pre">ssh</span></code> works. The <code class="docutils literal notranslate"><span class="pre">rnsh</span></code> is very efficient, and
@ -286,7 +329,7 @@ can facilitate fully interactive shell sessions, even over extremely low-bandwid
such as LoRa or packet radio.</p> such as LoRa or packet radio.</p>
</section> </section>
<section id="nomad-network"> <section id="nomad-network">
<h3>Nomad Network<a class="headerlink" href="#nomad-network" title="Permalink to this heading">#</a></h3> <h3>Nomad Network<a class="headerlink" href="#nomad-network" title="Link to this heading"></a></h3>
<p>The terminal-based program <a class="reference external" href="https://github.com/markqvist/nomadnet">Nomad Network</a> <p>The terminal-based program <a class="reference external" href="https://github.com/markqvist/nomadnet">Nomad Network</a>
provides a complete encrypted communications suite built with Reticulum. It features provides a complete encrypted communications suite built with Reticulum. It features
encrypted messaging (both direct and delayed-delivery for offline users), file sharing, encrypted messaging (both direct and delayed-delivery for offline users), file sharing,
@ -315,7 +358,7 @@ manually add the <code class="docutils literal notranslate"><span class="pre">pi
</div> </div>
</section> </section>
<section id="sideband"> <section id="sideband">
<h3>Sideband<a class="headerlink" href="#sideband" title="Permalink to this heading">#</a></h3> <h3>Sideband<a class="headerlink" href="#sideband" title="Link to this heading"></a></h3>
<p>If you would rather use a program with a graphical user interface, you can take <p>If you would rather use a program with a graphical user interface, you can take
a look at <a class="reference external" href="https://unsigned.io/sideband">Sideband</a>, which is available for Android, a look at <a class="reference external" href="https://unsigned.io/sideband">Sideband</a>, which is available for Android,
Linux, macOS and Windows.</p> Linux, macOS and Windows.</p>
@ -327,7 +370,7 @@ Paper Messages, or anything else Reticulum supports. It also interoperates with
the Nomad Network program.</p> the Nomad Network program.</p>
</section> </section>
<section id="meshchat"> <section id="meshchat">
<h3>MeshChat<a class="headerlink" href="#meshchat" title="Permalink to this heading">#</a></h3> <h3>MeshChat<a class="headerlink" href="#meshchat" title="Link to this heading"></a></h3>
<p>The <a class="reference external" href="https://github.com/liamcottle/reticulum-meshchat">Reticulum MeshChat</a> application <p>The <a class="reference external" href="https://github.com/liamcottle/reticulum-meshchat">Reticulum MeshChat</a> application
is a user-friendly LXMF client for macOS and Windows, that also includes voice call is a user-friendly LXMF client for macOS and Windows, that also includes voice call
functionality, and a range of other interesting functions.</p> functionality, and a range of other interesting functions.</p>
@ -338,7 +381,7 @@ any other LXMF client.</p>
</section> </section>
</section> </section>
<section id="using-the-included-utilities"> <section id="using-the-included-utilities">
<h2>Using the Included Utilities<a class="headerlink" href="#using-the-included-utilities" title="Permalink to this heading">#</a></h2> <h2>Using the Included Utilities<a class="headerlink" href="#using-the-included-utilities" title="Link to this heading"></a></h2>
<p>Reticulum comes with a range of included utilities that make it easier to <p>Reticulum comes with a range of included utilities that make it easier to
manage your network, check connectivity and make Reticulum available to other manage your network, check connectivity and make Reticulum available to other
programs on your system.</p> programs on your system.</p>
@ -349,7 +392,7 @@ network status and connectivity.</p>
<a class="reference internal" href="using.html#using-main"><span class="std std-ref">Using Reticulum on Your System</span></a> chapter of this manual.</p> <a class="reference internal" href="using.html#using-main"><span class="std std-ref">Using Reticulum on Your System</span></a> chapter of this manual.</p>
</section> </section>
<section id="creating-a-network-with-reticulum"> <section id="creating-a-network-with-reticulum">
<h2>Creating a Network With Reticulum<a class="headerlink" href="#creating-a-network-with-reticulum" title="Permalink to this heading">#</a></h2> <h2>Creating a Network With Reticulum<a class="headerlink" href="#creating-a-network-with-reticulum" title="Link to this heading"></a></h2>
<p>To create a network, you will need to specify one or more <em>interfaces</em> for <p>To create a network, you will need to specify one or more <em>interfaces</em> for
Reticulum to use. This is done in the Reticulum configuration file, which by Reticulum to use. This is done in the Reticulum configuration file, which by
default is located at <code class="docutils literal notranslate"><span class="pre">~/.reticulum/config</span></code>. You can get an example default is located at <code class="docutils literal notranslate"><span class="pre">~/.reticulum/config</span></code>. You can get an example
@ -378,7 +421,7 @@ you want more information, you can read the <a class="reference internal" href="
and <a class="reference internal" href="interfaces.html#interfaces-main"><span class="std std-ref">Interfaces</span></a> chapters of this manual.</p> and <a class="reference internal" href="interfaces.html#interfaces-main"><span class="std std-ref">Interfaces</span></a> chapters of this manual.</p>
</section> </section>
<section id="connecting-reticulum-instances-over-the-internet"> <section id="connecting-reticulum-instances-over-the-internet">
<h2>Connecting Reticulum Instances Over the Internet<a class="headerlink" href="#connecting-reticulum-instances-over-the-internet" title="Permalink to this heading">#</a></h2> <h2>Connecting Reticulum Instances Over the Internet<a class="headerlink" href="#connecting-reticulum-instances-over-the-internet" title="Link to this heading"></a></h2>
<p>Reticulum currently offers two interfaces suitable for connecting instances over the Internet: <a class="reference internal" href="interfaces.html#interfaces-tcps"><span class="std std-ref">TCP</span></a> <p>Reticulum currently offers two interfaces suitable for connecting instances over the Internet: <a class="reference internal" href="interfaces.html#interfaces-tcps"><span class="std std-ref">TCP</span></a>
and <a class="reference internal" href="interfaces.html#interfaces-i2p"><span class="std std-ref">I2P</span></a>. Each interface offers a different set of features, and Reticulum and <a class="reference internal" href="interfaces.html#interfaces-i2p"><span class="std std-ref">I2P</span></a>. Each interface offers a different set of features, and Reticulum
users should carefully choose the interface which best suites their needs.</p> users should carefully choose the interface which best suites their needs.</p>
@ -406,43 +449,88 @@ instance, while preserving anonymity. If you care more about performance, and a
easier setup, use TCP.</p> easier setup, use TCP.</p>
</section> </section>
<section id="connect-to-the-public-testnet"> <section id="connect-to-the-public-testnet">
<h2>Connect to the Public Testnet<a class="headerlink" href="#connect-to-the-public-testnet" title="Permalink to this heading">#</a></h2> <h2>Connect to the Public Testnet<a class="headerlink" href="#connect-to-the-public-testnet" title="Link to this heading"></a></h2>
<p>An experimental public testnet has been made accessible over both I2P and TCP. You can join it <p>An experimental public testnet has been made accessible by volunteers in the community. You
by adding one of the following interfaces to your <code class="docutils literal notranslate"><span class="pre">.reticulum/config</span></code> file:</p> can find interface definitions for adding to your <code class="docutils literal notranslate"><span class="pre">.reticulum/config</span></code> file on the
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># TCP/IP interface to the RNS Amsterdam Hub</span> <a class="reference external" href="https://reticulum.network/connect.html">Reticulum Website</a> or the
<span class="p">[[</span><span class="n">RNS</span> <span class="n">Testnet</span> <span class="n">Amsterdam</span><span class="p">]]</span> <a class="reference external" href="https://github.com/markqvist/Reticulum/wiki/Community-Node-List">Community Wiki</a></p>
<span class="nb">type</span> <span class="o">=</span> <span class="n">TCPClientInterface</span> <p>You can connect your devices or instances to one or more of these to gain access to any
<span class="n">enabled</span> <span class="o">=</span> <span class="n">yes</span> Reticulum networks they are physically connected to. Simply add one or more interface
<span class="n">target_host</span> <span class="o">=</span> <span class="n">amsterdam</span><span class="o">.</span><span class="n">connect</span><span class="o">.</span><span class="n">reticulum</span><span class="o">.</span><span class="n">network</span> snippets to your config file in the <code class="docutils literal notranslate"><span class="pre">[interface]</span></code> section, like in the example below:</p>
<span class="n">target_port</span> <span class="o">=</span> <span class="mi">4965</span> <div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="c1"># TCP/IP interface to the BetweenTheBorders Hub (community-provided)</span>
<span class="k">[[RNS Testnet BetweenTheBorders]]</span>
<span class="c1"># TCP/IP interface to the BetweenTheBorders Hub (community-provided)</span> <span class="w"> </span><span class="na">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">TCPClientInterface</span>
<span class="p">[[</span><span class="n">RNS</span> <span class="n">Testnet</span> <span class="n">BetweenTheBorders</span><span class="p">]]</span> <span class="w"> </span><span class="na">enabled</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">yes</span>
<span class="nb">type</span> <span class="o">=</span> <span class="n">TCPClientInterface</span> <span class="w"> </span><span class="na">target_host</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">reticulum.betweentheborders.com</span>
<span class="n">enabled</span> <span class="o">=</span> <span class="n">yes</span> <span class="w"> </span><span class="na">target_port</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">4242</span>
<span class="n">target_host</span> <span class="o">=</span> <span class="n">reticulum</span><span class="o">.</span><span class="n">betweentheborders</span><span class="o">.</span><span class="n">com</span>
<span class="n">target_port</span> <span class="o">=</span> <span class="mi">4242</span>
<span class="c1"># Interface to Testnet I2P Hub</span>
<span class="p">[[</span><span class="n">RNS</span> <span class="n">Testnet</span> <span class="n">I2P</span> <span class="n">Hub</span><span class="p">]]</span>
<span class="nb">type</span> <span class="o">=</span> <span class="n">I2PInterface</span>
<span class="n">enabled</span> <span class="o">=</span> <span class="n">yes</span>
<span class="n">peers</span> <span class="o">=</span> <span class="n">g3br23bvx3lq5uddcsjii74xgmn6y5q325ovrkq2zw2wbzbqgbuq</span><span class="o">.</span><span class="n">b32</span><span class="o">.</span><span class="n">i2p</span>
</pre></div> </pre></div>
</div> </div>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>Ideally, set up a Reticulum Transport Node that your own devices can reach locally, and then
connect that transport node to a couple of public entrypoints. This will provide efficient
connections and redundancy in case any of them go down.</p>
</div>
<p>Many other Reticulum instances are connecting to this testnet, and you can also join it <p>Many other Reticulum instances are connecting to this testnet, and you can also join it
via other entry points if you know them. There is absolutely no control over the network via other entry points if you know them. There is absolutely no control over the network
topography, usage or what types of instances connect. It will also occasionally be used topography, usage or what types of instances connect. It will also occasionally be used
to test various failure scenarios, and there are no availability or service guarantees. to test various failure scenarios, and there are no availability or service guarantees.
Expect weird things to happen on this network, as people experiment and try out things.</p> Expect weird things to happen on this network, as people experiment and try out things.</p>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>It probably goes without saying, but <em>dont use the testnet entry-points as <p>It probably goes without saying, but <em>dont use the testnet entry-points as
hardcoded or default interfaces in any applications you ship to users</em>. When hardcoded or default interfaces in any applications you ship to users</em>. When
shipping applications, the best practice is to provide your own default shipping applications, the best practice is to provide your own default
connectivity solutions, if needed and applicable, or in most cases, simply connectivity solutions, if needed and applicable, or in most cases, simply
leave it up to the user which networks to connect to, and how.</p> leave it up to the user which networks to connect to, and how.</p>
</div>
</section>
<section id="hosting-public-entrypoints">
<h2>Hosting Public Entrypoints<a class="headerlink" href="#hosting-public-entrypoints" title="Link to this heading"></a></h2>
<p>If you want to host a public (or private) entry-point to a Reticulum network over the
Internet, this section offers some helpful pointers. You will need a machine, physical or
virtual with a public IP address, that can be reached by other devices on the Internet.</p>
<p>The most efficient and performant way to host a connectable entry-point supporting many
users is to use the <code class="docutils literal notranslate"><span class="pre">BackboneInterface</span></code>. This interface type is fully compatible with
the <code class="docutils literal notranslate"><span class="pre">TCPClientInterface</span></code> and <code class="docutils literal notranslate"><span class="pre">TCPServerInterface</span></code> types, but much faster and uses
less system resources, allowing your device to handle thousands of connections even on
small systems.</p>
<p>It is also important to set your connectable interface to <code class="docutils literal notranslate"><span class="pre">gateway</span></code> mode, since this
will greatly improve network convergence time and path resolution for anyone connecting
to your entry-point.</p>
<div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="c1"># This example demonstrates a backbone interface</span>
<span class="c1"># configured for acting as a gateway for users to</span>
<span class="c1"># connect to either a public or private network</span>
<span class="k">[[Public Gateway]]</span>
<span class="w"> </span><span class="na">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">BackboneInterface</span>
<span class="w"> </span><span class="na">enabled</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">yes</span>
<span class="w"> </span><span class="na">mode</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">gateway</span>
<span class="w"> </span><span class="na">listen_on</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">0.0.0.0</span>
<span class="w"> </span><span class="na">port</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">4242</span>
</pre></div>
</div>
<p>If instead you want to make a private entry-point from the Internet, you can use the
<a class="reference internal" href="interfaces.html#interfaces-options"><span class="std std-ref">IFAC name and passphrase options</span></a> to secure your interface with a network name and passphrase.</p>
<div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="c1"># A private entry-point requiring a pre-shared</span>
<span class="c1"># network name and passphrase to connect to.</span>
<span class="k">[[Private Gateway]]</span>
<span class="w"> </span><span class="na">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">BackboneInterface</span>
<span class="w"> </span><span class="na">enabled</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">yes</span>
<span class="w"> </span><span class="na">mode</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">gateway</span>
<span class="w"> </span><span class="na">listen_on</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">0.0.0.0</span>
<span class="w"> </span><span class="na">port</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">4242</span>
<span class="w"> </span><span class="na">network_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">private_ret</span>
<span class="w"> </span><span class="na">passphrase</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">2owjajquafIanPecAc</span>
</pre></div>
</div>
<p>If you are hosting an entry-point on an operating system that does not support
<code class="docutils literal notranslate"><span class="pre">BackboneInterface</span></code>, you can use <code class="docutils literal notranslate"><span class="pre">TCPServerInterface</span></code> instead, although it will
not be as performant.</p>
</section> </section>
<section id="adding-radio-interfaces"> <section id="adding-radio-interfaces">
<h2>Adding Radio Interfaces<a class="headerlink" href="#adding-radio-interfaces" title="Permalink to this heading">#</a></h2> <h2>Adding Radio Interfaces<a class="headerlink" href="#adding-radio-interfaces" title="Link to this heading"></a></h2>
<p>Once you have Reticulum installed and working, you can add radio interfaces with <p>Once you have Reticulum installed and working, you can add radio interfaces with
any compatible hardware you have available. Reticulum supports a wide range of radio any compatible hardware you have available. Reticulum supports a wide range of radio
hardware, and if you already have any available, it is very likely that it will hardware, and if you already have any available, it is very likely that it will
@ -468,7 +556,7 @@ you are welcome to head over to the <a class="reference external" href="https://
and propose adding an interface for the hardware.</p> and propose adding an interface for the hardware.</p>
</section> </section>
<section id="creating-and-using-custom-interfaces"> <section id="creating-and-using-custom-interfaces">
<h2>Creating and Using Custom Interfaces<a class="headerlink" href="#creating-and-using-custom-interfaces" title="Permalink to this heading">#</a></h2> <h2>Creating and Using Custom Interfaces<a class="headerlink" href="#creating-and-using-custom-interfaces" title="Link to this heading"></a></h2>
<p>While Reticulum includes a flexible and broad range of built-in interfaces, these <p>While Reticulum includes a flexible and broad range of built-in interfaces, these
will not cover every conceivable type of communications hardware that Reticulum will not cover every conceivable type of communications hardware that Reticulum
can potentially use to communicate.</p> can potentially use to communicate.</p>
@ -478,7 +566,7 @@ loaded at run-time and used on-par with any of the built-in interface types.</p>
the <a class="reference internal" href="interfaces.html#interfaces-main"><span class="std std-ref">Configuring Interfaces</span></a> chapter.</p> the <a class="reference internal" href="interfaces.html#interfaces-main"><span class="std std-ref">Configuring Interfaces</span></a> chapter.</p>
</section> </section>
<section id="develop-a-program-with-reticulum"> <section id="develop-a-program-with-reticulum">
<h2>Develop a Program with Reticulum<a class="headerlink" href="#develop-a-program-with-reticulum" title="Permalink to this heading">#</a></h2> <h2>Develop a Program with Reticulum<a class="headerlink" href="#develop-a-program-with-reticulum" title="Link to this heading"></a></h2>
<p>If you want to develop programs that use Reticulum, the easiest way to get <p>If you want to develop programs that use Reticulum, the easiest way to get
started is to install the latest release of Reticulum via pip:</p> started is to install the latest release of Reticulum via pip:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pip</span> <span class="n">install</span> <span class="n">rns</span> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pip</span> <span class="n">install</span> <span class="n">rns</span>
@ -491,40 +579,40 @@ likely be to look at some <a class="reference internal" href="examples.html#exam
chapter of this manual.</p> chapter of this manual.</p>
</section> </section>
<section id="participate-in-reticulum-development"> <section id="participate-in-reticulum-development">
<h2>Participate in Reticulum Development<a class="headerlink" href="#participate-in-reticulum-development" title="Permalink to this heading">#</a></h2> <h2>Participate in Reticulum Development<a class="headerlink" href="#participate-in-reticulum-development" title="Link to this heading"></a></h2>
<p>If you want to participate in the development of Reticulum and associated <p>If you want to participate in the development of Reticulum and associated
utilities, youll want to get the latest source from GitHub. In that case, utilities, youll want to get the latest source from GitHub. In that case,
dont use pip, but try this recipe:</p> dont use pip, but try this recipe:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># Install dependencies</span> <div class="highlight-shell notranslate"><div class="highlight"><pre><span></span><span class="c1"># Install dependencies</span>
<span class="n">pip</span> <span class="n">install</span> <span class="n">cryptography</span> <span class="n">pyserial</span> pip<span class="w"> </span>install<span class="w"> </span>cryptography<span class="w"> </span>pyserial
<span class="c1"># Clone repository</span> <span class="c1"># Clone repository</span>
<span class="n">git</span> <span class="n">clone</span> <span class="n">https</span><span class="p">:</span><span class="o">//</span><span class="n">github</span><span class="o">.</span><span class="n">com</span><span class="o">/</span><span class="n">markqvist</span><span class="o">/</span><span class="n">Reticulum</span><span class="o">.</span><span class="n">git</span> git<span class="w"> </span>clone<span class="w"> </span>https://github.com/markqvist/Reticulum.git
<span class="c1"># Move into Reticulum folder and symlink library to examples folder</span> <span class="c1"># Move into Reticulum folder and symlink library to examples folder</span>
<span class="n">cd</span> <span class="n">Reticulum</span> <span class="nb">cd</span><span class="w"> </span>Reticulum
<span class="n">ln</span> <span class="o">-</span><span class="n">s</span> <span class="o">../</span><span class="n">RNS</span> <span class="o">./</span><span class="n">Examples</span><span class="o">/</span> ln<span class="w"> </span>-s<span class="w"> </span>../RNS<span class="w"> </span>./Examples/
<span class="c1"># Run an example</span> <span class="c1"># Run an example</span>
<span class="n">python</span> <span class="n">Examples</span><span class="o">/</span><span class="n">Echo</span><span class="o">.</span><span class="n">py</span> <span class="o">-</span><span class="n">s</span> python<span class="w"> </span>Examples/Echo.py<span class="w"> </span>-s
<span class="c1"># Unless you&#39;ve manually created a config file, Reticulum will do so now,</span> <span class="c1"># Unless you&#39;ve manually created a config file, Reticulum will do so now,</span>
<span class="c1"># and immediately exit. Make any necessary changes to the file:</span> <span class="c1"># and immediately exit. Make any necessary changes to the file:</span>
<span class="n">nano</span> <span class="o">~/.</span><span class="n">reticulum</span><span class="o">/</span><span class="n">config</span> nano<span class="w"> </span>~/.reticulum/config
<span class="c1"># ... and launch the example again.</span> <span class="c1"># ... and launch the example again.</span>
<span class="n">python</span> <span class="n">Examples</span><span class="o">/</span><span class="n">Echo</span><span class="o">.</span><span class="n">py</span> <span class="o">-</span><span class="n">s</span> python<span class="w"> </span>Examples/Echo.py<span class="w"> </span>-s
<span class="c1"># You can now repeat the process on another computer,</span> <span class="c1"># You can now repeat the process on another computer,</span>
<span class="c1"># and run the same example with -h to get command line options.</span> <span class="c1"># and run the same example with -h to get command line options.</span>
<span class="n">python</span> <span class="n">Examples</span><span class="o">/</span><span class="n">Echo</span><span class="o">.</span><span class="n">py</span> <span class="o">-</span><span class="n">h</span> python<span class="w"> </span>Examples/Echo.py<span class="w"> </span>-h
<span class="c1"># Run the example in client mode to &quot;ping&quot; the server.</span> <span class="c1"># Run the example in client mode to &quot;ping&quot; the server.</span>
<span class="c1"># Replace the hash below with the actual destination hash of your server.</span> <span class="c1"># Replace the hash below with the actual destination hash of your server.</span>
<span class="n">python</span> <span class="n">Examples</span><span class="o">/</span><span class="n">Echo</span><span class="o">.</span><span class="n">py</span> <span class="mi">174</span><span class="n">a64852a75682259ad8b921b8bf416</span> python<span class="w"> </span>Examples/Echo.py<span class="w"> </span>174a64852a75682259ad8b921b8bf416
<span class="c1"># Have a look at another example</span> <span class="c1"># Have a look at another example</span>
<span class="n">python</span> <span class="n">Examples</span><span class="o">/</span><span class="n">Filetransfer</span><span class="o">.</span><span class="n">py</span> <span class="o">-</span><span class="n">h</span> python<span class="w"> </span>Examples/Filetransfer.py<span class="w"> </span>-h
</pre></div> </pre></div>
</div> </div>
<p>When you have experimented with the basic examples, its time to go read the <p>When you have experimented with the basic examples, its time to go read the
@ -534,11 +622,11 @@ the <a class="reference external" href="https://github.com/markqvist/Reticulum/d
or ask one of the developers or maintainers for a good place to start.</p> or ask one of the developers or maintainers for a good place to start.</p>
</section> </section>
<section id="platform-specific-install-notes"> <section id="platform-specific-install-notes">
<span id="install-guides"></span><h2>Platform-Specific Install Notes<a class="headerlink" href="#platform-specific-install-notes" title="Permalink to this heading">#</a></h2> <span id="install-guides"></span><h2>Platform-Specific Install Notes<a class="headerlink" href="#platform-specific-install-notes" title="Link to this heading"></a></h2>
<p>Some platforms require a slightly different installation procedure, or have <p>Some platforms require a slightly different installation procedure, or have
various quirks that are worth being aware of. These are listed here.</p> various quirks that are worth being aware of. These are listed here.</p>
<section id="android"> <section id="android">
<h3>Android<a class="headerlink" href="#android" title="Permalink to this heading">#</a></h3> <h3>Android<a class="headerlink" href="#android" title="Link to this heading"></a></h3>
<p>Reticulum can be used on Android in different ways. The easiest way to get <p>Reticulum can be used on Android in different ways. The easiest way to get
started is using an app like <a class="reference external" href="https://unsigned.io/sideband">Sideband</a>.</p> started is using an app like <a class="reference external" href="https://unsigned.io/sideband">Sideband</a>.</p>
<p>For more control and features, you can use Reticulum and related programs via <p>For more control and features, you can use Reticulum and related programs via
@ -551,45 +639,45 @@ including Reticulum.</p>
<code class="docutils literal notranslate"><span class="pre">python</span></code> and the <code class="docutils literal notranslate"><span class="pre">python-cryptography</span></code> library using <code class="docutils literal notranslate"><span class="pre">pkg</span></code>, the package-manager <code class="docutils literal notranslate"><span class="pre">python</span></code> and the <code class="docutils literal notranslate"><span class="pre">python-cryptography</span></code> library using <code class="docutils literal notranslate"><span class="pre">pkg</span></code>, the package-manager
build into Termux. After that, you can use <code class="docutils literal notranslate"><span class="pre">pip</span></code> to install Reticulum.</p> build into Termux. After that, you can use <code class="docutils literal notranslate"><span class="pre">pip</span></code> to install Reticulum.</p>
<p>From within Termux, execute the following:</p> <p>From within Termux, execute the following:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># First, make sure indexes and packages are up to date.</span> <div class="highlight-shell notranslate"><div class="highlight"><pre><span></span><span class="c1"># First, make sure indexes and packages are up to date.</span>
<span class="n">pkg</span> <span class="n">update</span> pkg<span class="w"> </span>update
<span class="n">pkg</span> <span class="n">upgrade</span> pkg<span class="w"> </span>upgrade
<span class="c1"># Then install python and the cryptography library.</span> <span class="c1"># Then install python and the cryptography library.</span>
<span class="n">pkg</span> <span class="n">install</span> <span class="n">python</span> <span class="n">python</span><span class="o">-</span><span class="n">cryptography</span> pkg<span class="w"> </span>install<span class="w"> </span>python<span class="w"> </span>python-cryptography
<span class="c1"># Make sure pip is up to date, and install the wheel module.</span> <span class="c1"># Make sure pip is up to date, and install the wheel module.</span>
<span class="n">pip</span> <span class="n">install</span> <span class="n">wheel</span> <span class="n">pip</span> <span class="o">--</span><span class="n">upgrade</span> pip<span class="w"> </span>install<span class="w"> </span>wheel<span class="w"> </span>pip<span class="w"> </span>--upgrade
<span class="c1"># Install Reticulum</span> <span class="c1"># Install Reticulum</span>
<span class="n">pip</span> <span class="n">install</span> <span class="n">rns</span> pip<span class="w"> </span>install<span class="w"> </span>rns
</pre></div> </pre></div>
</div> </div>
<p>If for some reason the <code class="docutils literal notranslate"><span class="pre">python-cryptography</span></code> package is not available for <p>If for some reason the <code class="docutils literal notranslate"><span class="pre">python-cryptography</span></code> package is not available for
your platform via the Termux package manager, you can attempt to build it your platform via the Termux package manager, you can attempt to build it
locally on your device using the following command:</p> locally on your device using the following command:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># First, make sure indexes and packages are up to date.</span> <div class="highlight-shell notranslate"><div class="highlight"><pre><span></span><span class="c1"># First, make sure indexes and packages are up to date.</span>
<span class="n">pkg</span> <span class="n">update</span> pkg<span class="w"> </span>update
<span class="n">pkg</span> <span class="n">upgrade</span> pkg<span class="w"> </span>upgrade
<span class="c1"># Then install dependencies for the cryptography library.</span> <span class="c1"># Then install dependencies for the cryptography library.</span>
<span class="n">pkg</span> <span class="n">install</span> <span class="n">python</span> <span class="n">build</span><span class="o">-</span><span class="n">essential</span> <span class="n">openssl</span> <span class="n">libffi</span> <span class="n">rust</span> pkg<span class="w"> </span>install<span class="w"> </span>python<span class="w"> </span>build-essential<span class="w"> </span>openssl<span class="w"> </span>libffi<span class="w"> </span>rust
<span class="c1"># Make sure pip is up to date, and install the wheel module.</span> <span class="c1"># Make sure pip is up to date, and install the wheel module.</span>
<span class="n">pip</span> <span class="n">install</span> <span class="n">wheel</span> <span class="n">pip</span> <span class="o">--</span><span class="n">upgrade</span> pip<span class="w"> </span>install<span class="w"> </span>wheel<span class="w"> </span>pip<span class="w"> </span>--upgrade
<span class="c1"># To allow the installer to build the cryptography module,</span> <span class="c1"># To allow the installer to build the cryptography module,</span>
<span class="c1"># we need to let it know what platform we are compiling for:</span> <span class="c1"># we need to let it know what platform we are compiling for:</span>
<span class="n">export</span> <span class="n">CARGO_BUILD_TARGET</span><span class="o">=</span><span class="s2">&quot;aarch64-linux-android&quot;</span> <span class="nb">export</span><span class="w"> </span><span class="nv">CARGO_BUILD_TARGET</span><span class="o">=</span><span class="s2">&quot;aarch64-linux-android&quot;</span>
<span class="c1"># Start the install process for the cryptography module.</span> <span class="c1"># Start the install process for the cryptography module.</span>
<span class="c1"># Depending on your device, this can take several minutes,</span> <span class="c1"># Depending on your device, this can take several minutes,</span>
<span class="c1"># since the module must be compiled locally on your device.</span> <span class="c1"># since the module must be compiled locally on your device.</span>
<span class="n">pip</span> <span class="n">install</span> <span class="n">cryptography</span> pip<span class="w"> </span>install<span class="w"> </span>cryptography
<span class="c1"># If the above installation succeeds, you can now install</span> <span class="c1"># If the above installation succeeds, you can now install</span>
<span class="c1"># Reticulum and any related software</span> <span class="c1"># Reticulum and any related software</span>
<span class="n">pip</span> <span class="n">install</span> <span class="n">rns</span> pip<span class="w"> </span>install<span class="w"> </span>rns
</pre></div> </pre></div>
</div> </div>
<p>It is also possible to include Reticulum in apps compiled and distributed as <p>It is also possible to include Reticulum in apps compiled and distributed as
@ -597,48 +685,48 @@ Android APKs. A detailed tutorial and example source code will be included
here at a later point. Until then you can use the <a class="reference external" href="https://github.com/markqvist/sideband">Sideband source code</a> as an example and starting point.</p> here at a later point. Until then you can use the <a class="reference external" href="https://github.com/markqvist/sideband">Sideband source code</a> as an example and starting point.</p>
</section> </section>
<section id="arm64"> <section id="arm64">
<h3>ARM64<a class="headerlink" href="#arm64" title="Permalink to this heading">#</a></h3> <h3>ARM64<a class="headerlink" href="#arm64" title="Link to this heading"></a></h3>
<p>On some architectures, including ARM64, not all dependencies have precompiled <p>On some architectures, including ARM64, not all dependencies have precompiled
binaries. On such systems, you may need to install <code class="docutils literal notranslate"><span class="pre">python3-dev</span></code> (or similar) before binaries. On such systems, you may need to install <code class="docutils literal notranslate"><span class="pre">python3-dev</span></code> (or similar) before
installing Reticulum or programs that depend on Reticulum.</p> installing Reticulum or programs that depend on Reticulum.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># Install Python and development packages</span> <div class="highlight-shell notranslate"><div class="highlight"><pre><span></span><span class="c1"># Install Python and development packages</span>
<span class="n">sudo</span> <span class="n">apt</span> <span class="n">update</span> sudo<span class="w"> </span>apt<span class="w"> </span>update
<span class="n">sudo</span> <span class="n">apt</span> <span class="n">install</span> <span class="n">python3</span> <span class="n">python3</span><span class="o">-</span><span class="n">pip</span> <span class="n">python3</span><span class="o">-</span><span class="n">dev</span> sudo<span class="w"> </span>apt<span class="w"> </span>install<span class="w"> </span>python3<span class="w"> </span>python3-pip<span class="w"> </span>python3-dev
<span class="c1"># Install Reticulum</span> <span class="c1"># Install Reticulum</span>
<span class="n">python3</span> <span class="o">-</span><span class="n">m</span> <span class="n">pip</span> <span class="n">install</span> <span class="n">rns</span> python3<span class="w"> </span>-m<span class="w"> </span>pip<span class="w"> </span>install<span class="w"> </span>rns
</pre></div> </pre></div>
</div> </div>
<p>With these packages installed, <code class="docutils literal notranslate"><span class="pre">pip</span></code> will be able to build any missing dependencies <p>With these packages installed, <code class="docutils literal notranslate"><span class="pre">pip</span></code> will be able to build any missing dependencies
on your system locally.</p> on your system locally.</p>
</section> </section>
<section id="debian-bookworm"> <section id="debian-bookworm">
<h3>Debian Bookworm<a class="headerlink" href="#debian-bookworm" title="Permalink to this heading">#</a></h3> <h3>Debian Bookworm<a class="headerlink" href="#debian-bookworm" title="Link to this heading"></a></h3>
<p>On versions of Debian released after April 2023, it is no longer possible by default <p>On versions of Debian released after April 2023, it is no longer possible by default
to use <code class="docutils literal notranslate"><span class="pre">pip</span></code> to install packages onto your system. Unfortunately, you will need to to use <code class="docutils literal notranslate"><span class="pre">pip</span></code> to install packages onto your system. Unfortunately, you will need to
use the replacement <code class="docutils literal notranslate"><span class="pre">pipx</span></code> command instead, which places installed packages in an use the replacement <code class="docutils literal notranslate"><span class="pre">pipx</span></code> command instead, which places installed packages in an
isolated environment. This should not negatively affect Reticulum, but will not work isolated environment. This should not negatively affect Reticulum, but will not work
for including and using Reticulum in your own scripts and programs.</p> for including and using Reticulum in your own scripts and programs.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># Install pipx</span> <div class="highlight-shell notranslate"><div class="highlight"><pre><span></span><span class="c1"># Install pipx</span>
<span class="n">sudo</span> <span class="n">apt</span> <span class="n">install</span> <span class="n">pipx</span> sudo<span class="w"> </span>apt<span class="w"> </span>install<span class="w"> </span>pipx
<span class="c1"># Make installed programs available on the command line</span> <span class="c1"># Make installed programs available on the command line</span>
<span class="n">pipx</span> <span class="n">ensurepath</span> pipx<span class="w"> </span>ensurepath
<span class="c1"># Install Reticulum</span> <span class="c1"># Install Reticulum</span>
<span class="n">pipx</span> <span class="n">install</span> <span class="n">rns</span> pipx<span class="w"> </span>install<span class="w"> </span>rns
</pre></div> </pre></div>
</div> </div>
<p>Alternatively, you can restore normal behaviour to <code class="docutils literal notranslate"><span class="pre">pip</span></code> by creating or editing <p>Alternatively, you can restore normal behaviour to <code class="docutils literal notranslate"><span class="pre">pip</span></code> by creating or editing
the configuration file located at <code class="docutils literal notranslate"><span class="pre">~/.config/pip/pip.conf</span></code>, and adding the the configuration file located at <code class="docutils literal notranslate"><span class="pre">~/.config/pip/pip.conf</span></code>, and adding the
following section:</p> following section:</p>
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>[global] <div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="k">[global]</span>
break-system-packages = true <span class="na">break-system-packages</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">true</span>
</pre></div> </pre></div>
</div> </div>
<p>For a one-shot installation of Reticulum, without globally enabling the <code class="docutils literal notranslate"><span class="pre">break-system-packages</span></code> <p>For a one-shot installation of Reticulum, without globally enabling the <code class="docutils literal notranslate"><span class="pre">break-system-packages</span></code>
option, you can use the following command:</p> option, you can use the following command:</p>
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>pip install rns --break-system-packages <div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>pip<span class="w"> </span>install<span class="w"> </span>rns<span class="w"> </span>--break-system-packages
</pre></div> </pre></div>
</div> </div>
<div class="admonition note"> <div class="admonition note">
@ -651,7 +739,7 @@ not in the case of installing Reticulum.</p>
</div> </div>
</section> </section>
<section id="macos"> <section id="macos">
<h3>MacOS<a class="headerlink" href="#macos" title="Permalink to this heading">#</a></h3> <h3>MacOS<a class="headerlink" href="#macos" title="Link to this heading"></a></h3>
<p>To install Reticulum on macOS, you will need to have Python and the <code class="docutils literal notranslate"><span class="pre">pip</span></code> package <p>To install Reticulum on macOS, you will need to have Python and the <code class="docutils literal notranslate"><span class="pre">pip</span></code> package
manager installed.</p> manager installed.</p>
<p>Systems running macOS can vary quite widely in whether or not Python is pre-installed, <p>Systems running macOS can vary quite widely in whether or not Python is pre-installed,
@ -660,12 +748,12 @@ also installed and set up. If in doubt, you can <a class="reference external" hr
Python manually.</p> Python manually.</p>
<p>When Python and <code class="docutils literal notranslate"><span class="pre">pip</span></code> is available on your system, simply open a terminal window <p>When Python and <code class="docutils literal notranslate"><span class="pre">pip</span></code> is available on your system, simply open a terminal window
and use one of the following commands:</p> and use one of the following commands:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># Install Reticulum and utilities with pip:</span> <div class="highlight-shell notranslate"><div class="highlight"><pre><span></span><span class="c1"># Install Reticulum and utilities with pip:</span>
<span class="n">pip3</span> <span class="n">install</span> <span class="n">rns</span> pip3<span class="w"> </span>install<span class="w"> </span>rns
<span class="c1"># On some versions, you may need to use the</span> <span class="c1"># On some versions, you may need to use the</span>
<span class="c1"># flag --break-system-packages to install:</span> <span class="c1"># flag --break-system-packages to install:</span>
<span class="n">pip3</span> <span class="n">install</span> <span class="n">rns</span> <span class="o">--</span><span class="k">break</span><span class="o">-</span><span class="n">system</span><span class="o">-</span><span class="n">packages</span> pip3<span class="w"> </span>install<span class="w"> </span>rns<span class="w"> </span>--break-system-packages
</pre></div> </pre></div>
</div> </div>
<div class="admonition note"> <div class="admonition note">
@ -680,13 +768,13 @@ not in the case of installing Reticulum.</p>
manually add your installed <code class="docutils literal notranslate"><span class="pre">pip</span></code> packages directory to your <cite>PATH</cite> environment manually add your installed <code class="docutils literal notranslate"><span class="pre">pip</span></code> packages directory to your <cite>PATH</cite> environment
variable, before you can use installed commands in your terminal. Usually, adding variable, before you can use installed commands in your terminal. Usually, adding
the following line to your shell init script (for example <code class="docutils literal notranslate"><span class="pre">~/.zshrc</span></code>) will be enough:</p> the following line to your shell init script (for example <code class="docutils literal notranslate"><span class="pre">~/.zshrc</span></code>) will be enough:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>export PATH=$PATH:~/Library/Python/3.9/bin <div class="highlight-shell notranslate"><div class="highlight"><pre><span></span><span class="nb">export</span><span class="w"> </span><span class="nv">PATH</span><span class="o">=</span><span class="nv">$PATH</span>:~/Library/Python/3.9/bin
</pre></div> </pre></div>
</div> </div>
<p>Adjust Python version and shell init script location according to your system.</p> <p>Adjust Python version and shell init script location according to your system.</p>
</section> </section>
<section id="openwrt"> <section id="openwrt">
<h3>OpenWRT<a class="headerlink" href="#openwrt" title="Permalink to this heading">#</a></h3> <h3>OpenWRT<a class="headerlink" href="#openwrt" title="Link to this heading"></a></h3>
<p>On OpenWRT systems with sufficient storage and memory, you can install <p>On OpenWRT systems with sufficient storage and memory, you can install
Reticulum and related utilities using the <cite>opkg</cite> package manager and <cite>pip</cite>.</p> Reticulum and related utilities using the <cite>opkg</cite> package manager and <cite>pip</cite>.</p>
<div class="admonition note"> <div class="admonition note">
@ -699,14 +787,14 @@ repositories for more information.</p>
</div> </div>
<p>To install Reticulum on OpenWRT, first log into a command line session, and <p>To install Reticulum on OpenWRT, first log into a command line session, and
then use the following instructions:</p> then use the following instructions:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># Install dependencies</span> <div class="highlight-shell notranslate"><div class="highlight"><pre><span></span><span class="c1"># Install dependencies</span>
<span class="n">opkg</span> <span class="n">install</span> <span class="n">python3</span> <span class="n">python3</span><span class="o">-</span><span class="n">pip</span> <span class="n">python3</span><span class="o">-</span><span class="n">cryptography</span> <span class="n">python3</span><span class="o">-</span><span class="n">pyserial</span> opkg<span class="w"> </span>install<span class="w"> </span>python3<span class="w"> </span>python3-pip<span class="w"> </span>python3-cryptography<span class="w"> </span>python3-pyserial
<span class="c1"># Install Reticulum</span> <span class="c1"># Install Reticulum</span>
<span class="n">pip</span> <span class="n">install</span> <span class="n">rns</span> pip<span class="w"> </span>install<span class="w"> </span>rns
<span class="c1"># Start rnsd with debug logging enabled</span> <span class="c1"># Start rnsd with debug logging enabled</span>
<span class="n">rnsd</span> <span class="o">-</span><span class="n">vvv</span> rnsd<span class="w"> </span>-vvv
</pre></div> </pre></div>
</div> </div>
<div class="admonition note"> <div class="admonition note">
@ -727,17 +815,17 @@ shows an address starting with <code class="docutils literal notranslate"><span
<code class="docutils literal notranslate"><span class="pre">AutoInterface</span></code> should work for that device.</p> <code class="docutils literal notranslate"><span class="pre">AutoInterface</span></code> should work for that device.</p>
</section> </section>
<section id="raspberry-pi"> <section id="raspberry-pi">
<h3>Raspberry Pi<a class="headerlink" href="#raspberry-pi" title="Permalink to this heading">#</a></h3> <h3>Raspberry Pi<a class="headerlink" href="#raspberry-pi" title="Link to this heading"></a></h3>
<p>It is currently recommended to use a 64-bit version of the Raspberry Pi OS <p>It is currently recommended to use a 64-bit version of the Raspberry Pi OS
if you want to run Reticulum on Raspberry Pi computers, since 32-bit versions if you want to run Reticulum on Raspberry Pi computers, since 32-bit versions
dont always have packages available for some dependencies. If Python and the dont always have packages available for some dependencies. If Python and the
<cite>pip</cite> package manager is not already installed, do that first, and then <cite>pip</cite> package manager is not already installed, do that first, and then
install Reticulum using <cite>pip</cite>.</p> install Reticulum using <cite>pip</cite>.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># Install dependencies</span> <div class="highlight-shell notranslate"><div class="highlight"><pre><span></span><span class="c1"># Install dependencies</span>
<span class="n">sudo</span> <span class="n">apt</span> <span class="n">install</span> <span class="n">python3</span> <span class="n">python3</span><span class="o">-</span><span class="n">pip</span> <span class="n">python3</span><span class="o">-</span><span class="n">cryptography</span> <span class="n">python3</span><span class="o">-</span><span class="n">pyserial</span> sudo<span class="w"> </span>apt<span class="w"> </span>install<span class="w"> </span>python3<span class="w"> </span>python3-pip<span class="w"> </span>python3-cryptography<span class="w"> </span>python3-pyserial
<span class="c1"># Install Reticulum</span> <span class="c1"># Install Reticulum</span>
<span class="n">pip</span> <span class="n">install</span> <span class="n">rns</span> <span class="o">--</span><span class="k">break</span><span class="o">-</span><span class="n">system</span><span class="o">-</span><span class="n">packages</span> pip<span class="w"> </span>install<span class="w"> </span>rns<span class="w"> </span>--break-system-packages
</pre></div> </pre></div>
</div> </div>
<div class="admonition note"> <div class="admonition note">
@ -753,36 +841,36 @@ it will require manually configuring and installing required build dependencies,
and is not detailed in this manual.</p> and is not detailed in this manual.</p>
</section> </section>
<section id="risc-v"> <section id="risc-v">
<h3>RISC-V<a class="headerlink" href="#risc-v" title="Permalink to this heading">#</a></h3> <h3>RISC-V<a class="headerlink" href="#risc-v" title="Link to this heading"></a></h3>
<p>On some architectures, including RISC-V, not all dependencies have precompiled <p>On some architectures, including RISC-V, not all dependencies have precompiled
binaries. On such systems, you may need to install <code class="docutils literal notranslate"><span class="pre">python3-dev</span></code> (or similar) before binaries. On such systems, you may need to install <code class="docutils literal notranslate"><span class="pre">python3-dev</span></code> (or similar) before
installing Reticulum or programs that depend on Reticulum.</p> installing Reticulum or programs that depend on Reticulum.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># Install Python and development packages</span> <div class="highlight-shell notranslate"><div class="highlight"><pre><span></span><span class="c1"># Install Python and development packages</span>
<span class="n">sudo</span> <span class="n">apt</span> <span class="n">update</span> sudo<span class="w"> </span>apt<span class="w"> </span>update
<span class="n">sudo</span> <span class="n">apt</span> <span class="n">install</span> <span class="n">python3</span> <span class="n">python3</span><span class="o">-</span><span class="n">pip</span> <span class="n">python3</span><span class="o">-</span><span class="n">dev</span> sudo<span class="w"> </span>apt<span class="w"> </span>install<span class="w"> </span>python3<span class="w"> </span>python3-pip<span class="w"> </span>python3-dev
<span class="c1"># Install Reticulum</span> <span class="c1"># Install Reticulum</span>
<span class="n">python3</span> <span class="o">-</span><span class="n">m</span> <span class="n">pip</span> <span class="n">install</span> <span class="n">rns</span> python3<span class="w"> </span>-m<span class="w"> </span>pip<span class="w"> </span>install<span class="w"> </span>rns
</pre></div> </pre></div>
</div> </div>
<p>With these packages installed, <code class="docutils literal notranslate"><span class="pre">pip</span></code> will be able to build any missing dependencies <p>With these packages installed, <code class="docutils literal notranslate"><span class="pre">pip</span></code> will be able to build any missing dependencies
on your system locally.</p> on your system locally.</p>
</section> </section>
<section id="ubuntu-lunar"> <section id="ubuntu-lunar">
<h3>Ubuntu Lunar<a class="headerlink" href="#ubuntu-lunar" title="Permalink to this heading">#</a></h3> <h3>Ubuntu Lunar<a class="headerlink" href="#ubuntu-lunar" title="Link to this heading"></a></h3>
<p>On versions of Ubuntu released after April 2023, it is no longer possible by default <p>On versions of Ubuntu released after April 2023, it is no longer possible by default
to use <code class="docutils literal notranslate"><span class="pre">pip</span></code> to install packages onto your system. Unfortunately, you will need to to use <code class="docutils literal notranslate"><span class="pre">pip</span></code> to install packages onto your system. Unfortunately, you will need to
use the replacement <code class="docutils literal notranslate"><span class="pre">pipx</span></code> command instead, which places installed packages in an use the replacement <code class="docutils literal notranslate"><span class="pre">pipx</span></code> command instead, which places installed packages in an
isolated environment. This should not negatively affect Reticulum, but will not work isolated environment. This should not negatively affect Reticulum, but will not work
for including and using Reticulum in your own scripts and programs.</p> for including and using Reticulum in your own scripts and programs.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># Install pipx</span> <div class="highlight-shell notranslate"><div class="highlight"><pre><span></span><span class="c1"># Install pipx</span>
<span class="n">sudo</span> <span class="n">apt</span> <span class="n">install</span> <span class="n">pipx</span> sudo<span class="w"> </span>apt<span class="w"> </span>install<span class="w"> </span>pipx
<span class="c1"># Make installed programs available on the command line</span> <span class="c1"># Make installed programs available on the command line</span>
<span class="n">pipx</span> <span class="n">ensurepath</span> pipx<span class="w"> </span>ensurepath
<span class="c1"># Install Reticulum</span> <span class="c1"># Install Reticulum</span>
<span class="n">pipx</span> <span class="n">install</span> <span class="n">rns</span> pipx<span class="w"> </span>install<span class="w"> </span>rns
</pre></div> </pre></div>
</div> </div>
<p>Alternatively, you can restore normal behaviour to <code class="docutils literal notranslate"><span class="pre">pip</span></code> by creating or editing <p>Alternatively, you can restore normal behaviour to <code class="docutils literal notranslate"><span class="pre">pip</span></code> by creating or editing
@ -807,7 +895,7 @@ not in the case of installing Reticulum.</p>
</div> </div>
</section> </section>
<section id="windows"> <section id="windows">
<h3>Windows<a class="headerlink" href="#windows" title="Permalink to this heading">#</a></h3> <h3>Windows<a class="headerlink" href="#windows" title="Link to this heading"></a></h3>
<p>On Windows operating systems, the easiest way to install Reticulum is by using the <p>On Windows operating systems, the easiest way to install Reticulum is by using the
<code class="docutils literal notranslate"><span class="pre">pip</span></code> package manager from the command line (either the command prompt or Windows <code class="docutils literal notranslate"><span class="pre">pip</span></code> package manager from the command line (either the command prompt or Windows
Powershell).</p> Powershell).</p>
@ -818,7 +906,7 @@ your PATH environment variables. If you dont do this, you will not be able to
use the <code class="docutils literal notranslate"><span class="pre">pip</span></code> installer, or run the included Reticulum utility programs (such as use the <code class="docutils literal notranslate"><span class="pre">pip</span></code> installer, or run the included Reticulum utility programs (such as
<code class="docutils literal notranslate"><span class="pre">rnsd</span></code> and <code class="docutils literal notranslate"><span class="pre">rnstatus</span></code>) from the command line.</p> <code class="docutils literal notranslate"><span class="pre">rnsd</span></code> and <code class="docutils literal notranslate"><span class="pre">rnstatus</span></code>) from the command line.</p>
<p>After installing Python, open the command prompt or Windows Powershell, and type:</p> <p>After installing Python, open the command prompt or Windows Powershell, and type:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pip</span> <span class="n">install</span> <span class="n">rns</span> <div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>pip<span class="w"> </span>install<span class="w"> </span>rns
</pre></div> </pre></div>
</div> </div>
<p>You can now use Reticulum and all included utility programs directly from your <p>You can now use Reticulum and all included utility programs directly from your
@ -826,7 +914,7 @@ preferred command line interface.</p>
</section> </section>
</section> </section>
<section id="pure-python-reticulum"> <section id="pure-python-reticulum">
<h2>Pure-Python Reticulum<a class="headerlink" href="#pure-python-reticulum" title="Permalink to this heading">#</a></h2> <h2>Pure-Python Reticulum<a class="headerlink" href="#pure-python-reticulum" title="Link to this heading"></a></h2>
<div class="admonition warning"> <div class="admonition warning">
<p class="admonition-title">Warning</p> <p class="admonition-title">Warning</p>
<p>If you use the <code class="docutils literal notranslate"><span class="pre">rnspure</span></code> package to run Reticulum on systems that <p>If you use the <code class="docutils literal notranslate"><span class="pre">rnspure</span></code> package to run Reticulum on systems that
@ -879,18 +967,16 @@ All other available modules will still be loaded when needed.</p>
<div class="bottom-of-page"> <div class="bottom-of-page">
<div class="left-details"> <div class="left-details">
<div class="copyright"> <div class="copyright">
Copyright &#169; 2023, Mark Qvist Copyright &#169; 2025, Mark Qvist
</div> </div>
Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and
<a href="https://github.com/pradyunsg/furo">Furo</a> <a href="https://github.com/pradyunsg/furo">Furo</a>
</div> </div>
<div class="right-details"> <div class="right-details">
<div class="icons">
</div> </div>
</div> </div>
</div>
</footer> </footer>
</div> </div>
@ -922,6 +1008,7 @@ All other available modules will still be loaded when needed.</p>
<li><a class="reference internal" href="#creating-a-network-with-reticulum">Creating a Network With Reticulum</a></li> <li><a class="reference internal" href="#creating-a-network-with-reticulum">Creating a Network With Reticulum</a></li>
<li><a class="reference internal" href="#connecting-reticulum-instances-over-the-internet">Connecting Reticulum Instances Over the Internet</a></li> <li><a class="reference internal" href="#connecting-reticulum-instances-over-the-internet">Connecting Reticulum Instances Over the Internet</a></li>
<li><a class="reference internal" href="#connect-to-the-public-testnet">Connect to the Public Testnet</a></li> <li><a class="reference internal" href="#connect-to-the-public-testnet">Connect to the Public Testnet</a></li>
<li><a class="reference internal" href="#hosting-public-entrypoints">Hosting Public Entrypoints</a></li>
<li><a class="reference internal" href="#adding-radio-interfaces">Adding Radio Interfaces</a></li> <li><a class="reference internal" href="#adding-radio-interfaces">Adding Radio Interfaces</a></li>
<li><a class="reference internal" href="#creating-and-using-custom-interfaces">Creating and Using Custom Interfaces</a></li> <li><a class="reference internal" href="#creating-and-using-custom-interfaces">Creating and Using Custom Interfaces</a></li>
<li><a class="reference internal" href="#develop-a-program-with-reticulum">Develop a Program with Reticulum</a></li> <li><a class="reference internal" href="#develop-a-program-with-reticulum">Develop a Program with Reticulum</a></li>
@ -950,14 +1037,11 @@ All other available modules will still be loaded when needed.</p>
</aside> </aside>
</div> </div>
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> </div><script src="_static/documentation_options.js?v=292eb321"></script>
<script src="_static/jquery.js"></script> <script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/underscore.js"></script> <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script> <script src="_static/scripts/furo.js?v=46bd48cc"></script>
<script src="_static/doctools.js"></script> <script src="_static/clipboard.min.js?v=a7894cd8"></script>
<script src="_static/sphinx_highlight.js"></script> <script src="_static/copybutton.js?v=f281be69"></script>
<script src="_static/scripts/furo.js"></script>
<script src="_static/clipboard.min.js"></script>
<script src="_static/copybutton.js"></script>
</body> </body>
</html> </html>

View file

@ -1,25 +1,26 @@
<!doctype html> <!doctype html>
<html class="no-js" lang="en"> <html class="no-js" lang="en" data-content_root="./">
<head><meta charset="utf-8"/> <head><meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1"/> <meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Configuring Interfaces" href="interfaces.html" /><link rel="prev" title="Understanding Reticulum" href="understanding.html" /> <link rel="index" title="Index" href="genindex.html"><link rel="search" title="Search" href="search.html"><link rel="next" title="Configuring Interfaces" href="interfaces.html"><link rel="prev" title="Understanding Reticulum" href="understanding.html">
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
<meta name="generator" content="sphinx-5.3.0, furo 2022.09.29.dev1"/> <!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
<title>Communications Hardware - Reticulum Network Stack 1.0.0 documentation</title> <title>Communications Hardware - Reticulum Network Stack 1.0.1 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" /> <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=189ec851f9bb375a2509b67be1f64f0cf212b702" /> <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" /> <link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" /> <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=8dab3a3b" />
<link rel="stylesheet" type="text/css" href="_static/custom.css" /> <link rel="stylesheet" type="text/css" href="_static/custom.css?v=bb3cebc5" />
<style> <style>
body { body {
--color-code-background: #f8f8f8; --color-code-background: #f2f2f2;
--color-code-foreground: black; --color-code-foreground: #1e1e1e;
} }
@media not print { @media not print {
@ -86,7 +87,7 @@
<symbol id="svg-sun" viewBox="0 0 24 24"> <symbol id="svg-sun" viewBox="0 0 24 24">
<title>Light mode</title> <title>Light mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
<circle cx="12" cy="12" r="5"></circle> <circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line> <line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line> <line x1="12" y1="21" x2="12" y2="23"></line>
@ -101,34 +102,73 @@
<symbol id="svg-moon" viewBox="0 0 24 24"> <symbol id="svg-moon" viewBox="0 0 24 24">
<title>Dark mode</title> <title>Dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
<path stroke="none" d="M0 0h24v24H0z" fill="none" /> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" /> <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
</svg> </svg>
</symbol> </symbol>
<symbol id="svg-sun-half" viewBox="0 0 24 24"> <symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
<title>Auto light/dark mode</title> <title>Auto light/dark, in light mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> class="icon-custom-derived-from-feather-sun-and-tabler-moon">
<circle cx="12" cy="12" r="9" /> <path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
<path d="M13 12h5" /> <line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
<path d="M13 15h4" /> <line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
<path d="M13 18h1" /> <line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
<path d="M13 9h4" /> <line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
<path d="M13 6h1" /> <line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
<circle cx="14.5" cy="9.55" r="3.6"/>
</svg>
</symbol>
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
<title>Auto light/dark, in dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
</svg>
</symbol>
<symbol id="svg-pencil" viewBox="0 0 24 24">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
<path d="M13.5 6.5l4 4" />
<path d="M20 21l2 -2l-2 -2" />
<path d="M17 17l-2 2l2 2" />
</svg>
</symbol>
<symbol id="svg-eye" viewBox="0 0 24 24">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
<path
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
<path d="M20 21l2 -2l-2 -2" />
<path d="M17 17l-2 2l2 2" />
</svg> </svg>
</symbol> </symbol>
</svg> </svg>
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation"> <input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc"> <input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
<label class="overlay sidebar-overlay" for="__navigation"> <label class="overlay sidebar-overlay" for="__navigation"></label>
<div class="visually-hidden">Hide navigation sidebar</div> <label class="overlay toc-overlay" for="__toc"></label>
</label>
<label class="overlay toc-overlay" for="__toc"> <a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
<div class="visually-hidden">Hide table of contents sidebar</div>
</label>
@ -136,38 +176,35 @@
<header class="mobile-header"> <header class="mobile-header">
<div class="header-left"> <div class="header-left">
<label class="nav-overlay-icon" for="__navigation"> <label class="nav-overlay-icon" for="__navigation">
<div class="visually-hidden">Toggle site navigation sidebar</div> <span class="icon"><svg><use href="#svg-menu"></use></svg></span>
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
</label> </label>
</div> </div>
<div class="header-center"> <div class="header-center">
<a href="index.html"><div class="brand">Reticulum Network Stack 1.0.0 documentation</div></a> <a href="index.html"><div class="brand">Reticulum Network Stack 1.0.1 documentation</div></a>
</div> </div>
<div class="header-right"> <div class="header-right">
<div class="theme-toggle-container theme-toggle-header"> <div class="theme-toggle-container theme-toggle-header">
<button class="theme-toggle"> <button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div> <svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg> <svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg> <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg> <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button> </button>
</div> </div>
<label class="toc-overlay-icon toc-header-icon" for="__toc"> <label class="toc-overlay-icon toc-header-icon" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div> <span class="icon"><svg><use href="#svg-toc"></use></svg></span>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label> </label>
</div> </div>
</header> </header>
<aside class="sidebar-drawer"> <aside class="sidebar-drawer">
<div class="sidebar-container"> <div class="sidebar-container">
<div class="sidebar-sticky"><a class="sidebar-brand centered" href="index.html"> <div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
<div class="sidebar-logo-container"> <div class="sidebar-logo-container">
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/> <img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
</div> </div>
<span class="sidebar-brand-text">Reticulum Network Stack 1.0.0 documentation</span> <span class="sidebar-brand-text">Reticulum Network Stack 1.0.1 documentation</span>
</a><form class="sidebar-search-container" method="get" action="search.html" role="search"> </a><form class="sidebar-search-container" method="get" action="search.html" role="search">
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search"> <input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
@ -183,8 +220,8 @@
<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Communications Hardware</a></li> <li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Communications Hardware</a></li>
<li class="toctree-l1"><a class="reference internal" href="interfaces.html">Configuring Interfaces</a></li> <li class="toctree-l1"><a class="reference internal" href="interfaces.html">Configuring Interfaces</a></li>
<li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li> <li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
<li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li> <li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
</ul> </ul>
<ul> <ul>
<li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li> <li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li>
@ -208,21 +245,20 @@
</a> </a>
<div class="content-icon-container"> <div class="content-icon-container">
<div class="theme-toggle-container theme-toggle-content"> <div class="theme-toggle-container theme-toggle-content">
<button class="theme-toggle"> <button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div> <svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg> <svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg> <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg> <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button> </button>
</div> </div>
<label class="toc-overlay-icon toc-content-icon" for="__toc"> <label class="toc-overlay-icon toc-content-icon" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div> <span class="icon"><svg><use href="#svg-toc"></use></svg></span>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label> </label>
</div> </div>
<article role="main"> <article role="main" id="furo-main-content">
<section id="communications-hardware"> <section id="communications-hardware">
<span id="hardware-main"></span><h1>Communications Hardware<a class="headerlink" href="#communications-hardware" title="Permalink to this heading">#</a></h1> <span id="hardware-main"></span><h1>Communications Hardware<a class="headerlink" href="#communications-hardware" title="Link to this heading"></a></h1>
<p>One of the truly valuable aspects of Reticulum is the ability to use it over <p>One of the truly valuable aspects of Reticulum is the ability to use it over
almost any conceivable kind of communications medium. The <a class="reference internal" href="interfaces.html#interfaces-main"><span class="std std-ref">interface types</span></a> almost any conceivable kind of communications medium. The <a class="reference internal" href="interfaces.html#interfaces-main"><span class="std std-ref">interface types</span></a>
available for configuration in Reticulum are flexible enough to cover the use available for configuration in Reticulum are flexible enough to cover the use
@ -234,6 +270,8 @@ not, it is possible to provide the necessary glue with very little effort using
for example the <a class="reference internal" href="interfaces.html#interfaces-pipe"><span class="std std-ref">PipeInterface</span></a> or the <a class="reference internal" href="interfaces.html#interfaces-tcpc"><span class="std std-ref">TCPClientInterface</span></a> for example the <a class="reference internal" href="interfaces.html#interfaces-pipe"><span class="std std-ref">PipeInterface</span></a> or the <a class="reference internal" href="interfaces.html#interfaces-tcpc"><span class="std std-ref">TCPClientInterface</span></a>
in combination with code like <a class="reference external" href="https://github.com/simplyequipped/tcpkissserver">TCP KISS Server</a> in combination with code like <a class="reference external" href="https://github.com/simplyequipped/tcpkissserver">TCP KISS Server</a>
by <a class="reference external" href="https://github.com/simplyequipped">simplyequipped</a>.</p> by <a class="reference external" href="https://github.com/simplyequipped">simplyequipped</a>.</p>
<p>It is also very easy to write and load <a class="reference internal" href="interfaces.html#interfaces-custom"><span class="std std-ref">custom interface modules</span></a>
into Reticulum, allowing you to communicate with more or less anything you can think of.</p>
<p>While this broad support and flexibility is very useful, an abundance of options <p>While this broad support and flexibility is very useful, an abundance of options
can sometimes make it difficult to know where to begin, especially when you are can sometimes make it difficult to know where to begin, especially when you are
starting from scratch.</p> starting from scratch.</p>
@ -244,7 +282,7 @@ and effort. Two fundamental devices categories will be covered, <em>RNodes</em>
<p>Knowing how to employ just a few different types of hardware will make it possible <p>Knowing how to employ just a few different types of hardware will make it possible
to build a wide range of useful networks with little effort.</p> to build a wide range of useful networks with little effort.</p>
<section id="combining-hardware-types"> <section id="combining-hardware-types">
<h2>Combining Hardware Types<a class="headerlink" href="#combining-hardware-types" title="Permalink to this heading">#</a></h2> <h2>Combining Hardware Types<a class="headerlink" href="#combining-hardware-types" title="Link to this heading"></a></h2>
<p>It is useful to combine different link and hardware types when designing and <p>It is useful to combine different link and hardware types when designing and
building a network. One useful design pattern is to employ high-capacity point-to-point building a network. One useful design pattern is to employ high-capacity point-to-point
links based on WiFi or millimeter-wave radios (with high-gain directional antennas) links based on WiFi or millimeter-wave radios (with high-gain directional antennas)
@ -252,7 +290,7 @@ for the network backbone, and using LoRa-based RNodes for covering large areas w
connectivity for client devices.</p> connectivity for client devices.</p>
</section> </section>
<section id="rnode"> <section id="rnode">
<span id="rnode-main"></span><h2>RNode<a class="headerlink" href="#rnode" title="Permalink to this heading">#</a></h2> <span id="rnode-main"></span><h2>RNode<a class="headerlink" href="#rnode" title="Link to this heading"></a></h2>
<p>Reliable and general-purpose long-range digital radio transceiver systems are <p>Reliable and general-purpose long-range digital radio transceiver systems are
commonly either very expensive, difficult to set up and operate, hard to source, commonly either very expensive, difficult to set up and operate, hard to source,
power-hungry, or all of the above at the same time. In an attempt to alleviate power-hungry, or all of the above at the same time. In an attempt to alleviate
@ -271,7 +309,7 @@ used for centrally controlled IoT devices. RNodes use <em>raw LoRa modulation</e
any additional protocol overhead. All high-level protocol functionality is handled any additional protocol overhead. All high-level protocol functionality is handled
directly by Reticulum.</p> directly by Reticulum.</p>
<section id="creating-rnodes"> <section id="creating-rnodes">
<span id="rnode-creating"></span><h3>Creating RNodes<a class="headerlink" href="#creating-rnodes" title="Permalink to this heading">#</a></h3> <span id="rnode-creating"></span><h3>Creating RNodes<a class="headerlink" href="#creating-rnodes" title="Link to this heading"></a></h3>
<p>RNode has been designed as a system that is easy to replicate across time and <p>RNode has been designed as a system that is easy to replicate across time and
space. You can put together a functioning transceiver using commonly available space. You can put together a functioning transceiver using commonly available
components, and a few open source software tools. While you can design and build RNodes components, and a few open source software tools. While you can design and build RNodes
@ -288,7 +326,7 @@ The device can be used with Reticulum by adding an <a class="reference internal"
to the configuration.</p> to the configuration.</p>
</section> </section>
<section id="supported-boards-and-devices"> <section id="supported-boards-and-devices">
<span id="rnode-supported"></span><h3>Supported Boards and Devices<a class="headerlink" href="#supported-boards-and-devices" title="Permalink to this heading">#</a></h3> <span id="rnode-supported"></span><h3>Supported Boards and Devices<a class="headerlink" href="#supported-boards-and-devices" title="Link to this heading"></a></h3>
<p>To create one or more RNodes, you will need to obtain supported development <p>To create one or more RNodes, you will need to obtain supported development
boards or completed devices. The following boards and devices are supported boards or completed devices. The following boards and devices are supported
by the auto-installer.</p> by the auto-installer.</p>
@ -296,7 +334,7 @@ by the auto-installer.</p>
<a class="reference internal image-reference" href="_images/board_tbeam_supreme.png"><img alt="_images/board_tbeam_supreme.png" class="align-center" src="_images/board_tbeam_supreme.png" style="width: 75%;" /> <a class="reference internal image-reference" href="_images/board_tbeam_supreme.png"><img alt="_images/board_tbeam_supreme.png" class="align-center" src="_images/board_tbeam_supreme.png" style="width: 75%;" />
</a> </a>
<section id="lilygo-t-beam-supreme"> <section id="lilygo-t-beam-supreme">
<h4>LilyGO T-Beam Supreme<a class="headerlink" href="#lilygo-t-beam-supreme" title="Permalink to this heading">#</a></h4> <h4>LilyGO T-Beam Supreme<a class="headerlink" href="#lilygo-t-beam-supreme" title="Link to this heading"></a></h4>
<ul class="simple"> <ul class="simple">
<li><p><strong>Transceiver IC</strong> Semtech SX1262 or SX1268</p></li> <li><p><strong>Transceiver IC</strong> Semtech SX1262 or SX1268</p></li>
<li><p><strong>Device Platform</strong> ESP32</p></li> <li><p><strong>Device Platform</strong> ESP32</p></li>
@ -307,7 +345,7 @@ by the auto-installer.</p>
</a> </a>
</section> </section>
<section id="lilygo-t-beam"> <section id="lilygo-t-beam">
<h4>LilyGO T-Beam<a class="headerlink" href="#lilygo-t-beam" title="Permalink to this heading">#</a></h4> <h4>LilyGO T-Beam<a class="headerlink" href="#lilygo-t-beam" title="Link to this heading"></a></h4>
<ul class="simple"> <ul class="simple">
<li><p><strong>Transceiver IC</strong> Semtech SX1262, SX1268, SX1276 or SX1278</p></li> <li><p><strong>Transceiver IC</strong> Semtech SX1262, SX1268, SX1276 or SX1278</p></li>
<li><p><strong>Device Platform</strong> ESP32</p></li> <li><p><strong>Device Platform</strong> ESP32</p></li>
@ -318,7 +356,7 @@ by the auto-installer.</p>
</a> </a>
</section> </section>
<section id="lilygo-t3s3"> <section id="lilygo-t3s3">
<h4>LilyGO T3S3<a class="headerlink" href="#lilygo-t3s3" title="Permalink to this heading">#</a></h4> <h4>LilyGO T3S3<a class="headerlink" href="#lilygo-t3s3" title="Link to this heading"></a></h4>
<ul class="simple"> <ul class="simple">
<li><p><strong>Transceiver IC</strong> Semtech SX1262, SX1268, SX1276 or SX1278</p></li> <li><p><strong>Transceiver IC</strong> Semtech SX1262, SX1268, SX1276 or SX1278</p></li>
<li><p><strong>Device Platform</strong> ESP32</p></li> <li><p><strong>Device Platform</strong> ESP32</p></li>
@ -329,7 +367,7 @@ by the auto-installer.</p>
</a> </a>
</section> </section>
<section id="rak4631-based-boards"> <section id="rak4631-based-boards">
<h4>RAK4631-based Boards<a class="headerlink" href="#rak4631-based-boards" title="Permalink to this heading">#</a></h4> <h4>RAK4631-based Boards<a class="headerlink" href="#rak4631-based-boards" title="Link to this heading"></a></h4>
<ul class="simple"> <ul class="simple">
<li><p><strong>Transceiver IC</strong> Semtech SX1262 or SX1268</p></li> <li><p><strong>Transceiver IC</strong> Semtech SX1262 or SX1268</p></li>
<li><p><strong>Device Platform</strong> nRF52</p></li> <li><p><strong>Device Platform</strong> nRF52</p></li>
@ -340,7 +378,7 @@ by the auto-installer.</p>
</a> </a>
</section> </section>
<section id="opencom-xl"> <section id="opencom-xl">
<h4>OpenCom XL<a class="headerlink" href="#opencom-xl" title="Permalink to this heading">#</a></h4> <h4>OpenCom XL<a class="headerlink" href="#opencom-xl" title="Link to this heading"></a></h4>
<ul class="simple"> <ul class="simple">
<li><p><strong>Transceiver ICs</strong> Semtech SX1262 and SX1280 (dual transceiver)</p></li> <li><p><strong>Transceiver ICs</strong> Semtech SX1262 and SX1280 (dual transceiver)</p></li>
<li><p><strong>Device Platform</strong> nRF52</p></li> <li><p><strong>Device Platform</strong> nRF52</p></li>
@ -351,7 +389,7 @@ by the auto-installer.</p>
</a> </a>
</section> </section>
<section id="unsigned-rnode-v2-x"> <section id="unsigned-rnode-v2-x">
<h4>Unsigned RNode v2.x<a class="headerlink" href="#unsigned-rnode-v2-x" title="Permalink to this heading">#</a></h4> <h4>Unsigned RNode v2.x<a class="headerlink" href="#unsigned-rnode-v2-x" title="Link to this heading"></a></h4>
<ul class="simple"> <ul class="simple">
<li><p><strong>Transceiver IC</strong> Semtech SX1276 or SX1278</p></li> <li><p><strong>Transceiver IC</strong> Semtech SX1276 or SX1278</p></li>
<li><p><strong>Device Platform</strong> ESP32</p></li> <li><p><strong>Device Platform</strong> ESP32</p></li>
@ -362,7 +400,7 @@ by the auto-installer.</p>
</a> </a>
</section> </section>
<section id="lilygo-lora32-v2-1"> <section id="lilygo-lora32-v2-1">
<h4>LilyGO LoRa32 v2.1<a class="headerlink" href="#lilygo-lora32-v2-1" title="Permalink to this heading">#</a></h4> <h4>LilyGO LoRa32 v2.1<a class="headerlink" href="#lilygo-lora32-v2-1" title="Link to this heading"></a></h4>
<ul class="simple"> <ul class="simple">
<li><p><strong>Transceiver IC</strong> Semtech SX1276 or SX1278</p></li> <li><p><strong>Transceiver IC</strong> Semtech SX1276 or SX1278</p></li>
<li><p><strong>Device Platform</strong> ESP32</p></li> <li><p><strong>Device Platform</strong> ESP32</p></li>
@ -373,7 +411,7 @@ by the auto-installer.</p>
</a> </a>
</section> </section>
<section id="lilygo-lora32-v2-0"> <section id="lilygo-lora32-v2-0">
<h4>LilyGO LoRa32 v2.0<a class="headerlink" href="#lilygo-lora32-v2-0" title="Permalink to this heading">#</a></h4> <h4>LilyGO LoRa32 v2.0<a class="headerlink" href="#lilygo-lora32-v2-0" title="Link to this heading"></a></h4>
<ul class="simple"> <ul class="simple">
<li><p><strong>Transceiver IC</strong> Semtech SX1276 or SX1278</p></li> <li><p><strong>Transceiver IC</strong> Semtech SX1276 or SX1278</p></li>
<li><p><strong>Device Platform</strong> ESP32</p></li> <li><p><strong>Device Platform</strong> ESP32</p></li>
@ -384,7 +422,7 @@ by the auto-installer.</p>
</a> </a>
</section> </section>
<section id="lilygo-lora32-v1-0"> <section id="lilygo-lora32-v1-0">
<h4>LilyGO LoRa32 v1.0<a class="headerlink" href="#lilygo-lora32-v1-0" title="Permalink to this heading">#</a></h4> <h4>LilyGO LoRa32 v1.0<a class="headerlink" href="#lilygo-lora32-v1-0" title="Link to this heading"></a></h4>
<ul class="simple"> <ul class="simple">
<li><p><strong>Transceiver IC</strong> Semtech SX1276 or SX1278</p></li> <li><p><strong>Transceiver IC</strong> Semtech SX1276 or SX1278</p></li>
<li><p><strong>Device Platform</strong> ESP32</p></li> <li><p><strong>Device Platform</strong> ESP32</p></li>
@ -395,7 +433,7 @@ by the auto-installer.</p>
</a> </a>
</section> </section>
<section id="lilygo-t-deck"> <section id="lilygo-t-deck">
<h4>LilyGO T-Deck<a class="headerlink" href="#lilygo-t-deck" title="Permalink to this heading">#</a></h4> <h4>LilyGO T-Deck<a class="headerlink" href="#lilygo-t-deck" title="Link to this heading"></a></h4>
<ul class="simple"> <ul class="simple">
<li><p><strong>Transceiver IC</strong> Semtech SX1262 or SX1268</p></li> <li><p><strong>Transceiver IC</strong> Semtech SX1262 or SX1268</p></li>
<li><p><strong>Device Platform</strong> ESP32</p></li> <li><p><strong>Device Platform</strong> ESP32</p></li>
@ -406,7 +444,7 @@ by the auto-installer.</p>
</a> </a>
</section> </section>
<section id="lilygo-t-echo"> <section id="lilygo-t-echo">
<h4>LilyGO T-Echo<a class="headerlink" href="#lilygo-t-echo" title="Permalink to this heading">#</a></h4> <h4>LilyGO T-Echo<a class="headerlink" href="#lilygo-t-echo" title="Link to this heading"></a></h4>
<ul class="simple"> <ul class="simple">
<li><p><strong>Transceiver IC</strong> Semtech SX1262 or SX1268</p></li> <li><p><strong>Transceiver IC</strong> Semtech SX1262 or SX1268</p></li>
<li><p><strong>Device Platform</strong> nRF52</p></li> <li><p><strong>Device Platform</strong> nRF52</p></li>
@ -417,7 +455,7 @@ by the auto-installer.</p>
</a> </a>
</section> </section>
<section id="heltec-t114"> <section id="heltec-t114">
<h4>Heltec T114<a class="headerlink" href="#heltec-t114" title="Permalink to this heading">#</a></h4> <h4>Heltec T114<a class="headerlink" href="#heltec-t114" title="Link to this heading"></a></h4>
<ul class="simple"> <ul class="simple">
<li><p><strong>Transceiver IC</strong> Semtech SX1262 or SX1268</p></li> <li><p><strong>Transceiver IC</strong> Semtech SX1262 or SX1268</p></li>
<li><p><strong>Device Platform</strong> nRF52</p></li> <li><p><strong>Device Platform</strong> nRF52</p></li>
@ -428,7 +466,7 @@ by the auto-installer.</p>
</a> </a>
</section> </section>
<section id="heltec-lora32-v3-0"> <section id="heltec-lora32-v3-0">
<h4>Heltec LoRa32 v3.0<a class="headerlink" href="#heltec-lora32-v3-0" title="Permalink to this heading">#</a></h4> <h4>Heltec LoRa32 v3.0<a class="headerlink" href="#heltec-lora32-v3-0" title="Link to this heading"></a></h4>
<ul class="simple"> <ul class="simple">
<li><p><strong>Transceiver IC</strong> Semtech SX1262 or SX1268</p></li> <li><p><strong>Transceiver IC</strong> Semtech SX1262 or SX1268</p></li>
<li><p><strong>Device Platform</strong> ESP32</p></li> <li><p><strong>Device Platform</strong> ESP32</p></li>
@ -439,7 +477,7 @@ by the auto-installer.</p>
</a> </a>
</section> </section>
<section id="heltec-lora32-v2-0"> <section id="heltec-lora32-v2-0">
<h4>Heltec LoRa32 v2.0<a class="headerlink" href="#heltec-lora32-v2-0" title="Permalink to this heading">#</a></h4> <h4>Heltec LoRa32 v2.0<a class="headerlink" href="#heltec-lora32-v2-0" title="Link to this heading"></a></h4>
<ul class="simple"> <ul class="simple">
<li><p><strong>Transceiver IC</strong> Semtech SX1276 or SX1278</p></li> <li><p><strong>Transceiver IC</strong> Semtech SX1276 or SX1278</p></li>
<li><p><strong>Device Platform</strong> ESP32</p></li> <li><p><strong>Device Platform</strong> ESP32</p></li>
@ -449,7 +487,7 @@ by the auto-installer.</p>
</section> </section>
</section> </section>
<section id="installation"> <section id="installation">
<span id="rnode-installation"></span><h3>Installation<a class="headerlink" href="#installation" title="Permalink to this heading">#</a></h3> <span id="rnode-installation"></span><h3>Installation<a class="headerlink" href="#installation" title="Link to this heading"></a></h3>
<p>Once you have obtained compatible boards, you can install the <a class="reference external" href="https://github.com/markqvist/RNode_Firmware">RNode Firmware</a> <p>Once you have obtained compatible boards, you can install the <a class="reference external" href="https://github.com/markqvist/RNode_Firmware">RNode Firmware</a>
using the <a class="reference external" href="https://github.com/markqvist/rnodeconfigutil">RNode Configuration Utility</a>. using the <a class="reference external" href="https://github.com/markqvist/rnodeconfigutil">RNode Configuration Utility</a>.
If you have installed Reticulum on your system, the <code class="docutils literal notranslate"><span class="pre">rnodeconf</span></code> program will already be If you have installed Reticulum on your system, the <code class="docutils literal notranslate"><span class="pre">rnodeconf</span></code> program will already be
@ -468,7 +506,7 @@ questions about your hardware. Simply follow the guide, and the utility will
auto-install and configure your devices.</p> auto-install and configure your devices.</p>
</section> </section>
<section id="usage-with-reticulum"> <section id="usage-with-reticulum">
<span id="rnode-usage"></span><h3>Usage with Reticulum<a class="headerlink" href="#usage-with-reticulum" title="Permalink to this heading">#</a></h3> <span id="rnode-usage"></span><h3>Usage with Reticulum<a class="headerlink" href="#usage-with-reticulum" title="Link to this heading"></a></h3>
<p>When the devices have been installed and provisioned, you can use them with Reticulum <p>When the devices have been installed and provisioned, you can use them with Reticulum
by adding the <a class="reference internal" href="interfaces.html#interfaces-rnode"><span class="std std-ref">relevant interface section</span></a> to the configuration by adding the <a class="reference internal" href="interfaces.html#interfaces-rnode"><span class="std std-ref">relevant interface section</span></a> to the configuration
file of Reticulum. In the configuraion you can specify all interface parameters, file of Reticulum. In the configuraion you can specify all interface parameters,
@ -476,7 +514,7 @@ such as serial port and on-air parameters.</p>
</section> </section>
</section> </section>
<section id="wifi-based-hardware"> <section id="wifi-based-hardware">
<h2>WiFi-based Hardware<a class="headerlink" href="#wifi-based-hardware" title="Permalink to this heading">#</a></h2> <h2>WiFi-based Hardware<a class="headerlink" href="#wifi-based-hardware" title="Link to this heading"></a></h2>
<p>It is possible to use all kinds of both short- and long-range WiFi-based hardware <p>It is possible to use all kinds of both short- and long-range WiFi-based hardware
with Reticulum. Any kind of hardware that fully supports bridged Ethernet over the with Reticulum. Any kind of hardware that fully supports bridged Ethernet over the
WiFi interface will work with the <a class="reference internal" href="interfaces.html#interfaces-auto"><span class="std std-ref">AutoInterface</span></a> in Reticulum. WiFi interface will work with the <a class="reference internal" href="interfaces.html#interfaces-auto"><span class="std std-ref">AutoInterface</span></a> in Reticulum.
@ -502,7 +540,7 @@ networks. As in all other cases, it is also possible for Reticulum to co-exist w
networks running concurrently on such devices.</p> networks running concurrently on such devices.</p>
</section> </section>
<section id="ethernet-based-hardware"> <section id="ethernet-based-hardware">
<h2>Ethernet-based Hardware<a class="headerlink" href="#ethernet-based-hardware" title="Permalink to this heading">#</a></h2> <h2>Ethernet-based Hardware<a class="headerlink" href="#ethernet-based-hardware" title="Link to this heading"></a></h2>
<p>Reticulum can run over any kind of hardware that can provide a switched Ethernet-based <p>Reticulum can run over any kind of hardware that can provide a switched Ethernet-based
medium. This means that anything from a plain Ethernet switch, to fiber-optic systems, medium. This means that anything from a plain Ethernet switch, to fiber-optic systems,
to data radios with Ethernet interfaces can be used by Reticulum.</p> to data radios with Ethernet interfaces can be used by Reticulum.</p>
@ -514,13 +552,13 @@ co-exist with.</p>
virtual networking adapter, such as <code class="docutils literal notranslate"><span class="pre">tun</span></code> and <code class="docutils literal notranslate"><span class="pre">tap</span></code> devices in Linux.</p> virtual networking adapter, such as <code class="docutils literal notranslate"><span class="pre">tun</span></code> and <code class="docutils literal notranslate"><span class="pre">tap</span></code> devices in Linux.</p>
</section> </section>
<section id="serial-lines-devices"> <section id="serial-lines-devices">
<h2>Serial Lines &amp; Devices<a class="headerlink" href="#serial-lines-devices" title="Permalink to this heading">#</a></h2> <h2>Serial Lines &amp; Devices<a class="headerlink" href="#serial-lines-devices" title="Link to this heading"></a></h2>
<p>Using Reticulum over any kind of raw serial line is also possible with the <p>Using Reticulum over any kind of raw serial line is also possible with the
<a class="reference internal" href="interfaces.html#interfaces-serial"><span class="std std-ref">SerialInterface</span></a>. This interface type is also useful for <a class="reference internal" href="interfaces.html#interfaces-serial"><span class="std std-ref">SerialInterface</span></a>. This interface type is also useful for
using Reticulum over communications hardware that provides a serial port interface.</p> using Reticulum over communications hardware that provides a serial port interface.</p>
</section> </section>
<section id="packet-radio-modems"> <section id="packet-radio-modems">
<h2>Packet Radio Modems<a class="headerlink" href="#packet-radio-modems" title="Permalink to this heading">#</a></h2> <h2>Packet Radio Modems<a class="headerlink" href="#packet-radio-modems" title="Link to this heading"></a></h2>
<p>Any packet radio modem that provides a standard KISS interface over USB, serial or TCP <p>Any packet radio modem that provides a standard KISS interface over USB, serial or TCP
can be used with Reticulum. This includes virtual software modems such as can be used with Reticulum. This includes virtual software modems such as
<a class="reference external" href="https://github.com/xssfox/freedv-tnc">FreeDV TNC</a> and <a class="reference external" href="https://github.com/wb2osz/direwolf">Dire Wolf</a>.</p> <a class="reference external" href="https://github.com/xssfox/freedv-tnc">FreeDV TNC</a> and <a class="reference external" href="https://github.com/wb2osz/direwolf">Dire Wolf</a>.</p>
@ -556,18 +594,16 @@ can be used with Reticulum. This includes virtual software modems such as
<div class="bottom-of-page"> <div class="bottom-of-page">
<div class="left-details"> <div class="left-details">
<div class="copyright"> <div class="copyright">
Copyright &#169; 2023, Mark Qvist Copyright &#169; 2025, Mark Qvist
</div> </div>
Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and
<a href="https://github.com/pradyunsg/furo">Furo</a> <a href="https://github.com/pradyunsg/furo">Furo</a>
</div> </div>
<div class="right-details"> <div class="right-details">
<div class="icons">
</div> </div>
</div> </div>
</div>
</footer> </footer>
</div> </div>
@ -623,14 +659,11 @@ can be used with Reticulum. This includes virtual software modems such as
</aside> </aside>
</div> </div>
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> </div><script src="_static/documentation_options.js?v=292eb321"></script>
<script src="_static/jquery.js"></script> <script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/underscore.js"></script> <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script> <script src="_static/scripts/furo.js?v=46bd48cc"></script>
<script src="_static/doctools.js"></script> <script src="_static/clipboard.min.js?v=a7894cd8"></script>
<script src="_static/sphinx_highlight.js"></script> <script src="_static/copybutton.js?v=f281be69"></script>
<script src="_static/scripts/furo.js"></script>
<script src="_static/clipboard.min.js"></script>
<script src="_static/copybutton.js"></script>
</body> </body>
</html> </html>

View file

@ -1,25 +1,26 @@
<!doctype html> <!doctype html>
<html class="no-js" lang="en"> <html class="no-js" lang="en" data-content_root="./">
<head><meta charset="utf-8"/> <head><meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1"/> <meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="What is Reticulum?" href="whatis.html" /> <link rel="index" title="Index" href="genindex.html"><link rel="search" title="Search" href="search.html"><link rel="next" title="What is Reticulum?" href="whatis.html">
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
<meta name="generator" content="sphinx-5.3.0, furo 2022.09.29.dev1"/> <!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
<title>Reticulum Network Stack 1.0.0 documentation</title> <title>Reticulum Network Stack 1.0.1 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" /> <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=189ec851f9bb375a2509b67be1f64f0cf212b702" /> <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" /> <link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" /> <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=8dab3a3b" />
<link rel="stylesheet" type="text/css" href="_static/custom.css" /> <link rel="stylesheet" type="text/css" href="_static/custom.css?v=bb3cebc5" />
<style> <style>
body { body {
--color-code-background: #f8f8f8; --color-code-background: #f2f2f2;
--color-code-foreground: black; --color-code-foreground: #1e1e1e;
} }
@media not print { @media not print {
@ -86,7 +87,7 @@
<symbol id="svg-sun" viewBox="0 0 24 24"> <symbol id="svg-sun" viewBox="0 0 24 24">
<title>Light mode</title> <title>Light mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
<circle cx="12" cy="12" r="5"></circle> <circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line> <line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line> <line x1="12" y1="21" x2="12" y2="23"></line>
@ -101,34 +102,73 @@
<symbol id="svg-moon" viewBox="0 0 24 24"> <symbol id="svg-moon" viewBox="0 0 24 24">
<title>Dark mode</title> <title>Dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
<path stroke="none" d="M0 0h24v24H0z" fill="none" /> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" /> <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
</svg> </svg>
</symbol> </symbol>
<symbol id="svg-sun-half" viewBox="0 0 24 24"> <symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
<title>Auto light/dark mode</title> <title>Auto light/dark, in light mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> class="icon-custom-derived-from-feather-sun-and-tabler-moon">
<circle cx="12" cy="12" r="9" /> <path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
<path d="M13 12h5" /> <line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
<path d="M13 15h4" /> <line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
<path d="M13 18h1" /> <line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
<path d="M13 9h4" /> <line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
<path d="M13 6h1" /> <line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
<circle cx="14.5" cy="9.55" r="3.6"/>
</svg>
</symbol>
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
<title>Auto light/dark, in dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
</svg>
</symbol>
<symbol id="svg-pencil" viewBox="0 0 24 24">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
<path d="M13.5 6.5l4 4" />
<path d="M20 21l2 -2l-2 -2" />
<path d="M17 17l-2 2l2 2" />
</svg>
</symbol>
<symbol id="svg-eye" viewBox="0 0 24 24">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
<path
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
<path d="M20 21l2 -2l-2 -2" />
<path d="M17 17l-2 2l2 2" />
</svg> </svg>
</symbol> </symbol>
</svg> </svg>
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation"> <input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc"> <input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
<label class="overlay sidebar-overlay" for="__navigation"> <label class="overlay sidebar-overlay" for="__navigation"></label>
<div class="visually-hidden">Hide navigation sidebar</div> <label class="overlay toc-overlay" for="__toc"></label>
</label>
<label class="overlay toc-overlay" for="__toc"> <a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
<div class="visually-hidden">Hide table of contents sidebar</div>
</label>
@ -136,38 +176,35 @@
<header class="mobile-header"> <header class="mobile-header">
<div class="header-left"> <div class="header-left">
<label class="nav-overlay-icon" for="__navigation"> <label class="nav-overlay-icon" for="__navigation">
<div class="visually-hidden">Toggle site navigation sidebar</div> <span class="icon"><svg><use href="#svg-menu"></use></svg></span>
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
</label> </label>
</div> </div>
<div class="header-center"> <div class="header-center">
<a href="#"><div class="brand">Reticulum Network Stack 1.0.0 documentation</div></a> <a href="#"><div class="brand">Reticulum Network Stack 1.0.1 documentation</div></a>
</div> </div>
<div class="header-right"> <div class="header-right">
<div class="theme-toggle-container theme-toggle-header"> <div class="theme-toggle-container theme-toggle-header">
<button class="theme-toggle"> <button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div> <svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg> <svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg> <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg> <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button> </button>
</div> </div>
<label class="toc-overlay-icon toc-header-icon" for="__toc"> <label class="toc-overlay-icon toc-header-icon" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div> <span class="icon"><svg><use href="#svg-toc"></use></svg></span>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label> </label>
</div> </div>
</header> </header>
<aside class="sidebar-drawer"> <aside class="sidebar-drawer">
<div class="sidebar-container"> <div class="sidebar-container">
<div class="sidebar-sticky"><a class="sidebar-brand centered" href="#"> <div class="sidebar-sticky"><a class="sidebar-brand" href="#">
<div class="sidebar-logo-container"> <div class="sidebar-logo-container">
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/> <img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
</div> </div>
<span class="sidebar-brand-text">Reticulum Network Stack 1.0.0 documentation</span> <span class="sidebar-brand-text">Reticulum Network Stack 1.0.1 documentation</span>
</a><form class="sidebar-search-container" method="get" action="search.html" role="search"> </a><form class="sidebar-search-container" method="get" action="search.html" role="search">
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search"> <input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
@ -183,8 +220,8 @@
<li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li> <li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li>
<li class="toctree-l1"><a class="reference internal" href="interfaces.html">Configuring Interfaces</a></li> <li class="toctree-l1"><a class="reference internal" href="interfaces.html">Configuring Interfaces</a></li>
<li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li> <li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
<li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li> <li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
</ul> </ul>
<ul> <ul>
<li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li> <li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li>
@ -208,27 +245,26 @@
</a> </a>
<div class="content-icon-container"> <div class="content-icon-container">
<div class="theme-toggle-container theme-toggle-content"> <div class="theme-toggle-container theme-toggle-content">
<button class="theme-toggle"> <button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div> <svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg> <svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg> <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg> <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button> </button>
</div> </div>
<label class="toc-overlay-icon toc-content-icon" for="__toc"> <label class="toc-overlay-icon toc-content-icon" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div> <span class="icon"><svg><use href="#svg-toc"></use></svg></span>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label> </label>
</div> </div>
<article role="main"> <article role="main" id="furo-main-content">
<section id="reticulum-network-stack-manual"> <section id="reticulum-network-stack-manual">
<h1>Reticulum Network Stack Manual<a class="headerlink" href="#reticulum-network-stack-manual" title="Permalink to this heading">#</a></h1> <h1>Reticulum Network Stack Manual<a class="headerlink" href="#reticulum-network-stack-manual" title="Link to this heading"></a></h1>
<p>This manual aims to provide you with all the information you need to <p>This manual aims to provide you with all the information you need to
understand Reticulum, build networks or develop programs using it, or understand Reticulum, build networks or develop programs using it, or
to participate in the development of Reticulum itself.</p> to participate in the development of Reticulum itself.</p>
<p>This manual is also available in <a class="reference external" href="https://github.com/markqvist/Reticulum/releases/latest/download/Reticulum.Manual.pdf">PDF</a> and <a class="reference external" href="https://github.com/markqvist/Reticulum/releases/latest/download/Reticulum.Manual.epub">EPUB</a> formats.</p> <p>This manual is also available in <a class="reference external" href="https://github.com/markqvist/Reticulum/releases/latest/download/Reticulum.Manual.pdf">PDF</a> and <a class="reference external" href="https://github.com/markqvist/Reticulum/releases/latest/download/Reticulum.Manual.epub">EPUB</a> formats.</p>
<section id="table-of-contents"> <section id="table-of-contents">
<h2>Table Of Contents<a class="headerlink" href="#table-of-contents" title="Permalink to this heading">#</a></h2> <h2>Table Of Contents<a class="headerlink" href="#table-of-contents" title="Link to this heading"></a></h2>
</section> </section>
<div class="toctree-wrapper compound"> <div class="toctree-wrapper compound">
<ul> <ul>
@ -256,6 +292,7 @@ to participate in the development of Reticulum itself.</p>
<li class="toctree-l2"><a class="reference internal" href="gettingstartedfast.html#creating-a-network-with-reticulum">Creating a Network With Reticulum</a></li> <li class="toctree-l2"><a class="reference internal" href="gettingstartedfast.html#creating-a-network-with-reticulum">Creating a Network With Reticulum</a></li>
<li class="toctree-l2"><a class="reference internal" href="gettingstartedfast.html#connecting-reticulum-instances-over-the-internet">Connecting Reticulum Instances Over the Internet</a></li> <li class="toctree-l2"><a class="reference internal" href="gettingstartedfast.html#connecting-reticulum-instances-over-the-internet">Connecting Reticulum Instances Over the Internet</a></li>
<li class="toctree-l2"><a class="reference internal" href="gettingstartedfast.html#connect-to-the-public-testnet">Connect to the Public Testnet</a></li> <li class="toctree-l2"><a class="reference internal" href="gettingstartedfast.html#connect-to-the-public-testnet">Connect to the Public Testnet</a></li>
<li class="toctree-l2"><a class="reference internal" href="gettingstartedfast.html#hosting-public-entrypoints">Hosting Public Entrypoints</a></li>
<li class="toctree-l2"><a class="reference internal" href="gettingstartedfast.html#adding-radio-interfaces">Adding Radio Interfaces</a></li> <li class="toctree-l2"><a class="reference internal" href="gettingstartedfast.html#adding-radio-interfaces">Adding Radio Interfaces</a></li>
<li class="toctree-l2"><a class="reference internal" href="gettingstartedfast.html#creating-and-using-custom-interfaces">Creating and Using Custom Interfaces</a></li> <li class="toctree-l2"><a class="reference internal" href="gettingstartedfast.html#creating-and-using-custom-interfaces">Creating and Using Custom Interfaces</a></li>
<li class="toctree-l2"><a class="reference internal" href="gettingstartedfast.html#develop-a-program-with-reticulum">Develop a Program with Reticulum</a></li> <li class="toctree-l2"><a class="reference internal" href="gettingstartedfast.html#develop-a-program-with-reticulum">Develop a Program with Reticulum</a></li>
@ -373,6 +410,12 @@ to participate in the development of Reticulum itself.</p>
</li> </li>
</ul> </ul>
</li> </li>
<li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a><ul>
<li class="toctree-l2"><a class="reference internal" href="support.html#donations">Donations</a></li>
<li class="toctree-l2"><a class="reference internal" href="support.html#provide-feedback">Provide Feedback</a></li>
<li class="toctree-l2"><a class="reference internal" href="support.html#contribute-code">Contribute Code</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a><ul> <li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a><ul>
<li class="toctree-l2"><a class="reference internal" href="examples.html#minimal">Minimal</a></li> <li class="toctree-l2"><a class="reference internal" href="examples.html#minimal">Minimal</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#announce">Announce</a></li> <li class="toctree-l2"><a class="reference internal" href="examples.html#announce">Announce</a></li>
@ -387,12 +430,6 @@ to participate in the development of Reticulum itself.</p>
<li class="toctree-l2"><a class="reference internal" href="examples.html#custom-interfaces">Custom Interfaces</a></li> <li class="toctree-l2"><a class="reference internal" href="examples.html#custom-interfaces">Custom Interfaces</a></li>
</ul> </ul>
</li> </li>
<li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a><ul>
<li class="toctree-l2"><a class="reference internal" href="support.html#donations">Donations</a></li>
<li class="toctree-l2"><a class="reference internal" href="support.html#provide-feedback">Provide Feedback</a></li>
<li class="toctree-l2"><a class="reference internal" href="support.html#contribute-code">Contribute Code</a></li>
</ul>
</li>
</ul> </ul>
</div> </div>
<div class="toctree-wrapper compound"> <div class="toctree-wrapper compound">
@ -417,7 +454,7 @@ to participate in the development of Reticulum itself.</p>
</ul> </ul>
</div> </div>
<section id="indices-and-tables"> <section id="indices-and-tables">
<h2>Indices and Tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this heading">#</a></h2> <h2>Indices and Tables<a class="headerlink" href="#indices-and-tables" title="Link to this heading"></a></h2>
<ul class="simple"> <ul class="simple">
<li><p><a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a></p></li> <li><p><a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a></p></li>
<li><p><a class="reference internal" href="search.html"><span class="std std-ref">Search Page</span></a></p></li> <li><p><a class="reference internal" href="search.html"><span class="std std-ref">Search Page</span></a></p></li>
@ -444,18 +481,16 @@ to participate in the development of Reticulum itself.</p>
<div class="bottom-of-page"> <div class="bottom-of-page">
<div class="left-details"> <div class="left-details">
<div class="copyright"> <div class="copyright">
Copyright &#169; 2023, Mark Qvist Copyright &#169; 2025, Mark Qvist
</div> </div>
Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and
<a href="https://github.com/pradyunsg/furo">Furo</a> <a href="https://github.com/pradyunsg/furo">Furo</a>
</div> </div>
<div class="right-details"> <div class="right-details">
<div class="icons">
</div> </div>
</div> </div>
</div>
</footer> </footer>
</div> </div>
@ -485,14 +520,11 @@ to participate in the development of Reticulum itself.</p>
</aside> </aside>
</div> </div>
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> </div><script src="_static/documentation_options.js?v=292eb321"></script>
<script src="_static/jquery.js"></script> <script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/underscore.js"></script> <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script> <script src="_static/scripts/furo.js?v=46bd48cc"></script>
<script src="_static/doctools.js"></script> <script src="_static/clipboard.min.js?v=a7894cd8"></script>
<script src="_static/sphinx_highlight.js"></script> <script src="_static/copybutton.js?v=f281be69"></script>
<script src="_static/scripts/furo.js"></script>
<script src="_static/clipboard.min.js"></script>
<script src="_static/copybutton.js"></script>
</body> </body>
</html> </html>

File diff suppressed because it is too large Load diff

View file

@ -1,25 +1,26 @@
<!doctype html> <!doctype html>
<html class="no-js" lang="en"> <html class="no-js" lang="en" data-content_root="./">
<head><meta charset="utf-8"/> <head><meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1"/> <meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Code Examples" href="examples.html" /><link rel="prev" title="Configuring Interfaces" href="interfaces.html" /> <link rel="index" title="Index" href="genindex.html"><link rel="search" title="Search" href="search.html"><link rel="next" title="Support Reticulum" href="support.html"><link rel="prev" title="Configuring Interfaces" href="interfaces.html">
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
<meta name="generator" content="sphinx-5.3.0, furo 2022.09.29.dev1"/> <!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
<title>Building Networks - Reticulum Network Stack 1.0.0 documentation</title> <title>Building Networks - Reticulum Network Stack 1.0.1 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" /> <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=189ec851f9bb375a2509b67be1f64f0cf212b702" /> <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" /> <link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" /> <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=8dab3a3b" />
<link rel="stylesheet" type="text/css" href="_static/custom.css" /> <link rel="stylesheet" type="text/css" href="_static/custom.css?v=bb3cebc5" />
<style> <style>
body { body {
--color-code-background: #f8f8f8; --color-code-background: #f2f2f2;
--color-code-foreground: black; --color-code-foreground: #1e1e1e;
} }
@media not print { @media not print {
@ -86,7 +87,7 @@
<symbol id="svg-sun" viewBox="0 0 24 24"> <symbol id="svg-sun" viewBox="0 0 24 24">
<title>Light mode</title> <title>Light mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
<circle cx="12" cy="12" r="5"></circle> <circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line> <line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line> <line x1="12" y1="21" x2="12" y2="23"></line>
@ -101,34 +102,73 @@
<symbol id="svg-moon" viewBox="0 0 24 24"> <symbol id="svg-moon" viewBox="0 0 24 24">
<title>Dark mode</title> <title>Dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
<path stroke="none" d="M0 0h24v24H0z" fill="none" /> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" /> <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
</svg> </svg>
</symbol> </symbol>
<symbol id="svg-sun-half" viewBox="0 0 24 24"> <symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
<title>Auto light/dark mode</title> <title>Auto light/dark, in light mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> class="icon-custom-derived-from-feather-sun-and-tabler-moon">
<circle cx="12" cy="12" r="9" /> <path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
<path d="M13 12h5" /> <line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
<path d="M13 15h4" /> <line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
<path d="M13 18h1" /> <line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
<path d="M13 9h4" /> <line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
<path d="M13 6h1" /> <line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
<circle cx="14.5" cy="9.55" r="3.6"/>
</svg>
</symbol>
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
<title>Auto light/dark, in dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
</svg>
</symbol>
<symbol id="svg-pencil" viewBox="0 0 24 24">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
<path d="M13.5 6.5l4 4" />
<path d="M20 21l2 -2l-2 -2" />
<path d="M17 17l-2 2l2 2" />
</svg>
</symbol>
<symbol id="svg-eye" viewBox="0 0 24 24">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
<path
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
<path d="M20 21l2 -2l-2 -2" />
<path d="M17 17l-2 2l2 2" />
</svg> </svg>
</symbol> </symbol>
</svg> </svg>
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation"> <input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc"> <input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
<label class="overlay sidebar-overlay" for="__navigation"> <label class="overlay sidebar-overlay" for="__navigation"></label>
<div class="visually-hidden">Hide navigation sidebar</div> <label class="overlay toc-overlay" for="__toc"></label>
</label>
<label class="overlay toc-overlay" for="__toc"> <a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
<div class="visually-hidden">Hide table of contents sidebar</div>
</label>
@ -136,38 +176,35 @@
<header class="mobile-header"> <header class="mobile-header">
<div class="header-left"> <div class="header-left">
<label class="nav-overlay-icon" for="__navigation"> <label class="nav-overlay-icon" for="__navigation">
<div class="visually-hidden">Toggle site navigation sidebar</div> <span class="icon"><svg><use href="#svg-menu"></use></svg></span>
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
</label> </label>
</div> </div>
<div class="header-center"> <div class="header-center">
<a href="index.html"><div class="brand">Reticulum Network Stack 1.0.0 documentation</div></a> <a href="index.html"><div class="brand">Reticulum Network Stack 1.0.1 documentation</div></a>
</div> </div>
<div class="header-right"> <div class="header-right">
<div class="theme-toggle-container theme-toggle-header"> <div class="theme-toggle-container theme-toggle-header">
<button class="theme-toggle"> <button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div> <svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg> <svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg> <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg> <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button> </button>
</div> </div>
<label class="toc-overlay-icon toc-header-icon" for="__toc"> <label class="toc-overlay-icon toc-header-icon" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div> <span class="icon"><svg><use href="#svg-toc"></use></svg></span>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label> </label>
</div> </div>
</header> </header>
<aside class="sidebar-drawer"> <aside class="sidebar-drawer">
<div class="sidebar-container"> <div class="sidebar-container">
<div class="sidebar-sticky"><a class="sidebar-brand centered" href="index.html"> <div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
<div class="sidebar-logo-container"> <div class="sidebar-logo-container">
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/> <img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
</div> </div>
<span class="sidebar-brand-text">Reticulum Network Stack 1.0.0 documentation</span> <span class="sidebar-brand-text">Reticulum Network Stack 1.0.1 documentation</span>
</a><form class="sidebar-search-container" method="get" action="search.html" role="search"> </a><form class="sidebar-search-container" method="get" action="search.html" role="search">
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search"> <input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
@ -183,8 +220,8 @@
<li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li> <li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li>
<li class="toctree-l1"><a class="reference internal" href="interfaces.html">Configuring Interfaces</a></li> <li class="toctree-l1"><a class="reference internal" href="interfaces.html">Configuring Interfaces</a></li>
<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Building Networks</a></li> <li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Building Networks</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
<li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li> <li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
</ul> </ul>
<ul> <ul>
<li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li> <li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li>
@ -208,21 +245,20 @@
</a> </a>
<div class="content-icon-container"> <div class="content-icon-container">
<div class="theme-toggle-container theme-toggle-content"> <div class="theme-toggle-container theme-toggle-content">
<button class="theme-toggle"> <button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div> <svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg> <svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg> <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg> <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button> </button>
</div> </div>
<label class="toc-overlay-icon toc-content-icon" for="__toc"> <label class="toc-overlay-icon toc-content-icon" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div> <span class="icon"><svg><use href="#svg-toc"></use></svg></span>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label> </label>
</div> </div>
<article role="main"> <article role="main" id="furo-main-content">
<section id="building-networks"> <section id="building-networks">
<span id="networks-main"></span><h1>Building Networks<a class="headerlink" href="#building-networks" title="Permalink to this heading">#</a></h1> <span id="networks-main"></span><h1>Building Networks<a class="headerlink" href="#building-networks" title="Link to this heading"></a></h1>
<p>This chapter will provide you with the knowledge needed to build networks with <p>This chapter will provide you with the knowledge needed to build networks with
Reticulum, which can often be easier than using traditional stacks, since you Reticulum, which can often be easier than using traditional stacks, since you
dont have to worry about coordinating addresses, subnets and routing for an dont have to worry about coordinating addresses, subnets and routing for an
@ -231,7 +267,7 @@ Reticulum, you can simply add more segments to your network when it becomes
necessary, and Reticulum will handle the convergence of the entire network necessary, and Reticulum will handle the convergence of the entire network
automatically.</p> automatically.</p>
<section id="concepts-overview"> <section id="concepts-overview">
<h2>Concepts &amp; Overview<a class="headerlink" href="#concepts-overview" title="Permalink to this heading">#</a></h2> <h2>Concepts &amp; Overview<a class="headerlink" href="#concepts-overview" title="Link to this heading"></a></h2>
<p>There are important points that need to be kept in mind when building networks <p>There are important points that need to be kept in mind when building networks
with Reticulum:</p> with Reticulum:</p>
<blockquote> <blockquote>
@ -326,11 +362,11 @@ decide which are suitable to use in any given situation, depending on where
traffic needs to flow.</p> traffic needs to flow.</p>
</section> </section>
<section id="example-scenarios"> <section id="example-scenarios">
<h2>Example Scenarios<a class="headerlink" href="#example-scenarios" title="Permalink to this heading">#</a></h2> <h2>Example Scenarios<a class="headerlink" href="#example-scenarios" title="Link to this heading"></a></h2>
<p>This section illustrates a few example scenarios, and how they would, in general <p>This section illustrates a few example scenarios, and how they would, in general
terms, be planned, implemented and configured.</p> terms, be planned, implemented and configured.</p>
<section id="interconnected-lora-sites"> <section id="interconnected-lora-sites">
<h3>Interconnected LoRa Sites<a class="headerlink" href="#interconnected-lora-sites" title="Permalink to this heading">#</a></h3> <h3>Interconnected LoRa Sites<a class="headerlink" href="#interconnected-lora-sites" title="Link to this heading"></a></h3>
<p>An organisation wants to provide communication and information services to its <p>An organisation wants to provide communication and information services to its
members, which are located mainly in three separate areas. Three suitable hill-top members, which are located mainly in three separate areas. Three suitable hill-top
locations are found, where the organisation can install equipment: Site A, B and C.</p> locations are found, where the organisation can install equipment: Site A, B and C.</p>
@ -359,7 +395,7 @@ communicating with the LoRa radios installed at the gateway sites.</p>
else across all three sites.</p> else across all three sites.</p>
</section> </section>
<section id="bridging-over-the-internet"> <section id="bridging-over-the-internet">
<h3>Bridging Over the Internet<a class="headerlink" href="#bridging-over-the-internet" title="Permalink to this heading">#</a></h3> <h3>Bridging Over the Internet<a class="headerlink" href="#bridging-over-the-internet" title="Link to this heading"></a></h3>
<p>As the organisation grows, several new communities form in places too far away <p>As the organisation grows, several new communities form in places too far away
from the core network to be reachable over WiFi links. New gateways similar to those from the core network to be reachable over WiFi links. New gateways similar to those
previously installed are set up for the new communities at the new sites D and E, but previously installed are set up for the new communities at the new sites D and E, but
@ -376,7 +412,7 @@ combined users of sites A, B and C. She then enables transport on her node, and
traffic from site D can now reach everyone at site A, B and C, and vice versa.</p> traffic from site D can now reach everyone at site A, B and C, and vice versa.</p>
</section> </section>
<section id="growth-and-convergence"> <section id="growth-and-convergence">
<h3>Growth and Convergence<a class="headerlink" href="#growth-and-convergence" title="Permalink to this heading">#</a></h3> <h3>Growth and Convergence<a class="headerlink" href="#growth-and-convergence" title="Link to this heading"></a></h3>
<p>As the organisation grows, more gateways are added to keep up with the growing user <p>As the organisation grows, more gateways are added to keep up with the growing user
base. Some local gateways even add VHF radios and packet modems to reach outlying users base. Some local gateways even add VHF radios and packet modems to reach outlying users
and communities that are out of reach for the LoRa radios and WiFi backhauls.</p> and communities that are out of reach for the LoRa radios and WiFi backhauls.</p>
@ -397,12 +433,12 @@ connected outliers are now an integral part of the network.</p>
<footer> <footer>
<div class="related-pages"> <div class="related-pages">
<a class="next-page" href="examples.html"> <a class="next-page" href="support.html">
<div class="page-info"> <div class="page-info">
<div class="context"> <div class="context">
<span>Next</span> <span>Next</span>
</div> </div>
<div class="title">Code Examples</div> <div class="title">Support Reticulum</div>
</div> </div>
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg> <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
</a> </a>
@ -421,18 +457,16 @@ connected outliers are now an integral part of the network.</p>
<div class="bottom-of-page"> <div class="bottom-of-page">
<div class="left-details"> <div class="left-details">
<div class="copyright"> <div class="copyright">
Copyright &#169; 2023, Mark Qvist Copyright &#169; 2025, Mark Qvist
</div> </div>
Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and
<a href="https://github.com/pradyunsg/furo">Furo</a> <a href="https://github.com/pradyunsg/furo">Furo</a>
</div> </div>
<div class="right-details"> <div class="right-details">
<div class="icons">
</div> </div>
</div> </div>
</div>
</footer> </footer>
</div> </div>
@ -467,14 +501,11 @@ connected outliers are now an integral part of the network.</p>
</aside> </aside>
</div> </div>
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> </div><script src="_static/documentation_options.js?v=292eb321"></script>
<script src="_static/jquery.js"></script> <script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/underscore.js"></script> <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script> <script src="_static/scripts/furo.js?v=46bd48cc"></script>
<script src="_static/doctools.js"></script> <script src="_static/clipboard.min.js?v=a7894cd8"></script>
<script src="_static/sphinx_highlight.js"></script> <script src="_static/copybutton.js?v=f281be69"></script>
<script src="_static/scripts/furo.js"></script>
<script src="_static/clipboard.min.js"></script>
<script src="_static/copybutton.js"></script>
</body> </body>
</html> </html>

Binary file not shown.

File diff suppressed because it is too large Load diff

View file

@ -1,22 +1,26 @@
<!doctype html> <!doctype html>
<html class="no-js" lang="en"> <html class="no-js" lang="en" data-content_root="./">
<head><meta charset="utf-8"/> <head>
<meta name="viewport" content="width=device-width,initial-scale=1"/> <meta charset="utf-8">
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="#" /> <meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="genindex.html"><link rel="search" title="Search" href="#">
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
<meta name="generator" content="sphinx-5.3.0, furo 2022.09.29.dev1"/><title>Search - Reticulum Network Stack 1.0.0 documentation</title><link rel="stylesheet" type="text/css" href="_static/pygments.css" /> <!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=189ec851f9bb375a2509b67be1f64f0cf212b702" /> <meta name="robots" content="noindex" />
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" /> <title>Search - Reticulum Network Stack 1.0.1 documentation</title><link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" /> <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
<link rel="stylesheet" type="text/css" href="_static/custom.css" /> <link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=8dab3a3b" />
<link rel="stylesheet" type="text/css" href="_static/custom.css?v=bb3cebc5" />
<style> <style>
body { body {
--color-code-background: #f8f8f8; --color-code-background: #f2f2f2;
--color-code-foreground: black; --color-code-foreground: #1e1e1e;
} }
@media not print { @media not print {
@ -83,7 +87,7 @@
<symbol id="svg-sun" viewBox="0 0 24 24"> <symbol id="svg-sun" viewBox="0 0 24 24">
<title>Light mode</title> <title>Light mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
<circle cx="12" cy="12" r="5"></circle> <circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line> <line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line> <line x1="12" y1="21" x2="12" y2="23"></line>
@ -98,34 +102,73 @@
<symbol id="svg-moon" viewBox="0 0 24 24"> <symbol id="svg-moon" viewBox="0 0 24 24">
<title>Dark mode</title> <title>Dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
<path stroke="none" d="M0 0h24v24H0z" fill="none" /> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" /> <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
</svg> </svg>
</symbol> </symbol>
<symbol id="svg-sun-half" viewBox="0 0 24 24"> <symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
<title>Auto light/dark mode</title> <title>Auto light/dark, in light mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> class="icon-custom-derived-from-feather-sun-and-tabler-moon">
<circle cx="12" cy="12" r="9" /> <path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
<path d="M13 12h5" /> <line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
<path d="M13 15h4" /> <line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
<path d="M13 18h1" /> <line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
<path d="M13 9h4" /> <line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
<path d="M13 6h1" /> <line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
<circle cx="14.5" cy="9.55" r="3.6"/>
</svg>
</symbol>
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
<title>Auto light/dark, in dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
</svg>
</symbol>
<symbol id="svg-pencil" viewBox="0 0 24 24">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
<path d="M13.5 6.5l4 4" />
<path d="M20 21l2 -2l-2 -2" />
<path d="M17 17l-2 2l2 2" />
</svg>
</symbol>
<symbol id="svg-eye" viewBox="0 0 24 24">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
<path
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
<path d="M20 21l2 -2l-2 -2" />
<path d="M17 17l-2 2l2 2" />
</svg> </svg>
</symbol> </symbol>
</svg> </svg>
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation"> <input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc"> <input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
<label class="overlay sidebar-overlay" for="__navigation"> <label class="overlay sidebar-overlay" for="__navigation"></label>
<div class="visually-hidden">Hide navigation sidebar</div> <label class="overlay toc-overlay" for="__toc"></label>
</label>
<label class="overlay toc-overlay" for="__toc"> <a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
<div class="visually-hidden">Hide table of contents sidebar</div>
</label>
@ -133,38 +176,35 @@
<header class="mobile-header"> <header class="mobile-header">
<div class="header-left"> <div class="header-left">
<label class="nav-overlay-icon" for="__navigation"> <label class="nav-overlay-icon" for="__navigation">
<div class="visually-hidden">Toggle site navigation sidebar</div> <span class="icon"><svg><use href="#svg-menu"></use></svg></span>
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
</label> </label>
</div> </div>
<div class="header-center"> <div class="header-center">
<a href="index.html"><div class="brand">Reticulum Network Stack 1.0.0 documentation</div></a> <a href="index.html"><div class="brand">Reticulum Network Stack 1.0.1 documentation</div></a>
</div> </div>
<div class="header-right"> <div class="header-right">
<div class="theme-toggle-container theme-toggle-header"> <div class="theme-toggle-container theme-toggle-header">
<button class="theme-toggle"> <button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div> <svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg> <svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg> <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg> <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button> </button>
</div> </div>
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc"> <label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div> <span class="icon"><svg><use href="#svg-toc"></use></svg></span>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label> </label>
</div> </div>
</header> </header>
<aside class="sidebar-drawer"> <aside class="sidebar-drawer">
<div class="sidebar-container"> <div class="sidebar-container">
<div class="sidebar-sticky"><a class="sidebar-brand centered" href="index.html"> <div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
<div class="sidebar-logo-container"> <div class="sidebar-logo-container">
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/> <img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
</div> </div>
<span class="sidebar-brand-text">Reticulum Network Stack 1.0.0 documentation</span> <span class="sidebar-brand-text">Reticulum Network Stack 1.0.1 documentation</span>
</a><form class="sidebar-search-container" method="get" action="#" role="search"> </a><form class="sidebar-search-container" method="get" action="#" role="search">
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search"> <input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
@ -180,8 +220,8 @@
<li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li> <li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li>
<li class="toctree-l1"><a class="reference internal" href="interfaces.html">Configuring Interfaces</a></li> <li class="toctree-l1"><a class="reference internal" href="interfaces.html">Configuring Interfaces</a></li>
<li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li> <li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
<li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li> <li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
</ul> </ul>
<ul> <ul>
<li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li> <li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li>
@ -205,19 +245,18 @@
</a> </a>
<div class="content-icon-container"> <div class="content-icon-container">
<div class="theme-toggle-container theme-toggle-content"> <div class="theme-toggle-container theme-toggle-content">
<button class="theme-toggle"> <button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div> <svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg> <svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg> <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg> <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button> </button>
</div> </div>
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc"> <label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div> <span class="icon"><svg><use href="#svg-toc"></use></svg></span>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label> </label>
</div> </div>
<article role="main"> <article role="main" id="furo-main-content">
<noscript> <noscript>
<div class="admonition error"> <div class="admonition error">
@ -241,18 +280,16 @@
<div class="bottom-of-page"> <div class="bottom-of-page">
<div class="left-details"> <div class="left-details">
<div class="copyright"> <div class="copyright">
Copyright &#169; 2023, Mark Qvist Copyright &#169; 2025, Mark Qvist
</div> </div>
Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and
<a href="https://github.com/pradyunsg/furo">Furo</a> <a href="https://github.com/pradyunsg/furo">Furo</a>
</div> </div>
<div class="right-details"> <div class="right-details">
<div class="icons">
</div> </div>
</div> </div>
</div>
</footer> </footer>
</div> </div>
@ -262,15 +299,12 @@
</aside> </aside>
</div> </div>
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> </div><script src="_static/documentation_options.js?v=292eb321"></script>
<script src="_static/jquery.js"></script> <script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/underscore.js"></script> <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script> <script src="_static/scripts/furo.js?v=46bd48cc"></script>
<script src="_static/doctools.js"></script> <script src="_static/clipboard.min.js?v=a7894cd8"></script>
<script src="_static/sphinx_highlight.js"></script> <script src="_static/copybutton.js?v=f281be69"></script>
<script src="_static/scripts/furo.js"></script>
<script src="_static/clipboard.min.js"></script>
<script src="_static/copybutton.js"></script>
<script src="_static/searchtools.js"></script> <script src="_static/searchtools.js"></script>
<script src="_static/language_data.js"></script> <script src="_static/language_data.js"></script>

File diff suppressed because one or more lines are too long

View file

@ -1,25 +1,26 @@
<!doctype html> <!doctype html>
<html class="no-js" lang="en"> <html class="no-js" lang="en" data-content_root="./">
<head><meta charset="utf-8"/> <head><meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1"/> <meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="API Reference" href="reference.html" /><link rel="prev" title="Code Examples" href="examples.html" /> <link rel="index" title="Index" href="genindex.html"><link rel="search" title="Search" href="search.html"><link rel="next" title="Code Examples" href="examples.html"><link rel="prev" title="Building Networks" href="networks.html">
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
<meta name="generator" content="sphinx-5.3.0, furo 2022.09.29.dev1"/> <!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
<title>Support Reticulum - Reticulum Network Stack 1.0.0 documentation</title> <title>Support Reticulum - Reticulum Network Stack 1.0.1 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" /> <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=189ec851f9bb375a2509b67be1f64f0cf212b702" /> <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" /> <link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" /> <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=8dab3a3b" />
<link rel="stylesheet" type="text/css" href="_static/custom.css" /> <link rel="stylesheet" type="text/css" href="_static/custom.css?v=bb3cebc5" />
<style> <style>
body { body {
--color-code-background: #f8f8f8; --color-code-background: #f2f2f2;
--color-code-foreground: black; --color-code-foreground: #1e1e1e;
} }
@media not print { @media not print {
@ -86,7 +87,7 @@
<symbol id="svg-sun" viewBox="0 0 24 24"> <symbol id="svg-sun" viewBox="0 0 24 24">
<title>Light mode</title> <title>Light mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
<circle cx="12" cy="12" r="5"></circle> <circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line> <line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line> <line x1="12" y1="21" x2="12" y2="23"></line>
@ -101,34 +102,73 @@
<symbol id="svg-moon" viewBox="0 0 24 24"> <symbol id="svg-moon" viewBox="0 0 24 24">
<title>Dark mode</title> <title>Dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
<path stroke="none" d="M0 0h24v24H0z" fill="none" /> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" /> <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
</svg> </svg>
</symbol> </symbol>
<symbol id="svg-sun-half" viewBox="0 0 24 24"> <symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
<title>Auto light/dark mode</title> <title>Auto light/dark, in light mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> class="icon-custom-derived-from-feather-sun-and-tabler-moon">
<circle cx="12" cy="12" r="9" /> <path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
<path d="M13 12h5" /> <line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
<path d="M13 15h4" /> <line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
<path d="M13 18h1" /> <line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
<path d="M13 9h4" /> <line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
<path d="M13 6h1" /> <line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
<circle cx="14.5" cy="9.55" r="3.6"/>
</svg>
</symbol>
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
<title>Auto light/dark, in dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
</svg>
</symbol>
<symbol id="svg-pencil" viewBox="0 0 24 24">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
<path d="M13.5 6.5l4 4" />
<path d="M20 21l2 -2l-2 -2" />
<path d="M17 17l-2 2l2 2" />
</svg>
</symbol>
<symbol id="svg-eye" viewBox="0 0 24 24">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
<path
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
<path d="M20 21l2 -2l-2 -2" />
<path d="M17 17l-2 2l2 2" />
</svg> </svg>
</symbol> </symbol>
</svg> </svg>
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation"> <input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc"> <input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
<label class="overlay sidebar-overlay" for="__navigation"> <label class="overlay sidebar-overlay" for="__navigation"></label>
<div class="visually-hidden">Hide navigation sidebar</div> <label class="overlay toc-overlay" for="__toc"></label>
</label>
<label class="overlay toc-overlay" for="__toc"> <a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
<div class="visually-hidden">Hide table of contents sidebar</div>
</label>
@ -136,38 +176,35 @@
<header class="mobile-header"> <header class="mobile-header">
<div class="header-left"> <div class="header-left">
<label class="nav-overlay-icon" for="__navigation"> <label class="nav-overlay-icon" for="__navigation">
<div class="visually-hidden">Toggle site navigation sidebar</div> <span class="icon"><svg><use href="#svg-menu"></use></svg></span>
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
</label> </label>
</div> </div>
<div class="header-center"> <div class="header-center">
<a href="index.html"><div class="brand">Reticulum Network Stack 1.0.0 documentation</div></a> <a href="index.html"><div class="brand">Reticulum Network Stack 1.0.1 documentation</div></a>
</div> </div>
<div class="header-right"> <div class="header-right">
<div class="theme-toggle-container theme-toggle-header"> <div class="theme-toggle-container theme-toggle-header">
<button class="theme-toggle"> <button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div> <svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg> <svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg> <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg> <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button> </button>
</div> </div>
<label class="toc-overlay-icon toc-header-icon" for="__toc"> <label class="toc-overlay-icon toc-header-icon" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div> <span class="icon"><svg><use href="#svg-toc"></use></svg></span>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label> </label>
</div> </div>
</header> </header>
<aside class="sidebar-drawer"> <aside class="sidebar-drawer">
<div class="sidebar-container"> <div class="sidebar-container">
<div class="sidebar-sticky"><a class="sidebar-brand centered" href="index.html"> <div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
<div class="sidebar-logo-container"> <div class="sidebar-logo-container">
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/> <img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
</div> </div>
<span class="sidebar-brand-text">Reticulum Network Stack 1.0.0 documentation</span> <span class="sidebar-brand-text">Reticulum Network Stack 1.0.1 documentation</span>
</a><form class="sidebar-search-container" method="get" action="search.html" role="search"> </a><form class="sidebar-search-container" method="get" action="search.html" role="search">
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search"> <input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
@ -183,8 +220,8 @@
<li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li> <li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li>
<li class="toctree-l1"><a class="reference internal" href="interfaces.html">Configuring Interfaces</a></li> <li class="toctree-l1"><a class="reference internal" href="interfaces.html">Configuring Interfaces</a></li>
<li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li> <li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Support Reticulum</a></li> <li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Support Reticulum</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
</ul> </ul>
<ul> <ul>
<li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li> <li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li>
@ -208,25 +245,24 @@
</a> </a>
<div class="content-icon-container"> <div class="content-icon-container">
<div class="theme-toggle-container theme-toggle-content"> <div class="theme-toggle-container theme-toggle-content">
<button class="theme-toggle"> <button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div> <svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg> <svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg> <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg> <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button> </button>
</div> </div>
<label class="toc-overlay-icon toc-content-icon" for="__toc"> <label class="toc-overlay-icon toc-content-icon" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div> <span class="icon"><svg><use href="#svg-toc"></use></svg></span>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label> </label>
</div> </div>
<article role="main"> <article role="main" id="furo-main-content">
<section id="support-reticulum"> <section id="support-reticulum">
<span id="support-main"></span><h1>Support Reticulum<a class="headerlink" href="#support-reticulum" title="Permalink to this heading">#</a></h1> <span id="support-main"></span><h1>Support Reticulum<a class="headerlink" href="#support-reticulum" title="Link to this heading"></a></h1>
<p>You can help support the continued development of open, free and private communications <p>You can help support the continued development of open, free and private communications
systems by donating, providing feedback and contributing code and learning resources.</p> systems by donating, providing feedback and contributing code and learning resources.</p>
<section id="donations"> <section id="donations">
<h2>Donations<a class="headerlink" href="#donations" title="Permalink to this heading">#</a></h2> <h2>Donations<a class="headerlink" href="#donations" title="Link to this heading"></a></h2>
<p>Donations are gratefully accepted via the following channels:</p> <p>Donations are gratefully accepted via the following channels:</p>
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>Monero: <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>Monero:
84FpY1QbxHcgdseePYNmhTHcrgMX4nFfBYtz2GKYToqHVVhJp8Eaw1Z1EedRnKD19b3B8NiLCGVxzKV17UMmmeEsCrPyA5w 84FpY1QbxHcgdseePYNmhTHcrgMX4nFfBYtz2GKYToqHVVhJp8Eaw1Z1EedRnKD19b3B8NiLCGVxzKV17UMmmeEsCrPyA5w
@ -248,7 +284,7 @@ https://ko-fi.com/markqvist
organisation? Make them a reality quickly by sponsoring their implementation.</p> organisation? Make them a reality quickly by sponsoring their implementation.</p>
</section> </section>
<section id="provide-feedback"> <section id="provide-feedback">
<h2>Provide Feedback<a class="headerlink" href="#provide-feedback" title="Permalink to this heading">#</a></h2> <h2>Provide Feedback<a class="headerlink" href="#provide-feedback" title="Link to this heading"></a></h2>
<p>All feedback on the usage, functioning and potential dysfunctioning of any and <p>All feedback on the usage, functioning and potential dysfunctioning of any and
all components of the system is very valuable to the continued development and all components of the system is very valuable to the continued development and
improvement of Reticulum.</p> improvement of Reticulum.</p>
@ -257,7 +293,7 @@ reporting or statistics is collected and reported by Reticulum under any
circumstances, so we rely on old-fashioned human feedback.</p> circumstances, so we rely on old-fashioned human feedback.</p>
</section> </section>
<section id="contribute-code"> <section id="contribute-code">
<h2>Contribute Code<a class="headerlink" href="#contribute-code" title="Permalink to this heading">#</a></h2> <h2>Contribute Code<a class="headerlink" href="#contribute-code" title="Link to this heading"></a></h2>
<p>Join us on <a class="reference external" href="https://github.com/markqvist/reticulum">the GitHub repository</a> to <p>Join us on <a class="reference external" href="https://github.com/markqvist/reticulum">the GitHub repository</a> to
report issues, suggest functionality and contribute code to Reticulum.</p> report issues, suggest functionality and contribute code to Reticulum.</p>
</section> </section>
@ -268,23 +304,23 @@ report issues, suggest functionality and contribute code to Reticulum.</p>
<footer> <footer>
<div class="related-pages"> <div class="related-pages">
<a class="next-page" href="reference.html"> <a class="next-page" href="examples.html">
<div class="page-info"> <div class="page-info">
<div class="context"> <div class="context">
<span>Next</span> <span>Next</span>
</div> </div>
<div class="title">API Reference</div> <div class="title">Code Examples</div>
</div> </div>
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg> <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
</a> </a>
<a class="prev-page" href="examples.html"> <a class="prev-page" href="networks.html">
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg> <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
<div class="page-info"> <div class="page-info">
<div class="context"> <div class="context">
<span>Previous</span> <span>Previous</span>
</div> </div>
<div class="title">Code Examples</div> <div class="title">Building Networks</div>
</div> </div>
</a> </a>
@ -292,18 +328,16 @@ report issues, suggest functionality and contribute code to Reticulum.</p>
<div class="bottom-of-page"> <div class="bottom-of-page">
<div class="left-details"> <div class="left-details">
<div class="copyright"> <div class="copyright">
Copyright &#169; 2023, Mark Qvist Copyright &#169; 2025, Mark Qvist
</div> </div>
Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and
<a href="https://github.com/pradyunsg/furo">Furo</a> <a href="https://github.com/pradyunsg/furo">Furo</a>
</div> </div>
<div class="right-details"> <div class="right-details">
<div class="icons">
</div> </div>
</div> </div>
</div>
</footer> </footer>
</div> </div>
@ -334,14 +368,11 @@ report issues, suggest functionality and contribute code to Reticulum.</p>
</aside> </aside>
</div> </div>
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> </div><script src="_static/documentation_options.js?v=292eb321"></script>
<script src="_static/jquery.js"></script> <script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/underscore.js"></script> <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script> <script src="_static/scripts/furo.js?v=46bd48cc"></script>
<script src="_static/doctools.js"></script> <script src="_static/clipboard.min.js?v=a7894cd8"></script>
<script src="_static/sphinx_highlight.js"></script> <script src="_static/copybutton.js?v=f281be69"></script>
<script src="_static/scripts/furo.js"></script>
<script src="_static/clipboard.min.js"></script>
<script src="_static/copybutton.js"></script>
</body> </body>
</html> </html>

View file

@ -1,25 +1,26 @@
<!doctype html> <!doctype html>
<html class="no-js" lang="en"> <html class="no-js" lang="en" data-content_root="./">
<head><meta charset="utf-8"/> <head><meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1"/> <meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Communications Hardware" href="hardware.html" /><link rel="prev" title="Using Reticulum on Your System" href="using.html" /> <link rel="index" title="Index" href="genindex.html"><link rel="search" title="Search" href="search.html"><link rel="next" title="Communications Hardware" href="hardware.html"><link rel="prev" title="Using Reticulum on Your System" href="using.html">
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
<meta name="generator" content="sphinx-5.3.0, furo 2022.09.29.dev1"/> <!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
<title>Understanding Reticulum - Reticulum Network Stack 1.0.0 documentation</title> <title>Understanding Reticulum - Reticulum Network Stack 1.0.1 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" /> <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=189ec851f9bb375a2509b67be1f64f0cf212b702" /> <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" /> <link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" /> <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=8dab3a3b" />
<link rel="stylesheet" type="text/css" href="_static/custom.css" /> <link rel="stylesheet" type="text/css" href="_static/custom.css?v=bb3cebc5" />
<style> <style>
body { body {
--color-code-background: #f8f8f8; --color-code-background: #f2f2f2;
--color-code-foreground: black; --color-code-foreground: #1e1e1e;
} }
@media not print { @media not print {
@ -86,7 +87,7 @@
<symbol id="svg-sun" viewBox="0 0 24 24"> <symbol id="svg-sun" viewBox="0 0 24 24">
<title>Light mode</title> <title>Light mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
<circle cx="12" cy="12" r="5"></circle> <circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line> <line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line> <line x1="12" y1="21" x2="12" y2="23"></line>
@ -101,34 +102,73 @@
<symbol id="svg-moon" viewBox="0 0 24 24"> <symbol id="svg-moon" viewBox="0 0 24 24">
<title>Dark mode</title> <title>Dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
<path stroke="none" d="M0 0h24v24H0z" fill="none" /> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" /> <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
</svg> </svg>
</symbol> </symbol>
<symbol id="svg-sun-half" viewBox="0 0 24 24"> <symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
<title>Auto light/dark mode</title> <title>Auto light/dark, in light mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> class="icon-custom-derived-from-feather-sun-and-tabler-moon">
<circle cx="12" cy="12" r="9" /> <path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
<path d="M13 12h5" /> <line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
<path d="M13 15h4" /> <line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
<path d="M13 18h1" /> <line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
<path d="M13 9h4" /> <line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
<path d="M13 6h1" /> <line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
<circle cx="14.5" cy="9.55" r="3.6"/>
</svg>
</symbol>
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
<title>Auto light/dark, in dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
</svg>
</symbol>
<symbol id="svg-pencil" viewBox="0 0 24 24">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
<path d="M13.5 6.5l4 4" />
<path d="M20 21l2 -2l-2 -2" />
<path d="M17 17l-2 2l2 2" />
</svg>
</symbol>
<symbol id="svg-eye" viewBox="0 0 24 24">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
<path
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
<path d="M20 21l2 -2l-2 -2" />
<path d="M17 17l-2 2l2 2" />
</svg> </svg>
</symbol> </symbol>
</svg> </svg>
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation"> <input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc"> <input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
<label class="overlay sidebar-overlay" for="__navigation"> <label class="overlay sidebar-overlay" for="__navigation"></label>
<div class="visually-hidden">Hide navigation sidebar</div> <label class="overlay toc-overlay" for="__toc"></label>
</label>
<label class="overlay toc-overlay" for="__toc"> <a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
<div class="visually-hidden">Hide table of contents sidebar</div>
</label>
@ -136,38 +176,35 @@
<header class="mobile-header"> <header class="mobile-header">
<div class="header-left"> <div class="header-left">
<label class="nav-overlay-icon" for="__navigation"> <label class="nav-overlay-icon" for="__navigation">
<div class="visually-hidden">Toggle site navigation sidebar</div> <span class="icon"><svg><use href="#svg-menu"></use></svg></span>
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
</label> </label>
</div> </div>
<div class="header-center"> <div class="header-center">
<a href="index.html"><div class="brand">Reticulum Network Stack 1.0.0 documentation</div></a> <a href="index.html"><div class="brand">Reticulum Network Stack 1.0.1 documentation</div></a>
</div> </div>
<div class="header-right"> <div class="header-right">
<div class="theme-toggle-container theme-toggle-header"> <div class="theme-toggle-container theme-toggle-header">
<button class="theme-toggle"> <button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div> <svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg> <svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg> <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg> <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button> </button>
</div> </div>
<label class="toc-overlay-icon toc-header-icon" for="__toc"> <label class="toc-overlay-icon toc-header-icon" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div> <span class="icon"><svg><use href="#svg-toc"></use></svg></span>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label> </label>
</div> </div>
</header> </header>
<aside class="sidebar-drawer"> <aside class="sidebar-drawer">
<div class="sidebar-container"> <div class="sidebar-container">
<div class="sidebar-sticky"><a class="sidebar-brand centered" href="index.html"> <div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
<div class="sidebar-logo-container"> <div class="sidebar-logo-container">
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/> <img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
</div> </div>
<span class="sidebar-brand-text">Reticulum Network Stack 1.0.0 documentation</span> <span class="sidebar-brand-text">Reticulum Network Stack 1.0.1 documentation</span>
</a><form class="sidebar-search-container" method="get" action="search.html" role="search"> </a><form class="sidebar-search-container" method="get" action="search.html" role="search">
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search"> <input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
@ -183,8 +220,8 @@
<li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li> <li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li>
<li class="toctree-l1"><a class="reference internal" href="interfaces.html">Configuring Interfaces</a></li> <li class="toctree-l1"><a class="reference internal" href="interfaces.html">Configuring Interfaces</a></li>
<li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li> <li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
<li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li> <li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
</ul> </ul>
<ul> <ul>
<li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li> <li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li>
@ -208,21 +245,20 @@
</a> </a>
<div class="content-icon-container"> <div class="content-icon-container">
<div class="theme-toggle-container theme-toggle-content"> <div class="theme-toggle-container theme-toggle-content">
<button class="theme-toggle"> <button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div> <svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg> <svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg> <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg> <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button> </button>
</div> </div>
<label class="toc-overlay-icon toc-content-icon" for="__toc"> <label class="toc-overlay-icon toc-content-icon" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div> <span class="icon"><svg><use href="#svg-toc"></use></svg></span>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label> </label>
</div> </div>
<article role="main"> <article role="main" id="furo-main-content">
<section id="understanding-reticulum"> <section id="understanding-reticulum">
<span id="understanding-main"></span><h1>Understanding Reticulum<a class="headerlink" href="#understanding-reticulum" title="Permalink to this heading">#</a></h1> <span id="understanding-main"></span><h1>Understanding Reticulum<a class="headerlink" href="#understanding-reticulum" title="Link to this heading"></a></h1>
<p>This chapter will briefly describe the overall purpose and operating principles of Reticulum. <p>This chapter will briefly describe the overall purpose and operating principles of Reticulum.
It should give you an overview of how the stack works, and an understanding of how to It should give you an overview of how the stack works, and an understanding of how to
develop networked applications using Reticulum.</p> develop networked applications using Reticulum.</p>
@ -237,7 +273,7 @@ development, this is also the place to start, since it will provide a pretty cle
sentiments and the philosophy behind Reticulum, what problems it seeks to solve, and how it sentiments and the philosophy behind Reticulum, what problems it seeks to solve, and how it
approaches those solutions.</p> approaches those solutions.</p>
<section id="motivation"> <section id="motivation">
<span id="understanding-motivation"></span><h2>Motivation<a class="headerlink" href="#motivation" title="Permalink to this heading">#</a></h2> <span id="understanding-motivation"></span><h2>Motivation<a class="headerlink" href="#motivation" title="Link to this heading"></a></h2>
<p>The primary motivation for designing and implementing Reticulum has been the current lack of <p>The primary motivation for designing and implementing Reticulum has been the current lack of
reliable, functional and secure minimal-infrastructure modes of digital communication. It is my reliable, functional and secure minimal-infrastructure modes of digital communication. It is my
belief that it is highly desirable to create a reliable and efficient way to set up long-range digital belief that it is highly desirable to create a reliable and efficient way to set up long-range digital
@ -265,7 +301,7 @@ kill-switches, surveillance, censorship and control. Networks that can freely in
with each other, and require no central oversight. Networks for human beings. <em>Networks for the people</em>.</p> with each other, and require no central oversight. Networks for human beings. <em>Networks for the people</em>.</p>
</section> </section>
<section id="goals"> <section id="goals">
<span id="understanding-goals"></span><h2>Goals<a class="headerlink" href="#goals" title="Permalink to this heading">#</a></h2> <span id="understanding-goals"></span><h2>Goals<a class="headerlink" href="#goals" title="Link to this heading"></a></h2>
<p>To be as widely usable and efficient to deploy as possible, the following goals have been used to <p>To be as widely usable and efficient to deploy as possible, the following goals have been used to
guide the design of Reticulum:</p> guide the design of Reticulum:</p>
<ul class="simple"> <ul class="simple">
@ -336,7 +372,7 @@ needs to be purchased.</p>
</ul> </ul>
</section> </section>
<section id="introduction-basic-functionality"> <section id="introduction-basic-functionality">
<span id="understanding-basicfunctionality"></span><h2>Introduction &amp; Basic Functionality<a class="headerlink" href="#introduction-basic-functionality" title="Permalink to this heading">#</a></h2> <span id="understanding-basicfunctionality"></span><h2>Introduction &amp; Basic Functionality<a class="headerlink" href="#introduction-basic-functionality" title="Link to this heading"></a></h2>
<p>Reticulum is a networking stack suited for high-latency, low-bandwidth links. Reticulum is at its <p>Reticulum is a networking stack suited for high-latency, low-bandwidth links. Reticulum is at its
core a <em>message oriented</em> system. It is suited for both local point-to-point or point-to-multipoint core a <em>message oriented</em> system. It is suited for both local point-to-point or point-to-multipoint
scenarios where all nodes are within range of each other, as well as scenarios where packets need scenarios where all nodes are within range of each other, as well as scenarios where packets need
@ -371,7 +407,7 @@ unencrypted packets for local broadcast purposes.</p>
and offers the possibility to easily tunnel Reticulum traffic over IP links such as the Internet or and offers the possibility to easily tunnel Reticulum traffic over IP links such as the Internet or
private IP networks.</p> private IP networks.</p>
<section id="destinations"> <section id="destinations">
<span id="understanding-destinations"></span><h3>Destinations<a class="headerlink" href="#destinations" title="Permalink to this heading">#</a></h3> <span id="understanding-destinations"></span><h3>Destinations<a class="headerlink" href="#destinations" title="Link to this heading"></a></h3>
<p>To receive and send data with the Reticulum stack, an application needs to create one or more <p>To receive and send data with the Reticulum stack, an application needs to create one or more
destinations. Reticulum uses three different basic destination types, and one special:</p> destinations. Reticulum uses three different basic destination types, and one special:</p>
<ul class="simple"> <ul class="simple">
@ -414,7 +450,7 @@ out requests and responses, large data transfers and more.</p>
</li> </li>
</ul> </ul>
<section id="destination-naming"> <section id="destination-naming">
<span id="understanding-destinationnaming"></span><h4>Destination Naming<a class="headerlink" href="#destination-naming" title="Permalink to this heading">#</a></h4> <span id="understanding-destinationnaming"></span><h4>Destination Naming<a class="headerlink" href="#destination-naming" title="Link to this heading"></a></h4>
<p>Destinations are created and named in an easy to understand dotted notation of <em>aspects</em>, and <p>Destinations are created and named in an easy to understand dotted notation of <em>aspects</em>, and
represented on the network as a hash of this value. The hash is a SHA-256 truncated to 128 bits. The represented on the network as a hash of this value. The hash is a SHA-256 truncated to 128 bits. The
top level aspect should always be a unique identifier for the application using the destination. top level aspect should always be a unique identifier for the application using the destination.
@ -481,7 +517,7 @@ if there is not a very good reason for doing it differently.</p>
</section> </section>
</section> </section>
<section id="public-key-announcements"> <section id="public-key-announcements">
<span id="understanding-keyannouncements"></span><h3>Public Key Announcements<a class="headerlink" href="#public-key-announcements" title="Permalink to this heading">#</a></h3> <span id="understanding-keyannouncements"></span><h3>Public Key Announcements<a class="headerlink" href="#public-key-announcements" title="Link to this heading"></a></h3>
<p>An <em>announce</em> will send a special packet over any relevant interfaces, containing all needed <p>An <em>announce</em> will send a special packet over any relevant interfaces, containing all needed
information about the destination hash and public key, and can also contain some additional, information about the destination hash and public key, and can also contain some additional,
application specific data. The entire packet is signed by the sender to ensure authenticity. It is not application specific data. The entire packet is signed by the sender to ensure authenticity. It is not
@ -515,7 +551,7 @@ networks it is part of. After a short while, it will be globally reachable in th
<p>Seeing how <em>single</em> destinations are always tied to a private/public key pair leads us to the next topic.</p> <p>Seeing how <em>single</em> destinations are always tied to a private/public key pair leads us to the next topic.</p>
</section> </section>
<section id="understanding-identities"> <section id="understanding-identities">
<span id="identities"></span><h3>Identities<a class="headerlink" href="#understanding-identities" title="Permalink to this heading">#</a></h3> <span id="identities"></span><h3>Identities<a class="headerlink" href="#understanding-identities" title="Link to this heading"></a></h3>
<p>In Reticulum, an <em>identity</em> does not necessarily represent a personal identity, but is an abstraction that <p>In Reticulum, an <em>identity</em> does not necessarily represent a personal identity, but is an abstraction that
can represent any kind of <em>verifiable entity</em>. This could very well be a person, but it could also be the can represent any kind of <em>verifiable entity</em>. This could very well be a person, but it could also be the
control interface of a machine, a program, robot, computer, sensor or something else entirely. In control interface of a machine, a program, robot, computer, sensor or something else entirely. In
@ -533,7 +569,7 @@ Reticulum Identity securely and privately, since obtaining access to the identit
obtaining access and controlling reachability to any destinations created by that identity.</p> obtaining access and controlling reachability to any destinations created by that identity.</p>
</section> </section>
<section id="getting-further"> <section id="getting-further">
<span id="understanding-gettingfurther"></span><h3>Getting Further<a class="headerlink" href="#getting-further" title="Permalink to this heading">#</a></h3> <span id="understanding-gettingfurther"></span><h3>Getting Further<a class="headerlink" href="#getting-further" title="Link to this heading"></a></h3>
<p>The above functions and principles form the core of Reticulum, and would suffice to create <p>The above functions and principles form the core of Reticulum, and would suffice to create
functional networked applications in local clusters, for example over radio links where all interested functional networked applications in local clusters, for example over radio links where all interested
nodes can directly hear each other. But to be truly useful, we need a way to direct traffic over multiple nodes can directly hear each other. But to be truly useful, we need a way to direct traffic over multiple
@ -542,7 +578,7 @@ hops in the network.</p>
</section> </section>
</section> </section>
<section id="reticulum-transport"> <section id="reticulum-transport">
<span id="understanding-transport"></span><h2>Reticulum Transport<a class="headerlink" href="#reticulum-transport" title="Permalink to this heading">#</a></h2> <span id="understanding-transport"></span><h2>Reticulum Transport<a class="headerlink" href="#reticulum-transport" title="Link to this heading"></a></h2>
<p>The methods of routing used in traditional networks are fundamentally incompatible with the physical medium <p>The methods of routing used in traditional networks are fundamentally incompatible with the physical medium
types and circumstances that Reticulum was designed to handle. These mechanisms mostly assume trust at the physical layer, types and circumstances that Reticulum was designed to handle. These mechanisms mostly assume trust at the physical layer,
and often needs a lot more bandwidth than Reticulum can assume is available. Since Reticulum is designed to and often needs a lot more bandwidth than Reticulum can assume is available. Since Reticulum is designed to
@ -553,7 +589,7 @@ destination. It is important to note that no single node in a Reticulum network
path to a destination. Every Transport node participating in a Reticulum network will only path to a destination. Every Transport node participating in a Reticulum network will only
know the most direct way to get a packet one hop closer to its destination.</p> know the most direct way to get a packet one hop closer to its destination.</p>
<section id="node-types"> <section id="node-types">
<span id="understanding-nodetypes"></span><h3>Node Types<a class="headerlink" href="#node-types" title="Permalink to this heading">#</a></h3> <span id="understanding-nodetypes"></span><h3>Node Types<a class="headerlink" href="#node-types" title="Link to this heading"></a></h3>
<p>Currently, Reticulum distinguishes between two types of network nodes. All nodes on a Reticulum network <p>Currently, Reticulum distinguishes between two types of network nodes. All nodes on a Reticulum network
are <em>Reticulum Instances</em>, and some are also <em>Transport Nodes</em>. If a system running Reticulum is fixed in are <em>Reticulum Instances</em>, and some are also <em>Transport Nodes</em>. If a system running Reticulum is fixed in
one place, and is intended to be kept available most of the time, it is a good contender to be a <em>Transport Node</em>.</p> one place, and is intended to be kept available most of the time, it is a good contender to be a <em>Transport Node</em>.</p>
@ -565,7 +601,7 @@ is the default setting.</p>
<p>If it is a <em>Transport Node</em>, it should be given the configuration directive <code class="docutils literal notranslate"><span class="pre">enable_transport</span> <span class="pre">=</span> <span class="pre">Yes</span></code>.</p> <p>If it is a <em>Transport Node</em>, it should be given the configuration directive <code class="docutils literal notranslate"><span class="pre">enable_transport</span> <span class="pre">=</span> <span class="pre">Yes</span></code>.</p>
</section> </section>
<section id="the-announce-mechanism-in-detail"> <section id="the-announce-mechanism-in-detail">
<span id="understanding-announce"></span><h3>The Announce Mechanism in Detail<a class="headerlink" href="#the-announce-mechanism-in-detail" title="Permalink to this heading">#</a></h3> <span id="understanding-announce"></span><h3>The Announce Mechanism in Detail<a class="headerlink" href="#the-announce-mechanism-in-detail" title="Link to this heading"></a></h3>
<p>When an <em>announce</em> for a destination is transmitted by a Reticulum instance, it will be forwarded by <p>When an <em>announce</em> for a destination is transmitted by a Reticulum instance, it will be forwarded by
any transport node receiving it, but according to some specific rules:</p> any transport node receiving it, but according to some specific rules:</p>
<ul> <ul>
@ -630,7 +666,7 @@ end-to-end connectivity in about one minute, given there is enough bandwidth ava
the required amount of announces.</p> the required amount of announces.</p>
</section> </section>
<section id="reaching-the-destination"> <section id="reaching-the-destination">
<span id="understanding-paths"></span><h3>Reaching the Destination<a class="headerlink" href="#reaching-the-destination" title="Permalink to this heading">#</a></h3> <span id="understanding-paths"></span><h3>Reaching the Destination<a class="headerlink" href="#reaching-the-destination" title="Link to this heading"></a></h3>
<p>In networks with changing topology and trustless connectivity, nodes need a way to establish <p>In networks with changing topology and trustless connectivity, nodes need a way to establish
<em>verified connectivity</em> with each other. Since the network is assumed to be trustless, Reticulum <em>verified connectivity</em> with each other. Since the network is assumed to be trustless, Reticulum
must provide a way to guarantee that the peer you are communicating with is actually who you must provide a way to guarantee that the peer you are communicating with is actually who you
@ -737,7 +773,7 @@ by referring to this <em>link id</em>.</p>
a link open is practically negligible, at 0.45 bits per second. Even on a slow 1200 bits per second packet a link open is practically negligible, at 0.45 bits per second. Even on a slow 1200 bits per second packet
radio channel, 100 concurrent links will still leave 96% channel capacity for actual data.</p> radio channel, 100 concurrent links will still leave 96% channel capacity for actual data.</p>
<section id="link-establishment-in-detail"> <section id="link-establishment-in-detail">
<h4>Link Establishment in Detail<a class="headerlink" href="#link-establishment-in-detail" title="Permalink to this heading">#</a></h4> <h4>Link Establishment in Detail<a class="headerlink" href="#link-establishment-in-detail" title="Link to this heading"></a></h4>
<p>After exploring the basics of the announce mechanism, finding a path through the network, and an overview <p>After exploring the basics of the announce mechanism, finding a path through the network, and an overview
of the link establishment procedure, this section will go into greater detail about the Reticulum link of the link establishment procedure, this section will go into greater detail about the Reticulum link
establishment process.</p> establishment process.</p>
@ -812,7 +848,7 @@ automate retransmissions if <em>Resources</em> are used.</p>
</section> </section>
</section> </section>
<section id="resources"> <section id="resources">
<span id="understanding-resources"></span><h3>Resources<a class="headerlink" href="#resources" title="Permalink to this heading">#</a></h3> <span id="understanding-resources"></span><h3>Resources<a class="headerlink" href="#resources" title="Link to this heading"></a></h3>
<p>For exchanging small amounts of data over a Reticulum network, the <a class="reference internal" href="reference.html#api-packet"><span class="std std-ref">Packet</span></a> interface <p>For exchanging small amounts of data over a Reticulum network, the <a class="reference internal" href="reference.html#api-packet"><span class="std std-ref">Packet</span></a> interface
is sufficient, but for exchanging data that would require many packets, an efficient way to coordinate is sufficient, but for exchanging data that would require many packets, an efficient way to coordinate
the transfer is needed.</p> the transfer is needed.</p>
@ -826,7 +862,7 @@ or stream data directly from files.</p>
</section> </section>
</section> </section>
<section id="reference-setup"> <section id="reference-setup">
<span id="understanding-referencesystem"></span><h2>Reference Setup<a class="headerlink" href="#reference-setup" title="Permalink to this heading">#</a></h2> <span id="understanding-referencesystem"></span><h2>Reference Setup<a class="headerlink" href="#reference-setup" title="Link to this heading"></a></h2>
<p>This section will detail a recommended <em>Reference Setup</em> for Reticulum. It is important to <p>This section will detail a recommended <em>Reference Setup</em> for Reticulum. It is important to
note that Reticulum is designed to be usable on more or less any computing device, and over more note that Reticulum is designed to be usable on more or less any computing device, and over more
or less any medium that allows you to send and receive data, which satisfies some very low or less any medium that allows you to send and receive data, which satisfies some very low
@ -894,18 +930,18 @@ even if you have none of the hardware already, and need to purchase everything.<
tailor it to your own specific needs, or whatever hardware you have available.</p> tailor it to your own specific needs, or whatever hardware you have available.</p>
</section> </section>
<section id="protocol-specifics"> <section id="protocol-specifics">
<span id="understanding-protocolspecifics"></span><h2>Protocol Specifics<a class="headerlink" href="#protocol-specifics" title="Permalink to this heading">#</a></h2> <span id="understanding-protocolspecifics"></span><h2>Protocol Specifics<a class="headerlink" href="#protocol-specifics" title="Link to this heading"></a></h2>
<p>This chapter will detail protocol specific information that is essential to the implementation of <p>This chapter will detail protocol specific information that is essential to the implementation of
Reticulum, but non critical in understanding how the protocol works on a general level. It should be Reticulum, but non critical in understanding how the protocol works on a general level. It should be
treated more as a reference than as essential reading.</p> treated more as a reference than as essential reading.</p>
<section id="packet-prioritisation"> <section id="packet-prioritisation">
<h3>Packet Prioritisation<a class="headerlink" href="#packet-prioritisation" title="Permalink to this heading">#</a></h3> <h3>Packet Prioritisation<a class="headerlink" href="#packet-prioritisation" title="Link to this heading"></a></h3>
<p>Currently, Reticulum is completely priority-agnostic regarding general traffic. All traffic is handled <p>Currently, Reticulum is completely priority-agnostic regarding general traffic. All traffic is handled
on a first-come, first-serve basis. Announce re-transmission are handled according to the re-transmission on a first-come, first-serve basis. Announce re-transmission are handled according to the re-transmission
times and priorities described earlier in this chapter.</p> times and priorities described earlier in this chapter.</p>
</section> </section>
<section id="interface-access-codes"> <section id="interface-access-codes">
<h3>Interface Access Codes<a class="headerlink" href="#interface-access-codes" title="Permalink to this heading">#</a></h3> <h3>Interface Access Codes<a class="headerlink" href="#interface-access-codes" title="Link to this heading"></a></h3>
<p>Reticulum can create named virtual networks, and networks that are only accessible by knowing a preshared <p>Reticulum can create named virtual networks, and networks that are only accessible by knowing a preshared
passphrase. The configuration of this is detailed in the <a class="reference internal" href="interfaces.html#interfaces-options"><span class="std std-ref">Common Interface Options</span></a> passphrase. The configuration of this is detailed in the <a class="reference internal" href="interfaces.html#interfaces-options"><span class="std std-ref">Common Interface Options</span></a>
section. To implement these feature, Reticulum uses the concept of Interface Access Codes, that are calculated section. To implement these feature, Reticulum uses the concept of Interface Access Codes, that are calculated
@ -920,7 +956,7 @@ does not. This ensures that only packets sent with the correct naming and/or pas
pass onto the network.</p> pass onto the network.</p>
</section> </section>
<section id="wire-format"> <section id="wire-format">
<span id="understanding-packetformat"></span><h3>Wire Format<a class="headerlink" href="#wire-format" title="Permalink to this heading">#</a></h3> <span id="understanding-packetformat"></span><h3>Wire Format<a class="headerlink" href="#wire-format" title="Link to this heading"></a></h3>
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>== Reticulum Wire Format ====== <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>== Reticulum Wire Format ======
A Reticulum packet is composed of the following fields: A Reticulum packet is composed of the following fields:
@ -1052,7 +1088,7 @@ but excluding any interface access codes.
</div> </div>
</section> </section>
<section id="announce-propagation-rules"> <section id="announce-propagation-rules">
<span id="understanding-announcepropagation"></span><h3>Announce Propagation Rules<a class="headerlink" href="#announce-propagation-rules" title="Permalink to this heading">#</a></h3> <span id="understanding-announcepropagation"></span><h3>Announce Propagation Rules<a class="headerlink" href="#announce-propagation-rules" title="Link to this heading"></a></h3>
<p>The following table illustrates the rules for automatically propagating announces <p>The following table illustrates the rules for automatically propagating announces
from one interface type to another, for all possible combinations. For the purpose from one interface type to another, for all possible combinations. For the purpose
of announce propagation, the <em>Full</em> and <em>Gateway</em> modes are identical.</p> of announce propagation, the <em>Full</em> and <em>Gateway</em> modes are identical.</p>
@ -1061,7 +1097,7 @@ of announce propagation, the <em>Full</em> and <em>Gateway</em> modes are identi
of the different interface modes, and how they are configured.</p> of the different interface modes, and how they are configured.</p>
</section> </section>
<section id="cryptographic-primitives"> <section id="cryptographic-primitives">
<span id="understanding-primitives"></span><h3>Cryptographic Primitives<a class="headerlink" href="#cryptographic-primitives" title="Permalink to this heading">#</a></h3> <span id="understanding-primitives"></span><h3>Cryptographic Primitives<a class="headerlink" href="#cryptographic-primitives" title="Link to this heading"></a></h3>
<p>Reticulum uses a simple suite of efficient, strong and well-tested cryptographic <p>Reticulum uses a simple suite of efficient, strong and well-tested cryptographic
primitives, with widely available implementations that can be used both on primitives, with widely available implementations that can be used both on
general-purpose CPUs and on microcontrollers.</p> general-purpose CPUs and on microcontrollers.</p>
@ -1144,18 +1180,16 @@ those risks are acceptable to you.</p>
<div class="bottom-of-page"> <div class="bottom-of-page">
<div class="left-details"> <div class="left-details">
<div class="copyright"> <div class="copyright">
Copyright &#169; 2023, Mark Qvist Copyright &#169; 2025, Mark Qvist
</div> </div>
Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and
<a href="https://github.com/pradyunsg/furo">Furo</a> <a href="https://github.com/pradyunsg/furo">Furo</a>
</div> </div>
<div class="right-details"> <div class="right-details">
<div class="icons">
</div> </div>
</div> </div>
</div>
</footer> </footer>
</div> </div>
@ -1214,14 +1248,11 @@ those risks are acceptable to you.</p>
</aside> </aside>
</div> </div>
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> </div><script src="_static/documentation_options.js?v=292eb321"></script>
<script src="_static/jquery.js"></script> <script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/underscore.js"></script> <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script> <script src="_static/scripts/furo.js?v=46bd48cc"></script>
<script src="_static/doctools.js"></script> <script src="_static/clipboard.min.js?v=a7894cd8"></script>
<script src="_static/sphinx_highlight.js"></script> <script src="_static/copybutton.js?v=f281be69"></script>
<script src="_static/scripts/furo.js"></script>
<script src="_static/clipboard.min.js"></script>
<script src="_static/copybutton.js"></script>
</body> </body>
</html> </html>

View file

@ -1,25 +1,26 @@
<!doctype html> <!doctype html>
<html class="no-js" lang="en"> <html class="no-js" lang="en" data-content_root="./">
<head><meta charset="utf-8"/> <head><meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1"/> <meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Understanding Reticulum" href="understanding.html" /><link rel="prev" title="Getting Started Fast" href="gettingstartedfast.html" /> <link rel="index" title="Index" href="genindex.html"><link rel="search" title="Search" href="search.html"><link rel="next" title="Understanding Reticulum" href="understanding.html"><link rel="prev" title="Getting Started Fast" href="gettingstartedfast.html">
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
<meta name="generator" content="sphinx-5.3.0, furo 2022.09.29.dev1"/> <!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
<title>Using Reticulum on Your System - Reticulum Network Stack 1.0.0 documentation</title> <title>Using Reticulum on Your System - Reticulum Network Stack 1.0.1 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" /> <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=189ec851f9bb375a2509b67be1f64f0cf212b702" /> <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" /> <link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" /> <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=8dab3a3b" />
<link rel="stylesheet" type="text/css" href="_static/custom.css" /> <link rel="stylesheet" type="text/css" href="_static/custom.css?v=bb3cebc5" />
<style> <style>
body { body {
--color-code-background: #f8f8f8; --color-code-background: #f2f2f2;
--color-code-foreground: black; --color-code-foreground: #1e1e1e;
} }
@media not print { @media not print {
@ -86,7 +87,7 @@
<symbol id="svg-sun" viewBox="0 0 24 24"> <symbol id="svg-sun" viewBox="0 0 24 24">
<title>Light mode</title> <title>Light mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
<circle cx="12" cy="12" r="5"></circle> <circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line> <line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line> <line x1="12" y1="21" x2="12" y2="23"></line>
@ -101,34 +102,73 @@
<symbol id="svg-moon" viewBox="0 0 24 24"> <symbol id="svg-moon" viewBox="0 0 24 24">
<title>Dark mode</title> <title>Dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
<path stroke="none" d="M0 0h24v24H0z" fill="none" /> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" /> <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
</svg> </svg>
</symbol> </symbol>
<symbol id="svg-sun-half" viewBox="0 0 24 24"> <symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
<title>Auto light/dark mode</title> <title>Auto light/dark, in light mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> class="icon-custom-derived-from-feather-sun-and-tabler-moon">
<circle cx="12" cy="12" r="9" /> <path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
<path d="M13 12h5" /> <line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
<path d="M13 15h4" /> <line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
<path d="M13 18h1" /> <line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
<path d="M13 9h4" /> <line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
<path d="M13 6h1" /> <line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
<circle cx="14.5" cy="9.55" r="3.6"/>
</svg>
</symbol>
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
<title>Auto light/dark, in dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
</svg>
</symbol>
<symbol id="svg-pencil" viewBox="0 0 24 24">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
<path d="M13.5 6.5l4 4" />
<path d="M20 21l2 -2l-2 -2" />
<path d="M17 17l-2 2l2 2" />
</svg>
</symbol>
<symbol id="svg-eye" viewBox="0 0 24 24">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
<path
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
<path d="M20 21l2 -2l-2 -2" />
<path d="M17 17l-2 2l2 2" />
</svg> </svg>
</symbol> </symbol>
</svg> </svg>
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation"> <input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc"> <input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
<label class="overlay sidebar-overlay" for="__navigation"> <label class="overlay sidebar-overlay" for="__navigation"></label>
<div class="visually-hidden">Hide navigation sidebar</div> <label class="overlay toc-overlay" for="__toc"></label>
</label>
<label class="overlay toc-overlay" for="__toc"> <a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
<div class="visually-hidden">Hide table of contents sidebar</div>
</label>
@ -136,38 +176,35 @@
<header class="mobile-header"> <header class="mobile-header">
<div class="header-left"> <div class="header-left">
<label class="nav-overlay-icon" for="__navigation"> <label class="nav-overlay-icon" for="__navigation">
<div class="visually-hidden">Toggle site navigation sidebar</div> <span class="icon"><svg><use href="#svg-menu"></use></svg></span>
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
</label> </label>
</div> </div>
<div class="header-center"> <div class="header-center">
<a href="index.html"><div class="brand">Reticulum Network Stack 1.0.0 documentation</div></a> <a href="index.html"><div class="brand">Reticulum Network Stack 1.0.1 documentation</div></a>
</div> </div>
<div class="header-right"> <div class="header-right">
<div class="theme-toggle-container theme-toggle-header"> <div class="theme-toggle-container theme-toggle-header">
<button class="theme-toggle"> <button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div> <svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg> <svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg> <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg> <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button> </button>
</div> </div>
<label class="toc-overlay-icon toc-header-icon" for="__toc"> <label class="toc-overlay-icon toc-header-icon" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div> <span class="icon"><svg><use href="#svg-toc"></use></svg></span>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label> </label>
</div> </div>
</header> </header>
<aside class="sidebar-drawer"> <aside class="sidebar-drawer">
<div class="sidebar-container"> <div class="sidebar-container">
<div class="sidebar-sticky"><a class="sidebar-brand centered" href="index.html"> <div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
<div class="sidebar-logo-container"> <div class="sidebar-logo-container">
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/> <img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
</div> </div>
<span class="sidebar-brand-text">Reticulum Network Stack 1.0.0 documentation</span> <span class="sidebar-brand-text">Reticulum Network Stack 1.0.1 documentation</span>
</a><form class="sidebar-search-container" method="get" action="search.html" role="search"> </a><form class="sidebar-search-container" method="get" action="search.html" role="search">
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search"> <input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
@ -183,8 +220,8 @@
<li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li> <li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li>
<li class="toctree-l1"><a class="reference internal" href="interfaces.html">Configuring Interfaces</a></li> <li class="toctree-l1"><a class="reference internal" href="interfaces.html">Configuring Interfaces</a></li>
<li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li> <li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
<li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li> <li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
</ul> </ul>
<ul> <ul>
<li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li> <li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li>
@ -208,21 +245,20 @@
</a> </a>
<div class="content-icon-container"> <div class="content-icon-container">
<div class="theme-toggle-container theme-toggle-content"> <div class="theme-toggle-container theme-toggle-content">
<button class="theme-toggle"> <button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div> <svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg> <svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg> <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg> <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button> </button>
</div> </div>
<label class="toc-overlay-icon toc-content-icon" for="__toc"> <label class="toc-overlay-icon toc-content-icon" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div> <span class="icon"><svg><use href="#svg-toc"></use></svg></span>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label> </label>
</div> </div>
<article role="main"> <article role="main" id="furo-main-content">
<section id="using-reticulum-on-your-system"> <section id="using-reticulum-on-your-system">
<span id="using-main"></span><h1>Using Reticulum on Your System<a class="headerlink" href="#using-reticulum-on-your-system" title="Permalink to this heading">#</a></h1> <span id="using-main"></span><h1>Using Reticulum on Your System<a class="headerlink" href="#using-reticulum-on-your-system" title="Link to this heading"></a></h1>
<p>Reticulum is not installed as a driver or kernel module, as one might expect <p>Reticulum is not installed as a driver or kernel module, as one might expect
of a networking stack. Instead, Reticulum is distributed as a Python module, of a networking stack. Instead, Reticulum is distributed as a Python module,
containing the networking core, and a set of utility and daemon programs.</p> containing the networking core, and a set of utility and daemon programs.</p>
@ -239,7 +275,7 @@ running instance is simply shared. This works for any number of programs running
concurrently, and is very easy to use, but depending on your use case, there concurrently, and is very easy to use, but depending on your use case, there
are other options.</p> are other options.</p>
<section id="configuration-data"> <section id="configuration-data">
<h2>Configuration &amp; Data<a class="headerlink" href="#configuration-data" title="Permalink to this heading">#</a></h2> <h2>Configuration &amp; Data<a class="headerlink" href="#configuration-data" title="Link to this heading"></a></h2>
<p>Reticulum stores all information that it needs to function in a single file-system <p>Reticulum stores all information that it needs to function in a single file-system
directory. When Reticulum is started, it will look for a valid configuration directory. When Reticulum is started, it will look for a valid configuration
directory in the following places:</p> directory in the following places:</p>
@ -263,7 +299,7 @@ if the configuration allows for it, which it does by default.</p>
<p>The entire configuration of Reticulum is found in the <code class="docutils literal notranslate"><span class="pre">~/.reticulum/config</span></code> <p>The entire configuration of Reticulum is found in the <code class="docutils literal notranslate"><span class="pre">~/.reticulum/config</span></code>
file. When Reticulum is first started on a new system, a basic, but fully functional file. When Reticulum is first started on a new system, a basic, but fully functional
configuration file is created. The default configuration looks like this:</p> configuration file is created. The default configuration looks like this:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># This is the default Reticulum config file.</span> <div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="c1"># This is the default Reticulum config file.</span>
<span class="c1"># You should probably edit it to include any additional,</span> <span class="c1"># You should probably edit it to include any additional,</span>
<span class="c1"># interfaces and settings you might need.</span> <span class="c1"># interfaces and settings you might need.</span>
@ -273,7 +309,7 @@ configuration file is created. The default configuration looks like this:</p>
<span class="c1"># rnsd --exampleconfig</span> <span class="c1"># rnsd --exampleconfig</span>
<span class="p">[</span><span class="n">reticulum</span><span class="p">]</span> <span class="k">[reticulum]</span>
<span class="c1"># If you enable Transport, your system will route traffic</span> <span class="c1"># If you enable Transport, your system will route traffic</span>
<span class="c1"># for other peers, pass announces and serve path requests.</span> <span class="c1"># for other peers, pass announces and serve path requests.</span>
@ -282,7 +318,7 @@ configuration file is created. The default configuration looks like this:</p>
<span class="c1"># always-on. This directive is optional and can be removed</span> <span class="c1"># always-on. This directive is optional and can be removed</span>
<span class="c1"># for brevity.</span> <span class="c1"># for brevity.</span>
<span class="n">enable_transport</span> <span class="o">=</span> <span class="n">No</span> <span class="na">enable_transport</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">No</span>
<span class="c1"># By default, the first program to launch the Reticulum</span> <span class="c1"># By default, the first program to launch the Reticulum</span>
@ -294,7 +330,7 @@ configuration file is created. The default configuration looks like this:</p>
<span class="c1"># user, and should generally be turned on. This directive</span> <span class="c1"># user, and should generally be turned on. This directive</span>
<span class="c1"># is optional and can be removed for brevity.</span> <span class="c1"># is optional and can be removed for brevity.</span>
<span class="n">share_instance</span> <span class="o">=</span> <span class="n">Yes</span> <span class="na">share_instance</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">Yes</span>
<span class="c1"># If you want to run multiple *different* shared instances</span> <span class="c1"># If you want to run multiple *different* shared instances</span>
@ -302,7 +338,7 @@ configuration file is created. The default configuration looks like this:</p>
<span class="c1"># instance names for each. On platforms supporting domain</span> <span class="c1"># instance names for each. On platforms supporting domain</span>
<span class="c1"># sockets, this can be done with the instance_name option:</span> <span class="c1"># sockets, this can be done with the instance_name option:</span>
<span class="n">instance_name</span> <span class="o">=</span> <span class="n">default</span> <span class="na">instance_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">default</span>
<span class="c1"># Some platforms don&#39;t support domain sockets, and if that</span> <span class="c1"># Some platforms don&#39;t support domain sockets, and if that</span>
<span class="c1"># is the case, you can isolate different instances by</span> <span class="c1"># is the case, you can isolate different instances by</span>
@ -362,7 +398,7 @@ configuration file is created. The default configuration looks like this:</p>
<span class="c1"># respond_to_probes = No</span> <span class="c1"># respond_to_probes = No</span>
<span class="p">[</span><span class="n">logging</span><span class="p">]</span> <span class="k">[logging]</span>
<span class="c1"># Valid log levels are 0 through 7:</span> <span class="c1"># Valid log levels are 0 through 7:</span>
<span class="c1"># 0: Log only critical information</span> <span class="c1"># 0: Log only critical information</span>
<span class="c1"># 1: Log errors and lower log levels</span> <span class="c1"># 1: Log errors and lower log levels</span>
@ -373,7 +409,7 @@ configuration file is created. The default configuration looks like this:</p>
<span class="c1"># 6: Debug logging</span> <span class="c1"># 6: Debug logging</span>
<span class="c1"># 7: Extreme logging</span> <span class="c1"># 7: Extreme logging</span>
<span class="n">loglevel</span> <span class="o">=</span> <span class="mi">4</span> <span class="na">loglevel</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">4</span>
<span class="c1"># The interfaces section defines the physical and virtual</span> <span class="c1"># The interfaces section defines the physical and virtual</span>
@ -382,19 +418,19 @@ configuration file is created. The default configuration looks like this:</p>
<span class="c1"># types. You can modify these or use them as a basis for</span> <span class="c1"># types. You can modify these or use them as a basis for</span>
<span class="c1"># your own config, or simply remove the unused ones.</span> <span class="c1"># your own config, or simply remove the unused ones.</span>
<span class="p">[</span><span class="n">interfaces</span><span class="p">]</span> <span class="k">[interfaces]</span>
<span class="c1"># This interface enables communication with other</span> <span class="w"> </span><span class="c1"># This interface enables communication with other</span>
<span class="c1"># link-local Reticulum nodes over UDP. It does not</span> <span class="w"> </span><span class="c1"># link-local Reticulum nodes over UDP. It does not</span>
<span class="c1"># need any functional IP infrastructure like routers</span> <span class="w"> </span><span class="c1"># need any functional IP infrastructure like routers</span>
<span class="c1"># or DHCP servers, but will require that at least link-</span> <span class="w"> </span><span class="c1"># or DHCP servers, but will require that at least link-</span>
<span class="c1"># local IPv6 is enabled in your operating system, which</span> <span class="w"> </span><span class="c1"># local IPv6 is enabled in your operating system, which</span>
<span class="c1"># should be enabled by default in almost any OS. See</span> <span class="w"> </span><span class="c1"># should be enabled by default in almost any OS. See</span>
<span class="c1"># the Reticulum Manual for more configuration options.</span> <span class="w"> </span><span class="c1"># the Reticulum Manual for more configuration options.</span>
<span class="p">[[</span><span class="n">Default</span> <span class="n">Interface</span><span class="p">]]</span> <span class="w"> </span><span class="k">[[Default Interface]]</span>
<span class="nb">type</span> <span class="o">=</span> <span class="n">AutoInterface</span> <span class="w"> </span><span class="na">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">AutoInterface</span>
<span class="n">interface_enabled</span> <span class="o">=</span> <span class="kc">True</span> <span class="w"> </span><span class="na">interface_enabled</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">True</span>
</pre></div> </pre></div>
</div> </div>
<p>If Reticulum infrastructure already exists locally, you probably dont need to <p>If Reticulum infrastructure already exists locally, you probably dont need to
@ -411,7 +447,7 @@ Once you have done that, take a look at the <a class="reference internal" href="
of this manual.</p> of this manual.</p>
</section> </section>
<section id="included-utility-programs"> <section id="included-utility-programs">
<h2>Included Utility Programs<a class="headerlink" href="#included-utility-programs" title="Permalink to this heading">#</a></h2> <h2>Included Utility Programs<a class="headerlink" href="#included-utility-programs" title="Link to this heading"></a></h2>
<p>Reticulum includes a range of useful utilities, both for managing your Reticulum <p>Reticulum includes a range of useful utilities, both for managing your Reticulum
networks, and for carrying out common tasks over Reticulum networks, such as networks, and for carrying out common tasks over Reticulum networks, such as
transferring files to remote systems, and executing commands and programs remotely.</p> transferring files to remote systems, and executing commands and programs remotely.</p>
@ -420,7 +456,7 @@ Reticulum to stay available all the time, for example if you are hosting
a transport node, you might want to run Reticulum as a separate service that a transport node, you might want to run Reticulum as a separate service that
other programs, applications and services can utilise.</p> other programs, applications and services can utilise.</p>
<section id="the-rnsd-utility"> <section id="the-rnsd-utility">
<h3>The rnsd Utility<a class="headerlink" href="#the-rnsd-utility" title="Permalink to this heading">#</a></h3> <h3>The rnsd Utility<a class="headerlink" href="#the-rnsd-utility" title="Link to this heading"></a></h3>
<p>It is very easy to run Reticulum as a service. Simply run the included <code class="docutils literal notranslate"><span class="pre">rnsd</span></code> command. <p>It is very easy to run Reticulum as a service. Simply run the included <code class="docutils literal notranslate"><span class="pre">rnsd</span></code> command.
When <code class="docutils literal notranslate"><span class="pre">rnsd</span></code> is running, it will keep all configured interfaces open, handle transport if When <code class="docutils literal notranslate"><span class="pre">rnsd</span></code> is running, it will keep all configured interfaces open, handle transport if
it is enabled, and allow any other programs to immediately utilise the it is enabled, and allow any other programs to immediately utilise the
@ -454,6 +490,7 @@ options:
-v, --verbose -v, --verbose
-q, --quiet -q, --quiet
-s, --service rnsd is running as a service and should log to file -s, --service rnsd is running as a service and should log to file
-i, --interactive drop into interactive shell after initialisation
--exampleconfig print verbose configuration example to stdout and exit --exampleconfig print verbose configuration example to stdout and exit
--version show program&#39;s version number and exit --version show program&#39;s version number and exit
</pre></div> </pre></div>
@ -461,7 +498,7 @@ options:
<p>You can easily add <code class="docutils literal notranslate"><span class="pre">rnsd</span></code> as an always-on service by <a class="reference internal" href="#using-systemd"><span class="std std-ref">configuring a service</span></a>.</p> <p>You can easily add <code class="docutils literal notranslate"><span class="pre">rnsd</span></code> as an always-on service by <a class="reference internal" href="#using-systemd"><span class="std std-ref">configuring a service</span></a>.</p>
</section> </section>
<section id="the-rnstatus-utility"> <section id="the-rnstatus-utility">
<h3>The rnstatus Utility<a class="headerlink" href="#the-rnstatus-utility" title="Permalink to this heading">#</a></h3> <h3>The rnstatus Utility<a class="headerlink" href="#the-rnstatus-utility" title="Link to this heading"></a></h3>
<p>Using the <code class="docutils literal notranslate"><span class="pre">rnstatus</span></code> utility, you can view the status of configured Reticulum <p>Using the <code class="docutils literal notranslate"><span class="pre">rnstatus</span></code> utility, you can view the status of configured Reticulum
interfaces, similar to the <code class="docutils literal notranslate"><span class="pre">ifconfig</span></code> program.</p> interfaces, similar to the <code class="docutils literal notranslate"><span class="pre">ifconfig</span></code> program.</p>
<p><strong>Usage Examples</strong></p> <p><strong>Usage Examples</strong></p>
@ -547,7 +584,7 @@ options:
</div> </div>
</section> </section>
<section id="the-rnid-utility"> <section id="the-rnid-utility">
<h3>The rnid Utility<a class="headerlink" href="#the-rnid-utility" title="Permalink to this heading">#</a></h3> <h3>The rnid Utility<a class="headerlink" href="#the-rnid-utility" title="Link to this heading"></a></h3>
<p>With the <code class="docutils literal notranslate"><span class="pre">rnid</span></code> utility, you can generate, manage and view Reticulum Identities. <p>With the <code class="docutils literal notranslate"><span class="pre">rnid</span></code> utility, you can generate, manage and view Reticulum Identities.
The program can also calculate Destination hashes, and perform encryption and The program can also calculate Destination hashes, and perform encryption and
decryption of files.</p> decryption of files.</p>
@ -601,37 +638,36 @@ Reticulum Identity &amp; Encryption Utility
options: options:
-h, --help show this help message and exit -h, --help show this help message and exit
--config path path to alternative Reticulum config directory --config path path to alternative Reticulum config directory
-i identity, --identity identity -i, --identity identity
hexadecimal Reticulum Destination hash or path to Identity file hexadecimal Reticulum identity or destination hash, or path to Identity file
-g path, --generate path -g, --generate file generate a new Identity
generate a new Identity -m, --import identity_data
import Reticulum identity in hex, base32 or base64 format
-x, --export export identity to hex, base32 or base64 format
-v, --verbose increase verbosity -v, --verbose increase verbosity
-q, --quiet decrease verbosity -q, --quiet decrease verbosity
-a aspects, --announce aspects -a, --announce aspects
announce a destination based on this Identity announce a destination based on this Identity
-H aspects, --hash aspects -H, --hash aspects show destination hashes for other aspects for this Identity
show destination hashes for other aspects for this Identity -e, --encrypt file encrypt file
-e path, --encrypt path -d, --decrypt file decrypt file
encrypt file -s, --sign path sign file
-d path, --decrypt path -V, --validate path validate signature
decrypt file -r, --read file input file path
-s path, --sign path sign file -w, --write file output file path
-V path, --validate path
validate signature
-r path, --read path input file path
-w path, --write path
output file path
-f, --force write output even if it overwrites existing files -f, --force write output even if it overwrites existing files
-R, --request request unknown Identities from the network -R, --request request unknown Identities from the network
-t seconds identity request timeout before giving up -t seconds identity request timeout before giving up
-p, --print-identity print identity info and exit -p, --print-identity print identity info and exit
-P, --print-private allow displaying private keys -P, --print-private allow displaying private keys
-b, --base64 Use base64-encoded input and output
-B, --base32 Use base32-encoded input and output
--version show program&#39;s version number and exit --version show program&#39;s version number and exit
</pre></div> </pre></div>
</div> </div>
</section> </section>
<section id="the-rnpath-utility"> <section id="the-rnpath-utility">
<h3>The rnpath Utility<a class="headerlink" href="#the-rnpath-utility" title="Permalink to this heading">#</a></h3> <h3>The rnpath Utility<a class="headerlink" href="#the-rnpath-utility" title="Link to this heading"></a></h3>
<p>With the <code class="docutils literal notranslate"><span class="pre">rnpath</span></code> utility, you can look up and view paths for <p>With the <code class="docutils literal notranslate"><span class="pre">rnpath</span></code> utility, you can look up and view paths for
destinations on the Reticulum network.</p> destinations on the Reticulum network.</p>
<p><strong>Usage Examples</strong></p> <p><strong>Usage Examples</strong></p>
@ -671,7 +707,7 @@ options:
</div> </div>
</section> </section>
<section id="the-rnprobe-utility"> <section id="the-rnprobe-utility">
<h3>The rnprobe Utility<a class="headerlink" href="#the-rnprobe-utility" title="Permalink to this heading">#</a></h3> <h3>The rnprobe Utility<a class="headerlink" href="#the-rnprobe-utility" title="Link to this heading"></a></h3>
<p>The <code class="docutils literal notranslate"><span class="pre">rnprobe</span></code> utility lets you probe a destination for connectivity, similar <p>The <code class="docutils literal notranslate"><span class="pre">rnprobe</span></code> utility lets you probe a destination for connectivity, similar
to the <code class="docutils literal notranslate"><span class="pre">ping</span></code> program. Please note that probes will only be answered if the to the <code class="docutils literal notranslate"><span class="pre">ping</span></code> program. Please note that probes will only be answered if the
specified destination is configured to send proofs for received packets. Many specified destination is configured to send proofs for received packets. Many
@ -734,7 +770,7 @@ options:
</div> </div>
</section> </section>
<section id="the-rncp-utility"> <section id="the-rncp-utility">
<h3>The rncp Utility<a class="headerlink" href="#the-rncp-utility" title="Permalink to this heading">#</a></h3> <h3>The rncp Utility<a class="headerlink" href="#the-rncp-utility" title="Link to this heading"></a></h3>
<p>The <code class="docutils literal notranslate"><span class="pre">rncp</span></code> utility is a simple file transfer tool. Using it, you can transfer <p>The <code class="docutils literal notranslate"><span class="pre">rncp</span></code> utility is a simple file transfer tool. Using it, you can transfer
files through Reticulum.</p> files through Reticulum.</p>
<p><strong>Usage Examples</strong></p> <p><strong>Usage Examples</strong></p>
@ -773,20 +809,24 @@ options:
-q, --quiet decrease verbosity -q, --quiet decrease verbosity
-S, --silent disable transfer progress output -S, --silent disable transfer progress output
-l, --listen listen for incoming transfer requests -l, --listen listen for incoming transfer requests
-C, --no-compress disable automatic compression
-F, --allow-fetch allow authenticated clients to fetch files -F, --allow-fetch allow authenticated clients to fetch files
-f, --fetch fetch file from remote listener instead of sending -f, --fetch fetch file from remote listener instead of sending
-j path, --jail path restrict fetch requests to specified path -j, --jail path restrict fetch requests to specified path
-s, --save path save received files in specified path
-O, --overwrite Allow overwriting received files, instead of adding postfix
-b seconds announce interval, 0 to only announce at startup -b seconds announce interval, 0 to only announce at startup
-a allowed_hash allow this identity -a allowed_hash allow this identity (or add in ~/.rncp/allowed_identities)
-n, --no-auth accept requests from anyone -n, --no-auth accept requests from anyone
-p, --print-identity print identity and destination info and exit -p, --print-identity print identity and destination info and exit
-w seconds sender timeout before giving up -w seconds sender timeout before giving up
-P, --phy-rates display physical layer transfer rates
--version show program&#39;s version number and exit --version show program&#39;s version number and exit
</pre></div> </pre></div>
</div> </div>
</section> </section>
<section id="the-rnx-utility"> <section id="the-rnx-utility">
<h3>The rnx Utility<a class="headerlink" href="#the-rnx-utility" title="Permalink to this heading">#</a></h3> <h3>The rnx Utility<a class="headerlink" href="#the-rnx-utility" title="Link to this heading"></a></h3>
<p>The <code class="docutils literal notranslate"><span class="pre">rnx</span></code> utility is a basic remote command execution program. It allows you to <p>The <code class="docutils literal notranslate"><span class="pre">rnx</span></code> utility is a basic remote command execution program. It allows you to
execute commands on remote systems over Reticulum, and to view returned command execute commands on remote systems over Reticulum, and to view returned command
output. For a fully interactive remote shell solution, be sure to also take a look output. For a fully interactive remote shell solution, be sure to also take a look
@ -845,7 +885,7 @@ optional arguments:
</div> </div>
</section> </section>
<section id="the-rnodeconf-utility"> <section id="the-rnodeconf-utility">
<h3>The rnodeconf Utility<a class="headerlink" href="#the-rnodeconf-utility" title="Permalink to this heading">#</a></h3> <h3>The rnodeconf Utility<a class="headerlink" href="#the-rnodeconf-utility" title="Link to this heading"></a></h3>
<p>The <code class="docutils literal notranslate"><span class="pre">rnodeconf</span></code> utility allows you to inspect and configure existing <a class="reference internal" href="hardware.html#rnode-main"><span class="std std-ref">RNodes</span></a>, and <p>The <code class="docutils literal notranslate"><span class="pre">rnodeconf</span></code> utility allows you to inspect and configure existing <a class="reference internal" href="hardware.html#rnode-main"><span class="std std-ref">RNodes</span></a>, and
to create and provision new <a class="reference internal" href="hardware.html#rnode-main"><span class="std std-ref">RNodes</span></a> from any supported hardware devices.</p> to create and provision new <a class="reference internal" href="hardware.html#rnode-main"><span class="std std-ref">RNodes</span></a> from any supported hardware devices.</p>
<p><strong>All Command-Line Options</strong></p> <p><strong>All Command-Line Options</strong></p>
@ -871,31 +911,36 @@ options:
-i, --info Show device info -i, --info Show device info
-a, --autoinstall Automatic installation on various supported devices -a, --autoinstall Automatic installation on various supported devices
-u, --update Update firmware to the latest version -u, --update Update firmware to the latest version
-U, --force-update Update to specified firmware even if version matches -U, --force-update Update to specified firmware even if version matches or is older than installed version
or is older than installed version --fw-version version Use a specific firmware version for update or autoinstall
--fw-version version Use a specific firmware version for update or
autoinstall
--fw-url url Use an alternate firmware download URL --fw-url url Use an alternate firmware download URL
--nocheck Don&#39;t check for firmware updates online --nocheck Don&#39;t check for firmware updates online
-e, --extract Extract firmware from connected RNode for later use -e, --extract Extract firmware from connected RNode for later use
-E, --use-extracted Use the extracted firmware for autoinstallation or -E, --use-extracted Use the extracted firmware for autoinstallation or update
update
-C, --clear-cache Clear locally cached firmware files -C, --clear-cache Clear locally cached firmware files
--baud-flash baud_flash --baud-flash baud_flash
Set specific baud rate when flashing device. Default Set specific baud rate when flashing device. Default is 921600
is 921600
-N, --normal Switch device to normal mode -N, --normal Switch device to normal mode
-T, --tnc Switch device to TNC mode -T, --tnc Switch device to TNC mode
-b, --bluetooth-on Turn device bluetooth on -b, --bluetooth-on Turn device bluetooth on
-B, --bluetooth-off Turn device bluetooth off -B, --bluetooth-off Turn device bluetooth off
-p, --bluetooth-pair Put device into bluetooth pairing mode -p, --bluetooth-pair Put device into bluetooth pairing mode
-D i, --display i Set display intensity (0-255) -D, --display i Set display intensity (0-255)
-t, --timeout s Set display timeout in seconds, 0 to disable
-R, --rotation rotation
Set display rotation, valid values are 0 through 3
--display-addr byte Set display address as hex byte (00 - FF) --display-addr byte Set display address as hex byte (00 - FF)
--recondition-display
Start display reconditioning
--np i Set NeoPixel intensity (0-255)
--freq Hz Frequency in Hz for TNC mode --freq Hz Frequency in Hz for TNC mode
--bw Hz Bandwidth in Hz for TNC mode --bw Hz Bandwidth in Hz for TNC mode
--txp dBm TX power in dBm for TNC mode --txp dBm TX power in dBm for TNC mode
--sf factor Spreading factor for TNC mode (7 - 12) --sf factor Spreading factor for TNC mode (7 - 12)
--cr rate Coding rate for TNC mode (5 - 8) --cr rate Coding rate for TNC mode (5 - 8)
-x, --ia-enable Enable interference avoidance
-X, --ia-disable Disable interference avoidance
-c, --config Print device configuration
--eeprom-backup Backup EEPROM to file --eeprom-backup Backup EEPROM to file
--eeprom-dump Dump EEPROM to console --eeprom-dump Dump EEPROM to console
--eeprom-wipe Unlock and wipe EEPROM --eeprom-wipe Unlock and wipe EEPROM
@ -906,8 +951,8 @@ options:
-r, --rom Bootstrap EEPROM without flashing firmware -r, --rom Bootstrap EEPROM without flashing firmware
-k, --key Generate a new signing key and exit -k, --key Generate a new signing key and exit
-S, --sign Display public part of signing key -S, --sign Display public part of signing key
-H FIRMWARE_HASH, --firmware-hash FIRMWARE_HASH -H, --firmware-hash FIRMWARE_HASH
Display installed firmware hash Set installed firmware hash
--platform platform Platform specification for device bootstrap --platform platform Platform specification for device bootstrap
--product product Product specification for device bootstrap --product product Product specification for device bootstrap
--model model Model code for device bootstrap --model model Model code for device bootstrap
@ -919,7 +964,7 @@ section of this manual.</p>
</section> </section>
</section> </section>
<section id="remote-management"> <section id="remote-management">
<h2>Remote Management<a class="headerlink" href="#remote-management" title="Permalink to this heading">#</a></h2> <h2>Remote Management<a class="headerlink" href="#remote-management" title="Link to this heading"></a></h2>
<p>It is possible to allow remote management of Reticulum <p>It is possible to allow remote management of Reticulum
systems using the various built-in utilities, such as systems using the various built-in utilities, such as
<code class="docutils literal notranslate"><span class="pre">rnstatus</span></code> and <code class="docutils literal notranslate"><span class="pre">rnpath</span></code>. To do so, you will need to set <code class="docutils literal notranslate"><span class="pre">rnstatus</span></code> and <code class="docutils literal notranslate"><span class="pre">rnpath</span></code>. To do so, you will need to set
@ -940,12 +985,12 @@ remote_management_allowed = 9fb6d773498fb3feda407ed8ef2c3229, 2d882c5586e548d79b
<p>For a complete example configuration, you can run <code class="docutils literal notranslate"><span class="pre">rnsd</span> <span class="pre">--exampleconfig</span></code>.</p> <p>For a complete example configuration, you can run <code class="docutils literal notranslate"><span class="pre">rnsd</span> <span class="pre">--exampleconfig</span></code>.</p>
</section> </section>
<section id="improving-system-configuration"> <section id="improving-system-configuration">
<h2>Improving System Configuration<a class="headerlink" href="#improving-system-configuration" title="Permalink to this heading">#</a></h2> <h2>Improving System Configuration<a class="headerlink" href="#improving-system-configuration" title="Link to this heading"></a></h2>
<p>If you are setting up a system for permanent use with Reticulum, there is a <p>If you are setting up a system for permanent use with Reticulum, there is a
few system configuration changes that can make this easier to administrate. few system configuration changes that can make this easier to administrate.
These changes will be detailed here.</p> These changes will be detailed here.</p>
<section id="fixed-serial-port-names"> <section id="fixed-serial-port-names">
<h3>Fixed Serial Port Names<a class="headerlink" href="#fixed-serial-port-names" title="Permalink to this heading">#</a></h3> <h3>Fixed Serial Port Names<a class="headerlink" href="#fixed-serial-port-names" title="Link to this heading"></a></h3>
<p>On a Reticulum instance with several serial port based interfaces, it can be <p>On a Reticulum instance with several serial port based interfaces, it can be
beneficial to use the fixed device names for the serial ports, instead beneficial to use the fixed device names for the serial ports, instead
of the dynamically allocated shorthands such as <code class="docutils literal notranslate"><span class="pre">/dev/ttyUSB0</span></code>. Under most of the dynamically allocated shorthands such as <code class="docutils literal notranslate"><span class="pre">/dev/ttyUSB0</span></code>. Under most
@ -973,11 +1018,11 @@ might be plugged and unplugged in different orders, or when device name
assignment varies from one boot to another.</p> assignment varies from one boot to another.</p>
</section> </section>
<section id="reticulum-as-a-system-service"> <section id="reticulum-as-a-system-service">
<span id="using-systemd"></span><h3>Reticulum as a System Service<a class="headerlink" href="#reticulum-as-a-system-service" title="Permalink to this heading">#</a></h3> <span id="using-systemd"></span><h3>Reticulum as a System Service<a class="headerlink" href="#reticulum-as-a-system-service" title="Link to this heading"></a></h3>
<p>Instead of starting Reticulum manually, you can install <code class="docutils literal notranslate"><span class="pre">rnsd</span></code> as a system <p>Instead of starting Reticulum manually, you can install <code class="docutils literal notranslate"><span class="pre">rnsd</span></code> as a system
service and have it start automatically at boot.</p> service and have it start automatically at boot.</p>
<section id="systemwide-service"> <section id="systemwide-service">
<h4>Systemwide Service<a class="headerlink" href="#systemwide-service" title="Permalink to this heading">#</a></h4> <h4>Systemwide Service<a class="headerlink" href="#systemwide-service" title="Link to this heading"></a></h4>
<p>If you installed Reticulum with <code class="docutils literal notranslate"><span class="pre">pip</span></code>, the <code class="docutils literal notranslate"><span class="pre">rnsd</span></code> program will most likely <p>If you installed Reticulum with <code class="docutils literal notranslate"><span class="pre">pip</span></code>, the <code class="docutils literal notranslate"><span class="pre">rnsd</span></code> program will most likely
be located in a user-local installation path only, which means <code class="docutils literal notranslate"><span class="pre">systemd</span></code> will not be located in a user-local installation path only, which means <code class="docutils literal notranslate"><span class="pre">systemd</span></code> will not
be able to execute it. In this case, you can simply symlink the <code class="docutils literal notranslate"><span class="pre">rnsd</span></code> program be able to execute it. In this case, you can simply symlink the <code class="docutils literal notranslate"><span class="pre">rnsd</span></code> program
@ -1019,7 +1064,7 @@ WantedBy=multi-user.target
</div> </div>
</section> </section>
<section id="userspace-service"> <section id="userspace-service">
<h4>Userspace Service<a class="headerlink" href="#userspace-service" title="Permalink to this heading">#</a></h4> <h4>Userspace Service<a class="headerlink" href="#userspace-service" title="Link to this heading"></a></h4>
<p>Alternatively you can use a user systemd service instead of a system wide one. This way the whole setup can be done as a regular user. <p>Alternatively you can use a user systemd service instead of a system wide one. This way the whole setup can be done as a regular user.
Create a user systemd service files <code class="docutils literal notranslate"><span class="pre">~/.config/systemd/user/rnsd.service</span></code> with the following content:</p> Create a user systemd service files <code class="docutils literal notranslate"><span class="pre">~/.config/systemd/user/rnsd.service</span></code> with the following content:</p>
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>[Unit] <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>[Unit]
@ -1087,18 +1132,16 @@ systemctl --user enable rnsd.service
<div class="bottom-of-page"> <div class="bottom-of-page">
<div class="left-details"> <div class="left-details">
<div class="copyright"> <div class="copyright">
Copyright &#169; 2023, Mark Qvist Copyright &#169; 2025, Mark Qvist
</div> </div>
Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and
<a href="https://github.com/pradyunsg/furo">Furo</a> <a href="https://github.com/pradyunsg/furo">Furo</a>
</div> </div>
<div class="right-details"> <div class="right-details">
<div class="icons">
</div> </div>
</div> </div>
</div>
</footer> </footer>
</div> </div>
@ -1148,14 +1191,11 @@ systemctl --user enable rnsd.service
</aside> </aside>
</div> </div>
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> </div><script src="_static/documentation_options.js?v=292eb321"></script>
<script src="_static/jquery.js"></script> <script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/underscore.js"></script> <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script> <script src="_static/scripts/furo.js?v=46bd48cc"></script>
<script src="_static/doctools.js"></script> <script src="_static/clipboard.min.js?v=a7894cd8"></script>
<script src="_static/sphinx_highlight.js"></script> <script src="_static/copybutton.js?v=f281be69"></script>
<script src="_static/scripts/furo.js"></script>
<script src="_static/clipboard.min.js"></script>
<script src="_static/copybutton.js"></script>
</body> </body>
</html> </html>

View file

@ -1,25 +1,26 @@
<!doctype html> <!doctype html>
<html class="no-js" lang="en"> <html class="no-js" lang="en" data-content_root="./">
<head><meta charset="utf-8"/> <head><meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1"/> <meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Getting Started Fast" href="gettingstartedfast.html" /><link rel="prev" title="Reticulum Network Stack Manual" href="index.html" /> <link rel="index" title="Index" href="genindex.html"><link rel="search" title="Search" href="search.html"><link rel="next" title="Getting Started Fast" href="gettingstartedfast.html"><link rel="prev" title="Reticulum Network Stack Manual" href="index.html">
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
<meta name="generator" content="sphinx-5.3.0, furo 2022.09.29.dev1"/> <!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
<title>What is Reticulum? - Reticulum Network Stack 1.0.0 documentation</title> <title>What is Reticulum? - Reticulum Network Stack 1.0.1 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" /> <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=189ec851f9bb375a2509b67be1f64f0cf212b702" /> <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" /> <link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" /> <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=8dab3a3b" />
<link rel="stylesheet" type="text/css" href="_static/custom.css" /> <link rel="stylesheet" type="text/css" href="_static/custom.css?v=bb3cebc5" />
<style> <style>
body { body {
--color-code-background: #f8f8f8; --color-code-background: #f2f2f2;
--color-code-foreground: black; --color-code-foreground: #1e1e1e;
} }
@media not print { @media not print {
@ -86,7 +87,7 @@
<symbol id="svg-sun" viewBox="0 0 24 24"> <symbol id="svg-sun" viewBox="0 0 24 24">
<title>Light mode</title> <title>Light mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
<circle cx="12" cy="12" r="5"></circle> <circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line> <line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line> <line x1="12" y1="21" x2="12" y2="23"></line>
@ -101,34 +102,73 @@
<symbol id="svg-moon" viewBox="0 0 24 24"> <symbol id="svg-moon" viewBox="0 0 24 24">
<title>Dark mode</title> <title>Dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
<path stroke="none" d="M0 0h24v24H0z" fill="none" /> <path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" /> <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
</svg> </svg>
</symbol> </symbol>
<symbol id="svg-sun-half" viewBox="0 0 24 24"> <symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
<title>Auto light/dark mode</title> <title>Auto light/dark, in light mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow"> stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
<path stroke="none" d="M0 0h24v24H0z" fill="none"/> class="icon-custom-derived-from-feather-sun-and-tabler-moon">
<circle cx="12" cy="12" r="9" /> <path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
<path d="M13 12h5" /> <line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
<path d="M13 15h4" /> <line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
<path d="M13 18h1" /> <line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
<path d="M13 9h4" /> <line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
<path d="M13 6h1" /> <line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
<circle cx="14.5" cy="9.55" r="3.6"/>
</svg>
</symbol>
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
<title>Auto light/dark, in dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
<path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
</svg>
</symbol>
<symbol id="svg-pencil" viewBox="0 0 24 24">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
<path d="M13.5 6.5l4 4" />
<path d="M20 21l2 -2l-2 -2" />
<path d="M17 17l-2 2l2 2" />
</svg>
</symbol>
<symbol id="svg-eye" viewBox="0 0 24 24">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
<path
d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
<path d="M20 21l2 -2l-2 -2" />
<path d="M17 17l-2 2l2 2" />
</svg> </svg>
</symbol> </symbol>
</svg> </svg>
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation"> <input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc"> <input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
<label class="overlay sidebar-overlay" for="__navigation"> <label class="overlay sidebar-overlay" for="__navigation"></label>
<div class="visually-hidden">Hide navigation sidebar</div> <label class="overlay toc-overlay" for="__toc"></label>
</label>
<label class="overlay toc-overlay" for="__toc"> <a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
<div class="visually-hidden">Hide table of contents sidebar</div>
</label>
@ -136,38 +176,35 @@
<header class="mobile-header"> <header class="mobile-header">
<div class="header-left"> <div class="header-left">
<label class="nav-overlay-icon" for="__navigation"> <label class="nav-overlay-icon" for="__navigation">
<div class="visually-hidden">Toggle site navigation sidebar</div> <span class="icon"><svg><use href="#svg-menu"></use></svg></span>
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
</label> </label>
</div> </div>
<div class="header-center"> <div class="header-center">
<a href="index.html"><div class="brand">Reticulum Network Stack 1.0.0 documentation</div></a> <a href="index.html"><div class="brand">Reticulum Network Stack 1.0.1 documentation</div></a>
</div> </div>
<div class="header-right"> <div class="header-right">
<div class="theme-toggle-container theme-toggle-header"> <div class="theme-toggle-container theme-toggle-header">
<button class="theme-toggle"> <button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div> <svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg> <svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg> <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg> <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button> </button>
</div> </div>
<label class="toc-overlay-icon toc-header-icon" for="__toc"> <label class="toc-overlay-icon toc-header-icon" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div> <span class="icon"><svg><use href="#svg-toc"></use></svg></span>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label> </label>
</div> </div>
</header> </header>
<aside class="sidebar-drawer"> <aside class="sidebar-drawer">
<div class="sidebar-container"> <div class="sidebar-container">
<div class="sidebar-sticky"><a class="sidebar-brand centered" href="index.html"> <div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
<div class="sidebar-logo-container"> <div class="sidebar-logo-container">
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/> <img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
</div> </div>
<span class="sidebar-brand-text">Reticulum Network Stack 1.0.0 documentation</span> <span class="sidebar-brand-text">Reticulum Network Stack 1.0.1 documentation</span>
</a><form class="sidebar-search-container" method="get" action="search.html" role="search"> </a><form class="sidebar-search-container" method="get" action="search.html" role="search">
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search"> <input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
@ -183,8 +220,8 @@
<li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li> <li class="toctree-l1"><a class="reference internal" href="hardware.html">Communications Hardware</a></li>
<li class="toctree-l1"><a class="reference internal" href="interfaces.html">Configuring Interfaces</a></li> <li class="toctree-l1"><a class="reference internal" href="interfaces.html">Configuring Interfaces</a></li>
<li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li> <li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
<li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li> <li class="toctree-l1"><a class="reference internal" href="support.html">Support Reticulum</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Code Examples</a></li>
</ul> </ul>
<ul> <ul>
<li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li> <li class="toctree-l1"><a class="reference internal" href="reference.html">API Reference</a></li>
@ -208,21 +245,20 @@
</a> </a>
<div class="content-icon-container"> <div class="content-icon-container">
<div class="theme-toggle-container theme-toggle-content"> <div class="theme-toggle-container theme-toggle-content">
<button class="theme-toggle"> <button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div> <svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg> <svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg> <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg> <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button> </button>
</div> </div>
<label class="toc-overlay-icon toc-content-icon" for="__toc"> <label class="toc-overlay-icon toc-content-icon" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div> <span class="icon"><svg><use href="#svg-toc"></use></svg></span>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label> </label>
</div> </div>
<article role="main"> <article role="main" id="furo-main-content">
<section id="what-is-reticulum"> <section id="what-is-reticulum">
<h1>What is Reticulum?<a class="headerlink" href="#what-is-reticulum" title="Permalink to this heading">#</a></h1> <h1>What is Reticulum?<a class="headerlink" href="#what-is-reticulum" title="Link to this heading"></a></h1>
<p>Reticulum is a cryptography-based networking stack for building both local and <p>Reticulum is a cryptography-based networking stack for building both local and
wide-area networks with readily available hardware, that can continue to operate wide-area networks with readily available hardware, that can continue to operate
under adverse conditions, such as extremely low bandwidth and very high latency.</p> under adverse conditions, such as extremely low bandwidth and very high latency.</p>
@ -248,13 +284,13 @@ networks.</p>
userland, and will run on practically any system that runs Python 3. Reticulum userland, and will run on practically any system that runs Python 3. Reticulum
runs well even on small single-board computers like the Pi Zero.</p> runs well even on small single-board computers like the Pi Zero.</p>
<section id="current-status"> <section id="current-status">
<h2>Current Status<a class="headerlink" href="#current-status" title="Permalink to this heading">#</a></h2> <h2>Current Status<a class="headerlink" href="#current-status" title="Link to this heading"></a></h2>
<p>All core protocol features are implemented and functioning, but additions will probably occur as <p>All core protocol features are implemented and functioning, but additions will probably occur as
real-world use is explored. The API and wire-format can be considered complete and stable, but real-world use is explored. The API and wire-format can be considered complete and stable, but
could change if absolutely warranted.</p> could change if absolutely warranted.</p>
</section> </section>
<section id="what-does-reticulum-offer"> <section id="what-does-reticulum-offer">
<h2>What does Reticulum Offer?<a class="headerlink" href="#what-does-reticulum-offer" title="Permalink to this heading">#</a></h2> <h2>What does Reticulum Offer?<a class="headerlink" href="#what-does-reticulum-offer" title="Link to this heading"></a></h2>
<ul class="simple"> <ul class="simple">
<li><p>Coordination-less globally unique addressing and identification</p></li> <li><p>Coordination-less globally unique addressing and identification</p></li>
<li><p>Fully self-configuring multi-hop routing over heterogeneous carriers</p></li> <li><p>Fully self-configuring multi-hop routing over heterogeneous carriers</p></li>
@ -316,7 +352,7 @@ could change if absolutely warranted.</p>
</ul> </ul>
</section> </section>
<section id="where-can-reticulum-be-used"> <section id="where-can-reticulum-be-used">
<h2>Where can Reticulum be Used?<a class="headerlink" href="#where-can-reticulum-be-used" title="Permalink to this heading">#</a></h2> <h2>Where can Reticulum be Used?<a class="headerlink" href="#where-can-reticulum-be-used" title="Link to this heading"></a></h2>
<p>Over practically any medium that can support at least a half-duplex channel <p>Over practically any medium that can support at least a half-duplex channel
with greater throughput than 5 bits per second, and an MTU of 500 bytes. Data radios, with greater throughput than 5 bits per second, and an MTU of 500 bytes. Data radios,
modems, LoRa radios, serial lines, AX.25 TNCs, amateur radio digital modes, modems, LoRa radios, serial lines, AX.25 TNCs, amateur radio digital modes,
@ -339,7 +375,7 @@ network can communicate with nodes on the LoRa and packet radio sides of the
network, and vice versa.</p> network, and vice versa.</p>
</section> </section>
<section id="interface-types-and-devices"> <section id="interface-types-and-devices">
<h2>Interface Types and Devices<a class="headerlink" href="#interface-types-and-devices" title="Permalink to this heading">#</a></h2> <h2>Interface Types and Devices<a class="headerlink" href="#interface-types-and-devices" title="Link to this heading"></a></h2>
<p>Reticulum implements a range of generalised interface types that covers the communications hardware that Reticulum can run over. If your hardware is not supported, its simple to <a class="reference internal" href="examples.html#example-custominterface"><span class="std std-ref">implement an interface class</span></a>. Currently, Reticulum can use the following devices and communication mediums:</p> <p>Reticulum implements a range of generalised interface types that covers the communications hardware that Reticulum can run over. If your hardware is not supported, its simple to <a class="reference internal" href="examples.html#example-custominterface"><span class="std std-ref">implement an interface class</span></a>. Currently, Reticulum can use the following devices and communication mediums:</p>
<ul class="simple"> <ul class="simple">
<li><p>Any Ethernet device</p> <li><p>Any Ethernet device</p>
@ -377,7 +413,7 @@ network, and vice versa.</p>
<p>For a full list and more details, see the <a class="reference internal" href="interfaces.html#interfaces-main"><span class="std std-ref">Supported Interfaces</span></a> chapter.</p> <p>For a full list and more details, see the <a class="reference internal" href="interfaces.html#interfaces-main"><span class="std std-ref">Supported Interfaces</span></a> chapter.</p>
</section> </section>
<section id="caveat-emptor"> <section id="caveat-emptor">
<h2>Caveat Emptor<a class="headerlink" href="#caveat-emptor" title="Permalink to this heading">#</a></h2> <h2>Caveat Emptor<a class="headerlink" href="#caveat-emptor" title="Link to this heading"></a></h2>
<p>Reticulum is an experimental networking stack, and should be considered as <p>Reticulum is an experimental networking stack, and should be considered as
such. While it has been built with cryptography best-practices very foremost in such. While it has been built with cryptography best-practices very foremost in
mind, it has not yet been externally security audited, and there could very well be mind, it has not yet been externally security audited, and there could very well be
@ -416,18 +452,16 @@ want to help out with this, or can help sponsor an audit, please do get in touch
<div class="bottom-of-page"> <div class="bottom-of-page">
<div class="left-details"> <div class="left-details">
<div class="copyright"> <div class="copyright">
Copyright &#169; 2023, Mark Qvist Copyright &#169; 2025, Mark Qvist
</div> </div>
Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and Generated with <a href="https://www.sphinx-doc.org/">Sphinx</a> and
<a href="https://github.com/pradyunsg/furo">Furo</a> <a href="https://github.com/pradyunsg/furo">Furo</a>
</div> </div>
<div class="right-details"> <div class="right-details">
<div class="icons">
</div> </div>
</div> </div>
</div>
</footer> </footer>
</div> </div>
@ -460,14 +494,11 @@ want to help out with this, or can help sponsor an audit, please do get in touch
</aside> </aside>
</div> </div>
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script> </div><script src="_static/documentation_options.js?v=292eb321"></script>
<script src="_static/jquery.js"></script> <script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/underscore.js"></script> <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script> <script src="_static/scripts/furo.js?v=46bd48cc"></script>
<script src="_static/doctools.js"></script> <script src="_static/clipboard.min.js?v=a7894cd8"></script>
<script src="_static/sphinx_highlight.js"></script> <script src="_static/copybutton.js?v=f281be69"></script>
<script src="_static/scripts/furo.js"></script>
<script src="_static/clipboard.min.js"></script>
<script src="_static/copybutton.js"></script>
</body> </body>
</html> </html>