Bridge SMS to Nostr
Sovereign & Remote-Signed
A lightweight Go bot that bridges SMS text messages and standard XMPP chats to Nostr notes via NIP-46 remote signing. Ephemeral conversation keys, in-memory drafts, and zero persistent storage.
Self-Hosting is Strongly Recommended
Nostr relies on cryptographic signatures, whereas SMS and XMPP are transport protocols. NostrSMS uses NIP-46 (Nostr Connect) to request remote signatures from your signer (such as nsecBunker, Amber, or mobile signers).
While NostrSMS is 100% RAM-only with zero database storage, any bridge operator technically holds an ephemeral ECDH conversation key while you are connected. For total control and sovereign privacy, we strongly encourage running your own instance on your home server, Raspberry Pi, or VPS.
How It Works
Bridging legacy telecommunications to the decentralized social web without ever exposing your private keys.
NIP-46 Remote Signing
Bot asks your nsecBunker or mobile signer for a signature. Your private key never leaves your signer.
NIP-65 Gossip Outbox
Events are broadcasted to your personal write relays and recipient inboxes automatically.
Post Confirmation Preview
Never post or reply to the wrong thread by mistake. Enabled by default with !confirm, posts generate an in-memory draft preview for 10 minutes. Reply y to confirm or n to discard.
Smart Zero-Copy Mentions
Incoming mentions and replies stream straight to your SMS chat. Reply instantly with !r <text>, !like, !heart, or !boost without copying or pasting long note IDs!
Curated Home Feed (!f)
Zero public relay spam. NostrSMS discovers your NIP-02 follow list (kind:3) and delivers a clean home timeline with petnames and 30-minute safety cache TTL.
Reactions & Reposts
Engage natively on Nostr with NIP-25 likes (!like, !heart), custom emojis (!react 1 🔥), and NIP-18 boosts (!boost) with full confirmation receipts.
Real-Time Alert Push
Stay notified on the go. When connected, NostrSMS listens to your read relays and immediately streams notifications when someone tags your public key or replies to your threads.
Zero Hardcoded Relays
Strict outbox gossip model (NIP-65). We do not force Damus or public relays on you. The bot dynamically resolves your personal write/read relays from your Kind 10002 profile.
Complete Command Reference
All commands can be texted or messaged directly to the bot in chat.
| Command | Description | Example |
|---|---|---|
| !help | Show available bot commands and syntax guide | !help |
| !connect <bunker> | Initiate NIP-46 session and discover NIP-65 relays | !connect bunker://... |
| !status | Check signer connection, pubkey, and active relays | !status |
| !confirm [on|off] | Toggle or check draft confirmation preview mode | !confirm on |
| !disconnect | Terminate remote signing session and wipe RAM cache | !disconnect |
| <plain text> | Publish a new top-level note (kind:1) |
Hello world from SMS! 💜 |
| !f / !feed | Fetch curated home feed from your NIP-02 follows | !f |
| !show <#|id> | Preview note full text, author petname, and origin relay | !show 1 |
| !r <#|id> <text> | Reply to note with NIP-10 markers & thread gossip | !r 1 Great point! |
| !r <text> | Zero-copy shortcut: Reply directly to latest incoming mention | !r Thanks for the tag! |
| !like [id] / !+ [id] | Send NIP-25 like reaction (+). Defaults to latest mention | !like 1 |
| !heart [id] | Send NIP-25 heart reaction (❤️) | !heart 1 |
| !react [id] <emoji> | Send custom emoji reaction | !react 1 🔥 |
| !boost / !repost [id] | Repost note to followers (NIP-18 kind:6) |
!boost 1 |
| !alerts [on|off] | Inspect or toggle real-time background mention streaming | !alerts on |
| !relays [sync] | Inspect active session relays or re-sync NIP-65 list | !relays sync |
| !follows [list|sync] | View follow count, display list with petnames, or re-sync | !follows list |
Run Your Own Instance
Deploy NostrSMS in minutes on Linux using Go 1.25+ or Docker Compose.
Native Systemd Service
Compile natively on Linux. NostrSMS includes hardened system-level (nostrsms.service) and user-level (nostrsms-user.service) units with Linux security sandboxing.
# Clone & compile
git clone https://git.vanderwarker.family/nostr/nostrsms.git
cd nostrsms && make build
# Copy configuration
cp config.ini.dist config.ini
# Install as user service
make service-user
Docker Compose
Launch with our lightweight Alpine multi-stage container. No persistent database volumes needed — only your single config.ini file.
# Configure environment
cp config.ini.dist config.ini
# Start container in background
docker compose up -d
# Stream runtime logs
docker compose logs -f
Join the Community
Hang out with fellow NostrSMS developers and users across federated XMPP and Nostr groups.
XMPP Chatroom
Join our real-time developer group chat using any standard XMPP client (Dino, Gajim, Conversations, Monocles).
Nostr Chat Group
Decentralized relay-moderated chat group. Chat directly in your browser or open in your native Nostr app.
Send Lightning Sats directly to the bridge