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.headlinePut an icon, avatar or logo beside its text without it shrinking, with
layout.labelled;layout.badgednow points there for an icon beside its labelLet a wide table or long code line scroll sideways inside its column, with
layout.scroller;layout.tablesays to wrap wide tables in itLay out a settings row with its label on the left and its switch on the right, with
layout.settingGive a settings or account page its own section nav beside the content, with
layout.subnavSign-in and confirmation pages centre their heading, text and buttons, while a form inside keeps the full width, in
layout.taskGrids 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 mattersA form's submit bar pinned to the bottom on phones now counts as a use of
layout.dockFilter pills and other buttons in
layout.toolbarkeep their own padding and sit apart with a small gap, instead of the first one losing its padding and lines drawn between themThe libraries are published as
@prongsjs/core,@prongsjs/ui,@prongsjs/errorsand@prongsjs/logs; the CLI is stillnpx prongsOn wider screens
dialog.mediafits its photo again, instead of stretching to the full height of the screen with empty space belowDocs 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/specThe 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'sschema.jsonAttach your own data to an intent, like an owner or a design link, with
metaand prefixed keys such ascom.example/ownerRegistry problems now carry a stable code, like
unknown-ref, so tools can act on them without reading the messageDeprecating 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 checkfinds 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 --suggestlists them too (repeated-tweak)Hide or show a region by screen size, or push it to one end of its row, with
hideBelow,showBelowandalignon<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 insteadlayout.sectionis now the stack for separate blocks in a region, with or without a title, andlayout.grouppoints there for themColumns no longer overflow their row or grid when their content is wide, with
min-w-0on every stacking intentPages 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.articleandlayout.panelA loading placeholder without a size shows as a full-width line instead of nothing, with
layout.loadingTask pages and app shells fill the visible screen on phones, not the height behind the browser's bars, in
layout.taskandlayout.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.inspecton its nameShow an amount as a row of blocks, like a battery, coloured by level, with
layout.blocksandlayout.blocks.cellAn icon with a status dot on its corner, like a device and whether it is online, with
layout.badgedStatuses as colour-coded outlined pills with
text.statusA 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, inlayout.showcase.itemA 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.mediaandmedia.enlargedA status dot pulses while something is in progress with
data-busyontext.indicator, anddata-offon a table row greys out something switched off - Oct 16, 2026
Gallery intents
Galleries where the item in focus widens and the rest make room, with
layout.showcaseSliders with
field.range, a bar that stays at the bottom withlayout.dock, and covers and posters withmedia.artworkStep to the next item in a sequence, like the next photo in a lightbox, with
action.skipA gallery example in the home page's examples
- 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 morePull quotes (
text.quote), standalone links like Learn more with an arrow and no underline (action.more), andlayout.teaserandnav.itemin the starter registryDashboard 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 themTables (
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 themAn 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.formandlayout.disclosureaccept form and details attributes likenoValidateandopenprongs checkaccepts flex-grow ratios likeflex-2, which it used to rejectMIT 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 readersThe 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()optionsaudit.signedinandaudit.signedoutfor ordinary sign-ins, apart fromsecurity.signinprongs checkwarnings 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 pickerstheme.csswith self-layering surfaces: nesting decides the shade, and quiet text stays readable at every levelDividers, status indicators, disclosures and embedded pages as intents
Every element carries
data-intentin production, for analytics, tests and A/B tools