fimo-next and fimo-react alongside fimo at the same version:
- npm
- Bun
- pnpm
- Yarn
Configure the runtime
Connect the application
RenderFimoProvider once at the application root. It resolves the connection to your Fimo site on the server, hands only the public connection (tenant content URL, Branch, optional preview script) to the browser, and supplies React Query, labels, and the Studio preview script to everything below it. You do not create, copy, or read Fimo runtime environment variables.
- Locally, the connection comes from the linked site (
.fimo/project.json) and the active git branch, sogit checkoutswitches Branches. - Hosted previews and production builds receive it from the platform.
- To point the app at another host, set
FIMO_CONTENT_API_URL(and optionallyFIMO_ENV); an explicit value always wins over derivation.
withFimo in next.config adds the hosted preview origins to next dev. If you do not set Next.js’s devIndicators, Fimo hides it in hosted Previews while local next dev keeps Next’s default. Any explicit devIndicators setting is preserved:
Generate content clients
Createsrc/schemas/<Uid>.json and run fimo schemas push <Uid>. Fimo generates:
<Uid>.tsfor server reads and serialization;<Uid>.client.tsfor React Query hooks and hydration;<Uid>.types.tsas an internal shared type module;index.tsas the generated content registry.
fimo-next plus generated server modules. Client Components use fimo-next/client plus generated .client.ts modules. Do not import client modules into server-only code.
App Router
Wrap the root layout withFimoProvider from fimo-next. It is a Server Component, so no page, route, or component receives a runtime prop:
.client hooks and useLabels from fimo-next/client under that provider. fimo-next requires @tanstack/react-query as a peer dependency.
FimoProvider also owns the optional Studio preview runtime. Application code does not add a preview bridge, read Fimo preview environment variables, or inject a preview script.
SEO values and routes
The App Router starter reads global values from SEO settings in the root layout and converts them to Next’s native exports:generateViewport
only when its theme color differs; otherwise it inherits the root color.
{{article.title}} uses the supplied content. Missing or empty template values
fall back for the entire field to the global value.
Set global values at seo and route overrides at routes.<id>.seo in your
existing Fimo config (normally .fimo/config.json), preserving other keys:
toNextMetadata maps title, description, site name, site base URL, share image,
favicon, Twitter account, robots and social locale. toNextViewport maps theme
color, which Next renders separately from metadata. The converters are pure
and accept FimoSEO from fimo/seo. Missing SEO produces an empty object.
The Node reader uses Fimo’s current or legacy config file, with optional
rootDir for monorepos. Invalid JSON and read failures other than a missing
file throw. Static output needs a rebuild after config changes; cached routes
follow your app’s revalidation policy. Fetched content can stay cached across
builds, so use your data-cache invalidation policy and check the rendered value
after a content edit. For Edge or bundled config, use
resolveSeoForPath(pathname, publicSeoConfig, routeData) from fimo/seo and
pass its result to the same converters. Include the selected config in your
server deployment when using a custom config location.
An Edge page’s ancestor layouts must also use Edge-safe data, not the Node reader.
Next derives social titles/descriptions and Twitter images from the final page
metadata when those fields are unset. Keep one title-suffix owner; use Next’s
absolute title form when a Fimo template already includes the full suffix.
Next’s layout title template does not apply to a page in that same segment;
give Home a complete title if it needs the same suffix.
Canonical URLs use the current route relative to the configured site base.
Custom canonical rules, hreflang, sitemaps and robots.txt remain yours.
When the SEO settings have a site name and URL, the starter’s root layout also
renders the site’s Organization and WebSite JSON-LD. buildSiteSchemas returns
nothing until both are set; serializeJsonLd escapes the JSON for a script tag:
buildFimoMetadata(rootDir?) and buildFimoViewport(rootDir?) calls from fimo-next
remain supported for global defaults. Their argument is a directory, not a route.
Pages Router
Wrap the root inpages/_app.tsx with FimoProvider from fimo-next/client. Pages Router has no Server Component above _app, so this provider resolves the connection while the server renders _app and writes it into the document for the browser:
getStaticProps and getServerSideProps must return plain JSON. Serialize tracked content before returning props, then hydrate it with the generated client module:
getServerSideProps. Static slug routes list slugs in getStaticPaths and load entries with getBySlug().
Labels and locales
Pass the locale already resolved by the Next.js application into Fimo reads and providers.