Nix and devcontainers solve environment reproducibility by changing how you work. Bivvy solves it by working with what you already have.
No Nix language. No flakes. No Docker. Bivvy is YAML and shell commands. If your team can write a README, they can write a bivvy config.
Devcontainers run inside Docker. Bivvy runs setup steps on your actual machine. Use any editor, any terminal, any workflow you want.
No infrastructure to deploy. No daemon to manage. No paradigm to adopt. Add .bivvy/config.yml and you're done.
| Capability | Bivvy | Nix / Devcontainers |
|---|---|---|
| Learning curve | Low — YAML and shell commands | Steep (Nix) / Moderate (Devcontainers) |
| Reproducibility | Practical — same steps, same checks | Exact (Nix) / Container-level (DC) |
| How it works | Runs setup on your existing machine | Replaces package mgmt (Nix) / Runs in Docker (DC) |
| Editor support | Any editor — it's a CLI | Requires nix-shell (Nix) / VS Code mainly (DC) |
| Adoption cost | Drop a YAML file in the repo | Team learns Nix / Team uses Docker |
| Offline support | After first run, most steps work offline | Full once packages/images are fetched |
| CI parity | Same config, --non-interactive | Same nix flake / Same container image |
| Shared config | extends: for org-wide inheritance | Shared flakes / Base images |
Nix gives you hermetic, bit-for-bit reproducible environments. That's genuinely impressive. It also requires your entire team to learn a functional programming language for package management.
Bivvy gives you practical consistency: the same setup steps run the same way on every machine. It's not hermetic, but it catches 95% of "works on my machine" issues with 5% of the adoption cost.
# This is the entire config. # No new language to learn. steps: ruby: template: bundler watches: [Gemfile.lock] node: template: yarn watches: [yarn.lock] services: command: "docker compose up -d" completed_check: command: "docker compose ps --status running"
Devcontainers work well if your team uses VS Code and doesn't mind developing inside Docker. But many developers have strong preferences about their editor, terminal, and workflow.
Bivvy respects those preferences. It sets up your machine the way you want it — with the tools you chose, in the editor you prefer. No containers between you and your code.
❯ git clone myapp && cd myapp ❯ bivvy run ⛺ bivvy v1.2.0 ✓ Ruby 3.2.2 via mise ✓ Bundled gems installed ✓ Node 20.11.0 via mise ✓ Yarn packages installed ✓ Docker services started ✓ Database created & migrated 🎉 Setup complete! Open in any editor you like.
For most teams, "practical" reproducibility is enough — and the adoption cost is what matters. Bivvy gets you there with YAML, not Nix.