ema: Static site generator library with hot reload

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain] [Publish]

Ema is a next-gen Haskell library for building jamstack-style static sites. Ema sites are change-aware; in addition to good ol’ static site generation, it provides a live server supporting fast hot-reload in the browser on code or data change.

[Skip to Readme]


Change log CHANGELOG.md
Dependencies aeson, async, base (>= && <=, blaze-html, blaze-markup, commonmark, commonmark-extensions, commonmark-pandoc, containers, data-default, directory, ema, filepath, filepattern, fsnotify, http-types, lvar, monad-logger, monad-logger-extras, neat-interpolation, optparse-applicative, pandoc-types, profunctors, relude, safe-exceptions, shower, stm, tagged, text, time, unliftio, wai, wai-middleware-static, wai-websockets, warp, websockets [details]
License AGPL-3.0-only
Copyright 2021 Sridhar Ratnakumar
Author Sridhar Ratnakumar
Maintainer srid@srid.ca
Category Web
Home page https://ema.srid.ca/
Bug tracker https://github.com/srid/ema/issues
Uploaded by sridca at 2021-04-26T18:26:08Z



Automatic Flags

Include examples and their dependencies


Include helper modules based on blaze-html


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


Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Readme for ema-

[back to package description]


Ema is a next-gen Haskell library for building jamstack-style static sites, with fast hot reload. See ema.srid.ca for further information.

The simplest Ema app looks like this:

main :: IO ()
main = do
  let name :: Text = "Ema"
  runEmaPure $ \_ ->
    encodeUtf8 $ "<b>Hello</b>, from " <> name


Run bin/run (or Ctrl+Shift+B in VSCode). This runs the documentation example; modify ./.ghcid to run a different example, such as the clock example - which updates every second, demonstrating hot reload.