One component library.
Every interface you'll ever ship.
Midnight Owl UI is a fully-typed, accessible Vue 3 component library with Tailwind v4 theming and genuine dual compatibility, plain Vite apps and Nuxt 4 SSR, from one shared source.
Why teams choose Midnight Owl UI
A free, fully-typed component library built for real production apps — themeable end-to-end, dual-runtime by design, and zero-setup exactly where setup usually gets tedious.
Full range, one place
From the most basic building block to advanced panels and data display, every component lives in a single source of truth.
Themeable end-to-end
Tailwind v4 design tokens drive every color and spacing value, live-editable in Theme Studio and applied instantly, no rebuild step.
Fully typed
Props, emits, and state are typed throughout, so you never have to guess what a component accepts.
SSR-safe, dual runtime
The same source ships for a plain Vue 3 + Vite app and a Nuxt 4 SSR app, with no framework-specific APIs baked in.
Toast, zero setup
useToast() auto-mounts itself the first time it is called, no provider component to place in your tree.
Accessible by default
Keyboard navigation, focus-visible rings, and ARIA attributes are wired into every interactive component.
Capability Comparison
Styled with classes you can actually read
Nothing below is invented for the pitch — every swatch and preview reads straight from defaultTheme, the same design-token object Theme Studio's own editors read and write live.
bg-primary-500defaultTheme.colors.primary — the raw scale Theme Studio's palette editor reads.
bg-{key} · text-{key}The six semantic keys in defaultTheme.light — edited live on Theme Studio's mode editor.
rounded-{key}defaultTheme.layout.borderRadius — edited in Theme Studio's Architecture Core card.
text-{key}defaultTheme.layout.fontSize — the same scale behind Theme Studio's Font Scalings panel.
See it composed, not just listed
These are the real components, rendered exactly as they'd appear in a dashboard or a form — not a screenshot, not code, try them.
From install to UI in two files
Register the plugin once — every component is globally available, no imports, no provider wrappers.
A calendar that's headless and turnkey
Month, week, day, agenda, and year views, recurring events, drag-to-move, timezone-aware rendering, and pluggable ICS / Google sources — the same <Calendar /> you'd drop into an app, live below.
July 2026
Built for the hard components, not just the easy ones
Buttons and badges are table stakes. These three ship with the depth that usually takes teams weeks to build in-house — try them right here, this is the real component.
Rich Text Editor
A full Tiptap and ProseMirror editor, themed to match your app instead of looking bolted on. ProseMirror renders straight to the DOM with no virtual-DOM diffing, so typing stays smooth in a long document. A max-length guard blocks input past the limit as you type, and a live character count is built in.
Range Date Picker
Single-date and range selection live in the same component, with quick presets like "Last 7 Days" and "This Month" for the ranges people actually pick. min/max bounds disable dates outside your allowed window, and typing a date is mask-guided so a malformed value never gets halfway committed.
Tree Select
Nested option trees, multi-select with removable chips, and instant search — for data a plain <select> can't express, like an org chart or a category tree. Selecting a parent cascades to its children, and tree-line styling keeps deep hierarchies readable instead of just indented text.
Toasts that write themselves
useToast() is a global singleton — call add() (or a severity shorthand) from anywhere and it lazily mounts its own host on first use. No <ToastProvider> ever gets placed in the tree by hand.
See it composed as a real workspace
A batch-entry form adds new rows above the table; a Table bound through useList handles search, per-column filters, sorting and pagination; inline InputText/Select/DatePicker/Toggle cells validate live via useDataValidator; a guarded Save button wraps toast.promise() — the same patterns your own app would use, working together instead of shown one at a time.
1 to 4 of 8 records
Not reinvented from scratch
The hard problems above are handed off to proven, widely-used libraries, not homegrown one-offs.
Free library, optional hosted extras
@midnight-owl/ui itself is 100% free and MIT-licensed — every component, no gating, no crippled 'lite' versions. Pro and Plus are low-cost annual plans that only cover the hosted Theme Studio, the one part of the stack that runs on a server we control.
Free
The component library, unrestricted
- Every component in @midnight-owl/ui — no exceptions, no locked components
- The full theming engine and semantic design tokens
- The auto-mounting toast system
Pro
Up to 10 saved themes
- Everything in Free
- Advanced Theme Studio customization — per-shade color editing, semantic token overrides, typography & layout control
- Up to 10 cloud-saved themes, synced across devices
Plus
Unlimited saved themes
- Everything in Pro
- Unlimited cloud-saved themes
- Team/org sharing of a saved theme preset