Snap: A Haskell Web Framework (core interfaces and types)

Version on this page:
LTS Haskell 22.29:
Stackage Nightly 2024-07-18:
Latest on Hackage:

See all snapshots snap-core appears in

BSD-3-Clause licensed by Snap Framework Authors (see CONTRIBUTORS)
Maintained by [email protected]
This version can be pinned in stack with:snap-core-,9822

Snap Framework Core

GitHub CI

Snap is a web framework for Haskell. For more information about Snap, read the or visit the Snap project website at

Library contents

This is the snap-core library, which contains:

  • primitive types and functions for HTTP (requests, responses, cookies, post/query parameters, etc).

  • a “Snap” monad interface for programming web handlers, which allows:

    • stateful access to the HTTP request and response objects.

    • monadic failure (i.e. MonadPlus/Alternative instances) for declining to handle requests and chaining handlers together.

    • early termination of the computation if you know early what you want to return and want to prevent further monadic processing.

  • useful utilities for web handlers, like file serving and gzip/zlib compression.

Building snap-core

The snap-core library is built using Cabal and Hackage. Just run

cabal install

from the snap-core toplevel directory.

Building the Haddock Documentation

The haddock documentation can be built using the supplied shell script:


The docs get put in dist/doc/html/.

Building the testsuite

Snap aims for 100% test coverage, and we’re trying hard to stick to that.

To build the test suite, configure with –enable-tests:

$ cabal configure --enable-tests
$ cabal build

From here you can invoke the testsuite by running:

$ ./

The testsuite generates an hpc test coverage report in dist/hpc.


  • Add head helper for Snap.Test
  • Add support for GHC 9
  • Expose Snap.Internal.Util.FileServe
  • Ensure parseHttpTime returns 0 on invalid input
  • Add test helper for HEAD requests
  • Misc version bumps

  • Allow network 3.0.

  • Allow unix-compat 0.5

  • Stop using deprecated Data.Map.insertWith’

  • Test with GHC 8.4.1

  • Allow io-streams 1.5.


  • Alternative file upload handling into Snap.Util.FileUploads


  • Fixed parsing of field values in multipart/form-data headers with encodings other than US-ASCII


  • Allow io-streams 1.4.


  • Merged CORS functionality from snap-cors project into Snap.Util.CORS


  • Bumped time dependency.


  • Fixed a bug in token parsing in Snap.Util.Parsing


  • fixed a FileUpload exception test

  • Exported compressibleMimeTypes

  • Added a missing file to the tarball.



  • Removed support for iteratees in favor of io-streams