Skip to main content
SvelteKit owns routes, load functions, locale resolution, links, document metadata, and per-page SEO. Fimo connects content, labels, source tracking, the site-wide SEO defaults from Studio’s SEO settings, and an optional Studio preview bridge.

Compatibility

The current adapter targets SvelteKit 2 with Svelte 5. The acceptance fixture uses SvelteKit 2.70.2, Svelte 5.56.8, and Vite 8.2.0. SvelteKit 1 and Svelte 4 are outside the current tested boundary.

Configure the runtime

Install fimo-sveltekit at the same version as fimo. It carries every SvelteKit surface: content, labels, components, the Vite plugin, and the hosting adapter.
Add Fimo’s Vite plugin beside SvelteKit’s plugin:
This tags native Svelte elements during development for Studio source mapping. For Fimo hosting, use the adapter:
It does not replace SvelteKit routing or alter production output.

Content and labels

Use SvelteKit server load functions with the request event:
Pass createFimo the locale your application resolved. If you omit it, Fimo sends i18n.defaultLocale from .fimo/config.json, and when that is unset the API answers with your site default. getLabels follows the same rule: add locale once your application resolves one, and without it the API answers with your site default, which the returned snapshot reports as its locale. Fetch labels in the root server layout and pass the snapshot to FimoProvider. Fimo resolves the injected content API URL internally; do not import a Fimo environment variable or hardcode a tenant URL:
Render tracked values with native components from fimo-sveltekit/components:

SEO defaults

Resolve SEO in the existing server load and return seoHead. Preserve the load’s other data, including labels. A content page resolves after its read: resolveSeoForPath(event.url.pathname, config, { article }), applies app overrides, and returns its complete seoHead using toSeoHead.
Render the final merged route data from one head owner. A leaf load’s seoHead replaces the default head as a whole.
Do not add a second page title beside root social tags. Use the same final values for all tags and check client navigation, including returning to a page without overrides. Existing apps can keep their current head component and extend it in place. The example canonical policy fits a root-hosted site; preserve existing production domains, base paths and trailing slashes. Imported config needs sync and rebuild/redeploy. Content freshness follows the app’s load, prerender and cache policy.

Live preview

FimoProvider also owns the optional Studio preview runtime, including script loading, SvelteKit navigation, and content refresh. Application code does not need a Fimo server hook, a separate preview component, a preview environment lookup, or a script tag.

Boundaries

  • SvelteKit owns routing, history, 404s, locale URLs, and per-page SEO; the root layout renders Fimo’s site-wide SEO defaults.
  • Fimo’s Vite plugin owns development source tagging only.
  • FimoProvider owns labels and the optional Studio preview bridge.
  • Do not add React, React Query, or a Vite SPA fallback to SvelteKit.