
I built a code-first build system for Deno/TypeScript because I got tired of YAML — would love some eyes on it
So this started as a personal itch. I kept writing build/CI logic in YAML and shell scripts and hating that none of it was typed, refactorable, or debuggable. If I renamed a step, nothing told me what broke. So I built Zuke — a build system where you define targets as TypeScript class fields and wire dependencies with real references instead of magic strings.
The core idea: a target references another with this.compile, not "compile". Rename it and the compiler updates every reference. Zuke resolves the dependency graph and runs everything in topological order, exactly once. It's all just async TypeScript functions, so you get full editor support, types, and an actual debugger.
A few things I'm happy with:
- Generates GitHub Actions / GitLab / Azure YAML from code, and checks it's up to date on each run
- A $ tagged-template shell that escapes interpolations so you don't footgun yourself with injection
- Typed wrappers for a bunch of common tools (Deno, Docker, kubectl, Vite, etc.)
- Zero runtime deps — it runs on Deno and bootstraps Deno for you on first run
It's v1 and I'm sure there are rough edges, which is exactly why I'm posting. I'd really like people to actually try it on a real project and tell me where it annoys them or breaks. Honest "this is worse than X because Y" feedback is the most useful thing right now.
Repo and docs: Here (MIT licensed)
Inspired heavily by NUKE from the .NET world.