A typed workflow language with capability-gated side effects.
Compiles to a verified artifact. Runs one recorded step at a time. Calls only what the host has granted. Below, the real compiler and runtime in Wasm.
import core from "grapheme/core" struct Release { service: String step: Float status: String} glyph Main { Rollout } query Rollout on Any -> Release { Release { service: "checkout", step: 0.0, status: "ramping" } |> Ramp} iterator Ramp on Release -> Release @core_default @loop(max: 10, merge: "replace") { match $state.status { case complete => return default => Advance }} mutation Advance on Release -> Release @core_default { inc_field(field: "step") |> if $state.step >= 3.0 then set { status: "complete" } else set { status: "ramping" }}loading runtime
final state
{
"service": "checkout",
"status": "complete",
"step": 3
}Fails closed
Call a module the host didn't grant, and the run stops there.
This host grants only the Wasm stdlib. http.get compiles, then is refused at
step 01.
import http from "grapheme/http" query NeedsHttp { http.get(url: "https://example.com")}ready
final state
capability 'http.get' is outside the Wasm stdlib profile; host must provide grapheme.runtime.host.v1::call.capability
Next: change release.gr and run it.
Open the playground CLI: cargo install --git https://github.com/entasislabs/grapheme.git grapheme-cli --bin grapheme Quickstart →