Building My Own DevOps Tools

Building My Own DevOps Tools

Introduction

I’ve been meaning to build my own DevOps tooling for a long time now. Not because existing tools don’t work — they do — but because I keep bumping into the same friction points across different projects and I’ve had ideas rattling around in my head for years about how I’d do things differently. I’ve finally started acting on it.

This is the first in what will be a series of tools I’m building. They’re primarily for my own use, but I’m building them in the open in case others find them useful too.

Starting with Configuration

The first tool out of the gate is WCL (Wil’s Configuration Language). Configuration is the foundation everything else sits on, so it made sense to start here.

The main frustration that led to WCL is that no single configuration language gives you everything — attributed metadata, tables, maps, lists — all in one place. Simpler formats like YAML and TOML can handle basic structures but fall over when you need richer data modelling. HCL gets much closer with its block structure, but it lacks schema support, so you can’t validate configs at parse time. You’re always compromising somewhere.

WCL takes the syntax I liked from HCL and builds on top of it with everything I found missing: static typing, schema validation, macros, decorators, data tables, and a query engine. It’s written in Rust with bindings for pretty much every language I use, and it ships with full LSP support so you get autocompletion and diagnostics in your editor from day one.

If you want to see more about what it does, check out the project page or the docs.

What’s Next

WCL is just the start. I’m building a bunch of small terminal tools for things I’ve wanted for ages — expect to see them coming out over the next few weeks.

I’m also extending WCL itself to handle data transformations easily. Given how expressive the language already is, it turns out to be a really good fit for writing that kind of thing — taking data in one shape and mapping it to another without reaching for a scripting language.

If you’re curious about WCL, the source is on GitHub and the docs are at wcl.dev.

═══════════════════════════════════