System for installing Haskell apps


Halcyon is a system for installing Haskell apps and development tools, including GHC and Cabal.

Follow the Halcyon tutorial to get started.



  • Halcyon uses regular Cabal packages, sandboxes, and repositories.

  • Halcyon does not require GHC to be installed, as it can install the right version of GHC for the app.


  • Halcyon archives and caches all build products, optionally uploading archives to external storage.

  • Halcyon automatically restores archived build products, saving time during development, continuous integration, and deployment.




The #haskell-deployment IRC channel on freenode is a good place to ask questions and find answers.

Please report any problems with Halcyon on the issue tracker. There is a separate issue tracker for problems with the documentation.

Need commercial support? Contact the author directly.


  • See the Halcyon examples for a demonstration of advanced Halcyon features.

  • Take a look at the Halcyon shootout for a comparison of build times and sizes across most Haskell web frameworks.

Each example app can be installed in one command on most recent Linux distributions, including CentOS 7, Debian 8, Fedora 21, and Ubuntu 15.04.

Additionally, each example app can be deployed in one click to DigitalOcean or Heroku.


Halcyon provides the halcyon install command, which can be used to install Haskell apps:

$ halcyon install https://github.com/mietek/halcyon-tutorial
-----> Cloning https://github.com/mietek/halcyon-tutorial... done, f1ccdd9
-----> Installing halcyon-tutorial-1.0
       Label:                                    **halcyon-tutorial-1.0**
       Prefix:                                   **/app**
       Source hash:                              **b90bb47**
       External storage:                         **public**
       GHC version:                              **7.8.4**

-----> Restoring install directory
       Downloading https://halcyon.global.ssl.fastly.net/linux-ubuntu-14.04-x86_64/ghc-7.8.4/halcyon-install-b90bb47-halcyon-tutorial-1.0.tar.gz... done
       Extracting halcyon-install-b90bb47-halcyon-tutorial-1.0.tar.gz... done, 8.8MB
-----> Installing app to /app
-----> Installed halcyon-tutorial-1.0

-----> App installed:                            **halcyon-tutorial-1.0**


Halcyon can be installed by cloning the Halcyon source repository:

$ git clone https://github.com/mietek/halcyon

Alternatively, you can run the Halcyon setup script, which also installs the necessary OS packages and sets up the environment:

$ eval "$( curl -sL https://github.com/mietek/halcyon/raw/master/setup.sh )"



Halcyon is written in GNU bash, using the bashmenot library.


My name is Miëtek Bak. I make software, and Halcyon is one of my projects.

This work is published under the MIT X11 license, and supported by my company, Least Fixed.

Like my work? I am available for consulting. Say hello, or follow @mietek.


Thanks to Joe Nelson, Brian McKenna, and Neuman Vong for initial work on Haskell deployment. Thanks to CircuitHub, Purely Agile, and Tweag I/O for advice and assistance.

The welcome image is based on Altocumulus Cloud, by Jeff Kubina. The monospaced font is PragmataPro, by Fabrizio Schiavi. The sans-serif font is Concourse, by Matthew Butterick. Website built with cannot.

Thanks to Fastly for providing low-latency access to Halcyon public storage.

This project is not affiliated with DigitalOcean or Heroku.