Rebuilding the JS8Call protocol core in Rust — Make open source transmissible — over the air, across the world.
js8core-rs
is a Rust reimplementation of the JS8Call protocol, designed for weak-signal, low-power, and off-grid communication over HF (shortwave) radio.
It focuses on environments where bandwidth is scarce, latency is high, and infrastructure is nonexistent — such as:
- Emergency communications after disasters
- Off-grid expeditions and field kits
- Embedded devices in harsh environments
- Simulated interplanetary networks (e.g., MarsNet)
This project is a cleanroom reimplementation of the original JS8Call C++ codebase maintained by KN4CRD.
That legacy implementation is:
- Built with Qt GUI bindings
- Intertwined with desktop components
- Challenging to modularize or embed
Our goal is to extract and modernize the protocol core into a standalone, testable, embeddable Rust library — fully open-source and suitable for headless operation.
Rust provides:
- ✅ Memory safety with zero-cost abstractions
- ✅
no_std
support for embedded and bare-metal - ✅ Strong type system for protocol correctness
- ✅ First-class async + concurrency tooling
- ✅ Cross-compilation to WASM, CLI, Linux, and RTOS
With js8core-rs
, we aim to produce a library that can run:
- In a browser tab
- On a microcontroller
- Inside a planetary rover
- Or inside your terminal
MarsNet is a conceptual example of how this protocol could be deployed in the future:
- JS8-like messaging across isolated relay nodes
- TTL-aware frames, timestamped packets, store-and-forward logic
- Operable in solar-powered, delay-tolerant, disconnected mesh environments
Whether on Earth or elsewhere, js8core-rs
supports signal-based messaging even when nothing else works.
js8core-rs
├── audio # I/O abstraction (WAV/PCM)
├── modem # Frame sync, symbol demod, SNR estimation
├── protocol # JS8 message logic and framing
├── codec # Huffman codec for compression
├── relay # Store-and-forward with TTL logic
└── examples # CLI usage, test vectors, integration
Each module is self-contained and exposed as a Rust crate. Future support includes:
- WebAssembly bindings
no_std
compatibility- CLI tooling + relay daemon (
js8d
)
Layer | Purpose |
---|---|
Application | CLI, web frontend, headless services |
Protocol | Framing, routing, relay logic |
Modem | Baseband symbol-level decoding |
Audio | Platform I/O bridge |
Relay Engine | Offline store/forward messaging |
We're building a community of radio hackers, protocol engineers, and Rustaceans.
We welcome:
- 🔧 Rust devs interested in protocol-layer work
- 📡 JS8Call operators who can test real-world interactions
- 🔬 DSP/audio engineers with a passion for signal decoding
- 🛰️ Open source dreamers building the fallback internet
Pull requests and discussions are welcome. See CONTRIBUTING.md for guidelines.
This project is licensed under GNU AGPL v3.
That means:
- You can use, modify, and deploy freely
- If you run a modified version over a network, you must share the source
- All forks and adaptations remain part of the commons
We believe signal infrastructure should belong to everyone — especially in times of collapse.
📄 Read the LICENSE for full details.
- Source: github.com/rectinajh/js8core-rs
- Original: bitbucket.org/widefido/js8call
- Contributors: See
CONTRIBUTORS.md
Turn on the radio and receive the signal:
CQ CQ CQ DE JS8CORE-RS PSE QSY 14.078 RUSTCORE DE MARS
This isn’t just code. It’s how civilizations keep talking.