Changes since v3.9.3:
Major changes:
- On 64-bit Windows, the default
msys-environmentconfiguration option is nowCLANG64, rather thanMINGW64(which remains an option). The MSYS2 project deprecated the latter environment on 15 March 2026. The GHC project has used the former toolchain from GHC 9.4.1. No default is provided for 32-bit Windows, rather thanMINGW32(which remains an option). The MSYS2 project ceased to actively support it on 17 May 2020. 32-bit Windows is not supported by the GHC project from GHC 8.12.
Behavior changes:
- Stack's default Nix integration now includes the
cacertNix package, in order to support Stack's use ofcrypton-x509-system >= 1.6.8. - Following a change to the Stackage project's server API, the default value of the
urlskey includesrecent-snapshots: https://stackage.org/api/v1/snapshots. - The
--[no-]keep-ghc-rtsflag of Stack'sconfig envcommand is now enabled by default, consistent with Stack'sexeccommand. - On Windows, in the Stack environment, the MSYS2
usr/local/bindirectory (if it exists) is now searched before the MSYS2usr/bindirectory, rather than after.
Other enhancements:
- Bump to Hpack 0.39.5.
- Experimental: Add flag
--[no-]semaphore(default: disabled) to Stack'sbuildcommand, to allow GHC to use a system semaphore to perform compilation in parallel when possible. Supported, by default, by GHC 9.10.1 or later. The option is considered experiemental because, on Linux only, musl and non-musl semaphores are incompatible. - Add option
--reach <packages>to Stack'sdotandls dependenciescommands, to prune packages that cannot reach any of the specified packages in the dependency graph. - Add option
--test-suite-timeout-grace=SECONDSto Stack'sbuildcommand to request termination of a timed-out test suite process and, after the specified grace period, force termination. Used together with the existing--test-suite-timeout=SECONDSoption. - In YAML configuration files, the
recent-snapshotskey is introduced (under theurlskey), to specify the URL used by Stack'sls snapshots remotecommand. - In YAML configuration files (
stack.yamlandconfig.yaml), an!include <file path>directive is now supported. This allows common configuration to be shared across multiple files. For example, a project that maintains multiple project-level configuration files for testing against different snapshots can use!includeto avoid duplicating shared settings. - Stack's
config setcommand raises an error if the target configuration file excludes the key being set and includes an!includedirective. - Stack's
config set snapshotcommand now works with other snapshot values in addition to snapshot synonymns. - Add Stack's
config compiler-toolscommand to create (when applicable) the compiler tools directory for the specified compiler version (implies Stack'sconfig build-filescommand).
Bug fixes:
- Stack's
dotandls dependenciescommands no longer prune a package with dependencies only because all its direct dependencies are to be pruned. - After March 2026, Hackage requires Stack's user agent to be set when applying digest authentication to a request. Stack's
uploadcommand now does that, re-establishing authentication by Hackage username and password. - Stack 3.9.3 and earlier fail to construct a build plan if project package A depends on project package B and package B's executables (only) depend on package A and the name of A is before that of B, alphabetically. That bug is fixed.
- Stack's
config setcommands will recreate theglobal-projectdirectory contents, if Stack needs to consult its project-level configuration file and there is no file. - The output of Stack's
path --bin-pathcommand is now consistent with the Stack environment in Stack'sexeccommand and includes thebindirectory of Stack's local install root directory. - Stack now builds packages that depend directly on packages with the same name as a sublibrary or foreign library of the package.