Overview
Runes are reactive utilities built on Svelte 5’s runes system. They provide clean, reusable patterns for common reactive scenarios like viewport tracking, color scheme detection, and lifecycle management.Installation
Import
API Reference
colorScheme
Tracks the user’s color scheme preference via theprefers-color-scheme media query.
Returns
The current color scheme preference
Example
Implementation Details
- Automatically listens to
prefers-color-schemechanges - Returns
undefinedduring server-side rendering - Cleans up event listeners on component unmount
- Reactive to system theme changes
container
Tracks the dimensions of a container element using ResizeObserver.Returns
Current dimensions of the attached element
Attachment function to bind to an element
Example
Use Cases
- Responsive component behavior
- Dynamic layout calculations
- Conditional rendering based on container size
- Chart and visualization sizing
Implementation Details
- Uses native ResizeObserver API
- Provides
clientWidthandclientHeightmeasurements - Automatically disconnects observer on cleanup
- Returns new object reference on each update
viewport
Tracks viewport dimensions using the Visual Viewport API.Returns
Current viewport dimensions
Example
Implementation Details
- Uses
window.visualViewportfor accurate measurements - Updates on window resize events
- Handles mobile viewport variations (keyboard, etc.)
- Returns
undefinedduring SSR
reducedMotion
Tracks the user’s motion preference via theprefers-reduced-motion media query.
Returns
true if the user prefers reduced motion, false otherwiseExample
Accessibility
Respecting user motion preferences is crucial for accessibility:Implementation Details
- Listens to
prefers-reduced-motion: reducemedia query - Default value is
false(animations enabled) - Reactive to system preference changes
- Cleans up event listeners automatically
mounted
Tracks component mount/unmount lifecycle state.Returns
true when component is mounted, false when unmountedExample
Use Cases
- Conditional rendering of client-side only components
- Delaying operations until after mount
- Preventing SSR hydration mismatches
- Initializing browser-only APIs
Type Definitions
ColorScheme
Viewport
Advanced Patterns
Combining Multiple Runes
Responsive Container Queries
Custom Rune Pattern
You can create your own runes following the same pattern:Browser Compatibility
- colorScheme: All modern browsers
- container: ResizeObserver required (polyfill available)
- viewport: Visual Viewport API (fallback to window for older browsers)
- reducedMotion: All modern browsers
- mounted: All environments
Performance Considerations
- Runes use Svelte’s fine-grained reactivity
- Event listeners are automatically cleaned up
- ResizeObserver is efficient for dimension tracking
- Media query listeners have minimal overhead
Related
- Attachments - DOM element attachments
- Context - Context utilities
- Shared - Shared utilities