Bug Fixes
- Fixed task cache initialization failing with "unable to open database file" when the state directory does not yet exist.
- Fixed cachix daemon log output leaking into and corrupting the TUI display by capturing daemon stderr and forwarding it through the push activity (#2648).
- Fixed
devenv testhanging when a process outputs non-UTF-8 bytes by using lossy UTF-8 decoding instead of closing the pipe, which caused a deadlock between the parent waiting for the child to exit and the child blocking on a full stdout pipe (#2590). - Fixed hot reload sometimes picking up stale configuration or crashing due to the old Nix evaluator not being fully cleaned up before creating a new one. Errors during reload are now reported instead of silently breaking subsequent evaluations.
- Fixed
DEVENV_TUI=falseandDEVENV_TUI=0not disabling the TUI (#2646). - Migrated
certificatesandhostsmodules to use tasks instead ofprocess.manager.before/process.manager.afterfor the native process manager (#2569). - Fixed stale shell eval cache entries causing
devenv shellanddirenvactivation to ignore changes todevenv.nixconfig such aslanguages,env,packages, andscripts(#2643). - Fixed services failing to start with E2BIG when the shell environment is large by moving env/cwd/stdio setup from the bash wrapper script to the spawned process directly (#2638).
- Fixed processes failing to start when exported bash functions are present in the environment (#2587).
- Fixed eval cache storing inconsistent port allocations across different cached attributes (#2631).
- Fixed stale eval cache invalidation for
devenv upprocess config changes caused by overlapping evaluations clearing each other's file dependency observers (#2632). - Fixed strict port restarts failing with "port already in use" when the kernel hasn't released the socket yet after process shutdown, by distinguishing ownerless transient conflicts from real ones and retrying accordingly (#2647).
- Fixed false-positive
--strict-portsfailures on macOS when IPv6 loopback binding returns a benign error after a clean shutdown and cache invalidation (#2640). - Fixed child processes being left running on shutdown when using non-native process managers like process-compose (#2586).
- Fixed
devenv updateresolving stale revisions when Nix's fetcher cache contains outdated entries by settingtarball-ttlto 0 during update, equivalent tonix --refresh(#2616). - Fixed Nix backend initialization crash when
impure: trueby removing use of nonexistentimpureNix setting; impure mode now works by skippingpure-eval(which defaults to false). - Fixed
execIfModifiedglob walker entering gitignored directories, causing extreme slowdowns in repos with large ignored trees (#2588). - Fixed
devenv up -dnot keeping processes running with the native process manager by spawning a daemon via re-exec instead of fork, which is unsafe in multithreaded programs (#2630). - Fixed environment variable precedence in process manager: per-process env now correctly wins over global env.
- Fixed hot reload triggering a fork bomb by ignoring file change events while a build is already in progress, preventing cascading zombie builds.
Improvements
- The TUI now shows a "stopping" status during graceful process shutdown (#2647).
- Process
stop_all()now stops processes concurrently instead of serially (#2647). --quietnow disables the TUI and suppresses all output except warnings and errors (#2617).- Bumped Nix input to fix
devenv shellfailing with "suspicious ownership or permission" on single user Nix installations where umask causes store outputs to have incorrect permissions (#2585). - Containers now report all missing inputs at once instead of one at a time (#2598).
- Extracted container, search, and gc methods from
devenv.rsinto separate submodule files for better code organization. - Added
allowUnsupportedSystemoption fordevenv.yamlto allow packages not supported on the current system. Can be set at the top level, undernixpkgs, or per platform vianixpkgs.per-platform.<system>(#2639). - Added new nixpkgs config options to
devenv.yaml:allowNonSource,allowlistedLicenses,blocklistedLicenses, andandroidSdk.acceptLicense(#2634). - Added
allowInsecurePredicategeneration frompermittedInsecurePackagesso insecure package allowlisting works correctly.
Breaking Changes
process.manager.before/process.manager.after: These options are no longer supported with the native process manager. Use tasks withbefore/afterdependencies instead. See https://devenv.sh/tasks/