👉 Visit the DatoCMS homepage or see What is DatoCMS?
This example showcases a Next.js multi-language blog using DatoCMS as the data source. It fully supports Preview Mode with DatoCMS real-time updates as well as DatoCMS SiteSearch used to index and display the posts searched by the user.
The purpose of this repo is to have a quick start reference that can be set up with the "one-click" button below. This is what the end result looks like:
-
Make sure that you have set up the Github integration on Vercel.
-
Let DatoCMS set everything up for you clicking this button:
Once the setup of the project and repo is done, clone the repo locally.
In your DatoCMS' project, go to the Settings menu at the top and click API tokens.
Then click Read-only API token and copy the token.
Next, copy the .env.example
file in this directory to .env
(which will be ignored by Git):
cp .env.example .env
Then set each variable on .env
:
NEXT_EXAMPLE_CMS_DATOCMS_API_TOKEN
should be the API token you just copied.NEXT_EXAMPLE_CMS_DATOCMS_PREVIEW_SECRET
can be any random string (but avoid spaces), likeMY_SECRET
- this is used for the Preview Mode](https://www.datocms.com/docs/next-js/setting-up-next-js-preview-mode). This token will be used for the preview mode - read on to know more.NEXT_EXAMPLE_CMS_DATOCMS_API_TOKEN_SITE_SEARCH
should be the SiteSearch API token on your projectNEXT_EXAMPLE_CMS_DATOCMS_BUILD_TRIGGER_ID
should be the numerical string on the URL of the Build trigger associated with the project
Your .env
file should look like this:
NEXT_EXAMPLE_CMS_DATOCMS_API_TOKEN=...
NEXT_EXAMPLE_CMS_DATOCMS_PREVIEW_SECRET=...
NEXT_EXAMPLE_CMS_DATOCMS_API_TOKEN_SITE_SEARCH=...
NEXT_EXAMPLE_CMS_DATOCMS_BUILD_TRIGGER_ID=...
npm install
npm run dev
Your blog should be up and running on http://localhost:3000!
On DatoCMS, go to one of the posts you've created and:
- Update the title. For example, you can add
[Draft]
in front of the title. - Click Save, but DO NOT click Publish. By doing this, the post will be in the draft state.
(If it doesn't become draft, you need to go to the model settings for Post
, go to Additional Settings, and turn on Enable draft/published system.)
Now, if you go to the post page on localhost, you won't see the updated title. However, if you use the Preview Mode, you'll be able to see the change (Documentation).
To enable the Preview Mode, go to this URL:
http://localhost:3000/api/preview?secret=<secret>
<secret>
should be the string you entered forNEXT_EXAMPLE_CMS_DATOCMS_PREVIEW_SECRET
.<slug>
should be the post'sslug
attribute (you can check on DatoCMS).
You should now be able to see the updated title. To exit the preview mode, you can click Click here to exit preview mode at the top.
DatoCMS is the REST & GraphQL Headless CMS for the modern web.
Trusted by over 25,000 enterprise businesses, agencies, and individuals across the world, DatoCMS users create online content at scale from a central hub and distribute it via API. We ❤️ our developers, content editors and marketers!
Why DatoCMS?
- API-First Architecture: Built for both REST and GraphQL, enabling flexible content delivery
- Just Enough Features: We believe in keeping things simple, and giving you the right feature-set tools to get the job done
- Developer Experience: First-class TypeScript support with powerful developer tools
Getting Started:
- ⚡️ Create Free Account - Get started with DatoCMS in minutes
- 🔖 Documentation - Comprehensive guides and API references
- ⚙️ Community Support - Get help from our team and community
- 🆕 Changelog - Latest features and improvements
Official Libraries:
- Content Delivery Client - TypeScript GraphQL client for content fetching
- REST API Clients - Node.js/Browser clients for content management
- CLI Tools - Command-line utilities for schema migrations (includes Contentful and WordPress importers)
Official Framework Integrations
Helpers to manage SEO, images, video and Structured Text coming from your DatoCMS projects:
Additional Resources:
- Plugin Examples - Example plugins we've made that extend the editor/admin dashboard
- Starter Projects - Example website implementations for popular frameworks
- All Public Repositories