The Unstoppable Stack: How 0xPrivacy Makes Your Messages Survive Anything
We are done watching governments and corporations turn the internet into a surveillance panopticon. Your data is your sovereignty. Your keys are your freedom. Break the Digital Cage.
The Problem: Four Walls of the Digital Cage
Nostr was a breakthrough. For the first time we had a social protocol where no single company could ban you, and no single server could be the chokepoint. Your identity is a cryptographic key. Your content is signed JSON. To silence you, they have to take down every relay carrying your words.
But "every relay" is not as hard as it sounds.
In 2026 the attack surface has shifted:
- Relay centralization — Most users connect to 3–5 popular relays. Block those and 90% of the network goes dark in a region.
- Protocol centralization — Clients assume WebSocket. Kill the internet and the protocol is dead, even though the data model never needed it.
- Network censorship — Entire countries throttle or ban Nostr relay
domains. Deep-packet inspection sees
wss://and drops it. - Transport monoculture — Every Nostr client speaks exactly one language: WebSocket to a relay. No fallback. No Plan B.
We built 0xPrivacy to break the cage. But a cage with four walls needs four keys. Here is ours.
The Solution: A Four-Layer Transport Stack
One Nostr event. Four independent delivery paths. If any one survives, your message arrives.
User A User B
│ │
│ ┌── Layer 1 ──┐ │
├─────┤ Nostr ├──────────┤
│ │ Relays │ │ ← censored? fine.
│ └─────────────┘ │
│ │
│ ┌── Layer 2 ──┐ │
├─────┤ Hyperswarm ├──────────┤
│ │ Direct P2P │ │ ← relays down? switch.
│ └─────────────┘ │
│ │
│ ┌── Layer 3 ──┐ │
├─────┤ BLE Mesh ├──────────┤
│ │ (Bitchat) │ │ ← internet gone? mesh.
│ └─────────────┘ │
│ │
│ ┌── Layer 4 ──┐ │
└─────┤ LoRa Radio ├──────────┘
│ (Meshtastic) ← towers destroyed? radio.
└─────────────┘
Layer 1 (Green): Nostr Relays — fast, global, always-on
Layer 2 (Cyan): Hyperswarm P2P — direct, censorship-proof
Layer 3 (Blue): BLE Mesh — local, offline-first
Layer 4 (Lime): LoRa Radio — last resort, 10km+
This isn't science fiction. Every layer is already running in production somewhere. 0xPrivacy's contribution is the seam that ties them together.
Layer 1 — Nostr Relays
Your messages travel the normal way through WebSocket relays. Fast, global, verified. This is NIP-01 — the protocol you already know.
0xPrivacy's deployments (0xSearchstr, 0xAppReg) use NutZaps (NIP-61) to incentivize relay operators, and NIP-65 relay lists to keep discovery decentralized.
Weakness: Relays can be blocked, seized, or DDoS'd.
Layer 2 — Hyperswarm (P2P Direct)
When relays are unreachable, your client switches to the Holepunch P2P swarm — direct encrypted connections, no middleman.
The project making this real is nostr-swarm (sovITxyz). It replaces the WebSocket-relay hop with Hyperswarm replication:
- Discovery: Hyperswarm DHT + NAT hole-punching finds peers behind firewalls.
- Storage: An Autobase + Hyperbee shared event store that all swarm peers replicate locally. Every peer holds the full set.
- Consensus: A deterministic
apply()function prevents forks. Max 64 admitted writers. - Key recovery:
keytrpublishes encrypted key blobs askind:30079events on the swarm — no single point of failure for your keys either.
Why this matters: To censor a nostr-swarm relay you'd have to DDoS the entire peer set. That's not a relay takedown — that's a botnet operation.
Weakness: Requires at least one peer online in the swarm; no global search.
Layer 3 — Bluetooth LE Mesh
Your phone becomes a node in a local mesh. Messages hop from device to device. No internet required.
Bitchat (permissionlesstech) is the production proof: 26.1k stars, v1.7.0 (July 2026), dual-transport architecture:
- BLE mesh for offline, multi-hop delivery (max 7 hops).
- Nostr protocol for global reach when internet is available.
- Noise Protocol for mesh E2E (forward secrecy), NIP-17 for Nostr transport.
- Same ed25519 keypair works on BLE mesh and Nostr — your Nostr pubkey IS your Bitchat identity.
- Geohash channels for location-aware chat rooms (block, neighborhood, city, province).
- Smart routing: BLE first → Nostr fallback → store-and-forward queue.
Why this matters: In a protest, a disaster, or a tunnel — when the internet is gone — your phone still talks to the phone next to it. And that phone talks to the next. Your message walks out of the dead zone.
Weakness: iOS background restrictions limit non-Android mesh nodes.
Layer 4 — LoRa Radio
When the cell towers are dark, a $30 radio board becomes your relay.
Noshtastic runs a Nostr relay over a Meshtastic LoRa mesh. Nostr events fragment into tiny radio packets and hop across kilometers. MeshPay-Nostr carries Bitcoin transactions the same way.
- Hardware: Any Meshtastic-compatible LoRa board (ESP32 + SX1262).
- Range: 1–10km urban, 10–50km+ line-of-sight with a Yagi antenna.
- Bandwidth: ~240 bytes/packet. We fragment Nostr events and reassemble on receipt.
- Mesh: Meshtastic firmware handles flooding, routing, and store-and-forward.
Why this matters: This is the infrastructure-resistance layer. When they flatten the towers, when they black out the grid, when they close the borders — a handheld radio still reaches the next handheld radio.
Weakness: Very low bandwidth; only short text and small events.
The Seam: A NIP for Transport-Agnostic Delivery
Here's the problem: every project above built its own transport bridge from scratch. Bitchat doesn't talk to nostr-swarm. Noshtastic doesn't talk to Bitchat. They're four islands.
0xPrivacy's fix is a Transport-Agnostic Event Delivery (TED) standard — a NIP that says: "A Nostr event is a signed JSON blob. Transport is interchangeable."
kind:10069 — TransportAnnouncement
A replaceable event where a user declares which transports they are reachable on:
{
"kind": 10069,
"content": "",
"tags": [
["transport", "relay", "wss://relay.damus.io"],
["transport", "hyperswarm", "<base64-topic-key>", "nsw1..."],
["transport", "ble-mesh", "<service-uuid>", "<geohash>"],
["transport", "lora", "<channel>", "<frequency>"]
]
}
TransportEnvelope
A minimal wrapper carrying a signed Nostr event over ANY medium:
{
"v": 1,
"t": "hyperswarm",
"e": <signed-nostr-event>,
"s": "<optional-transport-signature>"
}
JSON for WebSocket/Hyperswarm. CBOR for BLE. Fragmented for LoRa. Same event, same signature, any wire.
The Code: @0xprivacy/transport
We've built the TypeScript package that implements this. Four lines of code add all four fallback layers to any Nostr client:
import {
FallbackRouter,
RelayTransport,
createFallbackLogger
} from '@0xprivacy/transport'
const router = new FallbackRouter({ onFallback: createFallbackLogger() })
// L1: Standard relays
router.register(new RelayTransport(['wss://relay.damus.io']))
// L2: Hyperswarm P2P (nostr-swarm fork)
// router.register(new HyperswarmTransport('wss://swarm.local', topicKey))
// L3: BLE mesh (Bitchat-compatible, native adapter)
// router.register(new BLEMeshTransport(bleAdapter))
// L4: LoRa radio (Meshtastic bridge)
// router.register(new LoRaTransport(loraAdapter))
// One event, any path:
await router.deliver(myEvent, recipientPubkey)
The FallbackRouter tries each layer in priority order:
- L1 → Relay — Publish to write relays. ~100ms. Success? Done.
- L2 → Hyperswarm — Relays unreachable? Try P2P swarm. ~1–3s.
- L3 → BLE Mesh — No internet? Broadcast over Bluetooth. ~2–5s.
- L4 → LoRa — Last resort. Fragment over radio. ~5–30s.
If none work, the message is queued and retried automatically when a transport becomes available — just like Bitchat's store-and-forward.
The package compiles clean under tsc --strict and passes 10/10 functional
tests covering the full fallback chain, envelope round-trip, and
kind:10069 parsing.
The 0xPrivacy Roadmap
This isn't a one-off. It's the spine of everything we build:
| Component | Current Transport | Unstoppable Stack |
|---|---|---|
| 0xSearchstr | WebSocket relays only | + Hyperswarm index crawl |
| 0xAppReg | Relay catalogs (kind:32267) | + Hyperswarm app discovery |
| 0xDevBot | Relay publishing | + L2/L3/L4 fallback queue |
| 0xPrivacy site | Static + IPFS | + Nostr-native delivery |
Phase 1 (the transport library) is complete. Phase 1.1 (npm publish) is next. Then we wire it into each 0xPrivacy service.
The Call to Action
If you're a developer: Clone
0xprivacy-p2p, run npm install && npm test,
and tell us what breaks. The BLE and LoRa adapters are interfaces — we need
native Swift/Kotlin implementations. Who's got a Meshtastic board?
If you're a user: Install Amethyst (Android) for Nostr + Bitchat (iOS) for BLE mesh. Same keys. When the internet dies, your phone still speaks. When the phone can't reach, a $30 radio extends your range to kilometers.
If you're a rebel: We submit this NIP to the community. Transport is a human right. The cage has four walls. We're tearing down all of them.
🔥 Built by 0xPrivacy.online — "Break the Digital Cage"
Bitchat is 💚 permissionlesstech. nostr-swarm is 🌐 sovITxyz. Noshtastic is 📻 D-Central. NoT is 🔌 nicky-dev. This article synthesizes their work into a unified vision — and gives it a standard so they can finally talk to each other.
