kibitz
Play a friend end to end — chess, backgammon, checkers, reversi, Connect Four, and provably-fair Battleship, with chat, over one encrypted session paired by a code phrase through a relay that can't read a thing.
- Go
- WASM
- crypto
developer · open source · go & rust
I build small, dependency-light tools and libraries — static analysis, project & format detection, MCP servers, and the gloam design language that ties these pages together. Mostly Go and Rust, always shipped.
34 open-source projects · all live, all documented
$ richard --whoami name Richard Wooding focus developer tools · libraries langs Go · Rust · Zig · C# · Java · TypeScript · JavaScript projects 34 open-source · all shipped $ richard --projects | wc -l 34
about
I'm a software engineer drawn to the unglamorous, reusable layer of the stack: the library, the CLI, the well-behaved server. I like giving a tool a sharp scope and a clean API, keeping dependencies few, and documenting it properly. Recently that's meant per-function complexity metrics, project and binary analysis, Model Context Protocol servers, and a dark little design system so all of it looks like it belongs together.
featured · live
kibitz is six games — chess, backgammon,
checkers, reversi, Connect Four, and provably-fair Battleship — with chat, over one
end-to-end-encrypted session. You get a code phrase like lion-42-maple,
a share link, and a QR; a friend joins as your opponent and the rest kibitz. The relay
that carries it all can never read a move or a message. 100% Go, WASM in the browser.
$ open a table your phrase lion-42-maple share link · QR ready >> ada joined — she's Black, you're White chat ada: en passant? really? chess e5 → move 4 verified ✓ # the relay only ever saw opaque frames
open source
Thirty-five things I've built and shipped — each with a live site and source on GitHub.
Play a friend end to end — chess, backgammon, checkers, reversi, Connect Four, and provably-fair Battleship, with chat, over one encrypted session paired by a code phrase through a relay that can't read a thing.
A dark, purple, terminal-flavored web design language — CSS, components, and a Claude Code skill to build with it. It styles this very page.
Per-function cyclomatic & cognitive complexity for 17 languages — a CLI, a GitHub Action, and a Go library with a standard-library-only core.
Retro solitaire — Klondike, FreeCell, and Spider on a chunky pixel-art deck, with unlimited undo, safe auto-complete, and the classic bouncing-cards win. 100% Go, in your browser.
A CHIP-8 emulator with a live debugger — registers, disassembly, and traces beside the screen. COSMAC VIP accuracy verified by the Timendus suite. 100% Go, in your browser.
The daily Cape Town suburb puzzle — guess the suburb from its silhouette, with distance and direction hints. 778 official suburbs from the City's open data. A new one every midnight.
Classic tracker music — MOD, S3M, XM, IT — playing in your browser with a FastTracker-style visualizer: scrolling patterns, oscilloscopes, VU meters. 100% Go, compiled to WebAssembly.
Replay a repository's complexity history as a terminal timelapse — watch per-function hotspots ignite and cool, commit by commit, no checkouts. Exports to asciinema and GIF.
Detect a directory's project type(s) across 18+ ecosystems — Go, Node, Rust, .NET, Python and more — extensible via YAML/CEL. Pure Go, no cgo.
The Rust port of projectdetect — the same detection semantics, idiomatic and with no unsafe. Published on crates.io & docs.rs.
Extract strings from binaries — a format-aware, secret-scanning, archive-diving replacement for GNU strings, with JSON and triage output.
A Model Context Protocol server for RSS, Atom, and JSON feeds — lets an AI assistant read and search syndicated content.
A dependency-free Go client for ArcGIS Feature Services — automatic pagination, spatial filters, and cheap counts, in a struct or fluent API.
Your board game shelf of shame, from your terminal and your AI assistant — a colourful CLI, an MCP server, and a Go library for the BoardGameGeek® XML API.
A comprehensive Model Context Protocol server for querying the City of Cape Town's open-data layers — wards, heritage, water quality, and more.
Cross-language code-symbol extraction for 17 languages — definitions, imports, call edges, and complexity from one parse (Go via go/ast, the rest via tree-sitter).
Package coupling metrics (Ca/Ce/instability) and circular-dependency detection across 9 ecosystems — from imports you already extracted, no parser needed.
Find the code worth refactoring first: fuses git churn × complexity × package coupling into one ranked risk score — composing gitmeta, codemetrics and go-coupling.
Verify C2PA / Content Credentials entirely in your browser — the pure-Go validator compiled to WebAssembly. Drop an image, see every validation status; nothing is uploaded.
Pure-Go C2PA / Content Credentials for JPEG, PNG & BMFF (HEIC, MP4, MOV) — a fast unverified claim reader for triage, plus full cryptographic validation. No cgo.
Prevent SSRF in Go — validate outbound URLs and block internal addresses at dial time, after DNS resolution, so it's robust against DNS rebinding.
A per-host rate-limiting http.RoundTripper for Go — being slow to one host never throttles another, and it composes cleanly under other middleware.
Hash allow/deny lookup (MD5/SHA-1/SHA-256) for forensics and security — a fast in-memory store or a bbolt-backed one for NSRL-scale sets.
A minimal, zero-dependency SARIF 2.1.0 emitter for Go static-analysis tools — map findings to the document GitHub Code Scanning and other CI ingest.
Recursively walk zip/tar/gz/bz2/xz/zstd/deb containers in Go — stream every nested file by virtual path, with decompression-bomb guards.
String security triage in Go — Shannon entropy, content classification, and secret detection with redaction. Zero dependencies.
The Zig port of projectdetect — detect a directory's project type(s) across 28 built-in types, walk a tree for roots, resolve a file's project. Zero deps.
Fast per-file git metadata in Go — one batch scan, then constant-time last-commit / author / churn / tracked-ignored lookups.
The Rust port of gitmeta — per-file git metadata via one batch scan, with an optional async (tokio) API.
The C#/.NET port of gitmeta — per-file git metadata via one batch scan, with both synchronous and async APIs.
The Zig port of gitmeta — per-file git metadata via one batch scan, constant-time lookups, zero dependencies.
A zero-dependency Ollama embeddings client for Go — text→vector, plus vector math and a curated model catalog for semantic / RAG search.
Okapi BM25 keyword ranking and reciprocal-rank fusion for Go — the keyword half of hybrid search, zero dependencies.
SimHash text near-duplicate detection and perceptual image hashing for Go — small, and built for hybrid search.
triage, bm25 & fingerprint live in your browser — secret detection, keyword ranking, and near-duplicate similarity as WebAssembly. Nothing is uploaded.
Content-type aware file search: query 74 file formats by their typed attributes — EXIF, audio tags, code symbols, binary entitlements — with CEL. A CLI and a Claude Code MCP server.
toolbox