Latest release
v0.8.2 Unknown classes point at the real pattern
September 28, 2026
An invented af-* class is a failed lookup. Airframe MCP now names the catalog pattern that already covers it. Use that pattern, or say why it does not fit.
Every release of the Airframe fixed group. Core, tokens, theme, MCP, build, the ESLint plugin, and IntelliSense for Airframe share one version. Updates under each version are grouped by package. Follow along via RSS.
Latest release
v0.8.2 Unknown classes point at the real pattern
September 28, 2026
An invented af-* class is a failed lookup. Airframe MCP now names the catalog pattern that already covers it. Use that pattern, or say why it does not fit.
v0.8.2
PatchCurrentcore · tokens · theme · mcp · build · eslint-plugin · figma-plugin · intellisense
An invented af-* class is a failed lookup. Airframe MCP now names the catalog pattern that already covers it. Use that pattern, or say why it does not fit.
| Type | Description |
|---|---|
| docs | Agents must use a closeMatches pattern or name why it does not fit. |
| Type | Description |
|---|---|
| feat | validate_markup returns closeMatches for an unknown af-* class — the pattern id, base class, and why it matches. |
v0.8.1
Patchcore · tokens · theme · mcp · build · eslint-plugin · figma-plugin · intellisense
Add notification dot and mobile tab bar patterns. Use www.airframeui.com as canonical host.
| Type | Description |
|---|---|
| feat | add notification dot and mobile tab bar |
| fix | use www.airframeui.com as canonical host |
v0.8.0
Minorcore · tokens · theme · mcp · build · eslint-plugin · figma-plugin · intellisense
0.8.0 says what 1.0 will freeze: class names, tokens, CSS exports, catalog ids, CLI flags, and Airframe MCP tool names. That promise is not in force yet. Alert, callout, skeleton, and spinner examples now carry the live-region roles agents should copy.
| Type | Description |
|---|---|
| docs | Compatibility page states the intended 1.0 freeze. Masonry stays experimental. |
| docs | Alert, callout, skeleton, and spinner examples use role="status", role="alert", and aria-busy. |
| Type | Description |
|---|---|
| docs | Callout, skeleton, and spinner descriptions name that same ARIA contract. |
v0.7.2
Patchcore · tokens · theme · mcp · build · eslint-plugin · figma-plugin · intellisense
Make af-inline force row direction for af-card.
| Type | Description |
|---|---|
| fix | make af-inline force row direction for af-card |
v0.7.1
Patchcore · tokens · theme · mcp · build · eslint-plugin · figma-plugin · intellisense
Cards no longer clip overflow. Choice groups use stack or inline for spacing. The html reset does not reserve scrollbar gutter.
| Type | Description |
|---|---|
| fix | Cards no longer set overflow: hidden, so popovers and focus rings can escape. |
| fix | Choice labels no longer add sibling margins; group them with af-stack or af-inline. |
| fix | Drop scrollbar-gutter: stable from the html reset. |
v0.7.0
Minorcore · tokens · theme · mcp · build · eslint-plugin · figma-plugin · intellisense
Keep your product token namespace and still theme Airframe, Figma, and the CLI from one config. Coding agents get clearer pattern routing and stricter form markup checks.
| Type | Description |
|---|---|
| feat | catalog blocks for command palette, filter bar, API key row, and logs panel |
| feat | form submit and field-error contracts in catalog rules |
| feat | invert buttons on primary surfaces (af-bg-primary / af-is-on-primary) |
| Type | Description |
|---|---|
| feat | Bring Your Own Tokens — export product-owned CSS prefixes to DTCG and Figma without renaming to --af-* |
| Type | Description |
|---|---|
| feat | validate form submit buttons and field-error markup |
| feat | recommend patterns with structured use cases instead of free-text useWhen |
| Type | Description |
|---|---|
| feat | af theme and config support for Bring Your Own Tokens |
| feat | agent init follows the catalog’s structured use-case routing |
v0.6.0
Minorcore · tokens · theme · mcp · build · eslint-plugin · figma-plugin · intellisense
Push brand tokens from CSS into native Figma Variables. Export a payload, Apply or Check in the Airframe Figma plugin. Airframe MCP can also find Blocks and Blueprints.
| Type | Description |
|---|---|
| feat | Catalog lists Blocks and Blueprints with docsUrl for agents and Airframe MCP. |
| fix | Screen-reader-only utilities pin to the start of the containing block. |
| fix | Tighter gap on af-navbar-actions. |
| Type | Description |
|---|---|
| feat | emitFigmaVariablesModel builds a native Variables payload from the resolved theme. |
| feat | DTCG export keeps simple var(--af-*) aliases as references. |
| Type | Description |
|---|---|
| feat | search_patterns / get_pattern return Blocks and Blueprints (open docsUrl, then adapt). |
| Type | Description |
|---|---|
| feat | af figma export, sync, and check for Variables payloads. |
| feat | Ships the Airframe Figma plugin under @airframeui/build/figma-plugin for team install. |
| Type | Description |
|---|---|
| feat | Development plugin — Apply figma.variables.json into Variables, Check for drift, with integrity score and issue groups. |
v0.5.0
Minorcore · tokens · theme · mcp · build · eslint-plugin · intellisense
validate_markup checks catalog HTML rules. Opt-in af-body, af-prose line length, and Angular ESLint templates.
af-body on <body> (no longer global in reset).af-measure → af-prose (also -narrow / -wide).| Type | Description |
|---|---|
| feat | Catalog htmlSemantics rules. |
| feat | Opt-in af-body; list-group actions on nested a/button; label.af-action-row. |
| Type | Description |
|---|---|
| feat | validate_markup enforces catalog HTML semantics. |
| Type | Description |
|---|---|
| feat | Agent bootstrap mentions catalog HTML semantics. |
| Type | Description |
|---|---|
| feat | Angular templates via flat/angular. |
| Type | Description |
|---|---|
| feat | Completions for af-body and af-prose*. |
v0.4.2
Patchcore · tokens · theme · mcp · build · eslint-plugin · intellisense
Patterns round through --af-radius, --af-btn-radius, --af-input-radius, or --af-card-radius.
| Type | Description |
|---|---|
| feat | Patterns use those four families. |
| Type | Description |
|---|---|
| feat | --af-radius is the product default; --af-btn-radius, --af-input-radius, and --af-card-radius inherit it. |
| Type | Description |
|---|---|
| feat | Completions describe the radius families. |
v0.4.1
Patchcore · tokens · theme · mcp · build · eslint-plugin · intellisense
Overlay locks scroll. Catalog ids, breaking map, and agent init work without MCP.
| Type | Description |
|---|---|
| feat | Overlay scroll lock, navbar aria-current, skip under sticky chrome, catalog docsUrl, @airframeui/core/breaking. |
| Type | Description |
|---|---|
| docs | Pinned npx snippet; catalog → examples → CSS when MCP is off. |
| Type | Description |
|---|---|
| fix | af init --agents writes AIRFRAME.md; will not replace a product file. |
v0.4.0
Minorcore · tokens · theme · mcp · build · eslint-plugin · intellisense
Layouts are now Structure — primitives and shells. Skip-to-content. Overlay mobile nav.
layouts.css → structure.css; shells in shells.css. Catalog and Airframe MCP: layoutRecipes → structure (primitive | shell).| Type | Description |
|---|---|
| feat | af-skip, overlay af-nav-collapse, structure.css / shells.css. |
| docs | Structure → Patterns → Blocks → Blueprints. |
| Type | Description |
|---|---|
| feat | --af-navbar-height. |
| fix | --af-hard-toward follows --af-color-text. |
| Type | Description |
|---|---|
| feat | Structure kinds; skip-link → skip. |
| Type | Description |
|---|---|
| fix | Agent docs list primitives and shells. |
| Type | Description |
|---|---|
| feat | Completions use primitive / shell. |
v0.3.2
Patchcore · tokens · theme · mcp · build · eslint-plugin · intellisense
Footer, navbar collapse, and a collapsed app rail. Agent rules spell out design rationale and composition don’ts.
| Type | Description |
|---|---|
| feat | Footer, sticky/compact navbar, CSS-only nav collapse, and a collapsed app rail. |
| docs | Design rationale, composition don’ts, and Layouts → Patterns → Blocks → Blueprints. |
| Type | Description |
|---|---|
| docs | Agent instructions include construction hierarchy and composition don’ts. |
| Type | Description |
|---|---|
| docs | Generated agent docs include design rationale and composition don’ts. |
v0.3.1
Patchcore · tokens · theme · mcp · build · eslint-plugin · intellisense
flat/recommended now sets files for .js, .jsx, .ts, and .tsx. ESLint only lints .js by default, so JSX and TypeScript never got Airframe rules.
| Type | Description |
|---|---|
| fix | flat/recommended includes files for .js, .jsx, .cjs, .mjs, .ts, and .tsx. |
| docs | README notes that ESLint needs files for non-.js extensions. |
v0.3.0
Minorcore · tokens · theme · mcp · build · eslint-plugin · intellisense
af theme export writes DTCG for Figma — one collection per palette, four appearance modes. Buttons follow --af-radius instead of a pill. The radius scale is a 4px grid. Docs cover the pipeline, Theme Studio, and live blueprints.
Brand in CSS. Point theme.files at those sheets. npx af theme export writes tokens/<palette>/{light,dark,hc-*}.tokens.json. Drop each folder onto one Figma collection. Extra --af-* names export as extension tokens.
Filled af-btn is rounded (--af-radius), not a pill. Min-height follows --af-hit-size. Set --af-btn-radius to var(--af-pill-radius) for capsules.
--af-radius is the product default (8px). Scale is 4 / 8 / 12 / 16. Cards and controls inherit it. .af-force-light / .af-force-dark lock a subtree to the catalog canvas.
Homepage, Airframe → Figma, Theme Studio, the theme package page, and live blueprints. Installation and theming are shorter.
| Type | Description |
|---|---|
| feat | CSS-only dropdowns — native popover, CSS anchor positioning, af-is-end / af-is-start. |
| feat | Checkbox, radio, and range restyled to match inputs (appearance: none). |
| feat | Input group chrome on the group; inset addons and .af-input-group-action. |
| feat | Button-group joins for filled and outline segments. |
| feat | .af-radius utility; .af-radius-full uses --af-pill-radius. |
| feat | Viewport fill, scrollbar-gutter: stable, footer at the bottom. |
| fix | :root[data-theme="dark"] sets color-scheme: dark. |
| Type | Description |
|---|---|
| feat | --af-radius (8px) and --af-pill-radius; scale 4 / 8 / 12 / 16. |
| feat | Buttons, cards, and controls inherit --af-radius; --af-btn-radius is no longer a pill. |
| feat | --af-control-min-height defaults to --af-hit-size. |
| feat | Range tokens --af-range-track-height and --af-range-thumb-size. |
| feat | .af-force-light / .af-force-dark lock a subtree to the catalog canvas. |
| Type | Description |
|---|---|
| feat | emitDtcgExport — one DTCG file per palette and appearance for Figma. |
| feat | Extra --af-* names export as extension tokens; brands come from [data-brand]. |
| docs | README leads with export to Figma. |
| Type | Description |
|---|---|
| feat | af theme export writes tokens/<palette>/*.tokens.json (default .airframeui). |
| feat | theme.files and theme.outputDir in airframe.config.js. |
| feat | Responsive generator ships here. Use npx af build, not a core export. |
| Type | Description |
|---|---|
| docs | README rewritten — setup, rules table, and notes for coding agents. |
v0.2.0
Minorcore · tokens · theme · mcp · build · eslint-plugin · intellisense
Most apps still only install core. @airframeui/build is now on npm for custom breakpoint pixels and @af directives. @airframeui/eslint-plugin is on npm too, at the same version as core. Filled buttons can take optional borders. File inputs get a CSS-only dropzone.
Dev dependency, not the CSS runtime. The PostCSS plugin inlines @import "@airframeui/core/core.css" and rewrites breakpoints in memory. Do not import generated responsive.css on top of core.
@airframeui/eslint-plugin publishes with the same version as core. Catch leftover Tailwind/Bootstrap, unknown af-* classes, and redundant defaults.
Filled af-btn borders stay transparent. Set --af-btn-border to a color, or to var(--af-btn-border-auto), to paint them.
| Type | Description |
|---|---|
| feat | Optional filled af-btn borders via --af-btn-border / --af-btn-border-auto (off by default). |
| feat | a.af-card, a.af-pill, a.af-link-button, and a.af-btn opt out of underline through --af-link-decoration. |
| feat | Native file input as a CSS-only dropzone (af-is-dropzone); hover and drag-over share the same highlight. |
| feat | Export buildResponsiveCss as @airframeui/core/generate-responsive (the generator @airframeui/build calls). |
| fix | Default full-width af-col-span no longer beats an explicit span, including @md variants (:where()). |
| fix | Body p spacing uses 0.9lh instead of a fixed space token. |
| Type | Description |
|---|---|
| feat | --af-link-decoration and --af-link-hover-decoration (underline by default; patterns that are <a> override). |
| feat | Filled-button border tokens — --af-btn-border, --af-btn-border-auto, plus per-variant / hover / focus. Ghost stays independent. |
| Type | Description |
|---|---|
| feat | emitConfigTokenCss — config breakpoints as an @layer af.tokens stylesheet (same mapping as declsFromConfig). |
| Type | Description |
|---|---|
| feat | First npm release. PostCSS plugin inlines @import, compiles @af bp() / @af-apply, and replaces inlined --af-bp-* and @layer af.responsive. |
| feat | af CLI — build, doctor, init, init --agents, and theme (facade over @airframeui/theme). |
| feat | af doctor checks Airframe package versions and agent-file freshness against installed core. |
| feat | af init --agents writes AGENTS.md from @airframeui/core/catalog and can add a package.json "af" script. |
| Type | Description |
|---|---|
| feat | First npm release. Same version as core. |
| feat | Recommended rules — leftover Tailwind/Bootstrap, unknown af-*, layout recipes, redundant defaults/width, field-error ARIA. Autofix where the mapping is deterministic. |
| feat | Build-time catalog snapshot from classes.json and catalog.json. Installed @airframeui/core / @airframeui/tokens win when present so lint matches the CSS you ship. |
v0.1.4
Patcheslint-plugin
@airframeui/eslint-plugin now versions with core, tokens, theme, MCP, build, and IntelliSense for Airframe. Catalog snapshot is generated from classes.json and catalog.json at build time.
The ESLint plugin is still private (not on npm yet). It tracks the same version as the published set so rules and catalogs cannot drift from the CSS you install.
| Type | Description |
|---|---|
| feat | Join the fixed version group; catalog snapshot from classes.json and catalog.json. |
v0.1.0
Minorcore · tokens · theme · mcp
App shell and related product primitives. Color scheme (data-theme) is separate from named palettes (data-brand). The token catalog ships with descriptions and default colours per mode. Static HTML can load one minified file. Coding agents get an MCP server on the same version as core.
App shell, settings nav, action rows, extra button styles, vertical divider, and a full-page loader. Overlay drawers get --af-drawer-width (default 20rem), distinct from --af-sidebar-width.
data-theme is light/dark. data-brand is a named palette. Light, dark, and high-contrast resolve from stored --light / --dark / --hc-* suffixes so multiple brands can coexist in CSS variables.
catalog.json lists every --af-* token with descriptions and default colours per mode. The Tokens full list docs page is generated from it.
dist/airframe.min.css is the jsDelivr / unpkg / static HTML entry. core.css stays the modular @import graph for bundlers. Do not link core.css from a CDN.
@airframeui/mcp ships with core and tokens: catalog-backed search, examples, markup validation, and Airframe rules as MCP resources.
Theme lint and MCP validate_markup both read @airframeui/tokens/catalog.json for known --af-* names.
| Type | Description |
|---|---|
| feat | App shell, settings nav, action rows, extra button styles, vertical divider, and full-page loader. |
| feat | --af-drawer-width for overlay drawer panels (default 20rem). |
| feat | Separate color scheme (data-theme) from named palettes (data-brand). |
| feat | Self-contained dist/airframe.min.css for jsDelivr, unpkg, and static HTML. |
| Type | Description |
|---|---|
| feat | Token catalog (catalog.json) with descriptions and default colours per mode. |
| Type | Description |
|---|---|
| feat | Theme lint reads @airframeui/tokens/catalog.json instead of a copied allowlist. |
| Type | Description |
|---|---|
| feat | Catalog-backed search, examples, markup validation, and Airframe rules as MCP resources. |
| feat | Pattern catalog related / useWhen / avoidWhen hints. |
v0.0.1
Patchcore · tokens
Airframe goes public. A CSS-first structural UI system: layout primitives, a full token layer, accessible patterns, and a readable af-* DOM. No runtime JavaScript. Any framework.
@import "@airframeui/core/core.css" — tokens, reset, layouts (af-stack, af-inline, af-grid), patterns, and utilities. Brand with --af-* at runtime.
@airframeui/tokens is the CSS / JSON / TypeScript view. Core depends on it. Light, dark, and high-contrast ship built-in.
af-step-connector — steps use CSS counters on a semantic <ol>.| Type | Description |
|---|---|
| feat | Layouts, patterns, utilities, and AI catalogs. |
| feat | Steps — semantic <ol>, CSS counters. |
| Type | Description |
|---|---|
| feat | CSS custom properties, JSON, and TypeScript. |
Package CHANGELOG.md files still ship on npm. This page is the system view — one version,
updates listed per package.