Skip to content

Content Strategies

ACMS supports two content delivery strategies. The right choice depends on how often your content changes and your performance requirements.

Content is fetched once during the build process and baked into the output. This is the simplest approach for most sites:

export default defineConfig({
strategy: 'build-time',
});

Your content is resolved at build time, so pages load with zero runtime overhead.

Content is fetched at runtime from the storage adapter. This enables updates without rebuilds:

export default defineConfig({
strategy: 'runtime',
});

Content updates are reflected immediately without redeploying.

Build-TimeRuntime
PerformanceFastest — content is static HTMLSlightly slower — fetches on each request
Content freshnessStale until next buildAlways up-to-date
HostingAny static host (Vercel, Netlify, S3)Requires server or edge runtime
Best forMarketing sites, blogs, docsDashboards, frequently updated content
Rebuild needed?Yes, on every content changeNo
FrameworkRecommended StrategyNotes
Next.jsBuild-time with ISRUse revalidate for periodic updates
AstroBuild-timeStatic by default, ideal fit
SvelteKitBuild-timeUse prerender for static pages
NuxtBuild-timeUse nuxi generate for static output
RemixRuntimeLoader-based, natural fit for runtime
Vanilla JS / SPARuntimeNo build step to bake content into

You can use both strategies in the same project. For example, use build-time for marketing pages and runtime for a user-facing dashboard:

// Marketing page — built statically
export async function getStaticProps() {
return { props: { title: acms.marketing.title } };
}
// Dashboard page — fetched at runtime
export default function Dashboard() {
return <h1>{acms.dashboard.heading}</h1>;
}

The strategy setting in acms.config.ts sets the default, but your framework’s data-fetching patterns ultimately control when content is resolved.