BSD-3-Clause licensed by Bjorn Bringert
Maintained by John Chee, Peter Simons
This version can be pinned in stack with:cgi-3001.5.0.0@sha256:3d1193a328d5f627a021a0ef3927c1ae41dd341e32dba612fed52d0e3a6df056,2990

Module documentation for 3001.5.0.0


hackage release stackage LTS package stackage Nightly package travis build status

This is a Haskell library for writing CGI programs. Its features include:

  • Access to CGI parameters (e.g. form input) from both GET and POST requests.
  • Access to CGI environment variables.
  • Ability to set arbitrary response headers.
  • Support for HTTP cookies.
  • An efficient implementation of multipart/form-data using Data.ByteString. This allows for efficient handling of file uploads.
  • A CGI monad transformer.
  • Basic exception handling and logging (these should be improved)
  • Low-level run functions that allow using programs written with this package with protocols other than CGI, for example FastCGI.

On hackage: Source:


Change Log

All notable changes to this project will be documented in this file. This project adheres to the Package Versioning Policy.


  • Define a proper MonadFail instance for CGIT. This is necessary to compile successfully with ghc-8.8.x Since that change affects our public API, a major version bump is necessary.
  • The build no longer supports ghc prior to version 8.x.


  • Drop obsolete Network.CGI.Compat module. The code in that module relied on obsolete functions and types from network which have been dropped there in the latest 3.x release. Re-writing the Compat module to use the new types felt like it would defeat the purpose of the module, so we’ve dropped it instead.
  • Dropped the dependency on network altogether. We need network-uri, really. Giving up support for ancient versions of network allows us to drop the network-uri flag, too, simplifying our builds.
  • Dropped support for versions of mtl prior to 2.2.x. That version was released almost 5 years ago, so we can probably drop the compatibility code (and the old-mtl Cabal flag) without surprising anyone.
  • Added new cookieHttpOnly flag to the Cookies type. When set, the client’s browser will prevent client side scripts from accessing the cookie.



  • Our error handling functions throwCGI, catchCGI, tryCGI, and handleExceptionCGI are deprecated. These functions are trivial aliases for the corresponding functions from the exceptions library’s MonadCatch class. Users should directly use those functions. They are more general and have better documentation.
  • Relax version constraints to allow building with network 2.8.x.



  • Bumped upper version bounds for containers and time.
  • Updated to exceptions 0.10.x. This meant extending our MonadMask instance to provide the generalBracket method that was added to the class in recent versions of the exceptions library.
  • The doctest suite would not work reliably with different versions of Cabal. Instead of going all out with a custom written build system to support it properly, we now run doctests as part of our CI builds but not as a part of the Cabal build any more.
  • Fixed several compiler warnings in our code.



  • Bumped QuickCheck upper bound to version < 2.10



  • Bumped doctest to version < 0.12



  • Cookie.hs: cookieExpires now has type Maybe UTCTime rather than Maybe CalendarTime
  • Protocol.hs: URL decoding functions no longer decode UTF-8 encoding
  • Functor and Applicative instance of CGIT no longer constrain Functor or Applicative parameter to be an instance of Monad



  • CGI.hs haddock: Use link for CGI specification



  • Added support for building with mtl < 2.2.1 via flags



  • Bumped exceptions version to < 0.9



  • MonadMask instance for CGIT



  • Applicative instance for CGI Monad


  • Deduplicate shared with multipart code



  • GHC 7.8.3 support