example-svelte
Patterns for using Helios with Svelte. Use when building compositions in a Svelte environment, utilizing Svelte stores for reactive frame updates.
Best use case
example-svelte is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Patterns for using Helios with Svelte. Use when building compositions in a Svelte environment, utilizing Svelte stores for reactive frame updates.
Teams using example-svelte should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/svelte/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How example-svelte Compares
| Feature / Agent | example-svelte | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Patterns for using Helios with Svelte. Use when building compositions in a Svelte environment, utilizing Svelte stores for reactive frame updates.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Svelte Composition Patterns
Integrate Helios into Svelte components using Svelte Stores to manage frame state reactivity efficiently.
## Quick Start
### 1. Create Helios Store
Wrap the Helios instance in a readable store to make state reactive.
```javascript
// lib/store.js
import { readable } from 'svelte/store';
export const createHeliosStore = (helios) => {
return readable(helios.getState(), (set) => {
// Set initial value
set(helios.getState());
// Subscribe to updates
const unsubscribe = helios.subscribe((state) => {
set(state);
});
return unsubscribe;
});
};
```
### 2. Create Composition Component
```svelte
<!-- App.svelte -->
<script>
import { onMount, onDestroy } from 'svelte';
import { Helios } from '@helios-project/core';
import { createHeliosStore } from './lib/store';
let canvas;
let ctx;
const duration = 5;
const fps = 30;
// Initialize Singleton
const helios = new Helios({ duration, fps });
helios.bindToDocumentTimeline();
// Expose to window
if (typeof window !== 'undefined') window.helios = helios;
// Create Store
const heliosStore = createHeliosStore(helios);
// Reactive Drawing Statement
$: if (ctx && $heliosStore) {
draw($heliosStore.currentFrame);
}
function draw(frame) {
const width = canvas.width;
const height = canvas.height;
// Clear
ctx.clearRect(0, 0, width, height);
// Draw
const progress = frame / (duration * fps);
ctx.fillStyle = '#ff3e00';
ctx.fillRect(progress * width, height / 2 - 50, 100, 100);
}
onMount(() => {
ctx = canvas.getContext('2d');
canvas.width = 1920;
canvas.height = 1080;
// Initial draw
draw(helios.currentFrame.peek());
});
</script>
<canvas bind:this={canvas}></canvas>
<style>
canvas {
display: block;
width: 100%;
height: 100%;
}
</style>
```
## Svelte 5 (Runes)
For Svelte 5, use the `$state` rune to create a reactive state class.
### 1. Create Helios State Class
```javascript
// lib/helios.svelte.ts
import { Helios } from '@helios-project/core';
export class HeliosState {
currentFrame = $state(0);
fps = $state(0);
duration = $state(0);
isPlaying = $state(false);
constructor(helios) {
this.fps = helios.fps;
this.duration = helios.duration;
this.isPlaying = helios.isPlaying;
helios.subscribe((state) => {
this.currentFrame = state.currentFrame;
this.isPlaying = state.isPlaying;
});
}
}
```
### 2. Use in Component
```svelte
<!-- App.svelte -->
<script>
import { Helios } from '@helios-project/core';
import { HeliosState } from './lib/helios.svelte.js';
const helios = new Helios({ duration: 10, fps: 30 });
const state = new HeliosState(helios);
// Reactivity works automatically with state properties
$effect(() => {
console.log(`Current Frame: ${state.currentFrame}`);
});
</script>
<div>Frame: {state.currentFrame}</div>
```
## Key Concepts
- **Store Pattern:** Svelte's `readable` store is the perfect primitive for wrapping the `helios.subscribe` callback.
- **Reactive Statements (`$:`):** Use reactive statements to trigger redraws whenever `$heliosStore` updates.
- **Singleton Helios:** Initialize `Helios` outside the component script or in a separate module to ensure it persists if the component remounts (though for a root App component, inside `<script>` is fine).
## Audio Visualization Pattern
For audio visualization, use a **derived store** to compute analysis data (RMS, Waveform) reactively based on the current frame.
### 1. Create Audio Store
```javascript
// lib/audio.js
import { derived } from 'svelte/store';
export function createAudioStore(bufferStore, heliosStore) {
return derived(
[bufferStore, heliosStore],
([$buffer, $heliosState]) => {
if (!$buffer || !$heliosState) return { rms: 0, waveform: [] };
const data = $buffer.getChannelData(0);
const sampleRate = $buffer.sampleRate;
const time = $heliosState.currentFrame / $heliosState.fps;
// Analyze window around current time
const center = Math.floor(time * sampleRate);
const windowSize = 1024;
// ... (FFT logic or simple time-domain analysis) ...
return { rms: 0.5, waveform: [] }; // Mock result
}
);
}
```
### 2. Use in Component
```svelte
<script>
import { createAudioStore } from './lib/audio';
// ... setup heliosStore and bufferStore ...
const audioStore = createAudioStore(bufferStore, heliosStore);
$: if (ctx && $audioStore) {
const { rms, waveform } = $audioStore;
// Draw using rms/waveform
}
</script>
```
## Source Files
- Example: `examples/svelte-canvas-animation/`
- Example: `examples/svelte-runes-animation/`
- Example: `examples/svelte-audio-visualization/`Related Skills
example-vue
Patterns for using Helios with Vue. Use when building compositions in a Vue environment.
example-vanilla
Patterns for using Helios with Vanilla JavaScript/TypeScript. Use when building compositions without a framework, or for simple DOM/Canvas manipulations.
example-threejs
Patterns for using Helios with Three.js and React Three Fiber. Use when creating 3D animations or integrating WebGL scenes.
example-tailwind-animation
Learn how to use Tailwind CSS with Helios. Use for styling compositions and animating with utility classes.
example-solid
Patterns for using Helios with SolidJS. Use when building compositions in a SolidJS environment, utilizing signals for fine-grained reactivity.
example-signals-animation
Learn how to use Helios Signals for high-performance, fine-grained reactivity. Use for complex dependency graphs or when optimizing performance.
example-react
Patterns for using Helios with React. Use when building compositions in a React environment.
example-podcast-visualizer
Workflow for creating a podcast visualizer with multi-track audio mixing and DOM-based synchronization. Use when building audio-reactive compositions.
example-pixi
PixiJS integration patterns for Helios. Use when creating high-performance WebGL 2D animations with PixiJS.
example-p5-animation
Learn how to use P5.js with Helios. Use when creating creative coding sketches or generative art.
example-lottie
Lottie integration patterns for Helios. Use when rendering Lottie (Bodymovin) JSON animations synchronously with Helios.
example-gsap
Patterns for using Helios with GSAP (GreenSock). Use when integrating GSAP timelines with the Helios timeline for precise scrubbing and rendering.