Releases: commercialhaskell/stack
v3.11.1
See https://haskellstack.org/ for installation and upgrade instructions.
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.6.
- 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.
- On Windows, Stack's
buildcommand now accepts a build directory that is a long path.
Thanks to all our contributors for this release:
- Bryan Richter
- Ching Pei Yang
- Dan Burton
- David Vollbracht
- Mike Pilgrem
- Olivier Benz
rc/v3.11.0.1 (release candidate)
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.
v3.9.3
See https://haskellstack.org/ for installation and upgrade instructions.
Release notes:
- This release fixes a potential bug for users of Stack's Docker integration.
Changes since v3.9.1:
Other enhancements:
- The
resolversynonym forsnapshot, informally deprecated from Stack 3.1.1, is formally deprecated in online and in-app documentation.
Bug fixes:
- Stack's Docker integration supports Docker client versions 29.0.0 and greater.
Thanks to all our contributors for this release:
- Jens Petersen
- Mike Pilgrem
- Olivier Benz
v3.9.1
See https://haskellstack.org/ for installation and upgrade instructions.
Changes since v3.7.1:
Behavior changes:
- Where applicable and Stack supports the GHC version, only the wired-in packages of the actual version of GHC used are treated as wired-in packages.
- Stack now recognises
ghc-internalas a GHC wired-in package. - The configuration option
package-indexhas a new default value: thekeyidskey lists the keys of the Hackage root key holders applicable from 2025-07-24. - Stack's
dotcommand now treats--depththe same way as thels dependenciescommand, so that the nodes ofstack dot --external --depth 0are the same as the packages listed bystack ls dependencies --depth 0. - When building GHC from source, on Windows, the default Hadrian build target is
reloc-binary-distand the default path to the GHC built by Hadrian is_build/reloc-bindist. - Stack's
haddockcommand no longer requires a package to have a main library that exposes modules. - On Windows, the path segment platform\hash\ghc version, under
.stack-work\installand.stack-work\hoogle, is hashed only once, rather than twice.
Other enhancements:
- Bump to Hpack 0.39.1.
- Consider GHC 9.14 to be a tested compiler and remove warnings.
- Consider Cabal 3.16 to be a tested library and remove warnings.
- From GHC 9.12.1,
baseis not a GHC wired-in package. In configuration files, thenotify-if-base-not-bootkey is introduced, to allow the exisitng notification to be muted if unwanted when using such GHC versions. - Add flag
--[no-]omit-this(default: disabled) to Stack'scleancommand to omit directories currently in use from cleaning (when--fullis not specified). - Add option
-was synonym for--stack-yaml. stack newnow allowscodeberg:as a service for template downloads- In YAML configuration files, the
compiler-targetandcompiler-bindist-pathkeys are introduced to allow, when building GHC from source, the Hadrian build target and Hadrian path to the built GHC to be specified.
Bug fixes:
--PROG-option=<argument>passes--PROG-option=<argument>(and not--PROG-option="<argument>") to Cabal (the library).- The message S-7151 now presents as an error, with advice, and not as a bug.
- Stack's
dotcommand now uses a box to identify all GHC wired-in packages, not just those with no dependencies (being onlyrts). - Stack's
dotcommand now gives all nodes with no dependencies in the graph the maximum rank, not just those nodes with no relevant dependencies at all (being onlyrts, when--externalis specified). - Improved error messages for S-4634 and S-8215.
- Improved in-app help for the
--hpack-forceflag.
Thanks to all our contributors for this release:
- Alexey Kotlyarov
- Dino Morelli
- Jens Petersen
- Lauren Yim
- Mike Pilgrem
- Olivier Benz
- Simon Hengel
- Wolfram Kahl
rc/v3.9.0.1 (release candidate)
Changes since v3.7.1:
Behavior changes:
- Where applicable and Stack supports the GHC version, only the wired-in packages of the actual version of GHC used are treated as wired-in packages.
- Stack now recognises
ghc-internalas a GHC wired-in package. - The configuration option
package-indexhas a new default value: thekeyidskey lists the keys of the Hackage root key holders applicable from 2025-07-24. - Stack's
dotcommand now treats--depththe same way as thels dependenciescommand, so that the nodes ofstack dot --external --depth 0are the same as the packages listed bystack ls dependencies --depth 0. - When building GHC from source, on Windows, the default Hadrian build target is
reloc-binary-distand the default path to the GHC built by Hadrian is_build/reloc-bindist. - Stack's
haddockcommand no longer requires a package to have a main library that exposes modules.
Other enhancements:
- Bump to Hpack 0.38.2.
- Consider GHC 9.14 to be a tested compiler and remove warnings.
- Consider Cabal 3.16 to be a tested library and remove warnings.
- From GHC 9.12.1,
baseis not a GHC wired-in package. In configuration files, thenotify-if-base-not-bootkey is introduced, to allow the exisitng notification to be muted if unwanted when using such GHC versions. - Add flag
--[no-]omit-this(default: disabled) to Stack'scleancommand to omit directories currently in use from cleaning (when--fullis not specified). - Add option
-was synonym for--stack-yaml. stack newnow allowscodeberg:as a service for template downloads.- In YAML configuration files, the
compiler-targetandcompiler-bindist-pathkeys are introduced to allow, when building GHC from source, the Hadrian build target and Hadrian path to the built GHC to be specified.
Bug fixes:
--PROG-option=<argument>passes--PROG-option=<argument>(and not--PROG-option="<argument>") to Cabal (the library).- The message S-7151 now presents as an error, with advice, and not as a bug.
- Stack's
dotcommand now uses a box to identify all GHC wired-in packages, not just those with no dependencies (being onlyrts). - Stack's
dotcommand now gives all nodes with no dependencies in the graph the maximum rank, not just those nodes with no relevant dependencies at all (being onlyrts, when--externalis specified). - Improved error messages for S-4634 and S-8215.
- Improved in-app help for the
--hpack-forceflag.
v3.7.1
See https://haskellstack.org/ for installation and upgrade instructions.
Changes since v3.5.1:
Other enhancements:
- Bump to Hpack 0.38.1.
- The
--extra-depoption of Stack'sscriptcommand now accepts a YAML value specifying any immutable extra-dep. Previously only an extra-dep in the package index that could be specified by a YAML string (for example,acme-missiles-0.3@rev:0) was accepted.
Bug fixes:
stack script --package <pkg-name>now uses GHC's-package-idoption to expose the installed package, rather than GHC's-packageoption. For packages with public sub-libraries,-package <pkg>can expose an installed package other than one listed byghc-pkg list <pkg>.- Work around
ghc-pkgbug where, on Windows only, it cannot register a package into a package database that is also listed in theGHC_PACKAGE_PATHenvironment variable. In previous versions of Stack, this affectedstack scriptwhen copying a pre-compiled package from another package database. - On Windows, when decompressing, and extracting, tools from archive files, Stack uses the system temporary directory, rather than the root of the destination drive, if the former is on the destination drive.
Thanks to all our contributors for this release:
- Max Ulidtko
- Mike Pilgrem
- Olivier Benz
- Simon Hengel
rc/v3.7.0.1 (release candidate)
Changes since v3.5.1:
Other enhancements:
- Bump to Hpack 0.38.1.
- The
--extra-depoption of Stack'sscriptcommand now accepts a YAML value specifying any immutable extra-dep. Previously only an extra-dep in the package index that could be specified by a YAML string (for example,acme-missiles-0.3@rev:0) was accepted.
Bug fixes:
stack script --package <pkg-name>now uses GHC's-package-idoption to expose the installed package, rather than GHC's-packageoption. For packages with public sub-libraries,-package <pkg>can expose an installed package other than one listed byghc-pkg list <pkg>.- Work around
ghc-pkgbug where, on Windows only, it cannot register a package into a package database that is also listed in theGHC_PACKAGE_PATHenvironment variable. In previous versions of Stack, this affectedstack scriptwhen copying a pre-compiled package from another package database. - On Windows, when decompressing, and extracting tools, from archive files, Stack uses the system temporary directory, rather than the root of the destination drive, if the former is on the destination drive.
v3.5.1
See https://haskellstack.org/ for installation and upgrade instructions.
Changes since v3.3.1:
Behavior changes:
- Stack will also warn (message S-8432) if there is any non-ISO/IEC 8859-1 (Latin-1) character in Stack's 'programs' path, as
hsc2hsdoes not work if there is such a character in the path to its default templatetemplate-hsc.h. - Stack customizes setup using
Cabal, so if asetup-dependsfield does not mention it as a dependency, Stack warns and adds the GHC boot package as a dependency. Previously, Stack would not do so but only warn that build errors were likely.
Other enhancements:
- Bump to Hpack 0.38.0.
- In YAML configuration files, the
install-msyskey is introduced, to enable or disable the download and installation of Stack-supplied MSYS2 when necessary (subject toskip-msys: false). The default is the same as theinstall-ghcsetting (including if that is set at the command line). Consequently, the default behaviour of Stack is unaffected. - Add the
stack config set install-msyscommand to configure theinstall-msysoption in YAML configuration files. - Option
allow-newer-depsis no longer classified as experimental in documentation. stack sdistandstack uploadreport the version of Cabal (the library) being used to check packages.- Add the
stack config build-filescommand to generate (when applicable) a Cabal file from a package description in the Hpack format and/or a lock file for Stack's project-level configuration, without taking any other build steps.
Thanks to all our contributors for this release:
- Mike Pilgrem
- Olivier Benz
rc/v3.5.0.1 (release candidate)
Changes since v3.3.1:
Behavior changes:
- Stack will also warn (message S-8432) if there is any non-ISO/IEC 8859-1 (Latin-1) character in Stack's 'programs' path, as
hsc2hsdoes not work if there is such a character in the path to its default templatetemplate-hsc.h. - Stack customizes setup using
Cabal, so if asetup-dependsfield does not mention it as a dependency, Stack warns and adds the GHC boot package as a dependency. Previously, Stack would not do so but only warn that build errors were likely.
Other enhancements:
- Bump to Hpack 0.38.0.
- In YAML configuration files, the
install-msyskey is introduced, to enable or disable the download and installation of Stack-supplied MSYS2 when necessary (subject toskip-msys: false). The default is the same as theinstall-ghcsetting (including if that is set at the command line). Consequently, the default behaviour of Stack is unaffected. - Add the
stack config set install-msyscommand to configure theinstall-msysoption in YAML configuration files. - Option
allow-newer-depsis no longer classified as experimental in documentation. stack sdistandstack uploadreport the version of Cabal (the library) being used to check packages.
v3.3.1
See https://haskellstack.org/ for installation and upgrade instructions.
Changes since v3.1.1:
Behavior changes:
- Stack interprets consecutive line ends in the value of the
user-messageproject-specific configuration option as a single blank line. Previously all line ends were interpreted as white space. - Stack no longer supports Docker versions before Docker 1.9.1 and, consequently, if a Docker container is not being run 'detached', its standard input channel will always be kept open. (Before Docker 1.9.1 the use of an interactive container could hang in certain circumstances.)
- On Windows, Stack will always warn (message S-8432) if there is a space character in Stack's 'programs' path, as GHC 9.4.1 and later do not work if there is a space in the path to the
ghcexecutable. S-8432 now presents as a warning and not an error. - Stack respects the
--no-run-testsand--no-run-benchmarksflags when determining build actions. Previously Stack respected the flags when executing the run test suites or run benchmarks actions for each targeted project package.
Other enhancements:
- Consider GHC 9.10 to be a tested compiler and remove warnings.
- Consider Cabal 3.12 to be a tested library and remove warnings.
- Add flags
--run-testsand--run-benchmarks(the existing defaults) to Stack'sbuildcommand, which take precedence over the existingno-run-testsandno-run-benchmarksconfiguration options, respectively. - In configuration files, the
notify-if-no-run-testsandnotify-if-no-run-benchmarkskeys are introduced, to allow the exisitng notification to be muted if unwanted.
Bug fixes:
- Stack's in-app messages refer to https://haskellstack.org as currently structured. (Most URLs in older Stack versions are redirected.)
- Stack's
upgradecommand only treats the current running Stack executable as 'stack' if the executable file is namedstackor, on Windows,stack.exe. Previously only how it was invoked was considered. stack test --no-run-tests --dry-runno longer reports that Stack would test project packages with test suites andstack bench --no-run-benchmarks --dry-runno longer reports that Stack would benchmark project packages with benchmarks.StackSetupShimcompiles withCabal >= 3.14.0.0.
Thanks to all our contributors for this release:
- Andrew Nguyen
- Luka Leer
- Mike Pilgrem
- Olivier Benz