Skip to main content

Four internets: Reticulum, I2P, Yggdrasil and Nostr side by side

Β· 15 min read
UR3PKI
Software Engineer

Reticulum, I2P, Yggdrasil and Nostr keep getting lined up together β€” and wrongly so. They are not competitors: they fix different floors of the same building. One replaces radio and routing, the second hides who talks to whom, the third hands out addresses, the fourth takes your account away from the platforms.

500 bytesReticulum's MTU. It lives on a 300 bit/s channel β€” where TCP/IP will not even start
3 + 3Other people's nodes between a client and a site in I2P: its outbound tunnel plus the site's inbound tunnel
0200::/7The Yggdrasil range. An IPv6 address here is a public key fingerprint
0How much Nostr relays know about each other. The client spreads the copies itself

Each of the four fixes its own breakage​

First the shortest version, with a schoolyard analogy. After that each one is taken apart separately, with a diagram showing exactly what happens to a message.

when there is nothing

Reticulum

A complete network stack for bad channels: a walkie-talkie, a wire, LoRa. It needs no IP, no provider and no speed.

Notes are passed hand to hand across the whole yard β€” and nobody on the way can open the envelope.

when you need to hide

I2P

An anonymous network on top of the ordinary internet. It hides not the content (any TLS does that) but who talks to whom.

The note is passed through six children, and each knows only who gave it and who they handed it to.

when you just need connectivity

Yggdrasil

A self-organising IPv6 network. It gives you an address from your own key β€” and all ordinary programs run on top of it unchanged.

Everyone got their own name that cannot be forged, and the yard worked out by itself how to reach each of them.

when the platform is the problem

Nostr

Not a network at all but a format for signed messages. Identity is a key, not an account on someone else's server.

The note is signed with your own signature and copies are pinned to three boards. One is torn down β€” the rest stay up.

They are not competitors β€” they are on different floors​

Comparing Nostr with Reticulum is like comparing Instagram with optical fibre. Here is what each one takes on itself and what it borrows from the existing internet.

what the protocol takes onmediumradio, wireneighbourswho to link toroutinghow to findwho you areidentitycryptoe2eappwhat you sendReticulumthe whole stack β€” from the radio wave to the messengerYggdrasilneighbours, routing, address from the key, cryptoyour usual onesI2Panonymous routing + layers of encryptionits own sitesNostrkeyeventsborrows all of this from the existing internetDashed = partial coverage. Reticulum is the only one that does not rely on anyone else's network at all.
How to read it: the wider the band, the more the protocol replaces. Nostr is "full of holes": it takes only identity and message format and leaves delivery entirely to the ordinary internet. That is why Nostr runs inside Yggdrasil or I2P rather than instead of them.

Reticulum​

Since 2016 Β· Python, Reticulum License Β· by Mark Qvist Β· rides on LoRa, radio, wire, TCP

A yard with no grown-up in charge. Everyone has their own seal that cannot be forged. A note goes into a sealed envelope and is passed hand to hand. If the recipient has gone home, the envelope waits in somebody's pocket until they come back.

Reticulum is not "yet another messenger" but a complete network stack, written from scratch for channels on which the ordinary internet simply will not start. It does not know what an IP address, a port or DNS is. No central registry: addresses are generated by the nodes themselves, and nobody can either issue them or take them away.

An address (destination) is 16 bytes of truncated SHA-256 of the public key and the application name. To be found, a node throws an announce into the air; transport nodes remember which way to go to reach it, and the path table builds itself. Encryption cannot be switched on β€” it is already on and cannot be switched off. In detail β€” in Reticulum up close.

one message, four nodesYOUphone+ RNodeneighbourjustrelaysnodepropagation node:holds the mailfriendwas offline β€”switched the radio on~300 bit/swaits while the recipient is offlineopened only hereaddress = 16-byte hash of the public key:<a4f1c8e0 7b2d9431 5fa6c70e 88d29d2c>no node along the way has the key β€”it only sees who to pass it to next
The key point: the storage node holds the sealed envelope but cannot open it. That is why Reticulum works where the recipient appears on air once a day.

What is inside

  • address β€” 16 bytes (128 bits) of truncated SHA-256 of the key and the application name
  • crypto β€” X25519 for key exchange, Ed25519 for signatures, AES-256-CBC + HMAC-SHA256; ephemeral keys on links, i.e. forward secrecy
  • MTU β€” 500 bytes: not an oversight but design, everything must fit into a LoRa frame
  • carrier β€” LoRa (RNode), packet radio / AX.25, serial cable, TCP, UDP β€” and even I2P
  • offline β€” LXMF and propagation nodes: mail waits for the recipient
  • applications β€” Sideband (messenger), MeshChat, Nomad Network (something like a BBS)

Pros and cons

  • βœ“ The only one of the four that survives when there is no internet at all
  • βœ“ Encryption has no off switch β€” an "open mode" simply does not exist
  • βœ“ No need to ask anyone for an address: generate a key and you have one
  • βœ• Not anonymous: transport nodes see the destination hash, and announces are public anyway
  • βœ• Speed is in kilobytes. A photo will get there, video will not
  • βœ• Real autonomy needs hardware: an RNode on LoRa
  • βœ• The ecosystem is small, a lot has to be done by hand

I2P​

Since 2003 Β· Java router and i2pd in C++ Β· garlic routing Β· a network in itself

The note is passed through six children, and each knows only two: who gave it and who to hand it to. And the reply goes an entirely different way. Nobody, even if they peek, can put together the picture "this one wrote to that one".

I2P does not hide the content β€” any TLS hides the content. It hides the metadata: who with whom, when and how much. It does this with two tricks. The first is layers of encryption: a message is wrapped so that each next node peels only its own layer and sees exactly one address β€” the next one. The second is unidirectional tunnels: the request goes along one chain and the reply comes back along another, so even someone who sees both ends cannot stitch them together.

I2P is most often confused with Tor. The difference is in the goal: Tor is built to exit to the ordinary web (and has centralised directory authorities for that), while I2P is a self-contained network within itself: .i2p sites, torrents, mail, IRC. Exits to the outside (outproxies) are rare here and not the point. And one more thing: Tor has separate relay nodes, whereas in I2P every participant is a router and carries other people's traffic β€” so your own gets lost among the transit.

the request goes on top, the reply underneathyour outbound tunnelthe site's inbound tunnelyour inbound tunnelthe site's outbound tunnelYOUsite.b32.i2pnetDb (distributed DHT)where the site's inbound tunnels are nowrings = layers of encryption. each node peels exactly its ownand sees only its neighbours β€” never both ends
The key point: one request uses six other people's nodes, and each tunnel lives just 10 minutes before it is rebuilt. That is what the latency pays for.

What is inside

  • address β€” a Destination (387+ bytes, 516 characters in base64), shown outside as a short base32 hash: ukeu3k5o…q3a.b32.i2p. There is no DNS; human-readable names come from subscription address books
  • tunnel β€” unidirectional, 3 hops by default, rebuilt every 10 minutes
  • directory β€” netDb, a Kademlia-like DHT: RouterInfo (where the routers are) and LeaseSet (where the destination's inbound tunnels are right now)
  • transport β€” NTCP2 (TCP) and SSU2 (UDP), both encrypted and obfuscated
  • garlic β€” several messages ("cloves") are packed into one encrypted garlic envelope
  • applications β€” eepsites, i2psnark (torrents), mail, IRC β€” all inside the network

Pros and cons

  • βœ“ The strongest of the four at hiding metadata: who with whom and when
  • βœ“ No centralised directories β€” the whole network holds the directory together
  • βœ“ Everyone carries other people's traffic, so your own does not stand out
  • βœ• Slow: hundreds of milliseconds of latency, modest bandwidth
  • βœ• For the first 10–20 minutes after start the router "warms up" and carries almost nothing
  • βœ• Anonymity is easy to break yourself: just log in to your ordinary account
  • βœ• Needs the ordinary internet β€” it will not run on bare radio

Yggdrasil​

Since 2017 Β· Go Β· a world tree of IPv6 Β· ordinary programs work unchanged

Everyone got their own name that cannot be forged β€” it grew straight out of a key. And the yard, with no teacher, agreed by itself how to reach everyone: it drew a tree of paths and keeps it in its head.

Yggdrasil solves the most boring and most important question: how to find each other when there is no provider, NAT, public IPs or administrator handing out addresses. The answer: the address is the key. An Ed25519 key is run through a transformation and yields an IPv6 address in the 0200::/7 range. Nobody issued it and nobody can take it away.

Then the network builds a tree (spanning tree) out of all the participants and can find a way to any address, and since version 0.5 it also looks for shorter direct paths instead of sending everything through the root. Neighbours are found automatically via multicast on the local network or configured by hand β€” public nodes over TCP, TLS, QUIC.

The main practical value: a network interface simply appears in the system. ssh, http, Syncthing, a home NAS β€” all of it works over Yggdrasil without any changes, as if every device had a public IP. But this is not anonymity: neighbours see both your real IP and your public key.

the key becomes the address, the tree finds the wayed25519 pub3f9c1d40…c7a17b200:7a1e:9c33:88f1::1one function, no registry: the address is not issued β€” it is computed. forging it = forging the keydirect path found in v0.5 β€” bypassing the roottree rootyoufriendyour laptoptheir serverthe packet climbs the branchesand comes down to the recipientssh, http, rsync β€”everything works as is
The key point: the address is tied neither to a provider nor to a place. A device moves from Wi-Fi to mobile data β€” same address, the connection lives on.

What is inside

  • address β€” IPv6 from 0200::/7, computed from the Ed25519 key; a /64 from 0300::/8 is given for a subnet
  • routing β€” a global tree (spanning tree) plus path lookup; since v0.5 β€” direct routes bypassing the root
  • neighbours β€” multicast autodiscovery on the local network or manual peering: TCP, TLS, QUIC, WebSocket
  • encryption β€” end-to-end between the endpoint keys; a transit node carries but does not read
  • interface β€” an ordinary tun in the system: every program just sees IPv6
  • control β€” yggdrasilctl getSelf, getPeers

Pros and cons

  • βœ“ Nothing has to be rewritten: all existing programs work straight away
  • βœ“ The address is permanent and your own β€” neither NAT nor a change of provider moves it
  • βœ“ The easiest way to "stitch" your devices and your friends' into one network
  • βœ• Not anonymous at all: neighbours see IP and key
  • βœ• Traffic goes through other people's volunteer nodes β€” speed depends on them
  • βœ• You need at least one neighbour with connectivity; on its own a node gets nowhere
  • βœ• The network is still young; routing at large scale is an open question

Nostr​

Since 2020 Β· "Notes and Other Stuff Transmitted by Relays" Β· by fiatjaf Β· WebSocket and JSON

The note is signed with your own signature, which cannot be forged, and copies are pinned to three notice boards. One board is taken down β€” the note hangs on the other two, and everyone who knows the signature will find it.

Nostr is the simplest of the four and the only one that is not a network at all. It rides on the ordinary internet, over ordinary WebSocket. All it invented is two rules. First: an identity is a secp256k1 key pair, not a row in someone's database. Second: a message (an "event") is JSON with kind, content and tags fields, signed with that key; its id is the SHA-256 of the event itself.

Relays are deliberately dumb servers: accept, store, return by filter. They do not talk to each other β€” the client itself spreads copies across several relays. That is where all the magic comes from: if a relay bans you, you take another, and your followers do not go anywhere, because they follow a key, not an account on a server.

There is a price for this too. A relay sees your IP and all your events β€” anonymity here is zero (unless over Tor). Spam is held back only by relay policy, paid relays and a web of trust. And losing the private nsec key is irreversible: there is nobody to "restore access".

the client spreads the copies itselfkind: 1content: "gm"sigYOUyour keynsec1…relay.damus.ionos.lolrelay.snort.socialstoresstoresstoresβœ• bannedor just went downREADERevent delivered βœ“relays know nothing about each other β€”there is no line between themthe subscription is to the keynpub1qqs…7x2v
The key point: there is not a single line between the relays β€” and that is not a simplification of the diagram, it is the protocol itself. That is why you cannot ban a person on Nostr: you can only ban their copy on your own server.

What is inside

  • keys β€” secp256k1; the public one is npub1…, the private one nsec1… (bech32 encoding, NIP-19)
  • event β€” {id, pubkey, created_at, kind, tags, content, sig}; id is the SHA-256 of the canonical form, the signature is Schnorr (BIP-340)
  • kinds β€” 0 profile, 1 note, 3 follows, 7 reaction, 30023 long-form
  • relay β€” a WebSocket server with three main commands: EVENT, REQ, CLOSE
  • private β€” old DMs (kind 4) leak metadata; modern ones use NIP-17 on top of NIP-44 encryption
  • money β€” zaps via Lightning (NIP-57): tips right in the feed

Pros and cons

  • βœ“ Identity does not belong to a platform: followers are tied to the key
  • βœ“ A relay is up in five minutes, there are dozens of clients
  • βœ“ Fast and familiar β€” it is just WebSocket over the ordinary internet
  • βœ• Zero anonymity: a relay sees your IP and everything you write
  • βœ• Lose your nsec β€” lose your identity for good, there is nobody to restore it
  • βœ• Spam is held back only by relay policy, paid relays and a web of trust
  • βœ• When the internet dies, Nostr dies too: it has no transport of its own

The same questions β€” four different answers​

questionReticulumI2PYggdrasilNostr
What it is, in essenceA complete network stack from scratchAn anonymous overlay on top of the internetAn overlay IPv6 networkA format for signed messages
Address: where it comes from16 bytes of hash of a key…q3a.b32.i2p β€” a hash of the DestinationIPv6 from 0200::/7, computed from a keynpub1… β€” the public key
Transport: what it rides onLoRa, radio, wire, TCP, UDPNTCP2 / SSU2 over the internetTCP, TLS, QUIC, WS and multicast on the local networkWebSocket over ordinary HTTPS
Without the internet: the "everything is down" scenarioyes β€” radio is self-sufficientnoonly on the local networkno
Hides who talks to whom: metadatapartly β€” transit sees hashesyes, that is the whole pointno β€” neighbours see IP and keyno β€” the relay sees everything
Encryption: is there an off switchAlways, no off switchIn layers, on every hopEnd-to-end between endpoint keysSignature always; encryption only in private messages
Offline delivery: recipient not on the networkyes β€” a propagation node holds itnonoyes β€” the relay holds the event
Ordinary programs: ssh, http, rsyncno β€” must be written for RNSvia tunnels and proxiesyes β€” it is just IPv6no β€” its own clients
Speed: what to expectKilobytes. Text and small filesHundreds of ms latency, modest bandwidthAlmost like the ordinary internetLike ordinary WebSocket
The main headache: what you payNeeds hardware, few applicationsSlow, the router warms up for 10–20 minThe participant is visible; speed depends on others' nodesLose the key β€” lose the identity
When it is the choiceMountains, villages, emergencies, amateur radioNobody must know who talked to whomStitch your own and friends' devices into one networkTake your audience back from the platforms

Nobody wins on all three axes β€” and that is no accident​

Anonymity is bought with latency, autonomy with speed, convenience with dependence on someone else's infrastructure. Each of the four consciously chose how to pay.

LITTLEA LOTSurvives without the internetits own radio, its own addressesNostrI2PYggdrasilReticulumHides who talks to whomnot the content, the metadataYggdrasilNostrReticulumI2PSpeed and conveniencewhether familiar things just workReticulumI2PYggdrasilNostr

The ratings are qualitative, not measured: they show the direction of the trade-off, not a benchmark. The most interesting thing here is that no dot sits on the right of all three scales.

They stack inside one another​

Since each occupies its own floor, there is no need to choose "either-or". Here are three combinations that really work, and one that will not.

Reticulum β†’ over I2P

Among Reticulum's carriers there is an I2P interface. So the radio stack can be run through an anonymous tunnel while the internet is still there: you get both independent addressing and hidden metadata. And when the internet goes, the same stack switches to radio β€” and the address stays the same.

A Nostr relay β†’ inside Yggdrasil or I2P

A relay needs no public IP, domain or certificate: it lives on a Yggdrasil address or as a .b32.i2p. There is simply nothing to block β€” no IP and no DNS record to put on a list.

Yggdrasil β†’ over anything

Yggdrasil does not care what wire it took to reach a neighbour: TCP, TLS, QUIC, WebSocket β€” and therefore also through Tor or I2P. The network only sees "there is a link to a neighbour", and what lies under it is none of its business.

And this will not work

IPv6 (that is, Yggdrasil) over Reticulum. The IPv6 standard requires an MTU of at least 1280 bytes, while Reticulum's is 500. It is not a matter of settings but of different worlds: one counts bytes, the other assumes frames are large.

Each can be tried in an evening​

Reticulum

# the stack itself
pip install rns
rnsd

# messenger: Sideband
# (Android / iOS / desktop)
# radio needs an RNode

A detailed walkthrough is in Reticulum up close.

I2P

apt install i2pd
# i2pd console: http://127.0.0.1:7070
# Java router: http://127.0.0.1:7657
# give it 15 minutes to warm up

Yggdrasil

# package from the project's repository;
# the config appears by itself: /etc/yggdrasil.conf
apt install yggdrasil

# add a public peer to Peers, then:
systemctl restart yggdrasil
yggdrasilctl getSelf # your own IPv6 is here

Nostr

# nothing to install:
# Damus β€” iOS
# Amethyst β€” Android
# snort.social β€” web

# nsec1… β€” straight into a password manager
The "up close" series
  • LoRa up close β€” the physical layer: chirps, spreading factor, time on air, range
  • Meshtastic up close β€” a ready-made chat on "raw" LoRa: managed flooding, channels, node roles
  • Reticulum up close β€” a network stack where the address is a key and LoRa is just one of the carriers