MIT licensed by Roman Gonzalez
Maintained by [email protected]
This version can be pinned in stack with:capataz-,3059


Our greatest glory is not in never failing, but in rising every time we fail.– Confucius

Table Of Contents


Hackage Stackage LTS Stackage Nightly

Make sure you include the following entry on your cabal file’s dependecies section.

  build-depends: capataz

Or on your package.yaml

- capataz


The documentation website can be found here. Some relevant links:


Build Status Github Hackage Dependencies

Follow the developer guidelines

In future releases

  • Replace Protolude in favor of RIO
  • Documentation of performance analysis
  • Ensure unit tests always finish on all concurrent scenarios (dejafu experiment)


Change log

capataz uses Semantic Versioning. The change log is available on GitHub.

v0.2.0.0 Bumblebee release


  • Allow the creation of Supervision Trees on Monad Transformer stacks 🎉
  • Move to latest stable stackage snapshot (lts-11.10)
  • Remove protolude in favor of rio (closes #9)
  • Add convinience module Capataz
  • Add Control.Concurrent.Capataz.Util which provide ProcessSpec for normal use-cases
  • Add buildLogWorkerSpec and buildLogWorkerOptions which create a dedicated supervised thread that logs messages (sits on top of rio logger utilities)
  • Add terminateCapataz and terminateCapataz_ , these functions replace the re-exported runTeardown
  • Add re-export of TeardownResult from the teardown package
  • Update the capataz-simple-example project to use typed-process and rio
  • Add export for WorkerName and SupervisorName aliases
  • Add new dependency prettyprinter
  • Add new dependency pretty-show to prettify exceptions
  • Add Pretty instance for CapatazEvent
  • Add Display instance for CapatazEvent
  • Add ProcessThreadId newtype to better render ThreadId values
  • Add buildWorkerOptions1 and workerSpec1 (closes #17)
  • Move to CircleCI


  • Bump bounds of async dependency

v0.1.0.0 Who supervises the supervisor?


  • Introduction of the Process type which is composed of both Supervisor and Worker types
  • Replace defWorkerSpec in favor of workerSpec and workerSpecWithDefaults to build static workers
  • Replace of defWorkerOptions in favor of buildWorkerOptions and buildWorkerOptionsWithDefaults to build dynamic workers
  • Replace terminateWorker in favor of terminateProcess
  • Add supervisorSpec, supervisorSpecWithDefaults to build static supervision trees
  • Add forkSupervisor, buildSupervisorOptions and buildSupervisorOptionsWithDefaults to build dynamic supervision trees
  • Replace usage of default records semantics in favor of Lenses
  • Add joinCapatazThread to avoid providing direct access to async of root supervision tree
  • Add getSupervisorProcessId to access the ProcessId of a given Supervisor record (for dynamic termination)
  • Add getSupervisorAsync to access the Async () record of a supervisor process thread
  • Add getCapatazTeardown to access the Teardown record of the capataz system
  • Move CapatazEvent records to new module Control.Concurrent.Capataz.Event to avoid requiring DuplicateRecordFields extension on API users
  • Remove WorkerAction alias as it is used for library development documentation
  • Add capataz-repo-watcher example to showcase static supervision trees
  • Update capataz-simple-example unix-process example
  • forkCapataz signature now requires name for root supervisor


  • Bump bounds of tasty dependency


  • Bump bounds of tasty dependency
  • Bump bounds of tasty-hunit dependency


  • First release of capataz
  • Support for supervising simple worker IO () sub-routines