Gengie
A tiny browser game engine I'm building in OCaml, with brr for browser bindings — the foundation for a small indie game I want to experiment with.
Read moreDevcontainers is the library I reach for whenever I start a new project. It's a set of reusable Dev Container Features and Templates published to ghcr.io/alindesign, so picking a stack becomes a matter of listing what I need in a devcontainer.json instead of writing yet another Dockerfile.
The source lives at github.com/alindesign/devcontainers. The longer story behind why it exists is in Building a Dev Container Library.
Seventeen features and twelve templates, all versioned independently and published as OCI artifacts.
Foundations — dotfiles (zsh + starship + a curated CLI toolkit + nvim + git) and mise for toolchain management.
Languages — node, go, rust, java, ocaml, python, bun. Most go through mise so versions are pinned per project.
Ops & cloud — docker-in-docker, kubectl (+ helm, k9s, kubectx), opentofu, aws-cli, gcloud, ansible, db-tooling, secrets (sops + age + pass), and claude for Claude Code.
Templates are opinionated bundles for common stacks: claude-dev for AI-assisted work, cloud-ops for multi-cloud, devops as the full IaC toolbox, plus one per language.
Every feature is a small install script with a JSON manifest. Features can depend on other features, so adding node automatically pulls in mise if it isn't already there. Templates are just starter devcontainer.json files that wire features together.
There's also a pre-built base image, ghcr.io/alindesign/devcontainer-base, with dotfiles + mise baked in. Using it skips two layer rebuilds for the common case.
{ "image": "ghcr.io/alindesign/devcontainer-base:latest", "features": { "ghcr.io/alindesign/features/node:2": { "packageManager": "pnpm" }, "ghcr.io/alindesign/features/claude:1": {}, "ghcr.io/alindesign/features/aws-cli:1": {}, }, "remoteUser": "vscode", }
Every project I touched used to start with copy-pasting and patching the last devcontainer.json I had lying around. That's how environments quietly diverge. A library moves the setup logic out of every individual repo and into one place I can version, test, and improve.
CI runs on every push and tests each feature against the Microsoft base image, so regressions surface before they hit a real project.
Built by
Alinus Dumitrana
Check out more of my work.
A tiny browser game engine I'm building in OCaml, with brr for browser bindings — the foundation for a small indie game I want to experiment with.
Read moreA personal website built with Rust and Axum — server-rendered with minimal JavaScript, and on-demand PDF generation.
Read more