babashka

amiorin 2026-04-05T12:18:36.350079Z

Is it time for the "React of DevOps"? While building BigConfig, I’ve realized we have a chance to repeat the ClojureScript/React success story—this time in the DevOps space. Currently, DevOps is stuck in the "separation of technologies" phase (siloed folders for Terraform, Ansible, K8s files), much like the old HTML/CSS/JS divide. AI won't save us from that complexity mess, but components will. Why AI needs better abstractions There's a myth that AI agents will simply "manage the chaos." But just as AI didn’t replace the need for React, it won't replace the need for solid abstractions. Components make infrastructure: • Token-efficient: Agents process high-level components better than mountains of low-level YAML files. • Deterministic: Robust abstractions reduce the surface area for hallucinations. The Babashka Parallel If babashka is our "JavaScript"—the essential engine—we still need the right architecture to scale. In BigConfig, I call these "packages". They are truly modular, composable, and "white-box"—you can invoke internal steps or redefine them directly via multimethods. Call to action Star the project: Help me gain visibility. https://github.com/amiorin/big-config🛠️ Challenge the design: If you’re a better dev than me, build the "Vue" or "Svelte" equivalent. Let's find the best pattern together. • 🚀 Shift the Paradigm: Start replacing one-off bb scripts with reusable components. React faced pushback because "separation of technologies" was a dogma before components; we face the same with YAML silos. Disclaimer: Polished with AI, but there is a human in the loop and I've reviewed every word.

Daniel Jomphe 2026-04-06T14:06:44.515879Z

This reminded me of Pulumi's higher level components. I think this is https://www.pulumi.com/blog/pulumi-components/. I never got to use Pulumi to see if its higher level components were truly a gift... Back to BigConfig - if it could help standardize all sorts of project structure around our tooling and building blocks, it would raise our abstraction level. A bit like how neil and bbin simplify some things around bb and clojure. I guess you could say the idea is to include more batteries in the basic clojure ecosystem, using BigConfig as a building block for this new kind of batteries...

amiorin 2026-04-06T14:23:49.996429Z

You’ve hit the nail on the head regarding building blocks. In BigConfig, your TF/Ansible files are organized into namespaced resource folders (e.g., io.github.com...). Because every component is a standard Clojure project, you get a seamless experience across deps.edn, the CLI and REPL. It turns infrastructure into a first-class library. For the "batteries" part, I’m planning to add Malli validation soon to keep everything safer.

amiorin 2026-04-14T06:53:57.023739Z

@j.s If you're looking to use Clojure with Ansible, here are a few patterns I’ve developed inside a BigConfig package: 1. Simple cases: I use https://github.com/amiorin/once/blob/main/src/resources/io/github/amiorin/once/tools/ansible-local/main.yml to generate the YAML. 2. Complex scenarios: I generate the YAML directly within https://github.com/amiorin/once/blob/8ffbbc2ea0974365575c7ee44b7d890e69447144/src/clj/io/github/amiorin/once/tools.clj#L226-L231 for better control. 3. Custom Modules: If I need a full AnsibleModule, I write a https://github.com/amiorin/once/blob/main/src/resources/io/github/amiorin/once/tools/ansible/library/once script containing WANT_JSON.

jasalt 2026-04-07T15:10:23.807629Z

Sounds interesting. I was looking into Clojure options last year but went with https://pyinfra.com/ which is like Ansible but no Yaml, just Python. Missing repl friendliness and lisp syntax a bit but otherwise liking it so far.

amiorin 2026-04-07T16:51:06.336069Z

Nice, I'll have to take a look at Pyinfra! I'm curious to see how it compares to Ansible.

jasalt 2026-04-08T00:56:45.324989Z

For REPL unfriendliness regarding PyInfra, I had to run something like following to be able to run it's operations from Python repl as the host and state need initializing:

def init_repl():
    from pyinfra.api import State, Inventory  # pyright: ignore[reportPrivateImportUsage]
    state = State()
    inventory = Inventory((['my-server', 'my-server-2'], {}))
    state.init(inventory, config=None)

    # Get the host
    host = inventory.get_host('my-server')

jasalt 2026-04-15T00:35:27.967609Z

Thank's, I'll keep the project in mind in case I need to use Ansible (and the other supported tools). Keeping it quite simple with few VPS instances for now 🙂