Skip to content

Releases: vcode-sh/popser

v1.2.0

28 Feb 17:09

Choose a tag to compare

The "Sonner issues tab as a roadmap" release. Eight features, every one of them pulled from a real GitHub issue where someone asked Sonner for it and got silence. 39 new tests.

Added

  • Animation duration customization. --popser-transition-duration and --popser-anchored-transition-duration CSS custom properties. Pure CSS, zero JS. (Sonner #690)
  • Popover API support. Toast viewport uses popover="manual" + showPopover(). Toasts render in the top layer, above dialogs and modals. Progressive enhancement — falls back gracefully in older browsers. (Sonner #655, #667)
  • Expanded limit. expandedLimit prop on <Toaster>. Collapsed stack shows limit toasts, hover expands to expandedLimit. (Sonner #637)
  • Close button position. closeButtonPosition prop: "header" or "corner". Per-toast override supported. (Sonner #747)
  • AbortSignal for promise toasts. signal, aborted, and onAbort options on toast.promise(). Cancel in-flight requests and show a cancellation toast. (Sonner #681)
  • Entry direction. enterFrom option: "top" | "bottom" | "left" | "right". Override the default slide direction per toast. (Sonner #671)
  • RTL support. dir prop on <Toaster>: "ltr" | "rtl" | "auto". Flips positions, swipe directions, and animations.
  • Toast history. toast.getHistory() and toast.clearHistory(). Opt-in ring buffer via historyLength prop. Records creation and closure with timestamps.

Changed

  • 7 CSS files updated for new features (transitions, viewport, toast, controls).
  • types.ts expanded with new option interfaces for all 8 features.
  • index.ts barrel export updated with new type exports (ToastHistoryEntry).

Full Changelog: https://github.com/vcode-sh/popser/blob/main/CHANGELOG.md

Full Changelog: v1.1.1...v1.2.0

v1.1.1

28 Feb 11:14

Choose a tag to compare

The paperwork patch. No code changed. The docs got a promotion.

Added

  • Documentation site: popser.vcui.dev — full docs, interactive demos, changelog.
  • Why I built this — the honest version of the README's "Why" section.
  • Why Base UI, not Radix — the technical argument for headless primitives in 2026.
  • Collaborate — contribution guide with actual context, not just a checklist.
  • Interactive toast demos across docs pages (types, anchored, custom, styling).
  • Open Graph images and sitemap for the documentation site.

Changed

  • README.md rewritten: bundle size table, docs site links, Base UI positioning, contributing section.
  • CONTRIBUTING.md rewritten: architecture reference, human tone, actual guidance on what needs help.
  • package.json homepage now points to popser.vcui.dev instead of GitHub.
  • GitHub repo description and homepage updated.
  • Comparison docs updated with v1.1.0 bundle sizes and styles/min export.

No code changes

Zero changes to src/. Same build output as 1.1.0. If you're already on 1.1.0, this is just metadata.

Full Changelog: v1.1.0...v1.1.1

v1.1.0

28 Feb 09:56

Choose a tag to compare

Performance

Popser was never heavy, but now it's practically anorexic.

JS Bundle

Raw Gzipped
Before (1.0.0) 29.0 KB 6.6 KB
After (1.1.0) 13.4 KB 4.8 KB
Savings -54% -27%

CSS (@vcui/popser/styles/min)

Raw Gzipped
Before (1.0.0) 24.9 KB (7 files, unminified) 5.4 KB
After (1.1.0) 14.3 KB (single file, minified) 2.6 KB
Savings -43% -52%

Total shipped weight: 7.4 KB gzipped — less than half of Sonner's ~17 KB.

What changed

  • JS minification — enabled esbuild minification in tsup. The dist was shipping formatted code. It isn't anymore.
  • Flat CSS bundle — new @vcui/popser/styles/min export. Inlines all @import directives and minifies into a single file. No more 7 HTTP requests for CDN users. Modular imports (@vcui/popser/styles) still available.
  • Promise handler deduplication — the successHandler and errorHandler in toast.promise() were copy-pasted twins (~100 lines). Extracted into a shared buildPromiseHandler() factory.
  • Dead code removal — removed 3 unused constants (DEFAULT_EXPAND, DEFAULT_RICH_COLORS, DEFAULT_THEME).
  • Spinner optimisation — hoisted the 12-element spinner bar array to module scope. No more per-render allocation.
  • a11y fixes — added aria-hidden to decorative SVGs in the docs site.

New export

// Full modular CSS (unchanged)
import "@vcui/popser/styles";

// Single minified flat file (new)
import "@vcui/popser/styles/min";

Full Changelog: v1.0.0...v1.1.0

v1.0.0

27 Feb 08:34

Choose a tag to compare