Introducing BigConfig Package
Helm has long been the gold standard for Kubernetes, but it hits a wall the moment you step outside the cluster. While there are projects to bridge this gap, they never quite achieved Helm’s level of ubiquity.
BigConfig Package is taking a different path. It aims to deliver both infrastructure and software as a unified, cohesive delivery.
The Case Against the “CLI Proliferation”
Section titled “The Case Against the “CLI Proliferation””One of the most radical aspects of BigConfig Package is what it lacks: a dedicated CLI. In BigConfig’s philosophy, a CLI is just another tool that end-users should tailor to their specific needs. We argue that the current explosion of specialized CLIs is actually a symptom of unsolved underlying problems:
- Bash Limitations: The fragility of shell scripting forces developers to wrap logic in binaries.
- Interoperability Gaps: Integrating multiple CLI tools via scripting is often easier than managing complex library dependencies, leading to “scripting fatigue.”
- The Go Paradox: While static languages like Go are excellent for single binary deployments, they force the creation of monolithic tools that make composition more difficult (e.g., Terraform plugin is based on GRPC).
BigConfig solves these issues by leveraging Clojure and Babashka. By using a dynamic, high-performance language, we replace rigid tools with flexible Babashka tasks, offering the power of a library with the convenience of a script.
The Three Environments: Shell, REPL, and Lib
Section titled “The Three Environments: Shell, REPL, and Lib”Most DevOps professionals only interact with tools (like Helm) in the Shell environment. BigConfig expands this to three distinct planes:
- Shell: For quick, command-line execution.
- REPL: For real-time, interactive debugging and experimentation. No more “edit-coffee-fail” loops.
- Lib: For deep automation. You can orchestrate complex scenerio without reimplementing anything when switching gear from CLI tool to in-house solution.
What is a BigConfig Package?
Section titled “What is a BigConfig Package?”There is no need to reinvent the wheel. A BigConfig Package is simply a Clojure repository, and the package itself is just a Clojure function written with BigConfig Workflow .
Our first application, Walter , tackles a challenge Helm simply wasn’t built for: Remote Development Environments on machines instead of containers.
While devcontainers are popular, containerizing a full development environment on Kubernetes has significant overhead and limitations. Nix is the superior choice here. Its native multi-user support makes it ideal for high-powered “beefy” machines shared by multiple developers.
In this setup, Terraform and Ansible do the heavy lifting but remain completely hidden once development is complete, leaving behind a clean interface that doesn’t “leak” its underlying complexity.
The use case of Remote Development Environment is getting traction and by integrating a Linux user to run a self-hosted GitHub runner, you unlock massive efficiency:
- Cost Reduction: Run Dev and CI on the same hardware.
- Instant Caching: CI pipelines never miss a cache hit because the environment is shared.
- Absolute Parity: “Works on my machine” becomes a reality because the Dev and CI environments are identical.
- Native Speed: Docker runs natively, eliminating the virtualization overhead found on macOS or Windows.
Comparison: Helm vs. Babashka
Section titled “Comparison: Helm vs. Babashka”The Helm Way
Section titled “The Helm Way”In this paradigm, you manage repositories and install charts. It typically requires juggling YAML, Go templates, and Bash.
helm repo add bitnami https://charts.bitnami.com/bitnamihelm repo updatehelm install my-redis bitnami/redisThe Babashka Way
Section titled “The Babashka Way”With BigConfig, helm install becomes bb redis create. The CLI is defined by the package creator but can be customized by the user.
We use create instead of install in this case because the infrastructure is part of the delivery. Using bb instead of bash provides a unified environment where everything is written in Clojure, replacing the fragmented mix of Bash, Compiled Go, and YAML.
;; bb.edn{:deps {io.github.amiorin/redis {:git/sha "eaff6f"}} :tasks {:requires ([redis :as redis]) redis {:doc "Provision a Redis instance" :task (comp-wf/redis* *command-line-args*)}}}bb redis createbb redis deleteConclusion
Section titled “Conclusion”The era of managing a dozen different CLIs just to deploy a single stack is reaching its breaking point. BigConfig offers a way out, not by building a bigger tool, but by providing a more flexible foundation. By unifying the way we handle infrastructure and applications through Clojure, we aren’t just deploying software; we are creating a more cohesive, reproducible, and developer-friendly ecosystem.
Would you like to have a follow-up on this topic? What are your thoughts? I’d love to hear your experiences.