Coverage Status

"master" Build status

This is the cardano-shell project. This project uses Github issues for tracking the project progress.


This “node shell” is a thin layer of functionality surrounding the node. It’s a thin layer which brings all the other modules working together and makes sure that they have the required resources (configuration, exception handling, monitoring, logging, …).


From the top level, the “node shell” contains some of the following:

  • startup initialization

  • configuration loading

  • process monitoring

Some of it responsibilities are the cross-cutting concerns like:

  • logging

  • monitoring

  • configuration

  • exception handling

  • launcher (it’s related to startup, but we need to simplify it if possible)


For example, we can see some of the modules cardano-shell integrates with:

  • network layer

  • blockchain layer

  • ledger layer

  • logging layer

  • monitoring layer

  • wallet (backend) layer


Any module that requires a substantial amount of logging or monitoring, should provide such resources iself. For example, 1 thread per module should be enough from the point of view of cardano-shell. If, for example, network module requires 5 threads, it should provide such resources itself.

For serving the module functionality, we can use withAsync for top-level calls which is resource/exception safe. The option left for discussion is whether we should have a need for a restart on a module/process.

For more info about the architecture, please take a look at here. For more info about the launcher, please take a look at here.


For example, we can get a chain generator to try to integrate with logging output and cardano-shell should be a piece of code that glues them together, providing a very simple (random) chain generation and it’s output. We need to remove a lot of things that are there in the old version. For example, the Servant API.


Core seems to be split into:

  • blockchain

  • ledger

Currently, the (relevant) team structure seems to be:

  • networking - Duncan

  • core - Eric

  • logging & monitoring - Alexander


You can build the project using Stack or Nix.


stack build --fast

Stack + Nix

stack build --fast --nix

Or enable the option for nix building in your local configuration for Stack.

Cabal + Nix

There is an option of using just Cabal + Nix as well - use a small utility script (watch out, it’s a dot before the cabal!) and work as you would usually if you develop with cabal:

./cabal new-build

Adding new dependencies can be easy with, for example:

cabal2nix --revision "2d6624af423d0a5c7ced6f3ae465eaaeb4ec739e" > cardano-prelude.nix


You can install multiple tools that can help you, there are configs for these tools in the project repo:

stack install hindent
stack install stylish-haskell
stack install hsimport
stack install hdevtools