@storyblok/svelte
@storyblok/svelte is Storyblok’s official development for Svelte applications.
Requirements
Section titled “Requirements”- Svelte version 5.0 or later
- Node.js LTS (version 22.x recommended)
- Modern web browser (e.g., Chrome, Firefox, Safari, Edge – latest versions)
Installation
Section titled “Installation”Add the package to a project by running this command in the terminal:
npm install @storyblok/svelte@latestConfiguration
Section titled “Configuration”Import and initialize the SDK using the access token of a Storyblok space.
import { apiPlugin, storyblokInit } from "@storyblok/svelte";import Page from "./Page.svelte";import Feature from "./Feature.svelte";
storyblokInit({ accessToken: "YOUR_ACCESS_TOKEN", region: "eu", use: [apiPlugin], components: { page: Page, feature: Feature, },});Components
Section titled “Components”Create a Svelte component for each block defined in Storyblok and registered in the configuration (include the page block). Each component will receive a blok prop, containing the content of the block.
<script> import { storyblokEditable } from "@storyblok/svelte";
export let blok;</script>
<div use:storyblokEditable="{blok}"> <h2>{blok.name}</h2></div>Fetching and rendering
Section titled “Fetching and rendering”In a +page.js file, use the client to fetch a story and render the content using StoryblokComponent.
/** @type {import('./$types').PageLoad} */export async function load({ parent }) { const { storyblokAPI } = await parent(); const response = await storyblokAPI.get("cdn/stories/home"); return { story: response.data.story, };}Then render the content in +page.svelte with StoryblokComponent:
<script> import { StoryblokComponent } from "@storyblok/svelte";
export let data;</script>
<StoryblokComponent blok="{data.story.content}" />storyblokInit
Section titled “storyblokInit”storyblokInit() creates an instance of the Storyblok API client and loads the Storyblok Bridge.
import { storyblokInit } from "@storyblok/svelte";
storyblokInit(OPTIONS);All options listed in the @storyblok/js reference are available. The following additional options are available:
| Key | Description | Type |
|---|---|---|
components | An object that maps Svelte components to Storyblok blocks. Each component receives a blok prop containing the content of the block. | object |
apiPlugin
Section titled “apiPlugin”apiPlugin configures the implementation of the Storyblok API. It is imported from @storyblok/js.
import { storyblokInit, apiPlugin } from "@storyblok/svelte";storyblokInit({ use: [apiPlugin],});See the @storyblok/js reference for further details.
useStoryblokApi
Section titled “useStoryblokApi”useStoryblokApi() returns the client instantiated in the application.
useStoryblok(URL, API_OPTIONS, BRIDGE_OPTIONS);For the API_OPTIONS, see the storyblok-js-client reference.
getStoryblokApi
Section titled “getStoryblokApi”getStoryblokApi() is an alias of useStoryblokApi().
useStoryblokBridge
Section titled “useStoryblokBridge”useStoryblokBridge() activates the Storyblok Bridge.
import { onMount } from 'svelte'import { useStoryblokBridge } from '@storyblok/svelte';onMount(() => { useStoryblokBridge(STORY_ID, CALLBACK, BRIDGE_OPTIONS)}For the BRIDGE_OPTIONS, see the @storyblok/preview-bridge reference.
StoryblokComponent
Section titled “StoryblokComponent”StoryblokComponent is a Svelte component that dynamically renders blocks from Storyblok. It accepts a blok prop, which should be a block from the Storyblok API. Any other props passed to StoryblokComponent will be passed directly to the block component.
<StoryblokComponent blok="{blok}" />Use it to iterate over blocks fields as follows:
<script> import { StoryblokComponent } from "@storyblok/svelte"; export let blok;</script>{#each blok.body as blok}<StoryblokComponent {blok} />{/each}storyblokEditable
Section titled “storyblokEditable”storyblokEditable() accepts a block from the Storyblok API and returns an object containing the HTML attributes to make elements editable in the Storyblok Visual Editor. See the @storyblok/js reference for further details.
As a Svelte action, storyblokEditable() should be called with Svelte’s use: directive, provided with a blok property:
<script> import { storyblokEditable } from "@storyblok/svelte";
export let blok;</script>
<div use:storyblokEditable="{blok}">{blok.title}</div>renderRichText
Section titled “renderRichText”This function converts a Storyblok rich text field into HTML.
<script> import { renderRichText } from "@storyblok/svelte";
let renderedRichText = $derived(renderRichText(blok.richtext_field));
export let blok;</script>
<div>{@html renderedRichText}</div>See the @storyblok/richtext reference for further details.
Further resources
Section titled “Further resources”Was this page helpful?
This site uses reCAPTCHA and Google's Privacy Policy. Terms of Service apply.
Get in touch with the Storyblok community