Typed & safe by construction
Every section, text node, and field has a checked shape, and references like site.tagline are validated against a typed model. A broken page is a build error — Quire rejects bad pages before they ever publish.
Platform statusAll monitored systems operational.
Quire is a typed, compiled language for authoring web pages. It weaves content and typed blocks into a page, checks every reference against a real model, and compiles to a clean block IR — so a page is a verified program, not a string of fragile template tags.
quire HomePage { model { site: Site } route "/" title site.name section hero { text heading { value site.tagline variant "display" } button cta { label "Get started" action site.signup } }}The web, authored in a language that can't break.
site.tagline, typed and resolved at compile time.
Get startedOne model, two views — edit the code or the builder and the other stays in sync.
Why Quire
Quire brings the guarantees of a typed, compiled language to web authoring — and pairs them with a visual builder that edits the very same model.
Every section, text node, and field has a checked shape, and references like site.tagline are validated against a typed model. A broken page is a build error — Quire rejects bad pages before they ever publish.
Code and a visual builder are not a sync problem — they are the same model rendered two ways. Edit either side and the other stays in step, because both read and write the identical block tree.
Quire compiles to a clean, portable block IR it defines end to end. The page you author lowers into the exact structure the builder reads, so nothing is lost in translation between code and canvas.
Instead of interpolating untyped strings into fragile template tags, Quire treats a page as a checked program. It is a real successor to Liquid and Handlebars, not another templating dialect.
A real .quire page
A Quire page declares the typed model it expects, a route and title, and a tree of typed blocks. Every block carries checked fields, and every reference is resolved against the model before anything ships.
model { site: Site } — binds the typed data the page expectssection hero { … } — a typed block that nests text and a buttonvalue site.tagline — a reference checked against the modelaction site.signup — typed actions, not stringly-typed handlersquire HomePage { model { site: Site } route "/" title site.name section hero { text heading { value site.tagline variant "display" } button cta { label "Get started" action site.signup } }}Get started
Quire ships on npm as a single package that provides the quire CLI. Source files end in .quire.
Install the package
npm install @stretchgroup/quireverifyquire --versionBuild a page with the CLI
quire build home.quirePrefer to vendor it? Pull the packed tarball quire-latest.tgz from the downloads page.
The full reference covers the model, blocks, typed fields, and the block IR. Install from npm or download the hosted tarball.