How Strapi live preview lets editors check drafts before publishing
Strapi live preview renders unpublished content from the Strapi admin panel through a front end your team controls. An editor opens a draft entry, selects the preview option, and sees the page as readers will see it once it is published, while the draft stays out of the public site. For a team that edits pages visually, this closes the gap between the form fields in the admin panel and the layout that reaches readers, so a review does not depend on someone guessing how a headline wraps or how a component sits on a page.
Teams usually need live preview in three situations. The first is a headless site where editors compose pages from components or dynamic zones and cannot judge the result from field values alone. The second is a multi-page layout where one shared component appears on many routes, so an edit in one entry can affect several pages. The third is an approval step, where a reviewer needs to see the exact result before content moves to the next stage. If editors only maintain short text fields that feed a simple template, the effort may not pay back, and a shared staging URL may be enough.
The build has three parts that your team and the implementation partner must agree on. First, the preview URL for each content type, configured in the admin panel and pointing to a route on the front end. Second, a route in Next.js that enables draft mode, or a Nuxt server route that switches the data source to drafts, after checking a secret that only Strapi knows. Third, the data fetching code, which must request draft versions through the Strapi API when preview is active and published versions otherwise. Confirm how your Strapi 5 version exposes drafts through the Document Service API and the REST or GraphQL layer before writing the fetch logic.
The behavior depends on three things. The front end decides whether drafts can be fetched at all, how caching and static generation treat preview requests, and whether the preview route can be shared with reviewers safely. The Strapi plan decides which preview layout editors get, and the pricing page lists Community as free with unlimited users, Growth at 45 US dollars per month including 3 users, and Enterprise at custom pricing, so confirm the preview option for each plan against the current plan documentation before choosing one. The content model decides how much preview work each page needs, since relations, components, dynamic zones and localized fields all change what the front end must fetch.
Plan for three risks before rollout. A preview endpoint left open or a secret shared widely lets anyone view unpublished content, so store the secret in your secrets manager and rotate it under a documented process. Cached pages can show old content in preview, so test the cache behavior on each route type. Editors may assume a preview matches production when a feature differs between environments, so ask a small group of editors to check a draft on a staging instance against a published page and record every mismatch before the feature reaches the whole team.
Full-screen preview or side-by-side Live Preview: which fits your plan
This table compares three ways editors can see unpublished Strapi content: full-screen preview, side-by-side Live Preview, and a custom preview URL wired to your front end. Read each row for what the editor sees, the plan it needs, the front-end work it implies and when it fits. Confirm the current preview feature split on the Strapi pricing page before you choose, because plan features can change.
| Option | What the editor sees | Plan and front-end work | When it fits |
|---|---|---|---|
| Full-screen preview | A full-screen view of the page as it will look, opened from the entry in the admin panel. | Free Community plan. The front end needs a preview route that fetches draft content, such as Next.js draft mode or a Nuxt preview handler. | Teams on the free plan that review whole pages and can accept a separate view of the editing screen. |
| Side-by-side Live Preview | The entry form beside the rendered page, updating as fields change. | Growth or Enterprise plan. Growth lists at 45 US dollars per month including 3 users. The front end must render draft data for the same routes. | Editors who change layout-heavy content often and whose budget covers a paid plan. Confirm the plan that includes it. |
| Custom preview URL | A preview button that opens a route on your own site for the selected entry. | Set in the admin configuration. Needs a secret-protected route, draft mode toggle and a mapping from each content type to its page path. | Teams that need preview on a staging host, per-locale routes, or a setup the built-in options do not cover. |
| Preview with releases | Draft changes in a release batch viewed before the scheduled date. | Content history and releases start at Growth. The preview route must accept the release context or show the draft version. | Teams that publish coordinated batches across content types and need to check them before they go live. |
| Preview with review workflows | The entry at its current review stage, with the approver's view tied to the stage. | Review workflows are an Enterprise feature. Confirm whether reviewers can open preview at each stage and whether the front end needs changes. | Organizations that require a named approval stage before publishing and need reviewers to see the same draft. |
| Confirm before build | Not applicable to editors until the choice is made. | Ask the vendor which preview features each plan includes and whether custom preview URLs are available on your plan. | Before you write front-end code, so the route design matches the plan you will buy. |
How the preview URL and draft mode connect Strapi to Next.js and Nuxt
Live preview works as a chain of four requests, and each link in that chain needs a deliberate setting. An editor opens a document in the Strapi admin panel and selects the preview action, which opens a URL on your front end. That URL carries the document identifier, the content type, and a secret or token that proves the request came from the admin panel. The front end receives the request, validates the secret, and then asks the Strapi API for the draft version of the content instead of the published one. The page renders with that draft data, and the editor sees the unpublished changes. Your team should draw this path on a whiteboard before the build starts, labeling where the secret is created, where it is stored, and which service checks it.
Next.js and Nuxt handle the enabling, disabling and secret checks in different ways, so the design choices differ. In Next.js, draft mode is a framework feature: a preview route validates the secret, turns on draft mode through a cookie, and page code checks that state to decide which content to fetch. Turning draft mode off is handled by a separate exit route that clears the cookie. In Nuxt, the preview experience is typically built as a preview route in your application that reads the query parameters, verifies the secret, and passes a flag into data fetching. Teams should confirm the current draft mode behavior and any preview module they plan to use against the exact framework version in their repository, because the route names, cookie handling and recommended patterns change between releases. The secret should be a long random value stored as an environment variable on both sides, never in client-side code.
The exact steps depend on the front end version and the Strapi version. Strapi 5 replaced the Entity Service API with the Document Service API, and the preview request must read draft and published status from the correct parameters for that version. If the front end still calls v4 style endpoints or relies on a response format that changed, editors may see published content labeled as a draft, or see nothing at all. Before you commit to a design, check the Strapi 5 migration guidance for your version, confirm the response format your queries expect, and test with a document that has a draft and a different published version. The same check matters after any Strapi minor upgrade, since the admin panel preview integration can change alongside the API.
Treat the preview secret and the draft token as access credentials. Anyone who holds a valid preview URL can see unpublished content, so restrict which roles can open the preview action and confirm the front end rejects requests with a missing or expired secret. Plan for the case where a draft contains data that must not appear on a public domain, and decide whether preview runs on a separate host with its own access control. Also decide who owns the secret rotation procedure and how it is changed on both the Strapi and front end environments at once, so preview does not break during a deployment.
Wiring Strapi live preview to a Next.js or Nuxt front end, step by step
This sequence connects the Strapi 5 admin panel to a Next.js or Nuxt front end so editors can view unpublished drafts before they publish. The finished setup uses a read-only role, a preview route guarded by a shared secret, and a preview URL for each content type, and each step ends with a check you can record.
Confirm Strapi and database versions
The platform engineer checks the running Strapi 5 version, the database and the Node.js runtime against the Strapi installation requirements. Strapi 5 supports PostgreSQL 14 or later, MySQL 8.0 or later, MariaDB 10.3 or later and SQLite 3, does not support MongoDB or other NoSQL databases, and runs only on Active or Maintenance LTS Node.js versions. This step is done when the versions are written into the change record and match the documentation for the installed release.
Create a read-only role for draft reads
An administrator creates a dedicated API token or role for the preview function. It should allow find and findOne on only the content types the front end renders, with no create, update or delete permissions. Confirm the exact admin settings screens and the draft status parameter against the Strapi documentation for the installed version. The step is done when a request with the token returns a draft entry and a write request with the same token is refused.
Add a preview route with a shared secret
A front-end developer adds a preview route to the Next.js draft mode handler or the Nuxt equivalent. The route accepts a shared secret, a document identifier and a content type, validates the secret, enables preview mode and redirects to the matching page. The secret is stored in the hosting platform's secrets store, not in source control. The step is done when a request without the secret is rejected and a request with the secret enables preview mode for the session.
Configure preview URLs per content type
An administrator opens the preview settings in the Strapi admin panel and maps each content type to the front-end route that renders it, passing the secret and document identifier as the route expects. Confirm the location of these settings for the installed version in the Strapi docs, since admin screens change between releases. The step is done when the preview button opens the correct page for every mapped content type on the staging site.
Verify drafts show and published pages stay unchanged
The tester edits an entry in the admin panel and adds a unique marker word to a draft field without publishing. The marker should appear in the preview but not on the public page. After that, the tester publishes the entry and confirms the public page now shows the change. The step is done when the results are recorded for each content type, including the public page check before and after publishing.
Test on staging with a real editor account
The tester signs in to staging with a named editor account that uses the same role as production editors, not an administrator account. The editor opens previews from the admin panel, checks that only permitted content types appear, and confirms the preview view works in the layout your plan supports. The step is done when the editor signs off in writing and any access gaps found during testing are logged and fixed before production rollout.
Next.js draft mode and Nuxt: how each front end handles drafts
Next.js draft mode works as a per-browser switch. An enable route, called with a preview secret and a target path, sets a cookie that tells the framework to serve draft content to that browser instead of cached published output. A disable route clears the cookie. Page code then fetches draft data whenever the flag is on, so one codebase serves both published and draft views.
Decisions to make before building:
- Rendering mode: statically generated pages must check the draft flag at request time, so list which pages must render per request.
- Caching: draft responses must stay out of shared caches and out of the published build. Keep draft fetches in a separate path from public cache rules.
- Secret handling: the enable route should accept only a secret stored in server environment variables, compared on the server and rotated when the preview is retired.
- Token location: the Strapi credential used for draft reads belongs in server-side configuration, never in client bundles or in the cookie.
Confirm the current draft mode API, cookie options and any Strapi preview settings against the Next.js and Strapi versions you plan to run.
A Nuxt setup usually exposes a dedicated server route for preview. It receives a document identifier, a locale and a short-lived token from the preview link in the Strapi admin, fetches the draft version on the server, renders the page and returns it to the editor. Because the draft is fetched and rendered on the server, the preview credential stays with the server, though client code still receives the draft data it needs to display the page.
Decisions to make before building:
- Rendering mode: preview requests render on the server for each request, while published routes can remain pre-rendered. Decide whether preview pages hydrate in the browser or show a server-rendered view only.
- Caching: send private or no-store cache headers on preview responses, and exclude preview paths from the CDN rules used for published pages.
- Secret handling: validate the token on every request, reject unknown document identifiers and set a short expiry so a leaked link stops working quickly.
- Token location: keep the preview token and API credentials in server runtime configuration, and avoid exposing them through public runtime config.
Confirm the current preview integration guidance for your Nuxt and Strapi versions, including how the admin preview URL is passed to the route.
Both paths need the same Strapi-side work: a preview URL for each content type, a shared secret, and a draft-aware data fetch. The difference lies in how much routing, caching and session handling your team builds itself. Next.js draft mode supplies the cookie and enable and disable mechanics, so most effort goes into the fetch layer and cache rules. A Nuxt route is ordinary server code, so the team designs the token check, expiry and cookie or query handling directly.
Cost components and what drives them:
- One-time: route and token design, preview URLs for each content type and locale, cache rule changes and end-to-end tests from the Strapi admin.
- Recurring: framework and Strapi upgrades that touch preview code, secret rotation and monitoring of preview endpoint errors.
- Cost drivers: the number of content types with preview, multi-locale routing, the share of pages that are pre-rendered and how many relations each draft page joins.
- Quote questions: ask whether the quote covers one or both front ends, which preview URLs are included, whether cache rule changes are in scope and who owns framework upgrades.
Ask the implementation partner to state these items in the written scope before work starts.
Protecting draft content and preview tokens in Strapi live preview
Live preview lets editors see unpublished Strapi content through Next.js draft mode or Nuxt, and each preview path creates another route to draft data. The cards cover the risks that expose draft content or preview credentials, followed by the operational controls that contain them across environments. Administrator login hardening is a separate workstream.
Draft content leaking through URLs and caches
Draft entries reach the public site when a preview URL, a slug or a cached page is reachable without authentication. Check that the public build only fetches published content, that preview pages send no-store or private cache headers, and that CDN rules do not store draft responses in a shared cache. Confirm that preview URLs are unguessable and excluded from search engine indexing.
Preview secrets exposed in client code
The secret that enables draft mode or the Nuxt preview route must stay on the server. Any variable exposed to the browser, or any token passed into a client component, ends up in JavaScript that anyone can read. Search the built output for the secret value and confirm it is absent before each release.
Over-broad API tokens that read drafts
A token used for preview should only see the content types and fields that the preview pages render. A full-access token, or a role that grants draft reads on every collection, lets anyone holding the token pull unpublished content from any type. Review token permissions per content type and field, and remove access to collections the front end never queries.
Preview routes left open after launch
Preview endpoints often ship with the production site and remain reachable after the project goes live. Make disabling draft mode and the preview route part of the launch checklist, confirm that routes return an error without a valid secret, and retire or protect old preview hosts on staging domains with access control.
Least-privilege roles and per-environment tokens
Create a separate token for each environment, such as local, staging and production, so that a leaked staging credential cannot read production drafts. Give editors roles that match their stage of work, and keep publish rights away from preview-only accounts. Administrator login is hardened separately: Strapi SSO covers only admin panel sign-in through an identity provider such as Microsoft Azure Active Directory, while end-user access is handled by the Users and Permissions plugin.
Secret rotation and write-back checks
Rotate preview secrets and API tokens on a schedule and after any staff change, and confirm the front end works with the new values before revoking the old ones. Test that preview requests are read-only: the front end should call only read endpoints in draft mode, and a test request that attempts a write should fail. Record each check in the release checklist.
What changes for editors and developers when preview is in place
Editors get a faster review loop once preview is in place, but the benefit depends on one habit: they must read the preview pane as a view of the draft, and the public site as a separate view of what was last published. Changes saved in the Strapi admin panel appear in the preview once the editor saves or the preview refreshes, and the exact behavior depends on whether the plan provides full-screen preview or side-by-side Live Preview. Publishing is the only step that changes the public site, so editors also need to know that moving an entry through a review stage or adding it to a release does not change what visitors see. Before rollout, write a short guide that walks each editor role through saving, previewing and publishing, using an entry from your own content model.
Developers own the parts that make preview work: the route handler that turns draft mode on and off in Next.js or the equivalent preview endpoint in Nuxt, the secret that protects that route, the data fetches that request draft content, and the rendering components that display it. This code sits outside Strapi, so it needs its own owner and its own upgrade plan. Strapi minor releases ship often, and the Next.js and Nuxt versions change on their own schedules. Pin versions in the front-end project, read the release notes before each upgrade, and rerun preview checks on staging after every change to Strapi, the framework or the rendering code. Confirm in your RACI or on-call plan who answers when preview breaks after an upgrade.
Schema changes affect preview directly because the preview mapping connects each Strapi content type and field to a page or component. Adding a content type without a mapping produces an empty or wrong preview, and renaming a field can break a component silently. Localized fields add a second dimension: preview must request the locale in the preview URL, and each locale needs its own check for missing text, fallback behavior and media. Treat every schema change as a front-end change too. Review the mapping in the same pull request as the schema, and include at least one entry per locale in the preview test list. Multilingual setup details are covered in the internationalization page, so this review should focus on how preview reads the content.
Preview only matches publishing when staging mirrors production closely enough that the two behave the same. That means the same Strapi version, the same schema and plugins, the same front-end build process and comparable environment variables, including the preview secret, the draft endpoint URL, CORS settings and cache configuration. A content copy alone does not guarantee a match, because a difference in caching can make preview look correct while the published page fails, or the reverse. Before each release, publish a test entry on staging and compare the public page with the preview. Ask any partner to state in the quote who maintains the staging environment, how often it is refreshed from production, and who pays for its hosting.
What to confirm about your Strapi plan and front end before you commit
Live Preview depends on your Strapi plan, the Strapi and Node.js versions, the database, the front-end framework and the hosting platform's caching behavior. Each can change between now and go-live, so confirm them against current vendor pages and a test environment before you sign a contract or start the preview build.
Live Preview availability by plan
Preview features are tied to plan tiers on the self-hosted pricing page, and the tier that includes side-by-side Live Preview is the one your editors will need. Read the current feature table for the exact tier, confirm that the feature is listed for the plan you intend to buy, and check whether any add-on changes that answer. Ask the vendor to confirm in writing which tier covers preview, because that answer decides whether editors get side-by-side or full-screen preview.
Strapi and Node.js version support
Strapi ships minor releases frequently, with v5.58.0 published on October 14, 2026, so pin a specific version and record it in your build plan. Strapi 5 runs only on Active or Maintenance LTS Node.js versions, so check the Node.js release schedule on the day you install. Confirm that your pinned Strapi version supports the Node.js release your hosting image provides before you build the preview integration.
Database versions for Strapi 5
Strapi 5 supports PostgreSQL 14 or later, MySQL 8.0 or later, MariaDB 10.3 or later and SQLite 3. MongoDB and other NoSQL databases are not supported, so plan the schema around a relational engine from the start. Confirm the exact minor version against the installation requirements, and check that your hosting provider offers that version, since managed database services often lag behind upstream releases.
Front-end framework version support
Next.js draft mode and Nuxt preview handling each depend on framework features that change between major versions, so the preview approach you choose also fixes the framework versions you can use. Check the framework's current documentation for its preview or draft feature, confirm that your Next.js or Nuxt release is still supported, and test the preview route after every framework upgrade. Ask whether any preview helper or plugin your team uses has a tested version range.
Shared cache and draft isolation
Preview routes must never write draft content into a cache that serves published pages to the public. Confirm with your hosting platform whether its CDN, edge cache and incremental static regeneration keep draft responses out of shared caches, and whether preview requests bypass them. Also check how preview is authorized, including which secret or cookie is used and where it is stored. An anonymous browser test that requests a draft URL, combined with cache hit logs, shows whether isolation holds.
Strapi Cloud is a separate choice
Strapi Cloud hosting is a separate decision from self-hosting, with its own plans, API request, storage and bandwidth allowances, and uptime terms. Read those terms on the Strapi Cloud pricing page rather than assuming they match the self-hosted tiers, and confirm which Live Preview capabilities apply to the hosted option. Plan allowances can affect preview traffic and storage, so include them in your cost comparison before you commit.
How much does Strapi live preview cost to implement, and what does the work need from us?
What does it cost to add live preview to Strapi?
The implementation cost depends on the scope you agree in writing, so no single figure applies to every project. There are two separate costs. The first is the Strapi plan: Growth is listed at 45 US dollars per month including 3 users, with 15 dollars for each extra user, and Enterprise is priced on custom terms. Side-by-side Live Preview is available on Growth and Enterprise, while the free plan offers full-screen preview. The second is the engineering work to connect preview to Next.js draft mode or Nuxt, which is quoted from your routes, content model and hosting setup. DeployOpen does not publish a price list, and a quote follows from the written scope.
What factors change the cost of Strapi preview work?
The main drivers are the front-end framework, the number of content types and locales, the number of preview routes, the hosting setup and the testing required. Next.js draft mode and Nuxt need different handling, so a project that uses only one framework is simpler to scope than one that serves both. Each content type that editors preview adds mapping work, and each locale adds routing and fallback checks. Preview routes are often the largest driver, because every route needs a way to resolve a draft by document, slug and locale. Hosting matters because preview secrets, environment variables and CORS settings differ between development, staging and production. Testing should cover editor sessions across roles and content states, including unpublished drafts and published pages. Ask the quote to list each driver with a count.
Which Strapi preview costs are one-time and which recur?
The implementation work is one-time. Preview wiring, route mapping, environment setup and testing are quoted as a fixed-scope piece of work, and changes after acceptance are a separate decision. Recurring costs sit elsewhere. The Growth plan is listed at 45 US dollars per month including 3 users, and Enterprise is billed on custom terms. Hosting for the Strapi instance and the front end recurs. Upgrades also recur, because Strapi 5 minor releases have shipped roughly weekly, and each version change may need preview retesting. You can handle upgrades in-house or through a support retainer, which DeployOpen offers. Ask the quote to split one-time and recurring lines, and to name who pays the plan fee and the hosting bill.
Can our in-house team set up Strapi live preview ourselves?
A capable in-house team can build it, because most of the work is front-end and CMS configuration. The real questions are whether the team has done this before and how much capacity it can commit. Preview depends on controlled draft access, a way to resolve unpublished documents on the front end, and careful handling of preview tokens, so a mistake can expose drafts to people who should not see them. Before you start, check three things: experience with Next.js or Nuxt, the ability to write tests for editor flows, and an owner for upgrades after launch. If one of these is missing, a fixed-scope partner can cover that part. Decide based on your own skills and schedule, and confirm which Strapi plan features you need first.
Which decisions and access should we arrange before a preview project starts?
Your team supplies access, decisions and people. Expect to provide admin access or a test instance of the Strapi project, the content model with the content types and locales in scope, and read access to the front-end repository and hosting environment. You need a named decision-maker for preview behavior, such as which content states editors can see and which roles can preview drafts. Someone who owns the Strapi plan must confirm which features are licensed for side-by-side Live Preview. Editors should join review sessions to check drafts against what they expect. Agree on a staging environment where preview can be tested without touching production content, and confirm who will receive the handover documentation.
What should a written scope for Strapi preview include?
A written scope should name the front-end framework and version, the Strapi version and plan, and every content type and locale that editors can preview. List each preview route with its resolution logic, and state which roles can see drafts. Include the hosting targets for development, staging and production, the secrets and environment variables involved, and how preview tokens expire. Name the test cases, such as editor sessions, locale switching and publish-to-live checks. Define deliverables, acceptance criteria, what is out of scope, and who handles upgrades after launch. Ask for one-time and recurring costs as separate lines, and confirm that the timeline follows the agreed milestones.
Do we need Enterprise for side-by-side Strapi live preview?
Side-by-side Live Preview is available on Growth as well as Enterprise, so Enterprise is not required for that feature. The free plan offers full-screen preview, which can be enough for teams that check one page at a time. The Growth plan is listed at 45 US dollars per month including 3 users, and extra users cost 15 dollars each. Enterprise is priced on custom terms and adds features such as audit logs and review workflows, which matter if your governance rules require recorded editorial approval. Choose based on whether editors need side-by-side views and whether you need those Enterprise features. Confirm the current feature list with Strapi before you sign, because plan contents change.
How does DeployOpen quote Strapi live preview work?
DeployOpen does not publish a price list. Most engagements are fixed-scope, with scope, deliverables and timelines agreed in writing before work starts. The quote follows from that written scope, so the drivers covered earlier, including framework, route count, locales, hosting and testing, determine it. Strapi plan fees are billed by Strapi and sit outside the implementation quote. Ongoing support, upgrades and continuous testing are available as retainers, which you can compare with running the work in-house. Ask for the quote to list the one-time work, any retainer, and the assumptions it depends on, such as who provisions the hosting. Review those assumptions before you accept the scope.
How DeployOpen scopes, builds and supports Strapi live preview
DeployOpen plans and builds Strapi live preview as part of a written, fixed-scope engagement, with the Next.js draft mode or Nuxt wiring built and tested inside infrastructure you control. The work starts from your editorial workflow and plan choice, so the preview you hand over matches how your editors actually review content.
How we scope
- Confirm which Strapi plan you run, since full-screen preview and side-by-side Live Preview differ between the free plan and Growth or Enterprise.
- Map each content type to its front-end route and decide which pages editors need to see before publishing.
- Record the scope in writing, including which front end (Next.js or Nuxt), hosting location and preview URLs are in and out of the work.
How we build
- Wire Strapi preview URLs to Next.js draft mode or to the Nuxt preview route, with secure preview tokens checked on the front end.
- Test preview with draft and published content, so editors never see unpublished changes on the public site.
- Confirm the preview works for every locale, role and environment included in the agreed scope before sign-off.
How we hand over
- Document the preview configuration, environment variables, token rotation steps and the routes each content type uses.
- Walk your editors and developers through the preview workflow in the admin panel using your own content.
- Deliver a runbook covering Strapi and front-end version changes that could affect preview behavior after handover.
How we support
- Offer ongoing support, upgrades and testing as a retainer after handover, if your team wants it.
- Re-test preview after each Strapi 5 minor release, since releases ship often and may change admin or API behavior.
- Ask any partner, including DeployOpen, to confirm in writing who owns preview tokens, hosting and on-call response.

