CLI-Tool
cachix/devenv avatar
cachix/devenv

devenv: deklarative Entwicklungsumgebungen mit Nix ohne Nix-Handwerk

Schnelle, deklarative, reproduzierbare und zusammensetzbare Entwicklerumgebungen mit Nix.

7.645 Sterne567 ForksRustApache-2.0

Auf einen Blick

Was ist das?
Das in Rust gebaute devenv kapselt Nix hinter Manifesten, Prozessen und Diensten. Was die Version 2.x bringt, wie devenv.nix aussieht und wo die Grenzen liegen.
Für wen ist es gedacht?
devenv passt zu Teams, die reproduzierbare Umgebungen mit PostgreSQL, Redis oder eigenen Prozessen wollen, ohne Nix von Grund auf zu lernen, und die mit Apache-2.0 und einem Nix-unterlegten Stack leben können. Wer freie Build-Kontrolle in make oder Bazel hat, wird die Manifestgrenzen als Fessel empfinden.
Darf ich es kommerziell nutzen?
Ja. Apache-2.0 ist eine freizügige Lizenz: Sie dürfen darauf aufbauende Software nutzen, verändern und verkaufen, solange Sie die Urheberrechts- und Lizenzhinweise beibehalten.
Wird es noch gepflegt?
Ja. Die letzten Commits kamen vor 2 Tagen.
In welcher Sprache ist es geschrieben?
Hauptsächlich Rust, laut der Sprachstatistik von GitHub.

Die Antworten beruhen auf den GitHub-Daten des Projekts (zuletzt abgeglichen am 14. September 2026) und auf unserer Analyse. Sie sind keine Rechtsberatung.

TIEFGEHENDE OPEN-SOURCE-ANALYSE

devenv 2.x: Terminal-UI, Shell-Reloading und Evaluierungs-Caching

devenv ist ein in Rust geschriebenes Werkzeug, das Nix hinter einem konfigurationsgesteuerten Workflow verbirgt: schnell, deklarativ, reproduzierbar und komponierbar, so die Selbstbeschreibung auf devenv.sh. Die 2.x-Linie, eingeführt mit dem Blogbeitrag vom März 2026, bringt ein Terminal-UI mit Live-Build-Fortschritt, Aufgabenhierarchie und Fehlerdetails. Ein natives Shell-Reloading baut im Hintergrund neu, während die Shell interaktiv nutzbar bleibt, damit entfällt das typische Warten nach jeder Manifeständerung.

Kern des Geschwindigkeitsversprechens ist inkrementelles Nix-Evaluierungs-Caching: Laut README liegen die Zugriffszeiten unter 100 Millisekunden, wenn sich nichts geändert hat. Diese Zahl ist eine Selbstauskunft, aber die Richtung stimmt, denn ohne Cache ist jede Nix-Auswertung spürbar teurer. Ein gebündelter LSP für devenv.nix liefert Autovervollständigung, Hover-Dokumentation und Sprung zur Definition über nixd, was den Einstieg in die Optionswelt deutlich leichter macht. Aktuelle Release-Stände sind v2.2.2 vom August 2026, davor v2.2.1 und v2.2 vom Juli 2026.

devenv init erzeugt devenv.nix mit env.GREET und scripts.hello

Der Schnellstart beginnt mit devenv init, das devenv.yaml, devenv.nix und eine .gitignore anlegt. Die generierte devenv.nix zeigt die Struktur einer Umgebung: env.GREET = "devenv" setzt eine Umgebungsvariable, packages = [ pkgs.git ] zieht ein Paket aus Nixpkgs, auskommentierte Zeilen verweisen auf languages.rust.enable, processes.dev.exec und services.postgres.enable. Ein scripts.hello.echo-Abschnitt demonstriert Skripte mit Zugriff auf Umgebungspakete, enterShell führt Befehle direkt beim Betreten der Shell aus.

Aktiviert wird alles über devenv shell. Die Befehlsliste der README umfasst init, generate, shell, update, search und info, wobei search Pakete und Optionen in Nixpkgs durchsucht und update devenv.lock aus den devenv.yaml-Inputs aktualisiert. Deutlich wird hier die Rolle des Tools: devenv ist eine Options-Ebene über Nix. Wer die README-Referenzen für devenv.yaml und devenv.nix liest, konfiguriert Umgebung statt Build-System, und genau diese Verschiebung ist der Produktionsunterschied zu rohem Nix.

Prozessmanager in Rust mit Readiness-Probes und Port-Allokation

Der native Prozessmanager ist in Rust geschrieben und deckt mehr ab als die üblichen Procfile-Helfer: Abhängigkeitsreihenfolge, Neustartrichtlinien, Readiness-Probes in den Varianten exec, HTTP und systemd notify, Socket-Aktivierung, Watchdog-Herzschläge und Dateiüberwachung. Damit lassen sich Abhängigkeiten zwischen Diensten ausdrücken, etwa ein Backend, das erst startet, wenn PostgreSQL bereit meldet.

Eine unscheinbare, aber sehr praktische Funktion ist die automatische Portzuweisung, die freie Ports findet, damit parallele Umgebungen nicht kollidieren. Wer zwei Worktree-Kopien desselben Projekts nebeneinander betreibt, kennt das Port-Chaos, das devenv damit entschärft. Aufgaben laufen als DAG mit Caching, parallelen Ausführungen und Namespace-Unterstützung, Skripte haben Zugriff auf alle Umgebungspakete. Die Zahlen zur Abdeckung: über 50 Sprachen mit eingebauten Werkzeugen wie Compilern, LSP-Servern und Formatierern, über 100000 Pakete aus Nixpkgs für Linux, macOS, x64 und ARM64 inklusive WSL2, und über 40 Dienste von PostgreSQL über Redis, MySQL, MongoDB und Elasticsearch bis Caddy.

Profiles, Imports und out-of-tree devenvs mit --from github:myorg/configs

Für Varianten derselben Umgebung gibt es Profile, aufgerufen mit --profile backend --profile testing. Über Imports lassen sich Umgebungen teilen und über Projekte hinweg wiederverwenden, Inputs pinnen und überschreiben Nix-Abhängigkeiten, devenv.lock hält den Stand fest. Besonders für Organisationen interessant sind out-of-tree devenvs: Mit --from github:myorg/configs nutzt man Konfigurationen aus einem anderen Repository, das Zentral-Repo kann also Teamstandards für alle Projekte liefern.

Die Polyrepo-Unterstützung geht einen Schritt weiter und erlaubt, Outputs und Optionen über Repositorygrenzen zu referenzieren. Damit wird devenv für mehr als Ein-Projekt-Sandkasten brauchbar: Plattformteams können eine Basisumgebung pflegen, Projekte erweitern sie per Import. Wegen dieser Kompositionsfähigkeit lohnt ein Blick in die Guides zur Polyrepo-Nutzung auf devenv.sh, bevor man Umgebungen kopiert, denn Referenzieren statt Duplizieren ist hier der dokumentierte Weg.

SecretSpec, git-hooks.nix und devenv test mit Prozessstart

Bei Geheimnissen setzt devenv auf SecretSpec, eine deklarative, anbieterunabhängige Verwaltung mit den Backends Keyring, 1Password und dotenv. Das trennt Konfiguration von Credentials sauberer als fest kodierte .env-Dateien. Git-Hooks kommen über git-hooks.nix mit vorkonfigurierten Formatierern und Lintern, die direnv-Integration aktiviert die Shell automatisch beim Betreten des Verzeichnisses.

Für Tests gibt es devenv test, das Prozesse automatisch startet und stoppt, wodurch Integrationstests dieselben Dienste bekommen wie die lokale Entwicklung. Zwei Integrationen zielen auf KI-Workflows: ein MCP-Server für Assistenten mit Paket- und Optionssuche, und devenv.new, das Umgebungen aus einer natürlichsprachlichen Beschreibung erzeugt, auch als Befehl generate in der CLI. Beide sind Komfort, kein Muss, aber sie zeigen, dass das Projekt seine Optionslandschaft maschinenlesbar aufbereitet hat.

OCI-Container ohne Docker und die Grenzen der Manifest-Ebene

Aus der Umgebung lassen sich OCI-Container bauen, ohne Docker zu benutzen, was CI-Pipelines ohne Docker-Socket attraktiv macht. Outputs paketieren Anwendungen mit sprachspezifischen Werkzeugen wie crate2nix oder uv2nix, also derselben Nix-Unterlage, aus der die Umgebung selbst entsteht. Der Übergang von der Entwicklungsumgebung zum Artefakt bleibt damit in einem System.

Die Grenzen liegen in der Opinitheat: devenv ist keine frei programmierbare Build-Plattform, wer make- oder Bazel-Konstrukte beherrscht, muss sich auf die Optionen der dokumentierten Oberfläche zurückstellen. 359 offene Issues bei 7441 Sternen zeigen eine lebendige, aber auch umkämpfte Optionslandschaft, Randfälle landen dort regelmäßig. Apache-2.0 erlaubt kommerzielle Nutzung uneingeschränkt. Für die Bewertung heißt das: devenv ersetzt kein eigenes Build-Design, sondern stabilisiert die Umgebung darunter, und genau dafür sollte man es einsetzen.

Redaktionelles Fazit

devenv passt zu Teams, die reproduzierbare Umgebungen mit PostgreSQL, Redis oder eigenen Prozessen wollen, ohne Nix von Grund auf zu lernen, und die mit Apache-2.0 und einem Nix-unterlegten Stack leben können. Wer freie Build-Kontrolle in make oder Bazel hat, wird die Manifestgrenzen als Fessel empfinden. Vor dem Rollout sollte man devenv init in einem Musterprojekt durchlaufen, devenv test mit aktivierten Diensten prüfen und klären, ob 359 offene Issues das eigene Einsatzprofil treffen.

Offizielle Quellen

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
Community-Notizen

Community-Notizen