Once UI Blog
Posts
Once UI
Once UI 2.5: reactions that move
Once UI 2.4: ready for AI apps
Once UI 3.0 beta: one way to say it
Stack languages: your app in Hungarian, or in two
Stack store: your shop on your own site
Liquid Metal: chrome that never sets
Chirio, redesigned
Styled screenshots in Chirio
Once UI 2.3: made for real apps
Frametic is now a video and capture studio
Agents write about 40% less code from Stack
Magic Portfolio, now on Once UI 2
Frametic MCP: let your agent film your site
Once UI Stack: your site as a desktop app
Once UI Stack, redesigned
Stack: teams and billing
Prism Glow: soft prism light behind your sign-in screen
Once UI for React Native: the same props on a phone
Once UI 2.2: chat, forms and mobile
Dither: your own image or video as a dithered print
Once UI 2.1: The pieces apps kept asking for
Once UI 2.0: A system an AI can build with
What made Once UI 2.0 possible
Once UI 2.0 alpha: Measured, not assumed
Colour arrives in pairs
Once UI 1.8: Polish as a feature
Once UI 1.7: Form with Intent
From products to systems: a new service model
Magic Journal: A different medium for long-form writing
Supa Social: The next milestone of our journey
Once UI is open source. Here's how we plan to keep it that way.
Designing a timeless, AI-native brand
Once UI 1.5: Curiosity in code
Once UI 1.4 migration guide: The breakpoint object
Launching in the AI-native era: A guide for indie builders
The first design system for indie builders
Builder Stories
Side and Once UI: From café website to reservation system
SatisPro and Once UI: Scaling smarter review management
IQON and Once UI: Scaling with a design system
Dev: Blending science and code with Once UI
JExcellence and Once UI: Turning experiments into enterprise apps
OsmyReal: Launching a platform for mobile gaming with minimal coding
TrademarkTrademark
Ctrl k
Search…
Sign up
Once UI Blog
Posts
Once UI
Once UI 2.5: reactions that move
Once UI 2.4: ready for AI apps
Once UI 3.0 beta: one way to say it
Stack languages: your app in Hungarian, or in two
Stack store: your shop on your own site
Liquid Metal: chrome that never sets
Chirio, redesigned
Styled screenshots in Chirio
Once UI 2.3: made for real apps
Frametic is now a video and capture studio
Agents write about 40% less code from Stack
Magic Portfolio, now on Once UI 2
Frametic MCP: let your agent film your site
Once UI Stack: your site as a desktop app
Once UI Stack, redesigned
Stack: teams and billing
Prism Glow: soft prism light behind your sign-in screen
Once UI for React Native: the same props on a phone
Once UI 2.2: chat, forms and mobile
Dither: your own image or video as a dithered print
Once UI 2.1: The pieces apps kept asking for
Once UI 2.0: A system an AI can build with
What made Once UI 2.0 possible
Once UI 2.0 alpha: Measured, not assumed
Colour arrives in pairs
Once UI 1.8: Polish as a feature
Once UI 1.7: Form with Intent
From products to systems: a new service model
Magic Journal: A different medium for long-form writing
Supa Social: The next milestone of our journey
Once UI is open source. Here's how we plan to keep it that way.
Designing a timeless, AI-native brand
Once UI 1.5: Curiosity in code
Once UI 1.4 migration guide: The breakpoint object
Launching in the AI-native era: A guide for indie builders
The first design system for indie builders
Builder Stories
Side and Once UI: From café website to reservation system
SatisPro and Once UI: Scaling smarter review management
IQON and Once UI: Scaling with a design system
Dev: Blending science and code with Once UI
JExcellence and Once UI: Turning experiments into enterprise apps
OsmyReal: Launching a platform for mobile gaming with minimal coding
Sponsored
Aveiro
aveiro.app
Sponsored
Aveiro
aveiro.app
TrademarkTrademark
Once UIDocumentationBlog
© Once UI. All rights reserved.
Built with Aveiro
Release

Once UI 2.3: made for real apps

Drag-to-reorder lists, a sidebar look you set once, a file tree, 32px toolbar fields, light mode with depth, and an app starter for agents.
Updated 2 days ago
Styled screenshots in Chirio
Frametic is now a video and capture studio
Once UI 2.3 is about the parts of a real app that sit around the pages: the sidebar, lists people reorder, a file tree, a toolbar of small controls, and a light mode that looks as finished as the dark one. It also ships an app starter that an AI agent copies instead of writing.
Once UI 2.3 at a glance, slide 1 of 9
Once UI 2.3 at a glance, slide 2 of 9
Once UI 2.3 at a glance, slide 3 of 9
Once UI 2.3 at a glance, slide 4 of 9
Once UI 2.3 at a glance, slide 5 of 9
Once UI 2.3 at a glance, slide 6 of 9
Once UI 2.3 at a glance, slide 7 of 9
Once UI 2.3 at a glance, slide 8 of 9
Once UI 2.3 at a glance, slide 9 of 9

Drag to reorder: Sortable

Wrap a list in Sortable and each row in Sortable.Item, and apply the new order in onReorder. A mouse drags after a 4px move, a finger after a 200ms press, so taps and scrolling still work. The keyboard picks a row up with Space, moves it with the arrow keys and drops it with Space, and every step is read out to screen readers. Lists that share a group trade rows, and it has no dependencies.

One look for the whole sidebar: Nav

Wrap your NavItems and NavGroups in Nav and set the look once: for how tight the rows are, for how the current page stands out, and for the line down an open group. gives each block its small heading. A selected NavItem with an now carries .
npm i @once-ui-system/core@latest
<Sortable items={rows} onReorder={setRows}>
  {rows.map((row) => (
    <Sortable.Item key={row} id={row}>
      <NavItem href={`/${row.toLowerCase()}`} label={row} />
    </Sortable.Item>
  ))}
</Sortable>
density
variant
rail
NavSection
href
aria-current="page"

Files and folders: FileTree

Pass items and FileTree renders an indented tree that the arrow keys walk. Right opens a folder, Left closes it, and Enter selects. It works controlled or uncontrolled, with slots for custom rows and empty or loading states. FileTree was contributed by @kadrxy, thank you.

Toolbar fields

Every text field now takes size="xxs": 32px, the height of a small Button, so a dashboard toolbar can be all small controls. At that size the label shows as the placeholder and stays the field's accessible name.

Light mode with depth

The light page is now a soft off-white and surfaces stay white, so cards, dialogs and panels lift off the page the way they do in dark mode. Text and solid fills moved a step so every text token passes WCAG AA, and inputs are white with a clear edge instead of a gray fill that read as disabled. defaultTheme sets a starting theme that visitors can still switch, and brandScale, accentScale and neutralScale take your brand's exact colours step by step.

An app starter for agents

ai/starters/app/ is a working Next.js setup with Once UI's CSS, fonts, providers and a switchable theme, plus a signed-in shell: a sidebar, a top bar with breadcrumb, a command palette, an account menu and a phone drawer. The product name, the user and the nav live in one file. AGENTS.md points agents at it, so they copy it and edit it instead of writing the shell from scratch.
In our own test runs on the same five-route app, agents that started from it used about half the tokens and model calls and passed the same checks. Agents without it locked the theme switch or lost the app fonts.

Fixes and accessibility

Dialogs keep focus inside and wrap Tab, hover triggers open from the keyboard, the first toast is read out, and a disabled Fieldset disables everything inside it. ThemeProvider no longer causes a hydration mismatch, and every example on the docs site is now typechecked and opened in a browser before release. The full list is in the changelog.
cp -r node_modules/@once-ui-system/core/ai/starters/app/src/. src/