Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
css Add 'not for released version' warning to docs source (#3410) Sep 4, 2017
img Add 'not for released version' warning to docs source (#3410) Sep 4, 2017
js Fix mkdocs search hack. Sep 4, 2017
maintainers Update release scripts and documentation Aug 29, 2018
CONTRIBUTING.md Doc updates for readthedocs.org Nov 24, 2015
ChangeLog.md Doc updates for readthedocs.org Nov 24, 2015
GUIDE.md doc: Don't break `issue #` links Sep 9, 2018
README.md Add uninstall section, fixes #4170 Jul 24, 2018
SIGNING_KEY.md Add 'not for released version' warning to docs source (#3410) Sep 4, 2017
appveyor.yml Add LTS-12 to CI configs Jul 9, 2018
build-overview.md Clarifications and typo corrections Sep 9, 2018
build_command.md Merge remote-tracking branch 'origin/stable' Aug 22, 2018
coverage.md Add 'not for released version' warning to docs source (#3410) Sep 4, 2017
custom_snapshot.md Clean up YAML config docs for Pantry Aug 22, 2018
dependency_visualization.md Add 'not for released version' warning to docs source (#3410) Sep 4, 2017
docker_integration.md Add 'not for released version' warning to docs source (#3410) Sep 4, 2017
faq.md faq update: ld errors about recompiling with -fPIC Jan 6, 2018
ghci.md Document that `stack ghci` works best only after `stack build`. Jul 28, 2018
ghcjs.md Change docs to reflect experimental nature of ghcjs support and add n… Jul 17, 2018
install_and_upgrade.md Update install_and_upgrade.md Aug 15, 2018
nix_integration.md Merge remote-tracking branch 'origin/stable' Aug 22, 2018
nonstandard_project_init.md Merge remote-tracking branch 'origin/stable' into prerelease/v1.6.0.2… Oct 21, 2017
pantry.md Merge in the stack freeze info Aug 22, 2018
shell_autocompletion.md Add 'not for released version' warning to docs source (#3410) Sep 4, 2017
stack_yaml_vs_cabal_package_file.md Typo correction Jan 18, 2018
travis-complex.yml Add LTS-12 to CI configs Jul 9, 2018
travis-simple.yml Update supported platforms and download links Apr 18, 2018
travis_ci.md Update supported platforms and download links Apr 18, 2018
yaml_configuration.md doc: Don't break `issue #` links Sep 9, 2018


The Haskell Tool Stack

Stack is a cross-platform program for developing Haskell projects. It is aimed at Haskellers both new and experienced.

It features:

  • Installing GHC automatically, in an isolated location.
  • Installing packages needed for your project.
  • Building your project.
  • Testing your project.
  • Benchmarking your project.

How to install

For many Un*x operating systems, all you need to do is run:

curl -sSL https://get.haskellstack.org/ | sh


wget -qO- https://get.haskellstack.org/ | sh

On Windows, you can download and install the Windows 64-bit Installer.

For detailed instructions and downloads, including many additional operating systems, check out the install and upgrade page.

Quick Start Guide

First you need to install it (see previous section).

Start your new project:
stack new my-project
cd my-project
stack setup
stack build
stack exec my-project-exe
  • The stack new command will create a new directory containing all the needed files to start a project correctly.
  • The stack setup will download the compiler if necessary in an isolated location (default ~/.stack) that won't interfere with any system-level installations. (For information on installation paths, please use the stack path command.).
  • The stack build command will build the minimal project.
  • stack exec my-project-exe will execute the command.
  • If you just want to install an executable using stack, then all you have to do is stack install <package-name>.

If you want to launch a REPL:

stack ghci

Run stack for a complete list of commands.


The stack new command should have created the following files:

├── Setup.hs
├── app
│   └── Main.hs
├── my-project.cabal
├── src
│   └── Lib.hs
├── stack.yaml
└── test
    └── Spec.hs

    3 directories, 7 files

So to manage your library:

  1. Edit files in the src/ directory.

    The app directory should preferably contain only files related to executables.

  2. If you need to include another library (for example the package text):

    • Add the package text to the file my-project.cabal in the section build-depends: ....
    • Run stack build another time.
  3. If you get an error that tells you your package isn't in the LTS. Just try to add a new version in the stack.yaml file in the extra-deps section.

That was a really fast introduction on how to start to code in Haskell using stack. If you want to go further, we highly recommend you to read the stack guide.

How to contribute

This assumes that you have already installed a version of stack, and have git installed.

  1. Clone stack from git with git clone https://github.com/commercialhaskell/stack.git.
  2. Enter into the stack folder with cd stack.
  3. Build stack using a pre-existing stack install with stack setup && stack build.
  4. Once stack finishes building, check the stack version with stack exec stack -- --version. Make sure the version is the latest.
  5. Look for issues tagged with newcomer friendly and awaiting pull request labels.

Build from source as a one-liner:

git clone https://github.com/commercialhaskell/stack.git && \
cd stack && \
stack setup && \
stack build

If you need to check your changes quickly run:

stack ghci
λ: :main --stack-root /path/to/root/ --stack-yaml /path/to/stack.yaml COMMAND

This allows you to set a special stack root (instead of ~/.stack/) and to target your commands at a particular stack.yaml instead of the one found in the current directory.

Complete guide to stack

This repository also contains a complete user guide to using stack, covering all of the most common use cases.

Questions, Feedback, Discussion

Why Stack?

Stack is a build tool for Haskell designed to answer the needs of Haskell users new and experienced alike. It has a strong focus on reproducible build plans, multi-package projects, and a consistent, easy-to-learn interface, while providing the customizability and power experienced developers need. As a build tool, Stack does not stand alone. It is built on the great work provided by:

  • The Glasgow Haskell Compiler (GHC), the premier Haskell compiler. Stack will manage your GHC installations and automatically select the appropriate compiler version for your project.
  • The Cabal build system, a specification for defining Haskell packages, together with a library for performing builds.
  • The Hackage package repository, providing more than ten thousand open source libraries and applications to help you get your work done.
  • The Stackage package collection, a curated set of packages from Hackage which are regularly tested for compatibility. Stack defaults to using Stackage package sets to avoid dependency problems.

Stack is provided by a team of volunteers and companies under the auspices of the Commercial Haskell group. The project was spearheaded by FP Complete to answer the needs of commercial Haskell users, and has since become a thriving open source project meeting the needs of Haskell users of all stripes.

If you'd like to get involved with Stack, check out the newcomer friendly label on the Github issue tracker.

How to uninstall

Removing ~/.stack and /usr/local/bin/stack should be sufficient. You may want to delete .stack-work folders in any Haskell projects that you have built.