Ecosystem
A running list of what I am working on. It changes often, it is probably incomplete or out of date in places, and not everything here is public.
Disclaimer: All software described here is provided for personal, educational, and non-commercial research use only. These are hobbyist projects - not certified, validated, or approved for any safety-critical, emergency communications, or operational aviation purpose. Nothing on this page, including the NG911, PBX, and health-data compliance work, is fit for real dispatch or real patient data. See Terms of Use.
Science
quik-cycles models 22 astronomical, solar, planetary, climate, and Earth cycles as sine waves and scores the years when many of them peak together. A second part applies the same approach to matter, including the periodic table. The interactive visualization and its science guide are on this site.
Rust, MIT
Audio
quik-fidelity checks whether an audio file has the quality its format claims or is a low‑bitrate copy in a lossless container. Loudness, clipping, spectral‑cutoff, and bit‑depth checks work. Key, tempo, chord, and song‑structure analysis is optional, and its thresholds are not calibrated yet.
Rust, MIT
meristem prepares stems, the separated instrument tracks of a mix, for work in FL Studio, which does the audio processing. The tool also measures a finished track's loudness and peaks against streaming services' targets, scaffolds a song manifest, and runs a live clip‑launching set on an APC mini mk2 or an on‑screen pad grid.
Rust, MIT OR Apache-2.0
Radio
quiktool is a keyboard‑driven terminal dashboard. With an RTL-SDR USB receiver, quiktool tunes FM, decodes HD Radio and time signals, and tracks aircraft and ships. Without a receiver, quiktool shows weather, earthquakes, solar activity, moon phase, and planet positions.
Rust, GPL-3.0-or-later, source for quiktool (opens in new tab)
quik-sdr-rs is a software radio receiver for RTL-SDR USB dongles. The decoders cover FM and AM broadcast, HD Radio, NOAA Weather Radio alerts, aircraft (ADS-B), and ships (AIS). One program runs the decoder for the chosen mode and outputs audio, data, or status. quiktool uses quik-sdr-rs as its radio backend.
Rust, GPL-3.0-or-later, source for quik-sdr-rs (opens in new tab)
nrsc5-rs is a Rust port of the FM decode chain in the C nrsc5 project. NRSC-5 is the digital signal many FM and AM stations broadcast beside their analog sound. From raw RTL-SDR samples, nrsc5-rs recovers the audio with its own Rust HDC codec and shows the station name, song title, and artist.
Rust, GPL-3.0-or-later, source for nrsc5-rs (opens in new tab)
wwv-rs decodes the broadcasts of national time stations, such as WWV in the USA and DCF77 in Germany, into a date and time. WWV has been decoded off the air, and WWVB, JJY, DCF77, MSF, BPC, and RBU from recordings made through public KiwiSDR receivers. BPM's code layout is unconfirmed. wwv-rs runs as a command‑line program or as a library.
Rust, MIT, source for wwv-rs (opens in new tab)
noaa-wx-rs receives NOAA Weather Radio through an RTL-SDR, detects alert tones, and decodes SAME (Specific Area Message Encoding) headers, which carry an alert's type, counties, and expiry time. Alerts can be filtered to one county. A header is reported only when two of its three bursts match exactly, so a weak signal can go unreported.
Rust, MIT, source for noaa-wx-rs (opens in new tab)
rtl-sdr-rs is a Rust port of the Osmocom C library for RTL-SDR USB receivers, maintained upstream as ccostes/rtl-sdr-rs. Programs use the library to list devices by serial number, tune them, and read raw samples. The USB backend is nusb, and the supported tuners are the R820T and R828D. The radio projects here use the upstream crate.
Rust, MPL-2.0, source for rtl-sdr-rs (opens in new tab)
SDR Signal Roadmap
Planned signal modes for quik-sdr-rs / quiktool beyond the current 16. All receive‑only, legal under FCC Part 15/97.
| Mode | Standard | Freq | Modulation |
|---|---|---|---|
| VHF Airband Voice | ICAO Annex 10 | 118‑137 MHz | AM (DSB) |
| APRS | AX.25 | 144.39 MHz | AFSK 1200 baud |
| ISS APRS | AX.25 | 145.825 MHz | AFSK 1200 baud |
| Marine VHF Voice | ITU-R M.1084 | 156‑162 MHz | NBFM |
| Railroad | AAR | 160‑162 MHz | NBFM |
| POCSAG Paging | ITU-R 584 | 929‑932 MHz | FSK 512‑2400 baud |
| Mode | Standard | Freq | Modulation |
|---|---|---|---|
| WSPR | WSJT-X | 0.5‑28 MHz | 4-FSK |
| FT8 / FT4 | WSJT-X | 3.5‑28 MHz | 8-GFSK |
| Meteor-M LRPT | CCSDS | 137 MHz | QPSK 72 kbaud |
| DSC (Maritime) | ITU-R M.493 | 156.525 MHz | FSK 100 baud |
| Radiosonde (RS41) | WMO No. 8 | 400‑406 MHz | GFSK |
| ISM / rtl_433 | FCC Part 15 | 433/915 MHz | OOK/FSK |
| ADS-B UAT | DO-282B | 978 MHz | PPM + FEC |
| Mode | Standard | Freq | Modulation |
|---|---|---|---|
| P25 Phase I | TIA-102 | 700/800 MHz | C4FM / CQPSK |
| GOES LRIT | CGMS | 1694 MHz | BPSK |
QX9 (opens in new tab) develops encrypted infrastructure for critical communications, with a focus on next‑generation 911. Protocol documentation and analysis tools are published under open licenses. The projects build on Veilid (opens in new tab), a peer‑to‑peer framework maintained by the Veilid Foundation, and cover naming, telephony, media transport, compliance tooling, and network analysis.
Foundation
Veilid is an open peer‑to‑peer network maintained by the Veilid Foundation. Each participant runs a node that connects directly to other nodes. Data can be kept private, shared with chosen recipients, or published, and private routes are designed to hide which nodes are talking to each other. The qx- tools build on Veilid, as does the foundation's VeilidChat.
Rust, Dart, and WebAssembly, MPL-2.0
VNS, the Venus Name System, pronounced "vee‑enn‑ess" or "Venus," is a naming system separate from DNS. A site's address is derived from its owner's cryptographic key, and only the keyholder can publish to that address. Content is signed by the publisher and kept in Veilid's shared storage, and volunteer nodes called guardians re‑read records to keep sites available. The address format and the publish‑and‑resolve path work. The API is still changing.
Rust, MPL-2.0, VNS explainer (opens in new tab)
QX9 tools
qx-toolkit is a Wireshark plugin that decodes the envelopes Veilid nodes exchange, with primers, glossaries, and wire‑format diagrams. Encrypted message bodies need a node's private key, so without that key the plugin decodes the framing only. Synthetic packet captures serve as the regression suite.
Lua, MPL-2.0 / CC-BY-SA-4.0, source for qx-toolkit (opens in new tab)
qx-hail is a private branch exchange (PBX) in Rust, intended to carry calls over Veilid. Call setup and routing work through a back‑to‑back user agent, with a small softphone and G.711 voice. Voicemail, conferencing, and ring groups are tested libraries that are not connected yet. The NG911 work is partial, and the transport security that standard requires is not built.
Rust, MPL-2.0
qx-sideband is a protocol library for moving media, voice, and files between Veilid identities. Chunking, the content‑addressed store, and the media scanner work: content is split into 256 KB pieces fingerprinted with SHA-256. Transport and streaming are not built, so the library does not move anything over Veilid yet.
Rust, MPL-2.0
qx-aperture is a remote‑desktop gateway over Veilid, following the design of Apache Guacamole, meant to reach a computer's screen and terminal (RDP, VNC, or SSH) from a web browser. The Veilid half works in a self‑test: a broker finds the agent through VNS and moves bytes over a private route. The remote‑desktop half is an echo bridge for now, and SSH, RDP, and VNC bridging are planned.
Rust, MPL-2.0
qx-parallax changes the shape of outgoing network traffic. The shipped transport encrypts each packet and pads it by a random amount. Transports that imitate TLS, secure WebSockets, or QUIC are written, but the test suite does not build them. Resistance to deep packet inspection is a design goal and has not been measured.
Rust, MIT
qx-reel uses FFmpeg to split a video into scenes and extract thumbnail frames. The output is JSON metadata, MKV chapter marks, and a DaVinci Resolve import script. A planned media server, not built yet, would use this output to index video and address footage by scene over VNS.
Rust, MIT
qx-rabbit defines how next‑generation 911 systems could exchange event messages over a shared message bus: event types, routing rules, and audit‑record shapes, in the CloudEvents v1.0 envelope. A conformance tool checks the shape of each event. The bus itself is a convention so far, with no client code.
Rust, MPL-2.0
qx-comply defines compliance zones, bounded sets of vetted nodes intended as the only places holding regulated data such as HIPAA health records. The tool tracks the boundary and does not enforce it. qx-comply signs zone membership, keeps a signed, hash‑chained audit log, and checks destruction attestations. A conformance sensor sorts a node's stored values into encrypted and plaintext. The registry and log exist only in memory.
Rust, MPL-2.0
qx-bench measures distributed hash table (DHT) storage and retrieval, and VNS publishing and resolving, on real Veilid nodes. Runs are local by default, and a run against the public network has to be requested.
Rust, MPL-2.0
qx-forge holds two command‑line tools. qx-drain reclaims disk space from build leftovers, temporary files, caches, and old logs, with a report and a dry run first. qx-packager builds Linux .deb installers. Windows and Red Hat formats are named but not built.
Rust, MPL-2.0
Deadband is a persistent‑universe space strategy game. The world engine is deterministic, so the same seed regenerates the same universe. The voice, text, music, and language‑model tools around the game run locally.
Deadband World is the simulation core of the game. The engine models star systems, planets, economies, combat, diplomacy, and alliances in one universe generated from a seed. Terminal and graphical clients are included.
Rust, MPL-2.0, source for deadband-world (opens in new tab)
Deadband 3D is a first‑person client for walking through ship interiors, with terminals for cargo, navigation, communications, crafting, and rest, plus NPC dialog and views of space. A Rust GDExtension for Godot gets ship layout, population, and star colors from the deadband-world simulation. An early arena called Convergence is reachable through a developer shortcut.
GDScript + Rust, MPL-2.0, source for deadband-3d (opens in new tab)
dh81-telephone tests text‑to‑speech voices. The tool speaks test sentences, optionally adds radio‑like noise, transcribes the result with a speech recognizer, and reports word and character error rates. Voices that pass become spoken characters in the Deadband world.
Rust, MIT
dh81-talker reads Markdown aloud through Piper neural voices at a chosen speed, skipping code blocks and tables. An optional desktop window shows one word at a time in step with the speech (RSVP), with pause, rewind, and seek.
Rust, MIT
dh81-distiller shortens text one sentence per pass until each paragraph is a single sentence, then compiles those sentences into a short thesis. Summarization runs offline with ONNX models the user exports. Output is plain text, Markdown, or JSON, and a training pipeline can fine‑tune a custom model.
Rust, MIT
dh81-oracle answers questions about a folder of code and documents using retrieval‑augmented generation: the program finds relevant passages and gives them to a local language model. Desktop apps for a tabletop‑RPG narrator, a lore editor, and a session runner use the same engine.
Rust, MIT
dh81-jockey plays local files and internet radio, with optional TIDAL and text‑to‑speech sources. Each source implements one AudioSource interface. The project ships as a command‑line player, an optional graphical app, and a library.
Rust, MIT