= https://github.com/input-output-hk/plutus-apps[The Plutus Application Framework] :email: plutus@iohk.io :author: Input Output HK Limited :toc: left :reproducible:
= Maintenance mode
As our team is focused on other projects and the monorepo approach of this repository made it hard to maintain, we have decided to stop upgrading the content of this directory and to pass it in maintenance mode.
Note that this decision doesn't impact at all https://github.com/input-output-hk/plutus[Plutus] the core language of Cardano, nor https://github.com/input-output-hk/plutus/tree/master/plutus-tx[Plutus-tx] the Haskell dialect to write Plutus contract. Both are still actively developed.
Parts of this repository will probably been spinned-out into their own project, as we have done with the https://github.com/input-output-hk/cardano-node-emulator[Cardano-node-emulator], which gives you access to an emulated node that follows the same validation rule as a real node, or https://github.com/input-output-hk/marconi[Marconi], a library to define and run custom indexers.
What is maintenance mode? In maintenance mode, no new feature will be actively developed by the team and we won't upgrade the existing dependencies. We'll welcome PR and we will review them though and we will do minor bug fixes.
== Introduction
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 <
This repository contains:
The rest of this README is focussed on people who want to develop or contribute to the Framework.
== Development
[[how-to-develop]] === How to develop and contribute to the project
Run nix develop
to enter the development shell and you will be presented with a list of available commands.
*Please see link:CONTRIBUTING{outfilesuffix}[CONTRIBUTING] for comprehensive documentation on how to contribute to the project, including development and submitting changes
== Documentation
=== User documentation
The main documentation is located https://plutus-apps.readthedocs.io/en/latest/[here].
The generated Haskell API documentation (haddocks) are here: https://input-output-hk.github.io/plutus-apps/main/.
=== Talks
=== Specifications and design
== Branching, Versioning and Releases
There are two protected development branches in plutus-apps
: main
and next-node
.
We adopt the PVP versioning scheme.
Check out link:doc/BRANCHING-AND-RELEASE.adoc[Branching Policy and Release Process] to learn more.
=== Dependency update
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:
plutus
as the one used by the plutus
dependency of cardano-node
plutus
: at worst this will lead to some code breakage.cardano-ledger
, ouroboros-network
, etc.) with cardano-node
cardano-node
for all packagesplutus
for all packagesmain
branch:
cardano-node
to a new major-version. In other words, it should use a cardano-node
version which is compatible with the current Cardano mainnetcardano-wallet
version which is compatible with the current cardano-node
versionnext-node
branch:
cardano-node
to a new major-version. In other words, it may use a cardano-node
version which is incompatible with the current Cardano mainnetcardano-wallet
version which is incompatible with the current cardano-node
version=== Version ranges
Packages which depend on plutus-apps
packages should use version ranges to control which version of those packages they build against.
plutus-apps
which are used downstream should pin the major-version of each other (e.g. plutus-pab-1.0.1
should depend on plutus-contract ^>= 1.0
).plutus-apps
packages.
** 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.plutus-apps
packages via source-repository-package
stanzas should always take tagged commits.== Working with the project
=== How to submit an issue
Issues can be filed in the https://github.com/input-output-hk/plutus-apps/issues[GitHub Issue tracker].
However, note that this is pre-release software, so we will not usually be providing support.
[[how-to-develop]] === How to develop and contribute to the project
See link:CONTRIBUTING{outfilesuffix}[CONTRIBUTING], which describes our processes in more detail including development environments; and link:ARCHITECTURE{outfilesuffix}[ARCHITECTURE], which describes the structure of the repository.
=== How to depend on the project from another Haskell project
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-apps
as a source-repository-package
to your cabal.project
.
. Copy the source-repository-package
stanzas from our cabal.project
to yours.
. Copy additional stanzas from our cabal.project
as you need, e.g. you may need some of the allow-newer
stanzas.
The https://github.com/input-output-hk/plutus-starter[plutus-starter] project (deprecated) provides an example.
== Licensing
You are free to copy, modify, and distribute the Plutus Platform with under the terms of the Apache 2.0 license. See the link:./LICENSE[LICENSE] and link:./NOTICE[NOTICE] files for details.