Skip to content

Snapshot location

2.1.1

This document describes the specification of a snapshot location:

In YAML configuration files

Info

Stack uses the Pantry to specify the location of snapshots. Pantry is geared towards reproducible build plans with cryptographically secure specification of snapshots.

There are four ways to specify a snapshot location:

  1. Via a convenience synonym, which provides a short form for some common URLs (see further below).

    These are:

    • Stackage LTS Haskell snapshots, for example:

      snapshot: lts-24.30
      
      Expansion of lts-X.Y

      lts-X.Y is treated (by default) as:

      github:commercialhaskell/stackage-snapshots:lts/X/Y.yaml
      

      and, consequently, expands to:

      https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/X/Y.yaml
      
    • Stackage Nightly snapshots, for example:

      snapshot: nightly-2026-02-09
      
      Expansion of nightly-YYYY-MM-DD

      nightly-YYYY-MM-DD is treated (by default) as:

      github:commercialhaskell/stackage-snapshots:nightly/YYYY/M/D.yaml
      

      and, consequently (see below), expands to:

      https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/nightly/YYYY/M/D.yaml
      
    • GitHub: github:user/repo:path is treated as:

      https://raw.githubusercontent.com/user/repo/master/path
      
    Overriding the default snapshot location base

    By default, LTS Haskell and Stackage Nightly snapshot configurations are retrieved from the stackage-snapshots GitHub repository of user commercialhaskell. The snapshot-location-base option allows a custom location to be set.

  2. Via a compiler version, for example:

    snapshot: ghc-9.10.3
    

    This snapshot specifies only a compiler version and, indirectly, its boot packages.

  3. Via a URL pointing to a snapshot configuration file, for example:

    snapshot: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/nightly/2025/8/17.yaml`
    

    For safer, more reproducible builds, you can optionally specify a URL together with a cryptographic hash of its content. For example:

    snapshot:
      url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/12/0.yaml
      size: 499143
      sha256: 781ea577595dff08b9c8794761ba1321020e3e1ec3297fb833fe951cce1bee11
    

    size is the number of bytes in the file and sha256 is the file's SHA256 hash. If not provided, the information will automatically be generated and stored in a lock file.

  4. Via a relative or absolute local file path pointing to a snapshot configuration file, for example:

    snapshot: my-local-snapshot.yaml
    

    This can also be specified as:

    snapshot:
      filepath: my-local-snapshot.yaml
    

    This allows local file paths and covenience synonyms to be disambiguated.

At the command line

As in YAML configuration files, a snapshot location can be specified via a convenience synoynm, a compiler version, a URL, or a local file path. In addition, at the command line only:

  • --snapshot lts-<major_version> specifies the latest Stackage LTS Haskell snapshot with the specified major version;
  • --snapshot lts specifies, from those with the greatest major version, the latest Stackage LTS Haskell snapshot;
  • --snapshot nightly specifies the most recent Stackage Nightly snapshot; and
  • --snapshot global specifies the snapshot specified by the project-level configuration file in the global-project directory in the Stack root.