Svelte State Management with Stores

frontend
TypeScript
architecture
minimalist
Remix

Comprehensive guide to Svelte stores including writable, readable, and derived stores.

12/8/2025

Prompt

Svelte Stores State Management

Implement reactive state management for [Application] using Svelte stores.

Requirements

1. State Structure

Define stores for:

  • [Store 1] - [Data type] (e.g., user profile)
  • [Store 2] - [Data type] (e.g., app settings)
  • [Store 3] - [Data type] (e.g., UI state)

2. Store Types to Implement

Writable Stores

For mutable state that components can update:

  • Form data
  • User preferences
  • UI toggles
  • Shopping cart

Readable Stores

For values controlled externally:

  • Server time
  • Geolocation
  • WebSocket connections
  • Animation frames

Derived Stores

For computed values based on other stores:

  • Filtered lists
  • Formatted data
  • Aggregated values
  • Combined state

Custom Stores

With specific business logic:

  • Custom update methods
  • Validation logic
  • Side effects
  • Auto-save functionality

3. Store Organization

Structure stores in:

src/stores/
  ├── [domain]Store.ts  (e.g., userStore.ts)
  ├── [domain]Store.ts  (e.g., cartStore.ts)
  └── index.ts          (exports)

4. Persistence

Implement if needed:

  • LocalStorage sync
  • SessionStorage backup
  • IndexedDB for large data
  • Auto-save on changes

5. TypeScript Integration

Ensure full type safety:

  • Type all store values
  • Type custom methods
  • Type derived functions
  • Export types for components

Implementation Pattern

import { writable, derived, readable } from 'svelte/store'
import type { Writable } from 'svelte/store'

// Writable store
export const [storeName]: Writable<[Type]> = writable([initialValue])

// Readable store
export const [storeName] = readable([initialValue], (set) => {
  // Setup logic
  const interval = setInterval(() => {
    set([newValue])
  }, [interval])
  
  // Cleanup
  return () => clearInterval(interval)
})

// Derived store
export const [derivedName] = derived(
  [sourceStore],
  ($[sourceStore]) => {
    return /* computed value */
  }
)

// Custom store with methods
function create[StoreName]() {
  const { subscribe, set, update } = writable<[Type]>([initial])
  
  return {
    subscribe,
    [method1]: () => update(state => /* logic */),
    [method2]: (value: [Type]) => set(value),
    reset: () => set([initial])
  }
}

export const [storeName] = create[StoreName]()

Usage in Components

<script lang="ts">
  import { [storeName] } from '$lib/stores'
  
  // Auto-subscribe with $
  $: console.log($[storeName])
  
  function updateStore() {
    [storeName].set([newValue])
    // or
    [storeName].update(current => /* new value */)
  }
</script>

<p>{$[storeName]}</p>

LocalStorage Persistence Pattern

const stored = localStorage.getItem('[key]')
const [storeName] = writable(stored ? JSON.parse(stored) : [defaultValue])

[storeName].subscribe(value => {
  localStorage.setItem('[key]', JSON.stringify(value))
})

Best Practices

  • Keep stores focused and single-purpose
  • Use derived stores for computed values
  • Implement custom stores for complex logic
  • Add TypeScript for type safety
  • Clean up subscriptions in readable stores
  • Use $ prefix for auto-subscription in components
  • Avoid storing derived/computed state

Tags

svelte
state-management
stores

Tested Models

gpt-4
claude-3-5-sonnet

Comments (0)

Sign in to leave a comment

Sign In
\n\n

{$[storeName]}

\n```\n\n## LocalStorage Persistence Pattern\n\n```typescript\nconst stored = localStorage.getItem('[key]')\nconst [storeName] = writable(stored ? JSON.parse(stored) : [defaultValue])\n\n[storeName].subscribe(value => {\n localStorage.setItem('[key]', JSON.stringify(value))\n})\n```\n\n## Best Practices\n- Keep stores focused and single-purpose\n- Use derived stores for computed values\n- Implement custom stores for complex logic\n- Add TypeScript for type safety\n- Clean up subscriptions in readable stores\n- Use $ prefix for auto-subscription in components\n- Avoid storing derived/computed state"}
Svelte State Management with Stores | vibeprompt.directory