More
A language built on twenty years of research.
Grasm is a systems language with an effect system, capability ceilings on packages, and tiered ownership without lifetime annotations. It is version 1.0.0, it has 660 libraries, and every one of them was written inside this repository.
The lineage
Every mechanism in Grasm has a research pedigree — a decade or two of papers and prototypes behind it, in languages most working programmers never get to use. Grasm is where they arrive together, in one toolchain, with gates that prove the combination holds.
| In Grasm | Where it came from |
|---|---|
let / inout / own, value semantics, no lifetimes |
Hylo (formerly Val) has let/inout/sink. Swift has exclusivity, ARC and copy-on-write. |
| Effect rows, inferred and unified | Koka — row-based effect types with inference. Also OCaml 5, Unison, Eff, Frank. |
| Capability ceiling per module | Austral — capability-secure, no ambient I/O. Wyvern, and the E language before it. |
| Reference counting with copy-on-write | Swift, Nim. |
| Generational references | The slotmap pattern, in every entity-component system. |
| A reference interpreter as the specification | WebAssembly set the precedent: a reference implementation that is the specification. |
The closest single comparison is Hylo plus Koka, tied to a manifest the way Austral does it — and that combination has never shipped as one language before. Each of those ideas is proven on its own; putting all of them in the same type system, and holding them there with 113 gates on every build, is the part that is new.
The honest edge
Version 1.0, built inside one repository. Everything above is real and gated; here is precisely where the edge of it sits today, so nobody finds out the hard way:
- The library set is young. 660 of them, every one written in Grasm and every one capability-declared — which is why they exist at all. Python has hundreds of thousands, and none of them can tell you what they reach for.
- Rust and Zig are still faster. 0.965× of Rust on the benchmark geomean — close, and not ahead. The numbers say exactly where, including the systems suite Grasm loses on time and wins on memory.
- You would be early. Nobody outside this repository has written Grasm yet.
- Native debugging is not there yet. The Debug Adapter Protocol server works against the interpreter. The Cranelift backend emits no DWARF, so GDB and LLDB cannot meaningfully inspect a compiled binary.
- Concurrency without async/await. Threads, channels, structured concurrency and non-blocking I/O on a single thread — 1,000,000 tasks in 22 s. A task refuses every effect, which is deliberate and which is also not yet the concurrency the plan asks for.
Who it is for
Anyone who treats an untrusted dependency reaching the network or the filesystem as a threat, and who wants the compiler to enforce that boundary rather than a sandbox at run time. Rust, Go, Zig and Python all leave that gap wide open. Closing it is the whole point of this language.
How it is built
254 normative clauses in 3,561 lines of specification, under a
hard ceiling — every addition since has been paid for by compressing prose
already written. 167 clauses are stable and will not change
incompatibly before 2.0; 26 are provisional and
65 are experimental. Version 1.0 promoted nothing: a
clause moves when it passes the five-part test, one at a time, on its own
evidence.
A count on this site — clauses, libraries, programs, gates — is computed from the repository as the page is written. A measurement is read out of the document that recorded it, so the page and the record cannot disagree and a record that changes shape fails the build rather than leaving a stale number here. If a gate has not run, the page says so rather than printing a figure nobody took. That is not a claim that nothing here is typed: a target, and a number quoted from a story about how something was found, are both typed, and both say where they came from.