Source

Twelve top-level constructs cover a production backend; LL(1) grammar and prefix-only expressions ship per-state logit masks for constrained decoding.

Camp: Syntactic
Also spans: Verification
Author: Vladimir Melnic
Implementation language: Rust
Compilation target: Native artefacts (SQL DDL, Rust/axum server, TypeScript and Rust client SDKs, OpenAPI, GraphQL); also interpreted directly from the AST via axum + sqlx
Licence: Unknown
First seen: May 2026
Maturity: working compiler

Agent tooling:
- CLAUDE.md
- axis --constrain (grammar state machine as JSON)
- axis --logit-masks (per-state binary masks over the Axis token vocabulary)
- axis --completions (parser state and valid next tokens at cursor)
- axis --lsp (language server over stdio)

Key idea

Axis targets small LLMs (1B/3B/7B) explicitly. The bet is that a backend authored in twelve constructs (SHAPE, SOURCE, REALM, FLOW, SAGA, SURFACE, POLICY, SERVICE, MIGRATE, STREAM, FUNC, STORAGE) with an LL(1) grammar and prefix-only expressions fails less than free-form framework code. The compiler ships grammar-aware logit masks as JSON; the same source either compiles to SQL / OpenAPI / TypeScript / Rust artefacts, or is served directly from the AST by axum + sqlx against Postgres, MySQL, or SQLite.

Thesis

Axis names a different bet from the rest of the syntactic camp. Most catalogue entries target "LLMs" generically and assume the model has enough context and capability to navigate a large surface. Axis targets the smallest practical agents explicitly — the v0.2 spec declares "target authors: 1B, 3B, 7B parameter models with 2K–32K context windows" — and constrains the surface accordingly. Twelve top-level keywords (SHAPE, SOURCE, REALM, FLOW, SAGA, SURFACE, POLICY, SERVICE, MIGRATE, STREAM, FUNC, STORAGE) cover a production backend; the grammar is LL(1) with one token of lookahead and no backtracking; expressions are prefix-only (FILTER id EQ path.id, never id == path.id); the "one operation per binding" principle forbids compound expressions.

Axis is not a better Python. It is the negation of human-centric programming.

The distinctive move is constrained decoding shipped as toolchain output. axis --constrain exports the parser as a state machine in JSON; axis --logit-masks exports a per-state binary mask over the Axis token vocabulary. The implementation in src/editor/constrain.rs enumerates 41 parse states (TopLevel, ShapeBody, FlowBodyField, FilterClause, …) and emits the allowed token set for each. A host harness maps these masks onto an LLM tokeniser at decode time; the model can then only emit syntactically valid Axis. Most agent-targeted languages assume free generation followed by verification; Axis tries to make syntactic invalidity unreachable at generation time. Mog reaches a comparable surface bound from the spec direction (3,200 tokens fits the language); Axis reaches it from the grammar direction and adds the masks.

What it looks like.

SHAPE Todo
  id UUID PK AUTO
  title STRING 200 REQUIRED
  completed BOOL DEFAULT false

SOURCE todos POSTGRES
SHAPE Todo
INDEX completed

REALM api
CAPABILITY read todos
CAPABILITY write todos

FLOW get_todo get /todos/:id
REALM api
LET todo
FETCH todos
FILTER id EQ path.id
OR 404
RETURN 200 todo

Indentation is significant (2 spaces, tabs illegal). Operators are prefix tokens: EQ, not ==. The OR 404 clause makes the missing-row case a parse-level concern rather than a runtime if.

Distinctive moves.

Maturity.

A single initial commit on 24 May 2026 dropped the entire project as a working Rust workspace: compiler front-end (lexer, parser, link, verify, plan), codegen backends for SQL, Rust/axum, WASM stubs, and client SDKs, generators for OpenAPI, TypeScript, GraphQL, Kubernetes manifests, migrations, and test suites, plus a stdio LSP, a VS Code extension, and a 73 KB specification (docs/axis-spec.md v0.2). Cargo metadata reports version = "0.1.0" against Rust 1.85 (edition 2024). The repository ships three working projects: todolist/ (CRUD proof, 20/20 integration tests), advanced/ (auth, tenants, guards, rules, funcs, MATCH, TRY/RECOVER, rate limiting, caching, surfaces — 32/32 tests), and helperbook/ (a client-provider marketplace with Postgres, Redis, Meilisearch, Prometheus, and Grafana wired through Docker Compose, "zero application source code" outside .axis files).

3 stars, 0 forks, 0 open issues at time of cataloguing; no GitHub releases tagged. The repository does not ship a LICENSE file and the GitHub API reports the licence field as null; the Cargo.toml manifest declares license = "MIT", but the absence of a top-level licence file leaves the question open until the author resolves it. The bet is the one named in the spec's framing sentence ("the negation of human-centric programming") — that a domain-specific surface drawn tight enough for a 1B model to navigate, plus grammar-aware decoding to keep it on rails, will outperform a general-purpose language plus a frontier model. No catalogue entry has previously shipped grammar-aware logit masks; integration with a downstream decoder is the next milestone to watch for.

Agent tooling.

CLAUDE.md (7.5 KB) targets agents writing the Axis compiler itself, not agents writing in Axis: it names the build commands, maps the repository module by module, names canonical AST field names to head off guessing ("TypeExpr — not FieldType, not ScalarType"), and states the two pipelines explicitly. No AGENTS.md, no SKILL.md, no MCP server, no llms.txt. The surface for authoring Axis is the constrained-decoding pipeline: axis --constrain for the grammar state machine, axis --logit-masks for the per-state vocabulary masks, axis --completions for parser state and valid next tokens at a cursor position, and axis --lsp for editor integration. Compile-mode outputs (--plan, --openapi, --testgen, …) emit structured JSON for downstream agents to consume.

Design DNA


Tags: ai   language   syntactic   verification   native  

Last modified 15 June 2026