scrml.dev v0.8.0
scrml — a full-stack language for the browser

scrml is a language in active development.

A full-stack language for the browser. Multi-page apps, real-time channels, SQL-as-syntax, state machines as first-class. One file format. The compiler owns the wiring.

What works today

  • v0.8.0 is the current release, tagged 2026-09-26. It is the stable floor of the working compiler (written in TypeScript) and carries three months of fixes and additions on top of v0.7.1 — the full list is in the changelog.
  • v0.4.0 – v0.6.0 added generation from types — <formFor for=StructType/> builds a form, its state cell, its validity surface and its submit path; schemaFor(StructType) inside a <schema> builds the SQL DDL, and enum fields carry their variants across the database boundary. The same arc expanded the built-in Tailwind surface.
  • v0.3.0 shipped content-addressed output and <auth role> gates. Be precise about what <auth> does: it decides which client code mounts for which role. It is not content secrecy — the gated HTML is still sent to every viewer, so anything secret belongs on the server. Per-role JavaScript chunks exist but are opt-in (scrml compile --emit-per-route).
  • v0.2.x laid the foundational reactive surface: V5-strict state, validators, the auto-synthesized validity surface, and the pattern-matching ladder.
  • Engines are the UI centerpiece. Markup is a first-class value type (a stated pillar of the spec, not a library trick). The server boundary disappears.
  • The reference in these docs is fully written — 73 of 73 pages across elements, keywords, contexts and error codes, with no stubs.

What's pending

  • A second compiler, written in scrml itself, is being built as a bootstrap in the compiler repo (compiler/self-host-v2/). Its first slices parse, analyze and lower real programs. It is not yet a compiler you can use.
  • The next language model — declarations, instances and value contracts (SPEC §66) — is written into the specification but is not in the shipping compiler. The bootstrap compiler is where it is being built.
  • Several decided changes are not built yet: conditions that must be a boolean or a presence test (no JavaScript-style truthiness), a decimal number type, and arithmetic operators restricted to numbers. Until they ship, the compiler behaves as it does today.
  • Depth, not coverage, in these docs. Every reference page is written; not every one of them is yet written to the depth MDN sets as the bar.

Adoption framing — honest

scrml has near-zero adoption right now. That's a known state, not a problem we're papering over. LLMs have broken the historical friction-tipping dynamic in language adoption: developers who would have switched stacks in 2018 due to framework friction now use the same stacks with LLM assistance and tolerate the rough edges. The motivation to adopt a new language has waned.

scrml's bet is that it makes LLMs more efficient too — the same compiler-owned wiring that the developer doesn't have to think about is wiring the LLM doesn't have to think about. But until the language is serious and complete enough to be un-ignorable, adoption is not the expected outcome of this decade's pattern. We're building anyway.

If that framing resonates — build something with it. If it doesn't — the existing stacks are fine and we don't begrudge anyone who stays put.