Project

Changelog

What changed, newest first. Unreleased changes are on main and ship in the next version.

Unreleased

  • Oct 17, 2026

    Layout intents

    Put a title at the start of a line and its buttons at the end, with the buttons dropping below when there's no room, with layout.headline

    Put an icon, avatar or logo beside its text without it shrinking, with layout.labelled; layout.badged now points there for an icon beside its label

    Let a wide table or long code line scroll sideways inside its column, with layout.scroller; layout.table says to wrap wide tables in it

    Lay out a settings row with its label on the left and its switch on the right, with layout.setting

    Give a settings or account page its own section nav beside the content, with layout.subnav

    Sign-in and confirmation pages centre their heading, text and buttons, while a form inside keeps the full width, in layout.task

    Grids fit as many columns as their own width allows, so the same grid works in a sidebar and across a page, in layout.collection; set columns from a breakpoint only when the count matters

    A form's submit bar pinned to the bottom on phones now counts as a use of layout.dock

    Filter pills and other buttons in layout.toolbar keep their own padding and sit apart with a small gap, instead of the first one losing its padding and lines drawn between them

    The libraries are published as @prongsjs/core, @prongsjs/ui, @prongsjs/errors and @prongsjs/logs; the CLI is still npx prongs

    On wider screens dialog.media fits its photo again, instead of stretching to the full height of the screen with empty space below

    Docs site: repeated layout tweaks down from 51 to 40 kinds, and from 396 to 253 class uses

    The README now explains intents, domains and profiles, and the format spec is on its own page at /docs/spec

    The guide now introduces Prongs as a spec, a framework and presets for UI, errors and logs that you extend with your own intents, and the checking page lists the errors and logs rules too

    Links to prongs.dev now show the preview image when shared, and the site description and preview card describe the spec, framework and presets instead of UI alone

  • Oct 17, 2026

    Spec gaps

    Export your registry as JSON for tools in other languages with prongs export; it matches the spec's schema.json

    Attach your own data to an intent, like an owner or a design link, with meta and prefixed keys such as com.example/owner

    Registry problems now carry a stable code, like unknown-ref, so tools can act on them without reading the message

    Deprecating an intent without saying what replaces it is now a warning

    The spec now covers what each status means, a checker's findings, intents at run time, security and what counts as a breaking change, and has conformance tests any implementation can run and a changelog page

  • Oct 17, 2026

    Layout tweaks

    prongs check finds the same layout class added to the same <Layout> intent in three or more places, and says whether an intent already has it, whether it does nothing, or whether one is missing; check --suggest lists them too (repeated-tweak)

    Hide or show a region by screen size, or push it to one end of its row, with hideBelow, showBelow and align on <Layout>

    align="end" now pushes an action, field or image to the end of a row as well as a column, the same as on <Layout>; before, in a row it moved it to the bottom instead

    layout.section is now the stack for separate blocks in a region, with or without a title, and layout.group points there for them

    Columns no longer overflow their row or grid when their content is wide, with min-w-0 on every stacking intent

    Pages and panels have less padding on phones and the same on larger screens, and a call site's own padding still wins, in layout.page, layout.article and layout.panel

    A loading placeholder without a size shows as a full-width line instead of nothing, with layout.loading

    Task pages and app shells fill the visible screen on phones, not the height behind the browser's bars, in layout.task and layout.shell

  • Oct 17, 2026

    Device status

    The analytics guide shows how to turn intent events into decisions, with worked examples and what the events cannot tell you

    Whole table rows that open a record's details on click, with action.inspect on its name

    Show an amount as a row of blocks, like a battery, coloured by level, with layout.blocks and layout.blocks.cell

    An icon with a status dot on its corner, like a device and whether it is online, with layout.badged

    Statuses as colour-coded outlined pills with text.status

    A showcase of featured items now stacks top to bottom on small screens, instead of squeezing side by side, and pointing at an item no longer moves the others: mark its caption with data-caption, in layout.showcase.item

    A photo opened large fills a phone screen, with the photo as a full-width square between its title and details, and the page behind stays still while it's open, with dialog.media and media.enlarged

    A status dot pulses while something is in progress with data-busy on text.indicator, and data-off on a table row greys out something switched off

  • Oct 15, 2026

    Dashboard intents

    Meters for amounts like battery or storage (layout.meter) and a <figure> frame for charts (layout.chart)

    Sortable table columns (action.sort) and pagination (layout.pager, nav.paging)

    Status colours for text.indicator: data-tone="success", "warning" and more

    Pull quotes (text.quote), standalone links like Learn more with an arrow and no underline (action.more), and layout.teaser and nav.item in the starter registry

    Dashboard and newsroom examples in the home page's examples, built only from intents

    Icon-only buttons no longer squeeze their icon

  • Oct 14, 2026

    Find intents by purpose

    prongs find "<what it is for>" looks intents up by purpose, with their "not for" guidance and how to write them

    Tables (layout.table), app shells (layout.shell), sign-out (action.signout) and wrong-password errors (auth.signin), added where agents building a SaaS app went looking for them

    An eval suite that builds apps and runs chains of tickets with fresh agents, with and without Prongs

    Menus keep a danger colour on destructive items instead of flattening every row to the same look

    layout.form and layout.disclosure accept form and details attributes like noValidate and open

    prongs check accepts flex-grow ratios like flex-2, which it used to reject

    MIT license, a README for every package, CI and a fresh-install smoke test

  • Oct 13, 2026

    Whole fields and dark mode

    <Field label hint error> renders the whole field and connects the label, hint and error for screen readers

    The theme follows the system's dark mode, browser-drawn controls included, and focus rings sit on the surface colour

    PRONGS.md is a quarter smaller: the theme and the look intents moved to PRONGS.reference.md, and it shows how each layout arranges its children and the full fail() options

    audit.signedin and audit.signedout for ordinary sign-ins, apart from security.signin

    prongs check warnings are suggestions: agents keep their intent when the suggested one does not fit

  • Oct 9, 2026

    Popovers and layered surfaces

    <Popover> for menus, pickers and detail, on the browser's own popover, with keyboard navigation and listbox pickers

    theme.css with self-layering surfaces: nesting decides the shade, and quiet text stays readable at every level

    Dividers, status indicators, disclosures and embedded pages as intents

    Every element carries data-intent in production, for analytics, tests and A/B tools