NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Scalars component library
Last release 3 days ago
12 Oct 2026
Ships on a steady schedule
a new release about every 2 weeks
Most releases are documented
notes for 49 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
3 years old
337 releases · first in 2023
### Patch Changes - #10559: Clean up Biome warnings in package code and tests. Handle rejected debounced callbacks and await streaming writes. - #1053
pre styles from adding borders and padding to code blocksOne column per month.
### Minor Changes - #10493: Floating surfaces now paint their own background, border, and shadow instead of using an absolutely positioned backdrop la
#backdrop slot on ScalarDropdown, ScalarPopover, ScalarListbox, and ScalarCombobox is removed; style the floating element with class instead. ScalarFloatingBackdrop, --scalar-lifted-brightness, and the brightness-lifted utility are deprecated in favor of bg-b-1 dark:bg-b-1.5. ScalarFloatingBackdrop itself now uses the same surface styles, so it no longer clips its slot or draws a real border. A new inset-shadow-border utility draws the hairline border so it can stack with shadow-* without taking up layout space; Tailwind's default inset-shadow-* sizes are reset, matching the other theme namespaces.### Patch Changes - #10467: Use the design system border, shadow, and extra-large radius for all floating surfaces. Backdrops now inherit their radius
The code block scroller is exposed as a named group ("Code sample: Shell cURL" in the API Reference, localizable via operation.codeSample) so screen r
operation.codeSample) so screen readers announce it when it receives focus### Patch Changes - #10401: Preserve inline code styling in collapsed Markdown summaries, including authentication descriptions.
Corrects programmatic semantics only, with no change to how anything renders: the current sidebar item now reports aria-current, the single content ty
#10392: Give code samples, including virtualized large examples, a named keyboard-scrollable region and keep copy buttons descriptively named before hover or focus.
#10385: feat: add UTM parameters identifying the integration to the "Powered by Scalar" link
#10369: fix: address a batch of screen reader and keyboard accessibility findings
Corrects programmatic semantics only, with no change to how anything renders:
the current sidebar item now reports aria-current, the single content type
readout leaves the tab order, collapsible sections no longer announce their
title twice, the password toggle reports its state through aria-pressed, the
two document download buttons get distinct accessible names, response status
tabs announce what each code means, and the client picker and its search field
get accessible names.
Nothing published for this version
Nothing published for this version
Nothing published for this version
### Minor Changes - #10269: Add title filtering and keyboard-friendly search to the multi-document API selector.
### Patch Changes - #10245: Use design system borders, shadows, and radii for dropdown surfaces and items.
useFloating's autoUpdate ran computePosition inside the mount flush, so every floating element forced a style and layout pass while it was mounting, w
#10133: Restore the empty Astro logo.
#10074: perf(components): defer ScalarFloating's first positioning to the next tick
useFloating's autoUpdate ran computePosition inside the mount flush, so every floating element forced a style and layout pass while it was mounting, whether or not it was open. A page that mounts ten closed dropdowns paid ten forced passes before anything appeared.
whileElementsMounted now starts autoUpdate from nextTick, chained on the current flush so it still runs before paint, with a disposed flag so an element unmounted within that tick never starts one. On a large API reference document this takes layout events per interaction from eleven to two, and the layout objects walked from 278,715 to 49,539.
This affects every consumer of ScalarFloating, including the dropdown, listbox, popover, combobox, menu and tooltip components. The full component end-to-end suite (203 tests, 219 screenshots) shows no snapshot change, and ScalarFloating's own suite covers all twelve placements, resizing and the constrained max-size case.
#10138: Test sidebar content and accessible attribute forwarding.
#10140: Replace redundant type assertions with compiler-checked annotations, typed accumulators, and existing guards across helpers, API conversion, request handling, and schema rendering.
Narrow DOM elements and caught errors before accessing their properties. Correct header lookup to include missing values and handle them during PowerShell snippet generation.
Validate release-note provider responses, represent unresolved references and absent groups in helper return types, and require narrowing merged object values. Preserve AsyncAPI broker credentials separately from HTTP authentication schemes.
### Patch Changes - #10058: chore: upgrade to Storybook 10.5.10 and drop the third-party dark mode addon
Passing the old slots logs a deprecation warning, and typed consumers get a vue-tsc error. One case cannot be detected: a header that used _only_ the…
#10025: Breaking: ScalarHeader no longer lays out its own columns. The start and end slots have been removed in favour of composing ScalarHeaderColumn children in the default slot, and a new is prop lets the header render as something other than a header element.
Columns hug their content. Give the content-bearing column flex-1 so it takes the free space — that is also the column that absorbs the shrinking when space runs out.
<ScalarHeader>
- <template #start>
- <ScalarMenu />
- </template>
- <template #end>
- <ScalarHeaderButton cta>Register</ScalarHeaderButton>
- </template>
+ <ScalarHeaderColumn class="flex-1">
+ <ScalarMenu />
+ </ScalarHeaderColumn>
+ <ScalarHeaderColumn class="justify-end">
+ <ScalarHeaderButton cta>Register</ScalarHeaderButton>
+ </ScalarHeaderColumn>
</ScalarHeader>
Put flex-1 on both side columns only when there is a genuine justify-center middle column. In a two-column header it splits the width 50/50 instead, which clips the content-bearing side on narrow screens:
<ScalarHeader>
<ScalarHeaderColumn class="flex-1">…</ScalarHeaderColumn>
<ScalarHeaderColumn class="justify-center">…</ScalarHeaderColumn>
<ScalarHeaderColumn class="flex-1 justify-end">…</ScalarHeaderColumn>
</ScalarHeader>
Passing the old slots logs a deprecation warning, and typed consumers get a vue-tsc error. One case cannot be detected: a header that used only the middle slot now renders its contents left-aligned rather than centred, because that content is indistinguishable from the new default slot. Wrap it as above.
is is worth reaching for when a header is nested inside an existing header landmark — is="div" avoids exposing a second banner role.
ScalarMenu's default logo now renders at a fixed size. It previously inherited ScalarIcon's size: 'full', and because the Scalar logo ships a viewBox with no intrinsic dimensions, that percentage width resolved against the available space in WebKit — stretching the logo box to fill the header and leaving the mark floating in the middle of it.
This also fixes the app header overflowing narrow viewports, including on iOS Safari. ScalarHeaderColumn carries min-w-0, so a flex-1 column shrinks and its long title ellipsizes instead of pushing the header past the screen. Hug columns still size to their content, so keep a trailing action cluster narrow enough to fit on its own.
### Patch Changes - #9941: Republish every package through npm trusted publishing. No functional changes.
Sidebar items used aria-selected on links/buttons (invalid for those roles) and the search trigger used role="search" on a button. Selected items now
#9783: fix: resolve axe-core ARIA violations in the API reference sidebar and client tabs
Sidebar items used aria-selected on links/buttons (invalid for those roles) and the search trigger used role="search" on a button. Selected items now use aria-current="page", the search control is a plain named button, and the sidebar no longer sets an invalid role="navigation" on <aside> (it keeps the default complementary landmark).
Client library and SDK installation "More" comboboxes sat inside role="tablist", which fails aria-required-children. They now sit beside the tablist. MCP install controls without a target URL render as buttons instead of empty a[href=""] links.
#9842: fix: show tooltips whose trigger sits inside a modal <dialog>
A <dialog> opened with showModal() is promoted to the browser's top layer, which
paints above the rest of the document no matter what z-index anything else carries.
The tooltip element is a shared singleton parented to <body>, so it rendered behind
the dialog and was invisible. It now moves into the dialog while it points at a target
in there, and moves back to the body once it is hidden.
#9844: Use the base surface for text inputs, text areas, and text input copy controls in light mode.
#9829: Update Vue to 3.5.40. Vue 3.5.36 tightened defineModel default validation, so
models with array or object defaults now use the factory form
(defineModel<T[]>({ default: () => [] })) as Vue already requires for regular
props. Behaviour is unchanged.
The tooltip surface is also polished to match the rest of the system: a standard hairline border and base shadow in both color modes (replacing the da
#9782: Fix the tooltip rendering with a dark background in light mode. The light-mode tooltip tokens were hard-coded to a dark fill with light text, so the tooltip stayed black regardless of the active color mode. They now derive from --scalar-background-1 and --scalar-color-1, so the tooltip follows the theme in both modes.
The tooltip surface is also polished to match the rest of the system: a standard hairline border and base shadow in both color modes (replacing the dark-mode-only inset border), a large radius, regular font weight, and tighter vertical padding. Horizontal and vertical padding are now separate variables so the placement offset applies to the correct axis.
### Patch Changes - #9719: docs: update the Scalar platform overview block in the README
The radius tokens used to be independent, so setting --scalar-radius: 0 still left rounded corners behind on anything using --scalar-radius-lg, --scal
#9687: feat(themes): derive the border radius scale from --scalar-radius
The radius tokens used to be independent, so setting --scalar-radius: 0 still left rounded corners
behind on anything using --scalar-radius-lg, --scalar-radius-xl or rounded-full. They now all
derive from --scalar-radius, which means overriding that single variable rescales every corner in the
interface, and 0 squares it off completely.
Two new tokens fill out the scale, --scalar-radius-2xl (12px) and --scalar-radius-3xl (16px), along
with --scalar-radius-full for pills and circles. The matching rounded-2xl and rounded-3xl Tailwind
utilities now emit CSS; previously they were silently dropped.
Every default value is unchanged, so nothing shifts unless you were relying on the old behaviour. If
your theme sets --scalar-radius on its own and expects the larger radii to stay put, set those tokens
explicitly. Override --scalar-radius on :root: a custom property substitutes var() at the element
where it is declared, so setting the base further down the tree moves it without moving anything derived
from it.
#9687: feat(themes): cap container corners with --scalar-radius-max
A large --scalar-radius used to curve tall containers hard enough that they swallowed their own
content: dropdown panels clipped their last rows, and code blocks rendered as stadiums.
Every radius token except --scalar-radius-full now clamps to a new --scalar-radius-max, which
defaults to 20px. A new --scalar-radius-md gives the base radius the same cap, and is what
rounded, rounded-md and form controls now use. Pills and circles are deliberately exempt, so
avatars, spinners and toggles stay round.
The reset no longer sets a border-radius on :focus-visible. It was reshaping the focused element
rather than its outline, which meant a large theme radius turned bare focus containers into pills the
moment they were focused. Outlines already follow an element's own corners, so focus rings now match
whatever shape the element actually has.
Defaults are unchanged: every default token sits at or below the cap, so nothing moves unless you were already setting a very large radius.
### Patch Changes - #9710: Republish so the updated README (with the Scalar platform overview) reaches npm. Also renames the README generator metadata
readme to scalarReadme: npm treats a readme field as the readme text itself, so affected packages were published with a literal [object Object] readme on the registry instead of README.md.### Patch Changes - #9668: feat: add tristate toggle and tristate toggle group components
Nothing published for this version
Update the shared theme reset so text inputs align to the logical start by default for RTL documents.
#9597: Add API Reference UI localization configuration with built-in English, Russian, Spanish, French, German, Simplified Chinese and Arabic translations, including automatic RTL direction for Arabic locales.
Update the shared theme reset so text inputs align to the logical start by default for RTL documents.
Add a mergeObjects deep-merge helper to @scalar/helpers, used by the localization layer to merge translation overrides onto the built-in locale.
#9590: Add syntax highlighting for the Mojo programming language
### Patch Changes - #9565: Apply the themed placeholder color and font to textarea placeholders so they match input placeholders
### Patch Changes - #9536: Fix ScalarTooltip offset gap on -start / -end placements. The offset was applied as uniform padding on all four sides of th
ScalarTooltip offset gap on -start / -end placements. The offset was applied as uniform padding on all four sides of the tooltip, which shifted the visible box inward by the offset amount on edge-aligned placements (e.g. top-start, bottom-end) since Floating UI aligns the floating element's edge with the target's edge. The offset gap is now applied only to the side facing the target, so the tooltip lines up flush with the target on the start/end axis.Nothing published for this version
The macOS search shortcut symbol was derived from navigator during render, so a Mac client hydrated ⌘ where the server sent ⌃. The platform is now res
ScalarVirtualCodeBlock component with copy button support for virtualized code blocks#9397: fix(components): vertically center the copy button for single-line code blocks
#9421: fix(api-reference): avoid SSR hydration mismatch from the search shortcut and teleport ids
The macOS search shortcut symbol was derived from navigator during render, so a Mac client hydrated ⌘ where the server sent ⌃. The platform is now resolved after mount. Teleport target ids and the search modal ids also switched from nanoid() to Vue's SSR-stable useId().
### Patch Changes - #9381: Disable font ligatures in ScalarCodeBlock so code renders with literal characters
### Minor Changes - #9291: refactor: rename component subpath exports to kebab-case without the Scalar prefix (e.g. @scalar/components/scalar-button i
Scalar prefix (e.g. @scalar/components/scalar-button is now @scalar/components/button). The exported component names are unchanged (ScalarButton, etc.)../helpers and individual component subpath exports so consumers can import directly from component subpaths instead of the package barrel, improving tree-shakingRework AppSidebar (and related UI) so document lists respect title + namespace filtering together, with clearer controls and layout/markup cleanup.
AppSidebar (and related UI) so document lists respect title + namespace filtering together, with clearer controls and layout/markup cleanup.PublishDocumentModal issue, and a minor tweak to ScalarSidebarSearchInput.Adds a new highlighted custom Tailwind variant (matching [data-highlighted]) to @scalar/themes and uses it in ScalarDropdownButton to restore the hove
#9211: feat: some polish for the scalar-app
#9211: fix(components): add highlighted Tailwind variant for Radix menu item highlight state
Adds a new highlighted custom Tailwind variant (matching [data-highlighted]) to @scalar/themes and uses it in ScalarDropdownButton to restore the hover and keyboard-navigation highlight in the workspace and team picker dropdowns.
#9211: feat: add team switching to the scalar app
#9211: fix: respect optional VITE_SCALAR_HOTKEY_SYMBOL_SET on ScalarHotkey to override OS-based modifier
This can be really useful when we want to have deterministic results on the CI
#9211: fix(components): remove tooltip when scope is disposed
### Patch Changes - #9086: feat: code split tailwind CSS to reduce bundle size
### Patch Changes - #9042: fix(components): set Scrolling listbox story to multiselect mode - #9048: fix: stabilize sidebar nested item refs for prope
### Minor Changes - #9045: feat: support title for the scalar menu component ### Patch Changes - #9045: fix(components): set specific padding and marg
### Minor Changes - #9021: feat: support title for the scalar menu component ### Patch Changes - #9020: fix(components): set specific padding and marg
Nothing published for this version
### Patch Changes - #8976: feat(components): add sidebar group loading state
Nothing published for this version
Nothing published for this version
### Patch Changes - #8866: feat(components): update and align header buttons
### Minor Changes - #8848: feat: support search for virtual text ### Patch Changes - #8827: chore: removed old client v1 code - #8849: fix(components)
### Patch Changes - #8769: feat(themes): add Tailwind v3 transform reset - #8767: feat(components): expose summary truncation state - #8779: feat(comp
### Patch Changes - #8692: feat: replace pretty-bytes dependency with internal helper - #8715: fix: correct main field in package.json to point to .js
### Patch Changes - #8630: docs: add JSDoc blocks to all components
Nothing published for this version
### Minor Changes - #8511: feat: support intermediate state for checkbox - #8526: feat: add support for custom combobox filter functions ### Patch Cha
Nothing published for this version
Nothing published for this version
### Patch Changes - #8466: chore: new build pipeline - #8491: feat(components): simplify blockquote styles
### Patch Changes - #8453: refactor: remove @ts-expect-error from ScalarTextArea #### Updated Dependencies - @scalar/oas-utils@0.10.8
### Patch Changes #### Updated Dependencies - @scalar/oas-utils@0.10.7
### Patch Changes #### Updated Dependencies - @scalar/oas-utils@0.10.6
### Patch Changes - #8327: fix: markdown tables with specified width attributes in td/th break the layout #### Updated Dependencies - @scalar/helpers@
### Patch Changes #### Updated Dependencies - @scalar/oas-utils@0.10.4
### Patch Changes #### Updated Dependencies - @scalar/helpers@0.4.0 - #8336: feat: support flushing any pending operations - @scalar/oas-utils@0.10.3
### Patch Changes #### Updated Dependencies - @scalar/oas-utils@0.10.2
### Patch Changes - #8366: fix(components): clean up search components and add snapshots #### Updated Dependencies - @scalar/oas-utils@0.10.1
### Patch Changes #### Updated Dependencies - @scalar/oas-utils@0.10.0 - #8266: support operation level authentication and servers
### Minor Changes - #8322: chore: bump required node version to >=22 (LTS) ### Patch Changes #### Updated Dependencies - @scalar/code-highlight@0.3.0
@scalar/code-highlight@0.3.0
@scalar/oas-utils@0.9.0
@scalar/use-hooks@0.4.0
@scalar/helpers@0.3.0
@scalar/themes@0.15.0
@scalar/icons@0.6.0
### Patch Changes - #8319: fix(components): fix adjust sidebar section line height #### Updated Dependencies - @scalar/oas-utils@0.8.3 - #8314: chore:
Your coding agent can read these notes before it upgrades. Set up the MCP server →