The thesis.
reqlan takes the verification camp’s diagnosis and applies it to the requirement graph that sits beside existing code, not to a new executable language. LLMs will keep rewriting the paragraph that was supposed to constrain a function. The compiler’s job is to catch the drift: every idea has a stable name, every edge to a file, a symbol, or a test is resolved, and a dangling reference fails reqlan check and the language server. The model does not have to get the neighbourhood right. The neighbourhood has to be checkable.
A dangling edge is a compile error. A rewritten paragraph is not.
The syntactic camp’s move is here too, as a secondary. An idea is a handle — session_refresh rather than a paragraph that will be rewritten the next time someone pastes a specification into chat — so each token has one job. What keeps reqlan out of that camp, and in verification, is the checker. The catalogue’s syntactic camp is defined by the absence of any mechanism for the compiler to catch what the model gets wrong. reqlan has one: unresolved edges fail closed.
The distinctive move is to keep implementation in the host language. TypeScript, Python, and the rest stay as they are. reqlan adds a graph those files can be hung from, and an index that an LSP, a CLI, and an MCP server all read. Agents author .rq and then author ordinary code against it. They do not have to ingest a specs/ folder to find the rule that still matters.
What it looks like.
session_refresh { refresh tokens rotate on use implemented in ["./src/auth/session.ts".rotateRefresh] proven by ["./src/auth/session.test.ts:rejects reused refresh token"] @status in-progress @tags (auth, security) }
A named idea with edges to a symbol and a named test. Dangling targets fail reqlan check and show up in the editor.
One-liner ideas omit the braces. Wiki-links ([session_refresh]) and file references share the same bracket form. Host-language comments can pin a line back to an idea with rq:[...]. Attributes (@status, @tags, @todo) are part of the graph, not YAML sidecar files. The grammar is Langium; the analytical core that walks the graph is Rust, distributed as native host packages.
Distinctive moves.
- Checkable references, not proofs.
reqlan checkresolves idea, file, symbol, and test edges. A proven-by clause is a named binding, not a discharged obligation. The checker will tell you the test no longer exists; it will not tell you the test still means what the idea says. That is the honest ceiling: mechanically checkable, not SMT. - Names as handles. The syntactic touch is the unit itself.
session_refreshis one token with one job, not a paragraph of specification prose. Agents author the handle; the checker keeps it from drifting off the code it points at. - One index, three surfaces. The VS Code / Cursor extension, the CLI, and the MCP server read the same graph. MCP tools include search, list, and file-context queries so a coding agent can pull a neighbourhood by hop distance.
- Sit beside existing code.
.rqfiles are committed next to the implementation. There is no lowering to a new runtime and no specialist-agent pipeline. The project does not replace industrial RM tools or markdown process kits, and it is not a qualified requirements-management tool.
Maturity.
The public repository dates from June 2026. A Langium grammar, editor extension with an LSP, CLI, native Rust core, MCP server, and HTML export all ship. Parse and check run on a workspace marker directory; broken references come back as diagnostics.
It is not a general-purpose programming language or a theorem prover. The file extension collides with an existing RDF query language. The graph is only as good as the edges people keep drawing.
Agent tooling.
The MCP server queries the same index the editor uses. The CLI emits JSON for analyse, check, search, and click. The language server offers go-to-definition on idea names, diagnostics on dangling edges, and rq: comment references in TypeScript, Python, and Markdown. There is no compiler-bundled SKILL.md of the kind Vow ships; the MCP tools and JSON CLI are the structured interface.
- IntentverificationClosest design relative. Same diagnosis that named natural-language goals should resolve to checkable artefacts. Intent compiles those goals to Rust, JavaScript, and WebAssembly and discharges contracts with Z3. reqlan leaves the implementation in the host language and only checks that the graph edges still exist.
- VeraverificationSame camp slogan, different discharge. Vera's thesis is that the model does not need to be right, it needs to be checkable, and Z3 plus runtime guards do the catching. reqlan takes that diagnosis to the requirement graph beside existing code: a dangling idea, file, symbol, or test edge is a diagnostic, not an SMT obligation.
- TacitsyntacticCross-camp foil on names. Tacit treats names as a source of model error (De Bruijn indices, BLAKE3-addressed definitions, display names as sidecar). reqlan treats the name as the feature: session_refresh is the stable handle an agent authors and the checker resolves. That is the syntactic touch; the checker is what keeps it in verification.
- SpecunclassifiedNear-neighbours on the word spec, different artefacts. Spec is a draft multi-agent IR with a browser POC and specialist roles. reqlan is a working .rq language checked into the application repo, with no specialist-agent pipeline.
- MarshaorchestrationMarsha treats English plus examples as a source the LLM compiles away into Python. reqlan is not compiled away: the .rq graph remains the artefact agents read, and the checker enforces it.