Open-source project
IntersectMBO/plutus avatar
IntersectMBO/plutus

IntersectMBO Plutus: Haskell Smart Contracts on Cardano

The Plutus language implementation and tools

1,633 stars507 forksHaskellApache-2.0

At a glance

What is it?
Plutus is the Haskell implementation and compiler toolchain for Plutus Core, the scripting language embedded in the Cardano ledger. It suits developers who need the language implementation, specifications, metatheory, and a Haskell-based route to Cardano applications.
Who is it for?
Adopt Plutus when the requirement is a Haskell-based implementation of Cardano's embedded scripting language and the team can work through Nix, Cabal, and CHaP. Do not treat it as a general-purpose smart-contract SDK with a documented one-command deployment flow.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly Haskell, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.

Editorial analysis

Plutus Core and the Cardano Contract Development Path

Plutus addresses a specific smart-contract problem: how developers define and compile logic for execution in the Cardano ledger. The README identifies Plutus Core as the scripting language embedded in that ledger, and calls it the basis of the Plutus Platform for distributed applications on Cardano. The repository is therefore aimed at developers working at the language, compiler, ledger-integration, or application-framework boundary. It is not described as a general blockchain node or as a standalone contract deployment service.

The repository contains the implementation of Plutus Core, its specification, and a mechanized metatheory. It also contains Plutus Tx, described as the compiler from Haskell to Plutus Core. That division matters. Plutus Core is the target language understood by the ledger, while Plutus Tx gives Haskell developers a source-language path into that target. The repository also includes directories for ledger APIs, executables, conformance work, benchmarks, the compiler plugin, and documentation.

The intended users can be split by role. Language and compiler contributors need the Haskell source, specifications, development environment, tests, and contribution workflow. Application developers need the user documentation and published Haskell packages rather than an informal copy of the repository. The README points people who want to use the project to separate user documentation, which is hosted at the Plutus documentation site, while contributors are directed to `CONTRIBUTING.adoc`.

From Haskell Through Plutus Tx to Plutus Core

The documented compilation path is short at a conceptual level. Plutus Tx compiles Haskell into Plutus Core. The resulting Core code is the language associated with scripting in the Cardano ledger. The repository layout backs up this distinction: `plutus-core/` holds the Core side of the project, while `plutus-tx/` and `plutus-tx-plugin/` contain the Haskell-oriented compiler components. `plutus-ledger-api/` is the repository area associated with the ledger-facing API, while `plutus-executables/` contains executable tooling.

The repository also publishes libraries through CHaP, the Cardano Haskell Packages repository. Once CHaP is configured in a consuming Haskell project, the README says that Cabal should be able to find the `plutus` packages as normal dependencies. This makes Plutus Core and related libraries available through the Haskell package workflow instead of requiring an application to compile the entire repository first.

The formal documentation is an important part of the project, not an afterthought. The README links to a Plutus Core Specification, a draft Plutus Technical Report, documentation for the Extended UTXO model, and metatheory documentation. It also lists academic work on compilation strategies, System F in Agda, EUTXO, multi-asset support, and translation certification for compiler passes. Those references describe the language and compiler as research-backed components, but they do not replace the user documentation for application integration. The README does not provide a complete Haskell program, transaction-building sequence, or deployment recipe, so the exact application API must be checked in the linked documentation.

Nix Development Shell and Haskell Package Consumption

For contributors, the README gives one direct development entry point. `nix develop` enters the development shell and presents a list of available commands. This is the clearest setup instruction in the repository text. It is a development environment entry point, not a claim that the project has a conventional installer. The README does not specify operating-system support, prerequisites outside Nix, or a command for a particular sample contract.

Start by entering the shell and reading the command list before running a build. The repository delegates detailed contribution and submission instructions to `CONTRIBUTING.adoc`.

bash
nix develop

The expected result is a shell with project commands available. The repository does not document the names or outputs of those commands, so this step alone should not be treated as a contract compilation result.

For a separate Haskell project, the README says to configure CHaP first and then depend on the published `plutus` packages as normal. Cabal is the package-resolution mechanism named by the documentation. The README does not provide a concrete package list or version constraint, so a consumer should select packages from the CHaP index and the project's own dependency policy rather than invent a version here. That distinction also separates source contribution work from application adoption.

Core, Tx, Ledger API, and Metatheory Are Different Surfaces

The most likely integration mistake is treating the repository as if every directory represented one interchangeable package. The README distinguishes the implementation, specification, and mechanized metatheory of Plutus Core from Plutus Tx, the Haskell-to-Core compiler. The top-level layout adds `plutus-ledger-api/`, `plutus-conformance/`, and `plutus-executables/` adjacent to the language work. That separation suggests that ledger compatibility and conformance are distinct concerns from writing the source contract.

This structure is useful when an application team needs to know whether a problem belongs to contract logic, compilation, ledger interaction, or language semantics. It also creates an upgrade boundary. A change in Core can affect contracts and downstream consumers, while a change in the ledger API can affect the code that prepares or observes ledger actions. The README does not describe compatibility guarantees between releases, migration procedures, or version matrices. It therefore cannot support a claim that every recent release is drop-in compatible.

Plutus Core is also the lower-level alternative to Plutus Tx when the implementation route matters. A developer can work with Core as the ledger scripting language itself, or use the Haskell-oriented Plutus Tx compiler as the source path. The README gives no rationale for choosing one route for every application, and it does not document performance or development-cost trade-offs between them. The decision must be made against the user documentation and the specific ledger API version.

What the README Does Not Document

The strongest limitation here is missing operational detail, not a stated lack of project capability. The README does not document how to submit a transaction, connect to a Cardano node, choose network parameters, manage signing, or verify a deployed contract. Those actions may be covered by linked user documentation or other Cardano projects, but the repository text does not confirm them. An engineer cannot infer a deployment workflow merely from the presence of `plutus-executables/` or from the claim that Plutus supports distributed applications.

The documentation also does not provide a minimal contract example, expected compiler output, test fixture, error catalog, or compatibility table. `plutus-benchmark/` and `plutus-conformance/` show that benchmark and conformance areas exist in the repository, but the README does not state how to run them or what results to expect. It would be inappropriate to turn those directory names into performance claims.

For a tool selection, this matters. Plutus is a language implementation and compiler repository with substantial specification and research material. It is not presented as a one-stop UI, wallet, node operator, or transaction broadcaster. Teams that need those services must determine whether the separate documentation and platform components supply them. Teams that only need to author and compile ledger scripts may find the package and compiler structure more relevant than the surrounding application platform.

Maintenance, Releases, and Upgrade Burden

The repository is not archived, and its last push was on 2026-10-16. That is current activity according to the repository facts, although activity alone does not guarantee compatibility for a given package. The listed releases include 1.71.0.0 on 2026-09-30, 1.70.0.0 on 2026-09-29, and 1.69.0.0 on 2026-09-11. The sequence shows frequent version changes around these dates.

For users consuming published Haskell libraries, those releases can create an upgrade decision: pin a known package set or follow the project releases after checking the relevant APIs. The README does not define semantic versioning policy, supported release window, migration notes, or the relationship between repository versions and CHaP package versions. It also points to `CHANGELOG.md` and `RELEASE.adoc`, which are the appropriate repository files for checking release-specific changes, but their contents are not reproduced in the README.

The license is Apache 2.0, identified in the repository metadata and described in the README as allowing copying, modification, and distribution under its terms. `LICENSE.md` and `NOTICE.md` contain the project's licensing details. This review does not interpret those documents or provide legal advice. Users still need to inspect the license and notice files for their deployment and distribution context.

Editorial conclusion

Adopt Plutus when the requirement is a Haskell-based implementation of Cardano's embedded scripting language and the team can work through Nix, Cabal, and CHaP. Do not treat it as a general-purpose smart-contract SDK with a documented one-command deployment flow. Verify first that the user documentation, ledger API, compiler package, and target ledger interfaces match the release being integrated.

Frequently asked questions

What is Plutus used for in Cardano?

Plutus Core is the scripting language embedded in the Cardano ledger. Plutus Tx compiles Haskell into Plutus Core for use within the Plutus Platform's distributed application development model.

How do I start developing Plutus from the repository?

The README instructs contributors to run `nix develop` to enter the development shell. It then directs developers to `CONTRIBUTING.adoc` for comprehensive development and contribution instructions.

Can I use Plutus packages from another Haskell project?

Yes. The README says the `plutus` libraries are published through CHaP, the Cardano Haskell Packages repository. After configuring CHaP, Cabal should find the packages as normal dependencies.

Official sources

  1. IntersectMBO/plutus on GitHub
  2. Issues
  3. License: Apache-2.0
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/intersectmbo-plutus.svg)](https://hysenlabs.com/projects/intersectmbo-plutus)