The Plutus Application Framework, part of the Plutus Platform, is a framework for developing distributed applications using the Cardano blockchain. For more information about the projects, see the User documentation.
This repository contains:
-
Plutus Platform
-
Libraries which implement the Plutus Application Framework, a framework for writing applications that work with Cardano.
-
A selection of end-to-end usecases written with the Plutus Application Framework
-
|
Important
|
The rest of this README is focussed on people who want to develop or contribute to the Framework. For people who want to use the Framework, please consult the User documentation. |
Run nix develop to enter the development shell and you will be presented with a list of available commands.
*Please see CONTRIBUTING for comprehensive documentation on how to contribute to the project, including development and submitting changes
The main documentation is located here.
The generated Haskell API documentation (haddocks) are here: https://input-output-hk.github.io/plutus-apps/main/.
There are two protected development branches in plutus-apps: main and next-node.
We adopt the PVP versioning scheme.
Check out Branching Policy and Release Process to learn more.
The dependency update policy is dependent on the protected branch.
For cardano-node, we define major-version-bound the range of versions which are compatible with a specific era.
For example, for the Alonzo era, that would be >= 1.29 && < 1.35. For the Vasil era, that would be >= 1.35 && < 1.36.
Independently of the protected branch:
-
It should always use the same first-major-version of
plutusas the one used by theplutusdependency ofcardano-node -
It should always be safe to upgrade to a new second-major-version of
plutus: at worst this will lead to some code breakage. -
It should, unless specified otherwise, use the same version for transitive dependencies (
cardano-ledger,ouroboros-network, etc.) withcardano-node -
It should pin the major version of
cardano-nodefor all packages -
It should pin the first and second-major version of
plutusfor all packages
main branch:
-
It should not update
cardano-nodeto a new major-version. In other words, it should use acardano-nodeversion which is compatible with the current Cardano mainnet -
It should use a
cardano-walletversion which is compatible with the currentcardano-nodeversion
next-node branch:
-
It may update the
cardano-nodeto a new major-version. In other words, it may use acardano-nodeversion which is incompatible with the current Cardano mainnet -
It may use a
cardano-walletversion which is incompatible with the currentcardano-nodeversion
Packages which depend on plutus-apps packages should use version ranges to control which version of those packages they build against.
-
Packages in
plutus-appswhich are used downstream should pin the major-version of each other (e.g.plutus-pab-1.0.1should depend onplutus-contract ^>= 1.0). -
Downstream packages should pin at least the first-major-version of
plutus-appspackages.-
Upgrading to a new second-major-version should always be safe for working on the current mainnet, with at most code breakage (following the PVP). Users may of course want to pin this version as well to avoid such breakage.
-
-
Downstream packages pulling in
plutus-appspackages viasource-repository-packagestanzas should always take tagged commits.
Issues can be filed in the GitHub Issue tracker.
However, note that this is pre-release software, so we will not usually be providing support.
See CONTRIBUTING, which describes our processes in more detail including development environments; and ARCHITECTURE, which describes the structure of the repository.
None of our libraries are on Hackage, unfortunately (many of our dependencies aren’t either). So for the time being, you need to:
-
Add
plutus-appsas asource-repository-packageto yourcabal.project. -
Copy the
source-repository-packagestanzas from ourcabal.projectto yours. -
Copy additional stanzas from our
cabal.projectas you need, e.g. you may need some of theallow-newerstanzas.
The plutus-starter project (deprecated) provides an example.