Русский | 中文 | 日本語 | Italiano | Deutsch
A simple way to serve pages and files over the Reticulum network. Drop-in replacement for NomadNet nodes that primarily serve pages and files.
- Serves pages and files over RNS
- Dynamic page support with environment variables
- Form data and request parameter parsing
pip install rns-page-node
# or
pipx install rns-page-node# Pip
pip install --index-url https://git.quad4.io/api/packages/RNS-Things/pypi/simple/ --extra-index-url https://pypi.org/simple rns-page-node
# Pipx
pipx install --pip-args "--index-url https://git.quad4.io/api/packages/RNS-Things/pypi/simple/ --extra-index-url https://pypi.org/simple" rns-page-nodePermanent Configuration for Gitea (Optional):
To avoid typing the index URLs every time when using the Gitea registry, add them to your pip.conf:
# ~/.config/pip/pip.conf
[global]
index-url = https://git.quad4.io/api/packages/RNS-Things/pypi/simple/
extra-index-url = https://pypi.org/simpleThen you can simply use:
pip install rns-page-node
# or
pipx install rns-page-nodeManual Download (Latest Release):
Download rns_page_node-1.5.1-py3-none-any.whl (wheel) or rns_page_node-1.5.1.tar.gz (source) from the latest release.
# Wheel (wget)
wget https://git.quad4.io/RNS-Things/page-node/releases/download/v1.5.1/rns_page_node-1.5.1-py3-none-any.whl
pip install rns_page_node-1.5.1-py3-none-any.whl
# Wheel (curl)
curl -O -L https://git.quad4.io/RNS-Things/page-node/releases/download/v1.5.1/rns_page_node-1.5.1-py3-none-any.whl
pip install rns_page_node-1.5.1-py3-none-any.whl
# Source tarball (wget)
wget https://git.quad4.io/RNS-Things/page-node/releases/download/v1.5.1/rns_page_node-1.5.1.tar.gz
pip install rns_page_node-1.5.1.tar.gz# Pip
pip install git+https://git.quad4.io/RNS-Things/page-node.git --break-system-packages
# Pipx via Git
pipx install git+https://git.quad4.io/RNS-Things/page-node.git
# UV
uv venv
source .venv/bin/activate
uv pip install git+https://git.quad4.io/RNS-Things/page-node.git# will use current directory for pages and files
rns-page-nodeor with command-line options:
rns-page-node --node-name "Page Node" --pages-dir ./pages --files-dir ./files --identity-dir ./node-config --announce-interval 360or with a config file:
rns-page-node /path/to/config.confYou 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
identity-dir=./node-config
announce-interval=360
Priority order: Command-line arguments > Config file > Defaults
docker run -it --rm -v ./pages:/app/pages -v ./files:/app/files -v ./node-config:/app/node-config -v ./reticulum-config:/home/app/.reticulum git.quad4.io/rns-things/page-node:latestmkdir -p ./pages ./files ./node-config ./reticulum-config
chown -R 1000:1000 ./pages ./files ./node-config ./reticulum-config
podman run -it --rm -v ./pages:/app/pages -v ./files:/app/files -v ./node-config:/app/node-config -v ./reticulum-config:/home/app/.reticulum git.quad4.io/rns-things/page-node:latestMounting volumes are optional, you can also copy pages and files to the container podman cp or docker cp.
make buildBuild wheels:
make wheelmake docker-wheelspoetry install
bash tests/run_tests.sh
ruff check .make test runs the same script as tests/run_tests.sh.
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_identityenvironment variable - Link ID via
link_idenvironment variable
This enables forums, chats, and other interactive applications compatible with NomadNet clients.
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
-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)
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.