Halcyon
Halcyon is a system for installing Haskell apps and development tools, including GHC and Cabal.
Follow the Halcyon tutorial to get started.
Features
Simple
-
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.
Fast
-
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.
Reliable
Powerful
-
Halcyon allows sandbox sources, build tools, and native OS packages to be declared as dependencies and installed together with the app.
-
Halcyon can be used to construct deployment systems, such as Haskell on Heroku.
Support
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.
Examples
-
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 7, Fedora 20, and Ubuntu 14.04.
Additionally, each example app can be deployed in one click to DigitalOcean or Heroku.
Usage
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**
Installation
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:
$ source <( curl -sL https://github.com/mietek/halcyon/raw/master/setup.sh )
Documentation
-
Start with the Halcyon tutorial to learn how to develop a simple Haskell web app using Halcyon.
-
See the Halcyon reference for a complete list of available commands and options.
-
Read the Haskell on Heroku tutorial to learn how to deploy Haskell web apps to Heroku.
Internals
Halcyon is written in GNU bash, using the bashmenot library.
- Read the Halcyon source code to understand how it works.
About
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
Acknowledgments
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.