Skip to content

Svelte / SvelteKit

ACMS works with Svelte and SvelteKit using the same framework-agnostic client. This guide covers setup, Svelte stores for reactivity, and SvelteKit-specific patterns.

Terminal window
npm install @useacms/client @useacms/cli

Import acms and use it in your Svelte components:

<script>
import { acms } from '@useacms/client';
</script>
<section class="hero">
<h1>{acms.hero.title}</h1>
<p>{acms.hero.subtitle}</p>
<a href={acms.hero.ctaLink}>{acms.hero.ctaText}</a>
</section>

Fields are automatically registered when the component renders during development.

Create a Svelte store for reactive content updates:

stores/acms.ts
import { writable } from 'svelte/store';
import { acms, subscribe } from '@useacms/client';
function createAcmsStore() {
const { subscribe: storeSubscribe, set } = writable(acms);
subscribe(() => {
// Trigger Svelte reactivity on content changes
set(acms);
});
return { subscribe: storeSubscribe };
}
export const content = createAcmsStore();

Use the store in your components:

<script>
import { content } from '@/stores/acms';
</script>
<section>
<h1>{$content.hero.title}</h1>
<p>{$content.hero.subtitle}</p>
</section>
src/routes/+page.svelte
<script>
import { acms } from '@useacms/client';
</script>
<main>
<h1>{acms.home.title}</h1>
<p>{acms.home.description}</p>
</main>
src/routes/+layout.svelte
<script>
import { acms } from '@useacms/client';
</script>
<header>
<nav>
<span>{acms.site.name}</span>
</nav>
</header>
<slot />
<footer>
<p>{acms.footer.copyright}</p>
</footer>

Use acms in SvelteKit load functions for server-side content:

src/routes/+page.ts
import { acms } from '@useacms/client';
export function load() {
return {
title: acms.home.title,
description: acms.home.description,
};
}

Create acms.config.ts in your project root:

import { defineConfig } from '@useacms/client';
import { localFile, cloudflareKV } from '@useacms/cli/adapters';
export default defineConfig({
dev: localFile({ path: './acms.json' }),
production: cloudflareKV({
accountId: process.env.CF_ACCOUNT_ID,
namespaceId: process.env.CF_KV_NAMESPACE_ID,
apiToken: process.env.CF_API_TOKEN,
}),
strategy: 'build-time',
});
Terminal window
# Terminal 1
acms dev
# Terminal 2
npm run dev # SvelteKit dev server
<script>
import { acms } from '@useacms/client';
</script>
<ul>
{#each acms.features as feature, index}
<li>{feature}</li>
{/each}
</ul>
<script>
import { acms } from '@useacms/client';
</script>
{#if acms.banner.visible}
<div class="banner">
<p>{acms.banner.message}</p>
</div>
{/if}