Hakyll is a static website compiler library. It provides you with the tools to create a simple or advanced static website using a Haskell DSL and formats such as markdown or RST. You can find more information, including a tutorial, on the website:

If you seek assistance, there's:

Additionally, there's the Haddock documentation in the different modules, meant as a reference.

Changes


title: Releases

Releases

Hakyll 4.15.1.1 (2022-01-20)

  • Extend the documentation for Hakyll.Core.Identifier (contribution by malteneuss)
  • Fix yet another regression caused by new dependency checking code (contribution by Laurent P. René de Cotret)
  • Bump pandoc upper bound to allow 2.17 (contribution by Alexander Batischev)
  • Website now points to Hackage rather than its own (often outdated) version of the docs (contribution by Jasper Van der Jeugt)

Hakyll 4.15.1.0 (2021-10-25)

  • Add Hakyll.Web.Pandoc.Biblio functions readPandocBiblios and processPandocBiblios, which let one use multiple bibliographies (contribution by Benjamin Eskola)
  • Preserve file extension of bibliography files when passing them to Pandoc. This enables one to use not just BibTex, but also YAML and JSON files (contribution by Benjamin Eskola)
  • Fix URL extraction for srcset attribute. This affects Hakyll.Web.HTML.relativizeUrls and other such functions (contribution by Alexander Batischev)
  • Bump bytestring upper bound to allow 0.11 (contribution by Alexander Batischev)
  • Bump pandoc upper bound to allow 2.15 (contribution by Alexander Batischev)
  • Bump aeson bounds to allow 2.0 (contribution by Alexander Batischev)

Hakyll 4.15.0.1 (2021-10-02)

  • Add missing test file to the package (contribution by Alexander Batischev)

Hakyll 4.15.0.0 (2021-10-01)

  • Fix dependency cycles detector (contribution by Laurent P. René de Cotret)
  • Add --dry-run to the build command (contribution by Fraser Tweedale)
  • Add support for Jupyter notebooks (files with “.ipynb” extension) (contribution by fedeinthemix)
  • Add Hakyll.Web.Pandoc.Biblio.processPandocBiblio, which works with Item Pandoc and is thus composable with other Pandoc-related compilers and functions (contribution by fedeinthemix)
  • Speed up the runtime by about 9% (multiple contributions by Fraser Tweedale)
  • Tolerate unexpected cache misses by recompiling the item; now there is no need to rebuild the entire site to fix cache corruption (contribution by Fraser Tweedale)
  • Replace Hakyll.Core.Rules.forceCompile (introduced in 4.14.1.0) with Hakyll.Core.Compiler.recompilingUnsafeCompiler. The new facility is more versatile and composes better (contribution by Fraser Tweedale)
  • Remove dependency on array (contribution by Laurent P. René de Cotret)

Hakyll 4.14.1.0 (2021-08-30)

  • Add Hakyll.Web.Html.demoteHeaderBy function, which demotes an HTML header by a given amount (contribution by Logan McGrath)
  • Add Hakyll.Core.Rules.forceCompile modifier which forces re-compilation of an item even if its file wasn’t modified. This is useful for data sources which aren’t local files (contribution by Fraser Tweedale)
  • Add Hakyll.Web.Tags.getTagsByField which extracts tags from a given field instead of the default “tags” field (contribution by Jim McStanton and Alexander Batischev)
  • Add Hakyll.Core.Configuration.shouldWatchIgnore function and the corresponding watchIgnore field for Configuration. These are used to ignore files in watch mode, which is useful when certain files are pre-processed and the results are saved into the provider directory (contribution by Aron Erben)
  • Add Hakyll.Web.Meta modules JSONLD, OpenGraph, and TwitterCard. These help with semantic web metadata in pages. This adds dependency on aeson (contribution by Fraser Tweedale)
  • Export Hakyll.Web.Pandoc.Biblio.unCSL function (contribution by Benjamin Bray)
  • Make the runtime concurrent, which brings 30% speedups on real-world sites. This adds dependencies on array and lifted-async. Please note that it doesn’t scale past the number of physical cores; ideas are welcome in https://github.com/jaspervdj/hakyll/issues/850 (contribution by Laurent P. René de Cotret and Vaibhav Sagar)
  • Fix binary’s name in the first tutorial (contribution by Alexander Batischev)
  • Fix “Empty ‘do’ block” error in GitHub tutorial (contribution by alexandroid000)
  • Move #hakyll IRC channel from Freenode to Libera.Chat (by Alexander Batischev and henk)
  • Replace dependency on cryptonite and memory with dependency on hashable (contribution by Laurent P. René de Cotret)
  • Bump file-embed upper bound to 0.0.15 (contribution by Alexander Batischev)
  • Bump optparse-applicative upper bound to 0.16 (contribution by Felix Yan)
  • Bump pandoc upper bound to 2.14 (contribution by Laurent P. René de Cotret)
  • Bump tasty upper bound to 1.4 (contribution by Felix Yan)
  • Bump template-haskell upper bound to 2.17, which is shipped with GHC 9 (contribution by Alexander Batischev)
  • Bump time upper bound to 1.11 (contribution by Alexander Batischev)

Hakyll 4.14.0.0 (2021-03-14)

  • Add renderPandocWithTransform and renderPandocWithTransformM (by Norman Liu)
  • Make sure the initial project is writable (by Tobias Bora)
  • Bump pandoc to 2.11.*
  • Bump file-embed upper bound to 0.0.14
  • Bump random upper bound to 1.2

Hakyll 4.13.4.1 (2020-09-30)

  • Bump pandoc to 2.10.*
  • Bump upper bound for template-haskell to 2.17
  • Bump QuickCheck upper bound to 2.15

Hakyll 4.13.4.0 (2020-06-20)

  • Miscellaneous Windows-specific fixes and CI (by Laurent P. René de Cotret)
  • Bump upper bound for cryptonite to 0.28
  • Bump upper bound for tasty to 1.4

Hakyll 4.13.3.0 (2020-04-12)

  • Fix compilation issue related to MonadFail on Windows (by Martín Emanuel)
  • Bump upper bound for warp to 3.4
  • Bump upper bound for pandoc-citeproc to 0.18

Hakyll 4.13.2.0 (2020-03-07)

  • Fix compatibility with GHC-8.6 (by Nikolay Yakimov).

Hakyll 4.13.1.0 (2020-02-26)

  • Fix timezone parsing bug with time-1.9
  • Remove constant field for homepage title in example site (by Liang-Ting Chen)
  • Clean up stack.yaml (by Hexirp)
  • Use crytonite instead of cryptohash (by Hexirp)
  • Expose CLI argument parser internals (by Jim McStanton)
  • Support GHC-8.8. Add MonadFail instances and constraints (by Veronika Romashkina)
  • Fix file path compatibility with Windows (by Hexirp)
  • Fix logging output flushing in site server (by robx)
  • Fix spacing of command line usage in hakyll-init (by robx)
  • Add titles to tag fields by default

Hakyll 4.13.0.1 (2019-09-18)

  • Add missing test files (contribution by Justin Humm)

Hakyll 4.13.0.0 (2019-08-30)

  • Improved documentation in many places (contribution by Bergi)
  • Significantly improve error messages when reading and applying templates (contribution by Bergi)
    • empty and fail for Compiler now fail without or with a message, allowing for much better debug output
    • renderFeed, renderRssWithTemplates and renderAtomWithTemplates now take Template rather than String arguments
  • Add option to specify date in directory structure,e.g. posts/2019/05/10/tomorrow.md (contribution by Taeer Bar-Ya)
  • Bump QuickCheck to 2.13

Hakyll 4.12.5.2 (2019-05-09)

  • Bump pandoc to 2.7
  • Add srcset to the list of URL attributes (contribution by c50a326)
  • Expose getCategory in Hakyll.Web.Tags (contribution by Ng Wei En)
  • Fix issue where published overwrites the user’s context (contribution by ncaq)

Hakyll 4.12.5.1 (2019-02-03)

  • Bump pandoc to 2.6
  • Bump pandoc-citeproc to 0.16

Hakyll 4.12.5.0 (2019-01-12)

  • Update dependencies (contribution by Hexirp):
    • Bump containers to 0.6
    • Bump yaml to 0.11
    • Bump pandoc to 2.5
    • Bump pandoc-citeproc to 0.15
    • Bump tasty to 1.2
  • Correct assertion in unixFilterError test (contribution by Jim McStanton)
  • Add renderRssWithTemplates, renderAtomWithTemplates (contribution by Abhinav Sarkar)
  • Speed up hashing in cache (contribution by 0xd34df00d)
  • Update type of fromFilePath to use FilePath instead of String (contribution by Jim McStanton)
  • Drop extension when parsing dates in filepaths (contribution by Gabriel Aumala)

Hakyll 4.12.4.0 (2018-08-13)

  • Bump yaml to 0.10
  • Bump file-embed to 0.0.11
  • Bump QuickCheck to 2.12
  • Use makeRelativeToProject with embedFile for stack ghci (contribution by Michael Sloan)

Hakyll 4.12.3.0 (2018-05-29)

  • Bump tasty to 1.1
  • Bump fsnotify to 0.3

Hakyll 4.12.2.0

  • Bump pandoc to 2.2
  • Fix path resolution in Pandoc.Biblio (contribution by knih)

Hakyll 4.12.1.0

  • Fix hakyll-init on older GHC versions
  • Make the Pandoc dependency optional

Hakyll 4.12.0.1

  • Bump resourcet to 1.2 in test section

Hakyll 4.12.0.0

  • Add Semigroup instances for existing Monoids (contribution by Christian Barcenas)
  • Fix issue with CPP and comment containing /*
  • Add withTagList (contribution by Oleg Grenrus)
  • Improve CSS compression (contribution by Bergi)
  • Bump pandoc-citeproc to 0.14
  • Bump resourcet to 1.2
  • Bump time to 1.9
  • Bump http-types to 0.12
  • Bump http-conduit to 2.3
  • Bump tasty-quickcheck to 0.10

Hakyll 4.11.0.0

  • Bump binary to 0.9
  • Bump pandoc to 2.1
  • Bump pandoc-citeproc to 0.13
  • Bump http-types to 0.11
  • Bump QuickCheck to 2.11
  • Bump tasty to 1.0
  • Bump tasty-hunit to 0.10
  • Remove system-filepath dependency
  • Embed feed templates rather than using data-files (contribution by Roman Kuznetsov)
  • Fix pthread link error on GHC-8.2.2 (contribution by Shinya Yamaguchi)
  • Extend capture with Regex handling (contribution by frederik-h)

Hakyll 4.10.0.0

  • Bump Pandoc to 2.0 (contribution by Vaibhav Sagar)
  • Fix compression of calc() in CSS (contribution by Krzysztof Jurewicz)
  • Make unixFilter output stderr when failing (contribution by Nick Boultbee)
  • Export Check type from Hakyll.Commands (contribution by Futtetennista)
  • Add overwritten files check to hakyll-init (contribution by Ilya Murzinov)
  • Expose & document hakyllWithExitCodeAndArgs, Options, and Command (contribution by Michael Walker)
  • Add check for non-overlapping redirects (contribution by gwern)
  • Fix early exit when calling check as a library

Hakyll 4.9.8.0

  • Bump pandoc-citeproc to 0.10.5
  • Bump optparse-applicative to 0.14
  • Bump QuickCheck to 2.10
  • Bump tasty-quickcheck to 0.9
  • Restructure .cabal to avoid redundant compilation (contribution by Christopher League)

Hakyll 4.9.7.0

  • Fix compilation trouble with Options.Applicative
  • Some small CSS compression improvements (contribution by Nicole Rauch)

Hakyll 4.9.6.0

  • Tighten dependency on pandoc-citeproc (contribution by Mikhail Glushenkov)
  • Enable using a custom parser for command line arguments (contribution by Alberto)
  • Update examples to semantic HTML (contribution by Elie Génard)
  • Better error for cached on non-existing file
  • Provide an $allPages$ key when doing pagination
  • Preserve file metadata in copyFileCompiler (contribution by frederik-h)

Hakyll 4.9.5.1

  • Bump blaze-html dependency to 0.9
  • Bump blaze-markup dependency to 0.8
  • Bump process dependency to 1.5

Hakyll 4.9.5.0

  • Fix compilation issue with Hakyll.Check if checkExternal is disabled (Fix by Magnus Therning)

Hakyll 4.9.4.0

  • Make ./site check concurrent
  • Bump directory dependency to 1.3
  • Bump time dependency to 1.7
  • Bump vector dependency to 0.12

Hakyll 4.9.3.0

  • Add a Hakyll.Web.Redirect module (contribution by gwern)
  • Expose Hakyll.Commands
  • Fix the exit code behaviour of ./site check

Hakyll 4.9.2.0

  • Fix integer fields in YAML metadata (Fix by Nikolaos S. Papaspyrou)
  • Bump pandoc dependency to 1.19

Hakyll 4.9.1.0

  • Allow optparse-applicative 0.13, QuickCheck 2.9, and pandoc 1.18 (contributions by Chris Wong and Felix Yan)
  • Fix extra test files for packaging source files (contribution by Julien Langlois)

Hakyll 4.9.0.0

This release switches over some dependencies to alternatives, in order to clean up some stuff and build on a wider variety of setups (stack/cabal).

  • Move from test-framework to tasty
  • Fix feed generator when item contains CDATA (contribution by Yann Esposito)
  • Fix CompressCSS to not modify string constants (contribution by Nicole Rauch)
  • Fix YAML dependency issue (contribution by Jens Peterson)
  • Move from cmdargs to optparse-applicative (contribution by sk3r)
  • Allow for trimming whitespace in templates (contribution by Sam Davis)
  • Improve error messages for template parsing (contribution by Lorenzo Tabacchini)
  • Improvements to the installation instructions (contribution by Thomas Koch)
  • Move from snap to warp for preview server (contribution by Arguggi)
  • Fix error in CompressCSS (contribution by Luca Molteni)
  • Move example from XHTML to HTML5 (contribution by Peter Doherty)
  • Make errors in check less verbose (contribution by Jan Tojnar)
  • Work on building with GHC 8.0.1 (contribution by Rohan Jain)

Hakyll 4.8.3.2

This release is compatible with GHC 8.0.1, although previewServer might not work yet on some setups.

  • Allow data-default 0.7, pandoc-citeproc 0.10, and tagsoup 0.14 (contributions by Paul van der Walt and Felix Yan)
  • Allow binary 0.8, process 1.4, time 1.6 (contribution by Sergei Trofimovich)
  • Fix issue with .metadata file reading

Hakyll 4.8.3.1

  • Bump scientific dependency to 0.3.4

Hakyll 4.8.3.0

  • Fix another compilation issue wrt. orphan Show instance from regex-tdfa (contribution by Sergei Trofimovich)

Hakyll 4.8.2.0

  • Fix compilation issue wrt. orphan Show instance from regex-tdfa

Hakyll 4.8.1.0

  • Fix compilation on windows

Hakyll 4.8.0.1

  • Fix issue with test suite

Hakyll 4.8.0.0

  • Support full YAML in page metadata
  • Bump data-default dependency to 0.6
  • Add snippet field for literal includes in templates (contribution by Nicolas Mattia)

Hakyll 4.7.5.2

  • Bump pandoc dependency to 1.17 (contribution by Felix Yan)
  • Fix unixFilter documentation (contribution by Richard Cook)
  • Bump example posts (contribution by Andrew Barchuk)
  • Add a template compiler that only uses the template body (contribution by Bergi)

Hakyll 4.7.5.1

  • Bump pandoc and pandoc-citeproc dependencies to 1.16 and 0.9 respectively

Hakyll 4.7.5.0

  • Expose templating engine
  • Fix bug in feed context precedence (contribution by Yuriy Syrovetskiy)
  • Bump http-types dependency to 0.9

Hakyll 4.7.4.0

  • Expose getItemModificationTime

Hakyll 4.7.3.1

  • Bump pandoc-citeproc dependency to 0.8

Hakyll 4.7.3.0

  • Bump HUnit dependency to 1.3
  • Add poster as an URL attribute (contribution by vtduncan)
  • Prevent hakyll-init from generating directories with leading hyphen (contribution by Javran Cheng)

Hakyll 4.7.2.3

  • Fix time dependency in tests

Hakyll 4.7.2.2

  • Relax time dependency

Hakyll 4.7.2.1

  • Bump fsnotify dependency to 0.2

Hakyll 4.7.2.0

  • Improve documentation of getResourceXXX functions (contribution by Matthias C. M. Troffaes)
  • Allow for empty templates
  • Bump pandoc dependency to 1.15

Hakyll 4.7.1.0

  • Drop old-time, old-locale, time-locale-compat dependencies
  • Add convenicence pandocBiblioCompiler (contribution by Matthias C. M. Troffaes)
  • Add support for mediawiki (contribution by Chen Lei)

Hakyll 4.7.0.0

  • Bump pandoc to 1.14. This will break a lot of sites: since the pandoc parser might now return an error message, it is ran inside the Compiler monad where we can nicely handle the error.

Hakyll 4.6.9.0

  • Let caller decide exit (fix by Erik Dominikus)
  • Bump pandoc-citeproc dependency

Hakyll 4.6.8.1

  • Fix test suite dependencies

Hakyll 4.6.8.0

  • Fix building on GHC 7.10 (fix by Charles Strahan)
  • Add support for a custom teaser separator (contribution by Tom Sydney Kerckhove)
  • Let Pandoc handle DocBook files (contribution by Joshua SImmons)

Hakyll 4.6.7.1

  • Bump dependencies

Hakyll 4.6.7.0

  • Bump dependencies
  • Fix bug where hakyll-init would create a file called name.cabal.cabal (fix by Hans-Peter Deifel)

Hakyll 4.6.6.0

  • Fix compilation error when preview server is disabled (fix by Magnus Therning)
  • Add author name by default to RSS feeds (contribution by Calen Pennington)

Hakyll 4.6.5.0

  • Bump dependencies
  • Fix garbled “Listening on 0.0.0.0:8000” message
  • Add boolField (contribution by Ferenc Wágner)

Hakyll 4.6.4.0

  • Fix another dependency handling bug when using snapshots
  • Add matchMetadata for examining metadata when defining rules

Hakyll 4.6.3.0

  • Fix dependency handling bug

Hakyll 4.6.2.0

  • Loosen binary dependency
  • Make dependency handling more granular so you can depend on specific snapshots of an item

Hakyll 4.6.1.0

  • Bump fsnotify and pandoc-citeproc dependencies
  • Rewrite polling code a bit

Hakyll 4.6.0.0

  • Added listFieldWith function
  • Improved rulesExtraDependencies behaviour
  • Changed function syntax in templates from $foo arg1 arg2$ to $foo("arg1", "arg2")$
  • Support parsing date from directory names in addition to file names

Hakyll 4.5.5.0

  • Fix Binary instances for pandoc and pandoc-citeproc
  • Fix network-uri dependency issue

Hakyll 4.5.4.0

  • Fix issue with HTML entities when running withUrls and demoteHeaders.
  • Generate a cabal file for the initialised site.
  • Add pagination support.

Hakyll 4.5.3.0

  • Bump Pandoc to 1.12.4 to include the org-mode reader.

Hakyll 4.5.2.0

  • Fix rebuilding everything issue with latest directory (contribution by Jorge Israel Peña)
  • Fix issue with toSiteRoot (contribution by Izzy Cecil)
  • Fix issue with tag dependencies, slightly improve caching

Hakyll 4.5.0.0

  • Fix issue with syntax highlighting and line numbers (contribution by Adelbert Chang)
  • Improve documentation for Context (contribution by Daniil Frumin)
  • Added IsString instance for Template
  • Added the pandocCompilerWithTransformM function (contribution by Daniil Frumin)
  • Make ./site check return the right exit code (contribution by Andres Loeh)
  • Use OS threads to make ./site watch work nicely on Windows (contribution by Simonas Kazlauskas)
  • Make the unixFilter function work better on windows by calling shell (contribution by Collin J. Doering)
  • Add a command-line flag to bind on a user-specified host (contribution by chrisdotcode)

Hakyll 4.4.3.0

  • Fix issue when using metadataRoute after other custom routes

Hakyll 4.4.2.0

  • Fix issue where Hakyll would not detect a change if a .metadata file was deleted

Hakyll 4.4.1.0

  • Use Pandoc 1.12 highlighting by default

Hakyll 4.4.0.0

  • Update to work with Pandoc 1.12. This changes the type of readPandocBibilio: the CSL argument is no longer optional (contribution by Jorge Israel Peña)

  • Fix incorrect output of toSiteRoot on windows (contribution by Saeid Al-Wazzan)

  • Add a preview port option to Configuration (contribution by Jorge Israel Peña)

  • Add watch command that polls for changes but does not necessarily launch a server (contribution by Eric Stolten)

  • Generalise type of metadataField

  • Fix issue where metadata was not correctly loaded when using versions

Hakyll 4.3.3.0

  • Re-add the functionField function

Hakyll 4.3.2.0

  • Re-add the mapContext function

  • Unescape internal URLs when using ./site check (contribution by Marc-Antoine Perennou)

Hakyll 4.3.1.0

  • Make teasers undefined if no <!--more--> comment is found

  • Sanitize tag URLs (contribution by Simonas Kazlauskas)

Hakyll 4.3.0.0

  • Add conditionals, partials and for loops to the template system (includes a contribution by Ivan N. Veselov)

  • Improvements to the preview functionality on windows (contribution by Jorge Israel Peña)

  • Add pagination support (contribution by Anton Dubovik)

  • Slight speedup for the Hakyll cache (contribution by justnoxx)

  • Add teaser functionality (contribution by Ivan N. Veselov)

  • Make ./site check work with scheme-relative URLs (contribution by Simonas Kazlauskas)

  • The ./site deploy command can now be customized with Haskell code (contribution by Samuel Tardieu)

  • Use hsnotify for proper polling instead of sleep loop on all platforms (contribution by Simonas Kazlauskas)

  • More useful debug info available

Hakyll 4.2.2.0

  • Fix issue with Alternative instance of Compiler

Hakyll 4.2.1.1

March 9, 2013

  • Make http-conduit dependency optional by adding a checkExternal cabal flag

Hakyll 4.2.1.0

March 7, 2013

  • Fix issue where copyFileCompiler ignored providerDirectory

Hakyll 4.2.0.0

March 7, 2013

  • Read second extension for .lhs, e.g. .md.lhs or .tex.lhs (contribution by Alexander Vershilov)

  • Speedup initialization by using modification times instead of hashing files

  • Speedup initialization with a rewritten resource provider

  • Fix ./site check not working with sites that require a user agent (e.g. http://www.wikipedia.org/)

  • Change chronological and recentFirst to actually look at the dates of items. This changes their types from:

      chronological, recentFirst :: [Item a] -> [Item a]
    

    to:

      chronological, recentFirst
          :: MonadMetadata m => [Item a] -> m [Item a]
    

    (contribution by Simonas Kazlauskas)

  • Add metadataRoute, so it is now possible to use metadata when determining routes

  • Improve metadata parser for multiline metadata fields (contribution by Peter Jones)

  • Add the getMetadataField utility

Hakyll 4.1.4.0

January 26, 2013

  • Export the flexible renderTags function

Hakyll 4.1.3.0

January 26, 2013

  • Export the constructor of the Tags datatype

Hakyll 4.1.2.0

January 20, 2013

  • Fix an issue where a dependency cycle would lead to infinite recursion/stack overflow

Hakyll 4.1.1.0

January 20, 2013

  • Fix an issue regarding relativizeUrls expanding <meta /> to <meta></meta>

Hakyll 4.1.0.0

January 20, 2013

Update to use Pandoc 1.10, this requires changes to your site.hs if you’re using custom Pandoc options or the Hakyll.Web.Pandoc.Biblio module.

  • defaultHakyllParserState renamed to defaultHakyllReaderOptions

  • The type of readPandocBiblio changed

Because of the many changes, this release is no longer compatible with Pandoc 1.9.

Hakyll 4.0.0.0

January 16, 2013

The Initial release of Hakyll 4, see this blogpost and the migration guide for an overview of changes.