A programming language. Facets, schemes, and IO are the three compositional units.
It's very early — single-author, the spec is a living draft, and only a slice of the language runs end-to-end so far. Anything in here can change.
Requires Rust with edition 2024 support.
cargo run -p urchin-cli -- run examples/agent.urchin --ticks 5 \
| cargo run -p urchin-cli -- watch
Or install the binary once and shorten the call:
cargo install --path crates/cli
urchin run examples/agent.urchin --ticks 5 | urchin watch
urchin run emits one NDJSON event per line; urchin watch is a small pretty-printer on top.
io clock {
/// _events
tick(at: timestamp)
/// _config
rate = 60
}
facet photographer {
/// _state
shotsTaken = 0
/// _handlers
on tick -> int {
shotsTaken = shotsTaken ~> shotsTaken + 1
shotsTaken
}
}
examples/agent.urchin is the canonical seed example; the others in examples/ are sketches.
crates/parser— lexer + parser, produces the ASTcrates/types— type representations (stub)crates/runtime— interpreter, emits an NDJSON event streamcrates/cli— theurchinbinary:parse,format,check,run,watch
SPEC.md— the language spec. Authoritative; sections are marked draft / sketch / TBD.DIRECTION.md— the vision document. Predates the May 2026 rename fromrole/actor/commstofacet/scheme/io; kept for context but the spec wins where they conflict.TODO.md— near-term punch list.
MIT. © 2026 Alice Ott.