|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 + Nix


stack build --fast --nix

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

.. _cabal--nix:

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

.. |Coverage Status| image::
.. |"master" Build status| image::
.. |cardano-shell| image::
.. |cardano-shell-responsibilities| image::
.. |cardano-shell-integration| image::


You can generate a coverage report for the entire project like so:


   nix-build -A cardanoShellHaskellPackages.projectCoverageReport --arg config "{ haskellNix = { coverage = true; }; }"

or for each package like this:


   nix-build -A cardanoShellHaskellPackages.cardano-shell.coverageReport --arg config "{ haskellNix = { coverage = true; }; }"
   nix-build -A cardanoShellHaskellPackages.cardano-launcher.coverageReport --arg config "{ haskellNix = { coverage = true; }; }"

The CI is currently configured to upload a project coverage report to
a coverage web service. It does this using the script provided by:


   $(nix-build -A uploadCoverallsScript --arg config "{ haskellNix = { coverage = true; }; }")/bin/

Cardano Shell

Node shell, a thin layer for running the node and it's modules.

Cardano Shell Info

⭐ Stars 21
🔗 Source Code
🕒 Last Update 9 months ago
🕒 Created 3 years ago
🐞 Open Issues 9
➗ Star-Issue Ratio 2
😎 Author input-output-hk