A Payload CMS plugin that integrates with Next.js's next/cache
architecture for better performance and revalidation. This plugin helps keep your database sleeping for basic websites and webapps by leveraging Next.js caching capabilities.
This plugin automatically revalidates Payload data with Next.js's revalidateTag
function using a standard pattern:
collection-slug
- for collection-level revalidationcollection-slug:item-id
- for specific item revalidation by IDcollection-slug:item-slug
- for specific item revalidation by slug
This allows you to easily create a data layer in Next.js server code with unstable_cache
:
export const getEventById = async (id) =>
unstable_cache(
async (id: number) =>
await payload.findByID({
collection: 'events',
id: id,
}),
['eventById'],
{ tags: [`events.${id}`] },
)(id)
npm install payload-revalidate
Add the plugin to your Payload configuration:
import { payloadRevalidate } from 'payload-revalidate'
export const config = buildConfig({
plugins: [
payloadRevalidate({
// Plugin options here
}),
],
})
- 📦 Available on npm:
npm install payload-revalidate
- 🔗 GitHub: BivouacAgency/payload-revalidate
⚠️ Some warnings may be present- 💿 Only tested with PostgreSQL. The behaviour seem to differ with other databases.
- Payload CMS 3.x
- Next.js 15+
This is an early-stage project and feedback is welcome! We'd love to:
- Get feedback on the approach
- Discuss best practices for Payload + Next.js caching
- Learn from the community's experience
- Potentially collaborate on making this more robust
MIT
Please open an issue on GitHub for any questions or feedback about this plugin.