The FREE stack, ring by ring — what I trust, and inside each ring, the layers it lands in.
The radar is drawn by JavaScript. Nothing is lost without it: every ring and layer it shows is listed, in full, further down this page.
Rings
Layers
Point at a blip for what it is and which way it moved; click it to open its entry. Click a ring or a layer to isolate it.
The rings #
- Adopt
- proven in daily work, and the default for anything new.
- Trial
- running on real projects, not yet a default.
- Assess
- worth a prototype, and no commitment yet.
- Deprecate
- actively discouraged for new work.
A name in parentheses — (new), (moved in), (moved out) — says what changed
since the last revision; a note after a dash says why.
What FREE means #
- F — Functional
- declarative, predictable systems with clear effects.
- R — REPL
- code evaluated on the running system, with no write-compile-test lag.
- E — Extensible
- a stack built to scale into flexible, extensible systems.
- E — Environment Control
- the whole lifecycle under my own control: no hidden telemetry, no paywalls, one-command self-hosting.
✅ Adopt #
🧬 Languages #
- Guile Scheme and Lisps in general
- Emacs Lisp
- JavaScript (vanilla)
- Rust
🎨 Frameworks & UI #
- GNU Artanis
- GTK4 Libadwaita
- Olive CSS for all serious web projects (utility class vanilla CSS)
- Hygguile UI components (batteries included Guile Scheme UI framework built on Olive CSS)
🗃️ Data & Storage #
- SQLite
- PostgreSQL
- Plain SQL queries
- Hetzner Storage Volumes with Cron-job based backups and rsync
🧰️ Tools & Environment #
- GNU Guix
- Emacs
- Org mode
- Maak build tool and command runner
- Veritas test framework (idiomatic unit, integration and black-box testing framework powered by Lisp - Guile Scheme)
- Scriba structured logging framework (modular log routing, formatting, and filtering, allowing developers to generate human-readable console logs during development and machine-readable logs for production environments)
- Woodpecker CI/CD — the CI that replaced the Jenkins pipelines I used to maintain
- Nix Flakes
- Nix dev shells
🌐 Platforms & Delivery #
- Custom low-power green VPS (Hetzner)
- Codeberg — free software’s own forge, and the home of every project of mine
⚙️ Practice & Craft #
- Authorization and Authentication with Bewaking tokens as cookies
- Guix Manifests
- Guix dev shells
- Hexagonal architecture / ports and adapters (moved in) — the boundary earns its keep wherever the domain is the complicated part; the Hexagon of Doom is the case where it is not
🧪 Trial #
🧬 Languages #
- Guile embedded in C and GTK4 (moved in) — the dock Wayland was waiting for, with a Lisp engine inside a native app
🧰️ Tools & Environment #
- Podman (moved in) — daemonless, root-less containers that stay under my own control
- Hyprland (moved in) — the Wayland compositor I actually use daily, after SwayFX taught me compositor scripting
- DeepSeek (new) — an LLM I keep on a short leash: it drafts and reviews, a human decides, and nothing it writes ships unread
🌐 Platforms & Delivery #
- Self-hosted Woodpecker runners on the same VPS (moved in) — CI that never leaves infrastructure I control
⚙️ Practice & Craft #
- Server-side rendering over client-side JavaScript (moved in) — pages that work before, and without, a megabyte of framework
- This very site as a single Org tree (moved in) — prose, build script and metadata in one plain-text source
- Parsing Expression Grammar in Scheme with
(ice-9 peg)(moved in) — how OrgWebAlchemy turns Org into HTML without a parser generator
🔍 Assess #
🧬 Languages #
- Guile Hoot — Scheme compiled to WebAssembly
- Zig
- Hare
🧰️ Tools & Environment #
- Forgejo — a self-hosted forge for code I want to keep closer than Codeberg’s public instance
- Guix Home — one declarative description of the machine I actually work on
🌐 Platforms & Delivery #
- Guix System images on AArch64 (moved in) — a machine I can describe, build and roll back, on hardware that is not x86
- Guix System as the whole server, not just the toolchain
⚙️ Practice & Craft #
- Property-based testing — describing the invariant instead of the example
- Reproducible CI with `guix time-machine`
🗑️ Deprecate #
🧬 Languages #
- Haskell (moved out) — as beautiful and powerful as it is, it’s simply too complex for 9/10 use-cases
- Scala
- Common Lisp — rather use Scheme if possible
- TypeScript
🎨 Frameworks & UI #
- Svelte
- Servant (Haskell), API as a type
- ZIO (Scala)
🗃️ Data & Storage #
- MySQL
🧰️ Tools & Environment #
- Jenkins (moved out) — shared-library pipelines and Groovy DSLs, traded away for a thinner agent
🌐 Platforms & Delivery #
- Amazon AWS