Fully off-grid NOSTR communication and Lightning payments via ham radio
HAMSTR enables clients with no internet access to interact with NOSTR relays through a radio-connected server. Built on a modular backend architecture supporting multiple radio protocols, from legacy packet radio to modern mesh networking.
HAMSTR is the world's first implementation of:
- β‘ Offline Lightning payments over ham radio with full NOSTR ecosystem integration
- Complete NIP-57 zap compliance β zaps appear instantly in Amethyst, Primal, and all NOSTR clients
- Zero-knowledge server architecture β server never has access to private keys or user data
- Modular protocol system β supports multiple radio transports from legacy packet to modern mesh networking
Perfect for:
- π¨ Emergency communications when infrastructure is down
- π Remote areas with no internet connectivity
- π Censorship-resistant communications
- π‘ Resilient mesh networking via Reticulum
β Working Now:
- AX.25 Packet Radio β PacketProtocol (legacy TNC systems, 300β1200 baud)
- VARA HF β DirectProtocol (fast, reliable, production-ready)
- Reticulum mesh networking β DirectProtocol (LoRa, HF Radio, VHF/UHF Radio β see RETICULUM.md)
- Complete Lightning zaps via ham radio and LoRa (NIP-57 compliant)
- Full NOSTR read/write operations (posts, replies, zaps, search)
π§ Coming Soon:
- FLDIGI software TNC support
- Cashu ecash wallet integration
- GUI settings β no more manual .ini editing
- Zap-based server authentication
HAMSTR uses a modular backend that abstracts radio protocols from application logic. Two protocol handlers cover all supported transports:
For reliable transports with built-in error correction. Simple JSON pass-through, no READY/ACK overhead.
| Backend | Status | Speed | Notes |
|---|---|---|---|
| VARA HF | β Working | 17β600 bps adaptive | Best choice for HF |
| Reticulum | β Working | Transport-dependent | LoRa, TCP, serial |
| FLDIGI | π§ Coming Soon | Mode-dependent | PSK, RTTY, etc. |
For traditional AX.25 packet radio. Includes ARQ, CRC, compression, and missing-packet recovery.
| Backend | Status | Speed | Notes |
|---|---|---|---|
| AX.25 Packet (TNC) | β Working | 300β1200 baud | Hardware or software TNC |
Complete offline Lightning payments via ham radio using encrypted NWC:
- Client sends signed kind 9734 zap note via radio
- Server generates Lightning invoice using LNURL-pay with NIP-57 context
- Client pays via encrypted NWC command transmitted over radio
- Server forwards to wallet, confirms payment, publishes zap receipt to NOSTR
- Result β‘ Zap appears instantly in all NOSTR clients worldwide
Timing: ~2β5 minutes end-to-end depending on radio conditions
Legal Note: NWC requires encryption which may be restricted on amateur radio in some jurisdictions. Users are responsible for compliance with local regulations.
Client:
- Valid amateur radio license
- Python 3.9+
- Ham radio transceiver + interface to PC
- NOSTR private key (nsec)
Server (if running your own):
- Python 3.9+
- PySide6 (Qt GUI)
- Always-on PC or SBC (Raspberry Pi, etc.)
For VARA HF:
- VARA HF modem software (Windows or Wine on Linux)
- Sound card interface (Digirig, SignaLink, etc.)
For Packet Radio:
- KISS-compatible TNC β hardware (KPC-3, KAM) or software (Direwolf, UZ7HO)
For Reticulum:
- See RETICULUM.md for full setup guide (RNode hardware, pip install, rnsd config)
For Lightning Zaps:
- Lightning wallet with NWC support (Alby, etc.)
The frontend is pre-built and included. No Node.js required.
1. Clone the repository:
git clone https://github.com/LibertyFarmer/hamstr.git
cd hamstr2. Install Python dependencies:
pip install -r requirements-client.txt3. Run the client:
python web_app.pyclient_settings.ini is created automatically from the template on first run.
4. Open your browser to: http://localhost:5000
- Go to Settings β configure your callsign, backend type, and radio settings
- Go to Settings β NOSTR Login and enter your nsec
- Optionally add your NWC connection string for Lightning zaps
All settings are documented in backend/data/client_settings.ini.template.
1. Install Python dependencies:
pip install -r requirements-server.txt2. Launch the server UI:
python server_ui.pyserver_settings.ini is created automatically from the template on first run.
3. Configure your callsign, backend type, and radio settings in the Settings dialog, then click Start Server.
All settings are documented in backend/data/server_settings.ini.template.
- β Read/write posts with content compression
- β Reply, boost, quote notes
- β NPUB, hashtag, and full-text search
- β Following feed and global feed
- β Profile display names and Lightning addresses
- β Multi-relay publishing
- β Complete offline zaps via ham radio
- β NIP-57 compliant (appears in all NOSTR clients)
- β Encrypted NWC commands over radio
- β Zap receipt published automatically by server
- β AX.25 Packet Radio via KISS TNC (PacketProtocol)
- β VARA HF (DirectProtocol)
- β Reticulum mesh networking (DirectProtocol)
- β Custom Content compression for bandwidth efficiency
- β Custom CRC checks and retransmission (PacketProtocol)
- β Custom Missing packet recovery (PacketProtocol)
- β Zero-knowledge server β never sees private keys
- β All signing and encryption is client-side
- β Server as pure relay/cache/publisher
- β Modular backend β adding protocols is straightforward
- β Multi-client server design
VARA Issues:
- Verify VARA modem is running and sound card is configured
- Check PTT is wired correctly and set in config
- Confirm command port 8300 / data port 8301 match both ends
- Monitor the VARA status window
Packet Radio Issues:
- Verify TNC is in KISS mode
- Check host/port in
client_settings.inimatches TNC - Test TNC with another application (Direwolf, AGW) first
Reticulum Issues:
- See RETICULUM.md for full troubleshooting
- Make sure
rnsdis running before starting HAMSTR - Confirm you have the correct server destination hash
Zap Issues:
- Ensure NWC wallet is online at the server
- Verify NWC connection string format
- Check your Lightning wallet has sufficient balance
- Watch the progress drawer for per-step status
General:
- Callsign format must be a tuple:
(CALLSIGN, SSID) - Both client and server must use the same backend type
- Check the progress drawer for real-time diagnostics
- π§ FLDIGI software TNC backend
- π§ Cashu ecash wallet (offline payments, no Lightning required)
- π§ Full GUI settings β no manual .ini editing
- π§ First-run setup wizard
- π§ Zap-based server authentication (pay-per-use)
- π§ Enhanced NWC features (balance, history)
Future:
- π― Global network of public HAMSTR server nodes
- π― Satellite transport support
- π― Mobile client
- π― APRS position integration
- GitHub Issues: Bug reports and feature requests
- NOSTR:
npub1uwh0m2y8y5489nhr27xn8vkumy8flefm30kkx3l0tcn0wss34kaszyfqu7 - Zaps welcome! β‘
This is a solo open-source project developed in spare time. Support is best-effort.
GPL-3.0 β see LICENSE for details.
Source: github.com/LibertyFarmer/hamstr