Grasm v1.0.0 Get started

More

Roadmap

Four workstreams toward a first release, running alongside the defect loop rather than instead of it.

1. This site

In progress — you are reading it. The playground now runs programs in the page, on the wasm module wasmtest compares against a fresh build of the compiler — which is a gate, so that module is only as current as the last time anybody ran it. It has been wrong twice: the copy this site serves was five days behind the committed one, and the committed one was then nine days behind the compiler, so every page under ProjectGold/ was running an older language than the pages describing it. Both found by checking rather than by noticing. The tutorial and library reference are the documents themselves, rendered when the site is written rather than summarised here.

2. Speed

0.965× of native Rust against a 0.95× target, computed by scripts/bench.sh from the numbers it prints, so the goal is met and the suite still has a worst row at 0.51×: tree. On 2026-10-15 that row was measured apart rather than reasoned about, and the answer moved. The deficit is the walk, not the building: a traversal over a tree built outside the timed loop reads the same ratio. Allocation is not it — interposing malloc counts 206,721 calls and 13.2 MB against Rust's 196,852 and 18.9 MB, so Grasm allocates no more often and fewer bytes. The box per node is not it either: the same traversal written in C with the words inline, with a box between them, and with a header before them all measure within 0.01 ns of each other. What is left is 3.68 ns a node against C's 1.63 for identical work, and it is in the emitted code — an accumulator loop comes out seven instructions of which four are avoidable. The earlier reading on this page, that storing nodes inline measured 1.33× slower, described the build path, which the profile puts at 28 samples of 4,131. Binary size is no longer on this list: 85.7 KB against a 300 KB target. What is left, in order: the release path, the atomic reference count every boxed value carries because a parallel body may hold one, and borrowed string views, which is what the etl benchmark loses 3.6× to.

3. Packages and libraries

The mechanism is built: manifests, resolution, lockfiles, path and local registry dependencies, and the capability ceiling. 660 libraries are written, all of them inside this repository. What is missing is a remote registry — nothing fetches and nothing publishes, so nobody else can write the next one.

This table used to list six libraries as not started — testing, log, time, uuid, base64 and regex. All six exist. What it tracks now is the shape of the set rather than a checklist of names:

AreaState
http — server and clientBuilt. packages/http parses and routes and declares no capability; http_server owns the socket; http_client's demo talks to http_server over a real one. There is http2frame, http2client and https_client besides.
jsonBuilt, and so are jsonschema, jsonpath, jsonpatch, jsonpointer and jsonmergepatch. All declare no capability.
ConcurrencyIn the language rather than a library. Channels, concurrent/go, actors and chan_select are in, 1,000,000 tasks run in 22 s on a compiled build, and net_wait holds many connections on one thread. A task still refuses every effect, which is the half of G6 that is open, and there is no timer library above any of it.
Everything else660 libraries, the six that were listed as missing among them. See Packages.
A registryThe one that matters, and it is not built. Nothing fetches and nothing publishes, so every library here had to be written here — which is also why there are 660 of them.

The comparison to hyper, axum, tokio, gin and fiber is a comparison against years of work by thousands of people, and a count does not close it: these are 660 libraries with one set of eyes on them and no production use behind any of them. The honest target for a first release is the packaging to publish them — so that the next one can be written by somebody else.

4. Is the compiler ready

Yes, with the limits on the status page stated rather than glossed. Four engines agree; the list of shapes the native backend cannot compile is one entry long and permanent.

The bar for calling it finished

Zero known defects, every gate green, and two consecutive independent review rounds finding nothing new — each conducted by someone who has seen only the language pack, not this repository's history. Those rounds have not run. Until they do, the claim is not available, and no number of green gates substitutes for it.