mezzeInstall

Write what the program does.
The types keep up.

Every function tells you what it touches, files, network, failure, and you never annotate one. Full type safety, performance of GraalVM.

Runs in your browser. Nothing to install to try it.

use std::effects::log::{ Console, println }
use std::effects::http::{ HttpClient, MockHttpClient, mock_get, request }

# weather says <Http> in its type. It never says which client answers,
# so the caller below picks that, not weather.
let weather = { url } -> request { url }.send {}.text_or { def = "offline" }

let main = {} -> perform Console in do
  let url = "https://wttr.in/Amsterdam?format=3"

  # The real client. This one goes over the network.
  perform HttpClient in println { msg = weather { url } }

  # Same function, same url, no network at all.
  let rules = [mock_get { body = "Amsterdam: Always raining", url = "*" }]
  perform MockHttpClient { rules } in println { msg = weather { url } }
Press Run.

Write like a dynamic language, get a strict one

Full inference across the whole program. Annotate a signature where it helps someone reading it, never to satisfy the compiler.

Swap out the side effects when you need to

The same function runs against the real filesystem or an in-memory one, a live clock or a frozen one. Tests get a different handler, not different code.

Structured concurrency, built on Loom

Millions of virtual threads, spawning a new one is cheap. Software Transactional Memory, Atoms, Channels, Cancellation all built to work together.

Competitively fast on GraalVM

Optimised data structures, loop fusion, and safe mutation effect. AOT native binaries when you want them.

First-class continuations

Async, exceptions, and early return are ordinary functions here, not syntax language had to grow. Write your own control flow and it looks like everyone else's.

A few small pieces, reused everywhere

Records at core, arguments are just records, so every call names its fields. Effects are records of functions and so are Abilities. Learn record, variant, effect, ability, and you have the language covered.

Keep the libraries you already haveTBD

Mezze runs on GraalVM, so calling the Java, Kotlin, Python, and Javascript code you already have is the plan. Designed, not yet shipped.

Distributed computingTBD

Durable workflows and distributed execution, built on the same effect system. Designed, not yet shipped.