rizomanet

How rizomanet works

A guide for members, for the people who look after the computers that run it, and for anyone curious. For the short version of what this is and why, see about.

Contents: using it · your data · nodes · how changes travel · how nodes agree · security · running a node · what's built · software

Using it

Membership is by invitation. A member can invite people they know; an admin then accepts them. Invites from admins let people straight in.

Everyone agrees to the community guidelines and terms when they join, and again when they change.

Your data

Read the full privacy notice.

One network, several nodes

There is no central server. The network runs on a few small computers, called nodes, at different farms. Each node holds a full copy of the network and serves this website to anyone nearby, on the farm's Wi‑Fi.

   Farm A               Farm B               Farm C
   node ◄──internet──►  node ◄──internet──►  node
     ▲                    ▲
     └────USB stick───────┘    (and later: radio)

   phones and laptops on each farm's Wi‑Fi
   use their farm's node like any website

Why do it this way:

Each node has its own random id and its own key. Records (people, places, actions…) get random 16-digit numbers, so two nodes never give the same number to different things.

How changes travel

Every node keeps track of which records changed, and when. It doesn't keep old copies of the data, just a note of what changed. To bring another node up to date, it packs the changes into a bundle: one file, encrypted with the network's secret and signed with the node's own key. A bundle can travel any way you like:

It doesn't matter which way changes arrive, in what order, or how many times. Every node ends up with the same data once the changes have reached it.

How nodes agree

Two nodes that were apart can both have changes. They agree using simple rules, which every node applies the same way:

Times come from a "hybrid clock": the computer's clock, corrected so it never goes backwards, which matters on computers that start without the right time. A node whose clock is more than a day ahead is turned away until its clock is fixed.

Security

Running a node

Any small Linux computer will do: a Raspberry Pi 4 or 5 with an SSD (rather than an SD card), a mini PC, or an old laptop. Use a small UPS if the power is unreliable.

git clone <repository> rizomanet && cd rizomanet
./start.sh            first time: asks a few questions, then starts
./start.sh service    run it in the background, start on boot

Give each node a name in .env, for example NODE_NAME=Greenwood. Everything else is done from the web, by an admin, under Admin → Sync. A phone on the farm's Wi‑Fi is enough.

  1. Start the network on the first node: Start a new network. It shows the network secret: write it down, or copy it.
  2. Join on every other node: paste the secret into Join a network. Give the secret in person, never by email or chat.
  3. Choose a stick: plug a USB stick into a node. It appears on the Sync page: choose Use this stick for syncing. This adds a rizomanet folder to it and leaves everything else on the stick alone. Any ordinary stick will do.
  4. From then on, that stick syncs by itself whenever it is plugged into any node of the network. Plug it in, wait half a minute, unplug it, take it to the next node. The Sync page shows what each stick brought and took, but nobody needs to look.

A new node starts empty: join the network, then plug in a stick that has been to another node. It gets everything.

If a node is lost or stolen: on each remaining node, block it under Other nodes, then Leave the network. One node starts a new network and the others join the new secret.

If a node was reinstalled, it has a new key, and the others refuse its news until an admin chooses forget its key.

Technical notes: sticks are looked for under /media, /run/media and /mnt. A computer with a desktop that is logged in mounts sticks there by itself. On a node without a desktop (such as Raspberry Pi OS Lite), run ./start.sh usb once. Everything on the Sync page can also be done in a terminal:

npm run sync -- status            this node, the others, recent syncs
npm run sync -- init              start a network (first node)
npm run sync -- join <secret>     join it (other nodes)
npm run sync -- usb /media/you/STICK
npm run sync -- block <node id>   (also: unblock, forget, leave)

Backups: every node is a copy, but keep a backup anyway. Stop the service and copy the data folder, or see the README. The data folder also holds the node's key and the network secret, so keep backups as safe as the node itself.

What's built, and what's next

  1. Done: the website: places, actions, jobs, people, the "met in person" network, invitations, guidelines, privacy tools.
  2. Done: a database ready for syncing: random ids, change tracking, deletions that really delete.
  3. Done: the sync engine: bundles, merge rules and USB sticks, tested with several nodes passing a stick around.
  4. Done: syncing without a terminal: set up from the web, and sticks that sync by themselves when plugged in.
  5. Next: syncing over the internet, directly between nodes.
  6. Then: radio links (Reticulum over LoRa), a pilot with 3–4 farms, and a ready-made install for new nodes.

Software

Free and open source (AGPL‑3.0): anyone can use, study, change and share it, as long as changes stay open too. It is built with Node.js, Express and SQLite, with maps from OpenStreetMap and Leaflet, and is small enough to run on a Raspberry Pi. There is no tracking. The font and the map code are served by each node itself; only the map images come from OpenStreetMap's servers.