shake: Build system library, like Make, but more accurate dependencies.

[ bsd3, development, library, program, shake ] [ Propose Tags ]

Shake is a Haskell library for writing build systems - designed as a replacement for make. See Development.Shake for an introduction, including an example. Further examples are included in the Cabal tarball, under the Examples directory. The homepage contains links to a user manual, an academic paper and further information:

To use Shake the user writes a Haskell program that imports Development.Shake, defines some build rules, and calls the Development.Shake.shakeArgs function. Thanks to do notation and infix operators, a simple Shake build system is not too dissimilar from a simple Makefile. However, as build systems get more complex, Shake is able to take advantage of the excellent abstraction facilities offered by Haskell and easily support much larger projects. The Shake library provides all the standard features available in other build systems, including automatic parallelism and minimal rebuilds. Shake also provides more accurate dependency tracking, including seamless support for generated files, and dependencies on system information (e.g. compiler version).

[Skip to Readme]


Automatic Flags

Obtain FileTime using portable functions


Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info


Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


  • No Candidates
Versions [RSS] 0.0, 0.1, 0.1.1, 0.1.2, 0.1.3, 0.1.4, 0.1.5, 0.2, 0.2.1, 0.2.2, 0.2.3, 0.2.4, 0.2.5, 0.2.6, 0.2.7, 0.2.8, 0.2.9, 0.2.10, 0.2.11, 0.3, 0.3.1, 0.3.2, 0.3.3, 0.3.4, 0.3.5, 0.3.6, 0.3.7, 0.3.8, 0.3.9, 0.3.10, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.9.1, 0.10, 0.10.1, 0.10.2, 0.10.3, 0.10.4, 0.10.5, 0.10.6, 0.10.7, 0.10.8, 0.10.9, 0.10.10, 0.11, 0.11.1, 0.11.2, 0.11.3, 0.11.4, 0.11.5, 0.11.6, 0.11.7, 0.12, 0.13, 0.13.1, 0.13.2, 0.13.3, 0.13.4, 0.14, 0.14.1, 0.14.2, 0.14.3, 0.15, 0.15.1, 0.15.2, 0.15.3, 0.15.4, 0.15.5, 0.15.6, 0.15.7, 0.15.8, 0.15.9, 0.15.10, 0.15.11, 0.16, 0.16.1, 0.16.2, 0.16.3, 0.16.4, 0.17, 0.17.1, 0.17.2, 0.17.3, 0.17.4, 0.17.5, 0.17.6, 0.17.7, 0.17.8, 0.17.9, 0.18, 0.18.1, 0.18.2, 0.18.3, 0.18.4, 0.18.5, 0.19, 0.19.1, 0.19.2, 0.19.3, 0.19.4, 0.19.5, 0.19.6, 0.19.7, 0.19.8 (info)
Change log CHANGES.txt
Dependencies base (>=4 && <4.8), binary, bytestring, deepseq (>=1.1), directory, extra (>=0.7 && <1.6), filepath (<1.3.1), hashable (>=, js-flot, js-jquery, old-time, process (>=1.1), random, time, transformers (>=0.2), unix (>=2.5.1), unordered-containers (>=0.2.1 && <0.3), utf8-string (>=0.3) [details]
License BSD-3-Clause
Copyright Neil Mitchell 2011-2014
Author Neil Mitchell <>
Maintainer Neil Mitchell <>
Revised Revision 3 made by HerbertValerioRiedel at 2017-06-17T17:13:33Z
Category Development
Home page
Bug tracker
Source repo head: git clone
Uploaded by NeilMitchell at 2014-11-19T21:24:53Z
Distributions Arch:0.19.6, Debian:0.19.1, Fedora:0.19.7, FreeBSD:0.15.5, LTSHaskell:0.19.8, NixOS:0.19.7, Stackage:0.19.8
Reverse Dependencies 63 direct, 31 indirect [details]
Executables shake
Downloads 142701 total (415 in the last 30 days)
Rating 2.5 (votes: 9) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs uploaded by user
Build status unknown [no reports yet]

Readme for shake-0.14

[back to package description]

Shake Hackage version Build Status

Shake is a tool for writing build systems - an alternative to make, Scons, Ant etc. Shake has been used commercially for over five years, running thousands of builds per day.


  • Why use Shake? Shake lets you write large robust build systems, which deal properly with generated source files and run quickly. If you are writing a custom build system of any moderate size (more than a few rules) you should use Shake. The advantages over other build systems are detailed in the document Why choose Shake?.
  • How do I use Shake? Shake is a Haskell library that you use to define your rules. The Shake manual provides a walk through of a small but realistic example, assuming no Haskell knowledge.
  • Generated documentation for all functions, includes lots of examples.
  • Running Ninja builds using Shake.
  • Blog posts detailing ongoing development work.
  • Profile report demo explaining what the profile reports mean.
  • Academic paper on the underlying principles behind Shake.
  • Video of a talk introducing Shake.
  • Download the Haskell package from Hackage and install it using Cabal.
  • Mailing list for any questions/bugs/thoughts on Shake. If you need more information and aren't sure where to start, use the mailing list.
  • Questions can be asked on StackOverflow with the tag shake-build-system.
  • Bugs can be reported on the GitHub issue tracker.
  • Source code in a git repo, stored at GitHub.
  • Continuous integration with Travis and Hydra.

Companies using Shake

Is your company using Shake? Write something public (even just a tweet to @ndm_haskell) and I'll include a link.

Projects using Shake

  • Kansas Lava build rules.
  • shake-language-c is a small library on top of Shake that allows cross-compiling C, C++ and Objective-C code to various target platforms.
  • shake-cabal-build is a small script that uses Cabal sandboxes for initialising and updating build systems based on Shake.