Skip to content
A more elegant language for a more civilized age.
Haskell Agda Rust Idris Common Lisp Shell Other
Branch: develop
Clone or download

README.md

Juvix

Tardigrade
(Aditya via Wikimedia Commons, CC-BY-SA 3.0)

GitHub Build status GitHub issues

Overview

Juvix synthesizes a high-level frontend syntax, dependent-linearly-typed core language, and low-level parallelisable optimally-reducing execution model into a single unified stack for writing formally verifiable, efficiently executable smart contracts which can be deployed to a variety of distributed ledgers.

Juvix's compiler architecture is purpose-built from the ground up for the particular requirements and economic trade-offs of the smart contract use case — it prioritises behavioural verifiability, semantic precision, and output code efficiency over compilation speed, syntactical familiarity, and backwards compatibility with existing blockchain virtual machines.

Please note: the frontend language is not yet implemented as we are still working out some details of the type theory & compiler transformations. Juvix may end up supporting an existing frontend language (or more than one).

For details, see the language reference.

Caveats

This is pre-alpha software released for experimentation & research purposes only.

Do not expect API stability. Expect bugs. Expect divergence from canonical protocol implementations.

Formal verification of various properties of the Juvix language & compiler in Agda is in progress but not yet complete.

No warranty is provided or implied.

Juvix is presently executed by a resource-tracing interpreter.

Backends for the EVM, WASM, Michelson, and LLVM are planned but not yet implemented.

Contributing

See CONTRIBUTING.md.

Installation

Install with (Stack and z3 required):

make

For full optimizations (but slower compile times):

make build-opt

Usage

Juvix is not yet production-ready; however, you can play around with some functionality in an interactive REPL:

juvix interactive

Development

To open a REPL with the library scoped:

make repl-lib

To open a REPL with the executable scoped:

make repl-exe
You can’t perform that action at this time.