APIWEBADMAPP

Platform statusAll monitored systems operational.

A standalone typed authoring language

Author the web in a language that can't break.

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.

@stretchgroup/quirequire.quire
home.quire
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    }  }}
yoursite.com /
section hero

The web, authored in a language that can't break.

site.tagline, typed and resolved at compile time.

Get started

One model, two views — edit the code or the builder and the other stays in sync.

Why Quire

A page should be a program, not a guess.

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.

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.

Two views of one model

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.

Owns its block IR

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.

The Liquid / Handlebars successor

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

Read it once, and it reads like the 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 expects
  • section hero { … }a typed block that nests text and a button
  • value site.taglinea reference checked against the model
  • action site.signuptyped actions, not stringly-typed handlers
home.quire
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    }  }}

Get started

Install Quire and author your first page.

Quire ships on npm as a single package that provides the quire CLI. Source files end in .quire.

Install the package

npm install @stretchgroup/quire
verifyquire --version

Build a page with the CLI

quire build home.quire

Prefer to vendor it? Pull the packed tarball quire-latest.tgz from the downloads page.

Package@stretchgroup/quire
CLIquire
Source filesend in .quire

Read the docs, then pull the package.

The full reference covers the model, blocks, typed fields, and the block IR. Install from npm or download the hosted tarball.