Just the components
You have a Svelte 5 app (any backend, or none) and want delightful UI.
- Installation — add the package and design tokens
- Quick Start: Components — build a form in minutes
- Component reference — browse all 55 components
DelightStack is two products that share one design language:
@delightstack/components) — 55 polished, accessible Svelte 5
components with thoughtful micro-animations and a complete design-token system. It drops into
any Svelte 5 app and has no backend requirements.You can adopt either half without the other. Most people start with the components; teams building on Cloudflare get a full-stack toolkit.
Just the components
You have a Svelte 5 app (any backend, or none) and want delightful UI.
The full stack
You’re building a full-stack app on Cloudflare Workers and want batteries included.
light-dark(), and container queries on
the frontend; SQLite-backed Durable Objects at the edge on the backend. No heavy abstractions.DelightError class, snake_case data, camelCase
callbacks, and Svelte 5 runes throughout.Svelte 5 Native
Built from the ground up with runes ($props, $state, $derived, $effect), snippets, and the {@attach} directive. No legacy compatibility layers.
55 Components
Everything you need — buttons, modals, forms, tables, charts, maps, video players, and more.
Dark Mode Built-in
Every component supports light and dark mode via CSS light-dark(). No JavaScript theme switching required.
Accessible
ARIA attributes, keyboard navigation, focus management, and prefers-reduced-motion support baked into every component.
Design System Included
A complete set of CSS custom properties for colors, typography, spacing, shadows, and animations — fully customizable.
Type-Safe
Full TypeScript support with exported types for all component props, events, and data structures.
All 55 components — across Actions, Display, Feedback, Form, Media, and Navigation — import from a single entry point:
<script> import { Button, Input, Modal } from '@delightstack/components';</script>
<Button onclick={() => console.log('clicked!')}> Click Me</Button>Components use callback props (onclick, onchange) instead of dispatched events, support
two-way binding via bind:value, and automatically show loading states when callbacks return
Promises. Browse the full catalog in the component reference, or see them
all working together in the Dashboard Demo.
Each package’s server runs inside a Durable Object — one instance per tenant, single-writer, with transactional SQLite storage. There’s no external database, queue, or cache to provision; everything runs on Cloudflare’s network, close to your users.
Most packages ship a reactive Svelte 5 client ($state/$derived with optimistic updates) and
a create*Handle() that plugs straight into SvelteKit’s handle hook. The
Architecture page explains how the pieces are wired together.