DEV Community

Cover image for 🕶️ Introducing Shade: Taproot-Based Messaging in the Post-Surveillance Web
Melvin Carvalho
Melvin Carvalho

Posted on

🕶️ Introducing Shade: Taproot-Based Messaging in the Post-Surveillance Web

“Freedom of speech requires freedom of whisper.”

We live in an era of networked everything — and surveillance of everything. Even the most "encrypted" messengers leak metadata, rely on centralized servers, or fall back on federated infrastructures with brittle assumptions.

It's time for something simpler, leaner, and more aligned with Bitcoin’s core ethos: Shade, a secure messaging client built on Taproot, NosDAV, and strong cryptography.


🌱 Why Shade?

Shade is a new kind of secure messaging tool:

  • No central servers
  • No global inboxes
  • No dependence on “NIPs” or federated relays
  • Just you, your Taproot key, and encrypted blobs shared via NosDAV.

Whether you're a developer, a privacy advocate, or someone who just wants to chat without compromise — Shade is for you.


🧩 How It Works

Shade uses Taproot public keys as identity anchors. Each user owns a Bitcoin-native keypair — the same ones used for signing transactions can be used for messaging.

🔐 Identity and Encryption

  • Your Taproot key = your identity
  • Messages encrypted with Double Ratchet (like Signal)
  • Files and messages stored encrypted with AEAD (XChaCha20-Poly1305)

☁️ Storage: NosDAV

NosDAV is a lightweight, Nostr-authenticated file storage protocol. Shade uses it to:

  • Store encrypted message blobs
  • Retrieve messages privately
  • Avoid centralized relays or server-side logic

Messages are stored like:

PUT /<receiver-pubkey>/shade/<obfuscated-hash>.msg
Enter fullscreen mode Exit fullscreen mode

All messages are encrypted and path-obfuscated via HMAC.


🔎 Metadata Resistance

One of the biggest privacy failures in modern messengers isn’t encryption — it’s metadata:

  • Who are you talking to?
  • When?
  • How often?
  • From what IP?

Shade counters that:

Leak Mitigation
Message content Encrypted end-to-end
Sender/receiver Public keys only, no usernames
Timestamps Padded, delayed, optionally batched
Subject lines Not used — messages are opaque blobs
Transport logs NosDAV can be self-hosted or Tor-routed

You can even use a different Taproot key per contact, or per session.


⚙️ The Developer Stack

Layer Tech
Identity Bitcoin Taproot keypairs (X-only)
Encryption Double Ratchet + XChaCha20
Storage NosDAV (HTTP + Nostr Auth)
UI Preact + HTM (Web), Electron (Desktop), Capacitor (Mobile)
CLI Node.js prototype in progress

🧪 Sample CLI

# Send a message
shade send --to npub1... --file message.txt

# Fetch new messages
shade fetch

# Start background sync
shade daemon
Enter fullscreen mode Exit fullscreen mode

🌍 Platform Goals

  • ✅ Web (PWA)
  • ✅ Linux, macOS, Windows
  • ⏳ Android + iOS
  • ✅ Fully local-first, syncs when you choose
  • ✅ No accounts. No phone numbers. Just keys.

💡 Why Not Nostr DMs?

Nostr DMs are clever but face major drawbacks:

  • Metadata-heavy (global relays can see everything)
  • Lack of forward secrecy
  • No message expiration or secure deletion
  • Centralized relay behavior incentivizes spam filtering

Shade fixes this by:

  • Moving message delivery to your own encrypted storage
  • Using modern crypto
  • Putting you in full control

Top comments (0)