Announcing the first release in the stack-2.1 series!
The Stack 2 release represents a series of significant changes to how Stack works internally. For the vast majority of cases, these changes are backwards compatible, in that existing projects will continue to build in the same way with Stack 2 as they did with Stack 1. The large version bump is due to the fundamental internal changes to cache handling, database storage (using SQLite in place of binary files), implicit snapshots (which greatly improve the precompiled cache), and moving to Pantry. We have also removed some less used features, as listed in the release notes below.
See https://haskellstack.org/ for installation and upgrade instructions.
Changes since v1.9.3
Major changes:
00-index.tar
style indices. See #4137.packages
section has been removed. Instead, you must use
extra-deps
for such dependencies.
packages
now only supports local filepaths.stack freeze
command provides support for
automatically generating this additional information.pantry
library can be used for interacting with these contents.stack freeze
has been added which
outputs project and snapshot definitions with dependencies pinned
to their exact versions.ignore-revision-mismatch
setting is no longer
needed, and has been removed.cabal-install
versions so stack solver
command was removed as well as a related option
--solver
from stack new
and stack
init
.*.txt
will
match foo.txt
, but not foo.2.txt
.stack image
command. With the advent of
Docker multistage builds, this functionality is no longer useful.
For an example, please see Building Haskell
Apps with Docker.compiler
can be set to use a GHC built from source
with ghc-git-COMMIT-FLAVOUR
stack.yaml
now supports a
configure-options
, which are passed directly to the
configure
step in the Cabal build process. See
#1438Behavior changes:
stack.yaml
now supports snapshot
: a
synonym for resolver
. See #4256stack script
now passes -i -idir
in
to the ghc
invocation. This makes it so that the
script can import local modules, and fixes an issue where
.hs
files in the current directory could affect
interpretation of the script. See #4538stack script
, custom snapshot files
will be resolved relative to the directory containing the
script.--upgrade-cabal
flag to
stack setup
.drop-packages
field in
stack.yaml
--plain
option for the
exec
family of commands--exact-configuration
Cabal
configuration option when building (should mostly be a
non-user-visible enhancement).1.19.2
. This means projects using snapshots earlier
than lts-3.0
or nightly-2015-05-05
will
no longer build.stack docker cleanup
command. Docker
itself now has
docker image prune
and
docker container prune
, which you can use
instead.packagename>
prefix is no longer
included in interelaved mode when only building a single
target.-fhide-source-paths
GHC option is now enabled
by default and can be disabled via the
hide-source-paths
configuration option in
stack.yaml
. See #3784PATH
environment variable. See #3138.recommend-stack-upgrade:
false
to bypass this. See #1681.stack list-dependencies
has been removed in favour
of stack ls dependencies
.--docker-auto-pull
is enabled.
See #3332.Other enhancements:
--color=WHEN
is now also
available as a non-project-specific yaml configuration parameter
color:
.NO_COLOR
environment
variable is present.stack ls stack-colors
lists the styles
and the associated ‘ANSI’ control character sequences that stack
uses to color some of its output. See stack ls stack-colors
--help
for more information.--stack-colors=STYLES
, also
available as a non-project-specific yaml configuration parameter,
allows a stack user to redefine the default styles that stack uses
to color some of its output. See stack --help
for more
information.--color
, --stack-colors
,
stack ls stack-colors
at the command line and for
color:
and stack-colors:
in yaml
configuration files.--ddump-dir
. (See #4225)preferred-versions
information from Hackage for choosing latest version of a package
in some cases, e.g. stack unpack packagename
.The main module to load is
ambiguous
message now include package names so they can be
more easily copy-pasted.--tree
to ls dependencies
to list
dependencies as tree. #4101--pedantic
to ghci
to run with
-Wall
and -Werror
#4463--cabal-files
flag to stack ide
targets
command.--stdout
flag to all stack ide
subcommands.ghc-pkg
. (See #2662)get-stack
script now works on Windows CI machines
of Appveyor, Travis and Azure Pipelines. See #4535/stack ghci
is
invoked outside of a project directory. See #3651--extra-dep
flag for adding packages not present in the snapshot. Currently,
this only works with packages from Hackage, not Git repos or
archives.--optimize
or --compile
, Stack will perform an optimization of
checking whether a newer executable exists, making reruns
significantly faster. There’s a downside to this, however: if you
have a multifile script, and change one of the dependency modules,
Stack will not automatically detect and recompile.stack clean
will delete the entire
.stack-work/dist
directory, not just the relevant
subdirectory for the current GHC version. See #4480.stack purge
as a shortcut for stack
clean --full
. See #3863.stack dot
and stack ls
dependencies
accept a --global-hints
flag to
bypass the need for an installed GHC. See #4390.stack config env
command for getting shell
script environment variables. See #620.stack setup
on Windows.
See #1212.ignore-expiry
flag to the
hackage-security
section of the
~/.stack/config.yaml
. It allows to disable timestamp
expiration verification just like cabal
--ignore-expiry
does. The flag is not enabled by default so
that the default functionality is not changed.--help
output. See #893.GHC_ENVIRONMENT
environment variable to
specify dependency packages explicitly when running test. This is
done to prevent ambiguous module name errors in
doctest
tests.get-stack
script now works on Windows CI machines
of Appveyor, Travis and Azure Pipelines. See #4535PATH
environment variable. See #2472system-ghc: true
, Stack will now find
the appropriate GHC installation based on the version suffix,
allowing you to more easily switch between various system-installed
GHCs. See #2433.stack init
will now support create a
stack.yaml
file without any local packages. See
#2465docker.db
).GHC_ENVIRONMENT
environment variable to
-
to tell GHC to ignore any such files when GHC is new
enough (>= 8.4.4), otherwise simply unset the variable. This
allows Stack to have control of package databases when running
commands like stack exec ghci
, even in the presence of
implicit environment files created by cabal new-build
.
See #4706.--test-arguments
options.
See #2226local-programs-path
configuration option. See #4726--docker-mount-mode
option to set the Docker
volume mount mode for performance tuning on macOS.Bug fixes:
addDependentFile
, which now includes a hash. See
yesodweb/yesod#1551subdirs
for git repos in
extra-deps
to match whole directory names. Also fixes
for subdirs: .
. See #4292--cabal-files
flag to stack ide
targets
command.stack clean
.--file-watch
not responding to file
modifications when running inside docker on Mac. See #4506--ghc-options
with stack script
--compile
now works.Setup.hs
file.
See #4526.templates
subcommand now
reflects behaviour in stack 1.9 — that it downloads and shows a
help file, rather than listing available templates.--docker-auto-pull
, see #4598stack init
will now work for cabal files with
sublibraries. See #4408stack
executable when
the host stack
is not compatible with the Docker image
(on Linux), and doesn’t show an unnecessary extra error when the
in-container re-exec’ed stack
exits with failure.stack ghci
command’s
--ghc-options
flag now parses multiple options. See
#3315.Thanks to all our contributors for this release:
Subscribe to our blog via email
Email subscriptions come from our Atom feed and are handled by Blogtrottr. You will only receive notifications of blog posts, and can unsubscribe any time.