Project

Aiken

Aiken is a modern and accessible programming language, specifically created to both simplify and enhance the development of smart contracts on Cardano. It comes in an easy to learn syntax, designed for effortless integration with other tools and languages, plus includes various state-of-the-art features that meet the current expectations of developers.

Goal

Foster growth in the Cardano ecosystem.

In true Open Source fashion, Aiken arose from the dedicated efforts of various individuals. After the original kickoff with the support of TxPipe on the foundational tooling, the Cardano Foundation helped in materialising the ideas behind a smart contract programming language. Both saw the potential of Aiken and how it could foster growth in the Cardano ecosystem. Over the course of its development, Aiken has rapidly grown to become one of the most loved frameworks for building smart-contracts on Cardano with many of the largest dApps migrating to it.

While Aiken-the-language has been mostly stable for a while, its ecosystem of tools keeps evolving and reshaping to ensure the best developer experience possible to its users. This is only truly achievable as a collaborative effort, with more than 40 code contributors and even more contributors providing feedback and ideas constantly. So it is only natural for Aiken to become one of the first projects hosted under PRAGMA as it already embodies the very core principles behind PRAGMA.

Maintainers
Roadmap

Recently

Important milestone recently completed.

Workspaces

Straightforward support for workspaces via a members property in the root aiken.toml file. Glob patterns are supported.

Read more
Types as Namespaces

Introduces support for using types as namespaces to access constructors in patterns and value construction. This simplifies the import management; especially for types with many constructors where it can get quite cumbersome having to import each constructor independently.

Read more
Benchmarks

A new bench command and language keyword. The command is very similar to aiken check, and will collect and run benchmarks found across the codebase. A bench is a new type of test that takes in a Sampler. A Sampler is a scaled Fuzzer which receive a monotically increasing size as parameter. This allows fine-grained control over generated values.

Read more

Currently

Items currently being worked on.

New LSP quickfixes

A variety of new automatic LSP quickfixes to cover warnings and errors such as "unexpected type holes", "unused private constant" or "unused private function".

Read more
Replaying Transaction with Custom Script

Allows users to re-run an existing transaction while overridding specific scripts (to introduce traces, for example) without altering the transaction CBOR. This comes as an extra troubleshooting mechanism when something goes wrong in production.

Read more

Next

Upcoming steps already planned for development.

Zero-Knowledge support

Make Aiken capable of producing arithmetic circuits for zero-knowledge proving. Various ideas are being explored, mostly relying on the existing tooling around RISC-V and WebAssembly.

Read more

Under discussion

Discussions and design under consideration.

Uses of Case and Constr in Aiken
Read more
Test assertion for cpu and memory budget
Read more
Add support for "deprecation" declarations
Read more
Custom encodings for structs/records
Read more
Getting started

Explore and contribute.

Quarterly reports

Follow along