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