Skip to content

Releases: commercialhaskell/stack

v3.11.1

13 Jun 18:33
979bf63

Choose a tag to compare

See https://haskellstack.org/ for installation and upgrade instructions.

Changes since v3.9.3:

Major changes:

  • On 64-bit Windows, the default msys-environment configuration option is now CLANG64, rather than MINGW64 (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 than MINGW32 (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 cacert Nix package, in order to support Stack's use of crypton-x509-system >= 1.6.8.
  • Following a change to the Stackage project's server API, the default value of the urls key includes recent-snapshots: https://stackage.org/api/v1/snapshots.
  • The --[no-]keep-ghc-rts flag of Stack's config env command is now enabled by default, consistent with Stack's exec command.
  • On Windows, in the Stack environment, the MSYS2 usr/local/bin directory (if it exists) is now searched before the MSYS2 usr/bin directory, rather than after.

Other enhancements:

  • Bump to Hpack 0.39.6.
  • Experimental: Add flag --[no-]semaphore (default: disabled) to Stack's build command, 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's dot and ls dependencies commands, to prune packages that cannot reach any of the specified packages in the dependency graph.
  • Add option --test-suite-timeout-grace=SECONDS to Stack's build command 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=SECONDS option.
  • In YAML configuration files, the recent-snapshots key is introduced (under the urls key), to specify the URL used by Stack's ls snapshots remote command.
  • In YAML configuration files (stack.yaml and config.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 !include to avoid duplicating shared settings.
  • Stack's config set command raises an error if the target configuration file excludes the key being set and includes an !include directive.
  • Stack's config set snapshot command now works with other snapshot values in addition to snapshot synonymns.
  • Add Stack's config compiler-tools command to create (when applicable) the compiler tools directory for the specified compiler version (implies Stack's config build-files command).

Bug fixes:

  • Stack's dot and ls dependencies commands 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 upload command 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 set commands will recreate the global-project directory contents, if Stack needs to consult its project-level configuration file and there is no file.
  • The output of Stack's path --bin-path command is now consistent with the Stack environment in Stack's exec command and includes the bin directory 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 build command 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)

30 May 22:47

Choose a tag to compare

Pre-release

Changes since v3.9.3:

Major changes:

  • On 64-bit Windows, the default msys-environment configuration option is now CLANG64, rather than MINGW64 (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 than MINGW32 (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 cacert Nix package, in order to support Stack's use of crypton-x509-system >= 1.6.8.
  • Following a change to the Stackage project's server API, the default value of the urls key includes recent-snapshots: https://stackage.org/api/v1/snapshots.
  • The --[no-]keep-ghc-rts flag of Stack's config env command is now enabled by default, consistent with Stack's exec command.
  • On Windows, in the Stack environment, the MSYS2 usr/local/bin directory (if it exists) is now searched before the MSYS2 usr/bin directory, rather than after.

Other enhancements:

  • Bump to Hpack 0.39.5.
  • Experimental: Add flag --[no-]semaphore (default: disabled) to Stack's build command, 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's dot and ls dependencies commands, to prune packages that cannot reach any of the specified packages in the dependency graph.
  • Add option --test-suite-timeout-grace=SECONDS to Stack's build command 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=SECONDS option.
  • In YAML configuration files, the recent-snapshots key is introduced (under the urls key), to specify the URL used by Stack's ls snapshots remote command.
  • In YAML configuration files (stack.yaml and config.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 !include to avoid duplicating shared settings.
  • Stack's config set command raises an error if the target configuration file excludes the key being set and includes an !include directive.
  • Stack's config set snapshot command now works with other snapshot values in addition to snapshot synonymns.
  • Add Stack's config compiler-tools command to create (when applicable) the compiler tools directory for the specified compiler version (implies Stack's config build-files command).

Bug fixes:

  • Stack's dot and ls dependencies commands 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 upload command 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 set commands will recreate the global-project directory contents, if Stack needs to consult its project-level configuration file and there is no file.
  • The output of Stack's path --bin-path command is now consistent with the Stack environment in Stack's exec command and includes the bin directory 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

19 Feb 19:55

Choose a tag to compare

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 resolver synonym for snapshot, 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

04 Jan 17:06

Choose a tag to compare

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-internal as a GHC wired-in package.
  • The configuration option package-index has a new default value: the keyids key lists the keys of the Hackage root key holders applicable from 2025-07-24.
  • Stack's dot command now treats --depth the same way as the ls dependencies command, so that the nodes of stack dot --external --depth 0 are the same as the packages listed by stack ls dependencies --depth 0.
  • When building GHC from source, on Windows, the default Hadrian build target is reloc-binary-dist and the default path to the GHC built by Hadrian is _build/reloc-bindist.
  • Stack's haddock command 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\install and .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, base is not a GHC wired-in package. In configuration files, the notify-if-base-not-boot key 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's clean command to omit directories currently in use from cleaning (when --full is not specified).
  • Add option -w as synonym for --stack-yaml.
  • stack new now allows codeberg: as a service for template downloads
  • In YAML configuration files, the compiler-target and compiler-bindist-path keys 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 dot command now uses a box to identify all GHC wired-in packages, not just those with no dependencies (being only rts).
  • Stack's dot command now gives all nodes with no dependencies in the graph the maximum rank, not just those nodes with no relevant dependencies at all (being only rts, when --external is specified).
  • Improved error messages for S-4634 and S-8215.
  • Improved in-app help for the --hpack-force flag.

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)

20 Dec 21:15
fdb047c

Choose a tag to compare

Pre-release

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-internal as a GHC wired-in package.
  • The configuration option package-index has a new default value: the keyids key lists the keys of the Hackage root key holders applicable from 2025-07-24.
  • Stack's dot command now treats --depth the same way as the ls dependencies command, so that the nodes of stack dot --external --depth 0 are the same as the packages listed by stack ls dependencies --depth 0.
  • When building GHC from source, on Windows, the default Hadrian build target is reloc-binary-dist and the default path to the GHC built by Hadrian is _build/reloc-bindist.
  • Stack's haddock command 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, base is not a GHC wired-in package. In configuration files, the notify-if-base-not-boot key 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's clean command to omit directories currently in use from cleaning (when --full is not specified).
  • Add option -w as synonym for --stack-yaml.
  • stack new now allows codeberg: as a service for template downloads.
  • In YAML configuration files, the compiler-target and compiler-bindist-path keys 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 dot command now uses a box to identify all GHC wired-in packages, not just those with no dependencies (being only rts).
  • Stack's dot command now gives all nodes with no dependencies in the graph the maximum rank, not just those nodes with no relevant dependencies at all (being only rts, when --external is specified).
  • Improved error messages for S-4634 and S-8215.
  • Improved in-app help for the --hpack-force flag.

v3.7.1

28 Jun 19:26
cfae313

Choose a tag to compare

See https://haskellstack.org/ for installation and upgrade instructions.

Changes since v3.5.1:

Other enhancements:

  • Bump to Hpack 0.38.1.
  • The --extra-dep option of Stack's script command 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-id option to expose the installed package, rather than GHC's -package option. For packages with public sub-libraries, -package <pkg> can expose an installed package other than one listed by ghc-pkg list <pkg>.
  • Work around ghc-pkg bug where, on Windows only, it cannot register a package into a package database that is also listed in the GHC_PACKAGE_PATH environment variable. In previous versions of Stack, this affected stack script when 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)

15 Jun 17:11
274ab3c

Choose a tag to compare

Pre-release

Changes since v3.5.1:

Other enhancements:

  • Bump to Hpack 0.38.1.
  • The --extra-dep option of Stack's script command 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-id option to expose the installed package, rather than GHC's -package option. For packages with public sub-libraries, -package <pkg> can expose an installed package other than one listed by ghc-pkg list <pkg>.
  • Work around ghc-pkg bug where, on Windows only, it cannot register a package into a package database that is also listed in the GHC_PACKAGE_PATH environment variable. In previous versions of Stack, this affected stack script when 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

29 Mar 22:12
5c774d7

Choose a tag to compare

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 hsc2hs does not work if there is such a character in the path to its default template template-hsc.h.
  • Stack customizes setup using Cabal, so if a setup-depends field 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-msys key is introduced, to enable or disable the download and installation of Stack-supplied MSYS2 when necessary (subject to skip-msys: false). The default is the same as the install-ghc setting (including if that is set at the command line). Consequently, the default behaviour of Stack is unaffected.
  • Add the stack config set install-msys command to configure the install-msys option in YAML configuration files.
  • Option allow-newer-deps is no longer classified as experimental in documentation.
  • stack sdist and stack upload report the version of Cabal (the library) being used to check packages.
  • Add the stack config build-files command 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)

15 Mar 23:20
f55658a

Choose a tag to compare

Pre-release

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 hsc2hs does not work if there is such a character in the path to its default template template-hsc.h.
  • Stack customizes setup using Cabal, so if a setup-depends field 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-msys key is introduced, to enable or disable the download and installation of Stack-supplied MSYS2 when necessary (subject to skip-msys: false). The default is the same as the install-ghc setting (including if that is set at the command line). Consequently, the default behaviour of Stack is unaffected.
  • Add the stack config set install-msys command to configure the install-msys option in YAML configuration files.
  • Option allow-newer-deps is no longer classified as experimental in documentation.
  • stack sdist and stack upload report the version of Cabal (the library) being used to check packages.

v3.3.1

28 Dec 14:39
7540878

Choose a tag to compare

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-message project-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 ghc executable. S-8432 now presents as a warning and not an error.
  • Stack respects the --no-run-tests and --no-run-benchmarks flags 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-tests and --run-benchmarks (the existing defaults) to Stack's build command, which take precedence over the existing no-run-tests and no-run-benchmarks configuration options, respectively.
  • In configuration files, the notify-if-no-run-tests and notify-if-no-run-benchmarks keys 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 upgrade command only treats the current running Stack executable as 'stack' if the executable file is named stack or, on Windows, stack.exe. Previously only how it was invoked was considered.
  • stack test --no-run-tests --dry-run no longer reports that Stack would test project packages with test suites and stack bench --no-run-benchmarks --dry-run no longer reports that Stack would benchmark project packages with benchmarks.
  • StackSetupShim compiles with Cabal >= 3.14.0.0.

Thanks to all our contributors for this release:

  • Andrew Nguyen
  • Luka Leer
  • Mike Pilgrem
  • Olivier Benz