Skip to main content

RNS Page Node

A simple way to serve pages and files over the Reticulum network. It is a drop-in replacement for NomadNet nodes that primarily serve pages and files. For more advanced setups, use NomadNet.

Full documentation lives in docs/. The rendered site is at https://quad4-software.github.io/rns-page-node.

The project targets RNS 1.5.2 and newer and Python 3.10 and newer.

Source: GitHub (code mirror). Releases: PyPI and signed artifacts on Reticulum via rngit (origin RNS remote).

Features

  • Serves simple pages and files over RNS
  • Dynamic page support with environment variables
  • Form data and request parameter parsing
  • Image Support

Installation

Requires Python 3.10 or newer. The package depends on RNS 1.5.0 or newer and cryptography 50.0.0 or newer. Older releases cap these below the required versions, which conflicts with current Reticulum.

From PyPI

pip install "rns-page-node>=1.7.0"
# or
pipx install "rns-page-node>=1.7.0"

With uv:

uv tool install "rns-page-node>=1.7.0"

If PyPI does not list 1.7.0 yet, install from GitHub (below) or upgrade an existing pipx app:

pipx install "git+https://github.com/Quad4-Software/rns-page-node.git" --force

From GitHub (source)

pip install git+https://github.com/Quad4-Software/rns-page-node.git
# or
pipx install git+https://github.com/Quad4-Software/rns-page-node.git

With uv:

uv tool install "git+https://github.com/Quad4-Software/rns-page-node.git"

From an rngit release

If you use Reticulum and have rngit configured, fetch a release from the project RNS remote. The remote is rns://06a54b505bb67b25ef3f8097e8001edc/public/rns-page-node, which is the same URL as git remote get-url origin when using the RNS remote.

rngit release rns://06a54b505bb67b25ef3f8097e8001edc/public/rns-page-node fetch v1.7.0:all
pip install v1.7.0/rns_page_node-1.7.0-py3-none-any.whl

With pip-rns:

pip-rns install --from-release rns://06a54b505bb67b25ef3f8097e8001edc/public/rns-page-node --ref v1.7.0

Usage

# will use current directory for pages and files
rns-page-node

or with command-line options:

rns-page-node --node-name "Page Node" --pages-dir ./pages --files-dir ./files --media-dir ./media --identity-dir ./node-config --announce-interval 360

or with a config file:

rns-page-node /path/to/config.conf

Configuration File

You can use a configuration file to persist settings. See config.example for an example.

Config file format is simple key=value pairs:

# Comment lines start with #
node-name=My Page Node
pages-dir=./pages
files-dir=./files
media-dir=./media
identity-dir=./node-config
announce-interval=360

Priority order: Command-line arguments > Environment variables > Config file > Defaults

Build

make build

Build wheels only:

make wheel

Development

poetry install
bash tests/run_tests.sh
make lint

make test runs the same script as tests/run_tests.sh.

Pure Python variant

For targets that cannot install PyCA/cryptography, install the pure package:

pip install rns-page-node-pure

It depends on rnspure and uses Reticulum's internal pure Python crypto backend.

Shell completions, manpage and docs

  • Completions for bash, zsh, fish, tcsh and PowerShell are in completions/.
  • The manpage is at docs/man/rns-page-node.1.
  • Docsify documentation is in docs/ and deploys to GitHub Pages.

Build the files with:

make completions
make manpage

Offline zipapps

Build a single .pyz file with all dependencies included:

make pyz
make pyz-pure

Run it with python3 dist/rns-page-node.pyz.

Releases

Distribution is PyPI plus rngit (Reticulum). Pushing tags/commits uses origin, which mirrors code to GitHub and the RNS remote.

make release-dist          # build dist/
make release               # tag, push (GitHub + RNS), upload rngit release
make release-local         # rngit release on local remote only
make publish               # upload wheels to PyPI

Other targets: release-list, release-view, release-fetch, release-verify, release-delete. Override RELEASE_TAG, RNGIT_REMOTE, RNGIT_IDENTITY, or RNGIT_SIGNER as needed.

Pages

Supports dynamic executable pages with full request data parsing. Pages can receive:

  • Form fields via field_* environment variables
  • Link variables via var_* environment variables
  • Remote identity via remote_identity environment variable
  • Link ID via link_id environment variable

This enables forums, chats, and other interactive applications compatible with NomadNet clients.

Options

Positional arguments:
  node_config             Path to rns-page-node config file

Optional arguments:
  -c, --config            Path to the Reticulum config file
  -n, --node-name         Name of the node
  -p, --pages-dir         Directory to serve pages from
  -f, --files-dir         Directory to serve files from
  -m, --media-dir         Directory to serve images from (defaults to pages directory)
  -i, --identity-dir      Directory to persist the node's identity
  -a, --announce-interval Interval to announce the node's presence (in minutes, default: 360 = 6 hours)
  --page-refresh-interval Interval to refresh pages (in seconds, 0 = disabled)
  --file-refresh-interval Interval to refresh files (in seconds, 0 = disabled)
  -l, --log-level         Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL)

License

This project incorporates portions of the NomadNet codebase, which is licensed under the GNU General Public License v3.0 (GPL-3.0). As a derivative work, this project is also distributed under the terms of the GPL-3.0. See the LICENSE file for full license.

Metadata

Release files for rns-page-node 1.7.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for rns-page-node 1.7.0
File Size Uploaded
rns_page_node-1.7.0.tar.gz 23.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for rns-page-node 1.7.0
File Interpreter ABI Platform
rns_page_node-1.7.0-py3-none-any.whl Python 3 none any Details

Total release size: 46.7 kB

Release files / rns_page_node-1.7.0.tar.gz

Download URL rns_page_node-1.7.0.tar.gz
Size 23.0 kB
Tags Source
SHA-256 checksum
How to use checksums
a8e602d07c5fd1897186ece6248b48411e8bdbdcee832036065b1df879b8c36e
BLAKE2b-256 checksum
How to use checksums
e61c404f3e3a4de8bbcd09abfc78905d4fb56c4cd25674763170b71cc0c7d26b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release files / rns_page_node-1.7.0-py3-none-any.whl

Download URL rns_page_node-1.7.0-py3-none-any.whl
Size 23.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3e3812e2c418fae325faa520bf119dcfcfdcb46fa72b3c1d44066d22cde69815
BLAKE2b-256 checksum
How to use checksums
813f95757648b41f45dbf2f1869d457940e5c1aded8b36017c89516de0470a9a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release history Release notifications | RSS feed

This release

1.7.0 This release

2 release files

1.5.1

2 release files

1.5.0

2 release files

1.4.0

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.0

2 release files

0.1.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page