
# The `stack ls` commands
~~~text
stack ls COMMAND
Available commands:
dependencies View the dependencies
globals View global packages
snapshots View snapshots (local by default)
stack-colors View Stack's output styles
stack-colours View Stack's output styles (alias for 'stack-colors')
tools View Stack's installed tools
~~~
The `stack ls` commands list different types of information. Command `stack ls`
for the available commands.
## The `stack ls dependencies` command
Either
~~~text
stack ls dependencies COMMAND
Available commands:
cabal Print dependencies as exact Cabal constraints
json Print dependencies as JSON
text Print dependencies as text (default)
tree Print dependencies as tree
~~~
or
~~~text
stack ls dependencies [--[no-]license] [--separator SEP] [--filter ITEM]
[--[no-]external] [--[no-]include-base] [--depth DEPTH]
[--prune PACKAGES] [TARGET] [--flag PACKAGE:[-]FLAG]
[--test] [--bench] [--global-hints]
~~~
`stack ls dependencies` lists package versions used for a project.
By default:
* with the `text` or `tree` subcommand (see below), the package name is
followed by its version. Pass the `--license` flag to follow the package
name with its licence. (Consistent with the Cabal package description format
specification, only the American English spelling (license) is accepted.)
* With the `text` or `tree` subcommand, the separator between the package name
and what follows is a space character. Pass the `--separator` option to
specify a different separator;
* with the `text` command, all relevant package names are included. Pass the
`--filter` option to specify an item to be filtered out from the results, if
present. An item can be `$locals` (for all project packages) or a package
name. It can be specified multiple times;
!!! note
The special value `$locals` will need to be enclosed with single quotes
to distinguish it from a shell variable.
* external dependencies are excluded from the output. Pass the flag
`--external` to include external dependencies;
* the `base` package and its dependencies are included in the output. Pass the
flag `--no-include-base` to exclude `base` and its dependencies;
* there is no limit to the depth of the resolution of dependencies. Pass the
`--depth ` option to limit the depth;
* all relevant packages are included in the output. Pass the
`--prune ` option to exclude the specified packages (including
project packages). Pass the `--reach ` option to exclude packages
(including project packages) that cannot reach any of the specified packages
in the dependency graph. In both cases, `` is a list of package
names separated by commas;
* for all relevant project packages, relevant dependencies are included in the
output. However, each project package for which dependencies are included
can be specified as a target argument. The argument uses the same format as
the [`stack build` command](build_command.md) but components of project
packages are ignored. Non-project packages are also ignored;
!!! note
If the first target is one of `cabal`, `json`, `text` and `tree`, then a
subcommand must be specified.
* test components of project packages are excluded from the output. Pass the
flag `--test` to include test components;
* benchmark components of project packages are excluded from the output. Pass
the flag `--bench` to include benchmark components; and
* global packages for the specified version of GHC are those specified by the
global package database of an installed GHC. Pass the flag `--global-hints`
to use a hint file for global packages. If a hint file is used, GHC does not
need to be installed.
Subcommands specify the format of the output, as follows:
* `cabal` lists the packages in the format of exact Cabal constraints.
~~~text
stack ls dependencies cabal [--[no-]external] [--[no-]include-base]
[--depth DEPTH] [--prune PACKAGES] [TARGET]
[--flag PACKAGE:[-]FLAG] [--test] [--bench]
[--global-hints]
~~~
For example (extract):
~~~text
constraints:
, Cabal ==3.6.3.0
, Cabal-syntax ==3.6.0.0
, Glob ==0.10.2
~~~
* `json` lists dependencies in JSON format (an array of objects).
~~~text
stack ls dependencies json [--[no-]external] [--[no-]include-base]
[--depth DEPTH] [--prune PACKAGES] [TARGET]
[--flag PACKAGE:[-]FLAG] [--test] [--bench]
[--global-hints]
~~~
For example (extract):
~~~text
[{"dependencies":["base","bytestring"],"license":"BSD3","location":{"type":"hackage","url":"https://hackage.haskell.org/package/zlib-0.6.3.0"},"name":"zlib","version":"0.6.3.0"},
~~~
Each object has the following keys:
~~~json
name: zlib
version: 0.6.3.0
location:
type: hackage
url: https://hackage.haskell.org/package/zlib-0.6.3.0
licence: BSD3
dependencies:
- base
- bytestring
~~~
* `text` (the default) lists the packages, each on a separate line.
~~~text
stack ls dependencies text [--[no-]license] [--separator SEP]
[--filter ITEM] [--[no-]external]
[--[no-]include-base] [--depth DEPTH]
[--prune PACKAGES] [TARGET]
[--flag PACKAGE:[-]FLAG] [--test] [--bench]
[--global-hints]
~~~
For example (extract):
~~~text
Cabal 3.6.3.0
Cabal-syntax 3.6.0.0
Glob 0.10.2
~~~
* `tree` lists dependencies in the format of a tree.
~~~text
stack ls dependencies tree [--[no-]license] [--separator SEP]
[--[no-]external] [--[no-]include-base]
[--depth DEPTH] [--prune PACKAGES] [TARGET]
[--flag PACKAGE:[-]FLAG] [--test] [--bench]
[--global-hints]
~~~
For example (extract):
~~~text
Packages
└─┬ stack 2.10.0
├─┬ Cabal 3.6.3.0
│ ├─┬ Win32 2.12.0.1
│ │ ├─┬ base 4.16.3.0
│ │ │ ├─┬ ghc-bignum 1.2
│ │ │ │ └─┬ ghc-prim 0.8.0
│ │ │ │ └── rts 1.0.2
│ │ │ ├─┬ ghc-prim 0.8.0
~~~
## The `stack ls globals` command
~~~text
stack ls globals [--[no-]global-hints]
~~~
`stack ls globals` will list all the global packages in alphabetical order.
By default:
* the global packages are those for the version of GHC specified by the snapshot
according to a hints file. Pass the flag `--no-global-hints` to use the global
package database of an installed GHC.
!!! note
For example, on Windows, `stack ls globals` will include a version of the
`Win32` and `unix` packages but `stack ls globals --no-global-hints` will
exclude the `unix` package - and vice versa on Unix-like operating systems.
## The `stack ls snapshots` command
~~~text
stack ls snapshots [COMMAND] [-l|--lts] [-n|--nightly]
Available commands:
local View local snapshots
remote View remote snapshots
~~~
`stack ls snapshots` will list all the local snapshots by default. You can also
view the remote snapshots using `stack ls snapshots remote`. It also supports
options for viewing only lts (`-l`) and nightly (`-n`) snapshots.
## The `stack ls stack-colors` command
~~~text
stack ls stack-colors [--[no-]basic] [--[no-]sgr] [--[no-]example]
~~~
The British English spelling is also accepted (`stack ls stack-colours`).
`stack ls stack-colors` will list all of Stack's output styles. A number of
different formats for the output are available, see
`stack ls stack-colors --help`.
The default is a full report, with the equivalent SGR instructions and an
example of the applied style. The latter can be disabled with flags `--no-sgr`
and `--no-example`.
The flag `--basic` specifies a more basic report, in the format that is accepted
by Stack's command line option `--stack-colors` and the
[`stack-colors`](../configure/yaml/non-project.md#stack-colors) non-project
specific configuration option.
## The `stack ls tools` command
~~~text
stack ls tools [--filter TOOL_NAME]
~~~
`stack ls tools` will list Stack's installed tools. On Unix-like operating
systems, they will be one or more versions of GHC. On Windows, they will include
MSYS2. For example, on Windows the command:
~~~text
stack ls tools
~~~
yields output like:
~~~text
ghc-9.4.1
ghc-9.2.4
ghc-9.0.2
msys2-20210604
~~~
The `--filter ` option will filter the output by a tool name (e.g.
'ghc', 'ghc-git' or 'msys2'). The tool name is case sensitive. For example the
command:
~~~text
stack ls tools --filter ghc
~~~
yields output like:
~~~text
ghc-9.4.1
ghc-9.2.4
ghc-9.0.2
~~~