Describe a website in short words; inlang compiles them into a pre-rendered, locked-down site — and the words are designed so an AI assistant can write them for you.
By Incord AI. The command is az and site
files end in .az.
inlang is for developers, small studios and agencies shipping client sites,
and founders building their own product site — very often with an AI
assistant doing the typing. When an assistant writes a site's code directly,
every run comes out different and nothing checks the result. inlang gives the
assistant a small vocabulary instead (hero center, faq list,
pricing cards), checks every line of it, and compiles it into tested
production code. The compiler itself has no AI in it and never calls the
network.
- Pre-rendered static pages with a strict Content-Security-Policy on every page.
- Colour first: 6 themes, each light and dark, with 9 accent hues and gradient pairs proven for contrast.
- 12 building blocks ("words"): nav, hero, text, feature, gallery, pricing, faq, cta, footer, auth, scene (3D), chat.
- An optional backend: accounts, social sign-in, data tables on SQLite, PostgreSQL or MySQL, and an admin area.
- An optional AI chat block that answers with your own components, charts and tables, with share links and operator data tools.
- Images resized at build into WebP widths, each
<img>with its width and height. - Checks built in:
az checkfor the file,az doctorfor the machine,az auditfor what a build ships. - Deterministic builds: the same file gives byte-identical output, every time.
az 1
site aurora
width default
theme midnight
accent violet
pattern glow
nav bar
link "Work" /work
page /
hero center
eyebrow "Limited run"
title "Built in the dark"
sub "Handmade. Forty pairs a month."
height peek
page /work
That is fixtures/minimal.az. It builds a two-page
site (/ and /work) in the dark midnight theme with a violet accent and a
soft glow behind the opening section. Both pages share a navigation bar with
a "Work" link. The home page opens with a centred headline, a small label
above it and a line of text below. Every page comes out as plain HTML with
its security policy, ready to put on any static host. az explain <term>
says what any word means in one line, for example az explain hero center.
Install. You need Node 22.18 or later and pnpm (corepack provides it).
git clone https://github.com/incordai/inlang.git && cd inlang
corepack enable pnpm
pnpm install --frozen-lockfile --ignore-scripts
alias az="node $(pwd)/packages/cli/bin/az.js"
az --helpAlways install with --ignore-scripts: nothing here needs install scripts,
and they are a common way for a dependency to attack a machine.
1. Choose the colour. Colour is the first decision, before any section.
az palette # writes a gallery page of every theme, hue, pair and pattern
az palette --list # the same choices in the terminal2. Write the file. Save the example above as site.az, then change the
words. docs/WORDS.md lists every word and its options.
3. Preview it.
az dev site.az # serves http://127.0.0.1:5173/ and reloads on every save4. Check and build.
az check site.az # diagnostics only, writes nothing: "az: no problems found"
az build site.az # writes the project to .az-build/
cd .az-build && npm install --ignore-scripts && npm run build # the site, in .az-build/dist/
cd .. && az audit # checks what the build ships: secrets, security policy, linksA mistake names the line, a stable code and the fix:
broken.az:4:15 error AZ1202 hero: 'center' and 'split' are both layouts — pick one
5. Deploy. .az-build/dist/ is plain static files: upload them to any
static file host. A site with a backend also builds a server/ folder to run
on Node 22; docs/self-hosting.md walks through it.
There is no az deploy command yet.
The full walkthrough, with every option, is docs/USAGE.md.
You write one .az file. The az compiler reads it, checks every word against
the word list and the theme, and writes an ordinary React + Vite project. That
project's build pre-renders every page. If the file declares a backend, the
compiler also writes the server beside the site. You never edit the generated
code; you change the .az file and rebuild (or az eject a word to own it).
site.az ──> az compiler ──> .az-build/ React + Vite project ──> dist/ static site
(checks, └─ server/ optional backend (accounts, data, chat)
no network) └─ AZ.md a map of the project for people and AI tools
az promptprints the instructions any AI model needs to write.az: the order (colour first), the syntax, every word and its options, and the common errors with their fixes. It is generated from the compiler's own tables, and every example in it compiles. Paste it into the assistant's instructions;--compactgives a short version.az mcpserves the compiler to an assistant as tools (MCP over stdio): look up words, check a file, build it. Setup: docs/mcp.md.AZ.md, written into every generated project, maps each page and block to its file and says where to change things.- docs/WORDS.md lists every word, variant and key.
- Fewer tokens: on the median of the repository's sites, the same site
takes about 1.5× the
.azfile's tokens as a component-tree JSON and about 9× as pre-rendered HTML (token benchmark).
More detail: docs/USAGE.md §6.
| Topic | Guide | Reference |
|---|---|---|
| Words (building blocks) | WORDS.md | GRAMMAR, one docs/<word>-block-spec.md per word |
| Themes and colour | USAGE §3 | theme-spec |
| Backend and data | USAGE §4, self-hosting, managed cloud setup | backend-spec, data-spec |
| Sign-in | USAGE §4 | auth-block-spec |
| AI chat | chat README | chat-block-spec (§19: what is built) |
| Images | gallery-block-spec §7 | hero-block-spec |
| Security | USAGE §5 | security scanning, word-quality-gate |
| Testing | VERIFICATION §1.1 | VERIFICATION |
| AI assistants | USAGE §6 | mcp, token benchmark |
| Every other doc | USAGE §7 | ARCHITECTURE, PRD |
| Command | Purpose |
|---|---|
az build <file.az> [--out dir] |
compile to a runnable project (default .az-build) |
az dev <file.az> [--port N] [--open] [--no-serve] |
build, serve and reload on every save; a site with a backend runs it locally too |
az spec <file.az> |
print the resolved Spec as JSON |
az check <file.az> |
report diagnostics only, write nothing |
az add chat <file.az> [--page /route | --float] [--show all] |
add a working chat in place: the backend lines, a chat with a greeting and suggested questions, the model's keys (commented) for az dev; backs the file up, ends with az check passing, and a second run adds nothing |
az lint [words-dir] |
theme-token check of every word pack |
az migrate <file.az> |
upgrade the file to this grammar version |
az eject <word> [--dir project] |
copy a word into the project's words/ to own it — one-way |
az backend init <server-dir> |
write the backend's .env with a fresh secret (owner-only, never overwrites) |
az backend plan <file.az> |
show the data schema step the file needs; writes nothing |
az backend schema <file.az> [--rename a=b] [--drop x] [--unique t.f] [--expose t] |
record that step in <file>.data.json |
az backend images <server-dir> [--confirm] |
count stored images without width copies; with --confirm, make them |
az backend probe <server-dir> [--json] |
ask the configured chat model the production prompt; times, tokens, what was dropped |
az backend usage <server-dir> [--json] |
the chat's daily counts and budget left, and the shares kept; reads only, never a message |
az mcp [--root dir] |
serve the compiler's tools to an AI agent (MCP over stdio) |
az explain <term...> |
one line per term, e.g. az explain hero center |
az palette [--theme t] [--accent h] [--out dir] |
write the colour gallery: every theme, hue, pair and pattern in light and dark, with its .az lines |
az palette --list | --json [--theme t] [--accent h] |
print every colour choice, for a terminal or a tool |
az prompt [--words a,b] [--compact] [--budget N] [--json] |
print the Markdown instructions any AI model needs to write .az, generated from the compiler's tables; writes nothing |
az doctor [file.az] [--out dir] [--json] |
check this machine and project; changes nothing |
az audit [--out dir] [--online] [--json] |
check a build's output; changes nothing (--online adds the advisory lookup) |
az --help prints the same list (a test keeps this table and it in step).
Exit codes: 0 success; 1 errors in the file or a failed check; 2 bad usage,
configuration, or a file that cannot be read.
A word is a block on the page. Each lives in packages/words/<word>/ with
its manifest (word.json), web emitter, README and previews. The table below
is generated from each word.json by node scripts/gen-words-index.mjs,
which also writes the full index, docs/WORDS.md; pnpm test
fails if either is stale.
| Word | Info | Variants | Docs |
|---|---|---|---|
auth |
Sign-in, sign-up or password-reset form on its own page | login signup reset |
README |
chat |
A panel or a launcher where visitors ask the site's AI | panel float none |
README |
cta |
Closing call-to-action section before the footer | band card split |
README |
faq |
Questions with expandable answers, plus FAQ schema | list columns |
README |
feature |
Set of features or benefits | grid rows bento |
README |
footer |
Site footer: links, legal row and copyright | minimal columns mega none |
README |
gallery |
Set of images in a chosen layout | grid masonry carousel orbit |
README |
hero |
Page opener: the page's only h1, text and actions | center split full stack minimal |
README |
nav |
Site navigation bar with links, groups and a CTA | bar center split minimal side mega none |
README |
pricing |
Plans and prices with a monthly/annual toggle | cards table |
README |
scene |
Standalone 3D scene with a poster fallback | inline full backdrop none |
README |
text |
Section of written copy from a string or .md file | prose centered columns |
README |
- Built: the compiler and web target, all 12 words, the six themes, the backend with accounts, sign-in adapters and data tables, and the chat block through its operator data tools (C6). Details: ROADMAP.
- Still open: chat's interactive controls and maps (C7, C8); a sign-in test against a real provider; 3D measurements on a genuinely slow device.
- Not started: M5, the first real site shipped with az. The grammar is frozen only after it, so the file format can still change.
- Not built yet:
az deploy, an editor language server, a playground.
Read CONTRIBUTING.md: setup, which checks to run for each
kind of change, the house rules, and where things live in the repository.
Before any change, pnpm verify must pass.
Everyone taking part follows the code of conduct. Report security problems privately, as SECURITY.md describes — never in a public issue.
License: Apache License 2.0. See also NOTICE.