{"id":"01a12135-9367-7ad0-b7e2-cace405653c8","slug":"payload","name":"Payload","oneLiner":"Headless CMS with an admin panel, where developers define content in code and editors publish, running on Workers with D1 and R2","logoUrl":"https://payloadcms.com/images/favicon.svg","primaryCategory":{"slug":"cms-publishing","name":"CMS & Publishing"},"services":[{"slug":"workers","name":"Cloudflare Workers","shortName":"Workers"},{"slug":"static-assets","name":"Workers Static Assets","shortName":"Static Assets"},{"slug":"d1","name":"Cloudflare D1","shortName":"D1"},{"slug":"r2","name":"Cloudflare R2","shortName":"R2"}],"deploy":"one_click","hasOneClick":true,"licenseName":"MIT","licenseClass":"open_source","freeTierStatus":"paid_plan_required","isTested":false,"lastTestedAt":null,"stars":45363,"isArchived":false,"publishedAt":"2026-10-09T15:12:37.748Z","contentUpdatedAt":"2026-10-09T15:12:37.748Z","latestCommitAt":"2026-10-19T20:42:28Z","price":null,"screenshot":{"url":"/media/apps/01a12135-9367-7ad0-b7e2-cace405653c8/01a12138-d129-79f3-8874-5e5fc744a5d8.png","alt":"Payload admin panel editing a page with live preview"},"sourceHealth":"healthy","shortDescription":"Payload is an open-source headless CMS and backend that lives inside a Next.js app. Developers define collections, fields and access rules in TypeScript, and editors get an admin panel with drafts, live preview and localization. Payload’s Cloudflare template runs it on Workers with D1 for the database and R2 for uploads; it needs Workers Paid because of the bundle size.","longDescription":"In Payload the content model is code. A payload.config.ts file defines collections, fields, access control and hooks, and Payload builds the admin panel, the REST and GraphQL APIs and TypeScript types from it. Editors work in that admin panel with drafts and versions, live preview, localization and uploads, and developers can also read the same data directly from Next.js server code.\n\nThe Cloudflare template in the Payload repository starts with two collections: Users, who sign in to the admin panel, and Media for uploads stored in R2. Data lives in D1 through Payload’s SQLite adapter, which can also use D1 read replicas. The Deploy to Cloudflare button asks for names for the Worker, the D1 database and the R2 bucket and for PAYLOAD_SECRET, and the deploy script runs Payload’s migrations before deploying through OpenNext.\n\nSome features do not work on Workers yet. Image resizing and cropping are off because sharp cannot run there, and GraphQL support is not guaranteed while an upstream Workers issue is open. The same codebase also runs on Node.js with PostgreSQL, MongoDB or SQLite.","useCases":["Content backend for a marketing site, blog or docs built with Next.js","Admin panel and API for an app’s own data","Editorial work with drafts, versions and live preview","Media library stored in your own R2 bucket"],"targetAudience":"Developers who build Next.js sites or apps and want a code-configured CMS and admin panel in their own Cloudflare account","knownLimitations":"Needs Workers Paid: the bundle exceeds the 3 MB Worker size limit of the free plan. On Workers, image resizing and cropping are off because sharp does not run there, and GraphQL support is not guaranteed. The template starts with only users and media, so content collections are written in code and need a migration before each deploy. Workers logs are off by default.","editorialNote":null,"ownershipDisclosure":null,"homepageUrl":"https://payloadcms.com","demoUrl":null,"docsUrl":"https://payloadcms.com/docs","repository":{"provider":"github","owner":"payloadcms","name":"payload","url":"https://github.com/payloadcms/payload","defaultBranch":"main","stars":45363,"forks":4313,"openIssues":1358,"licenseSpdx":"MIT","isArchived":false,"latestRelease":"v3.91.0","latestReleaseAt":"2026-10-15T20:23:15Z","latestCommitAt":"2026-10-19T20:42:28Z","metadataFetchedAt":"2026-10-20T03:55:46.435Z"},"secondaryCategories":[],"servicesDetailed":[{"slug":"workers","name":"Cloudflare Workers","shortName":"Workers","detectionKind":"manual","note":null},{"slug":"static-assets","name":"Workers Static Assets","shortName":"Static Assets","detectionKind":"manual","note":null},{"slug":"d1","name":"Cloudflare D1","shortName":"D1","detectionKind":"manual","note":null},{"slug":"r2","name":"Cloudflare R2","shortName":"R2","detectionKind":"manual","note":null}],"connectors":[],"externalRequirements":[],"deployMethods":[{"id":"01a12138-242f-7c1d-984c-92b4498effa5","methodType":"one_click","url":"https://deploy.workers.cloudflare.com/?url=https://github.com/payloadcms/payload/tree/3.x/templates/with-cloudflare-d1","command":null,"docsUrl":"https://github.com/payloadcms/payload/tree/3.x/templates/with-cloudflare-d1","branch":null,"isOneClick":true,"isPrimary":true,"requiredPlan":"Workers Paid","notes":"The button copies the Cloudflare template from the 3.x branch of the Payload repository and asks for names for the Worker, D1 database and R2 bucket and for PAYLOAD_SECRET."}],"deployRequirements":[],"bindings":[],"envVars":[],"screenshots":[{"id":"01a12138-d317-7b41-ad02-14ef896f97b0","url":"/media/apps/01a12135-9367-7ad0-b7e2-cace405653c8/01a12138-d129-79f3-8874-5e5fc744a5d8.png","width":3200,"height":1915,"altText":"Payload admin panel editing a page with live preview","isPrimary":true,"sourceType":"homepage"},{"id":"01a12138-d8c7-7db4-8733-291cd5520d1d","url":"/media/apps/01a12135-9367-7ad0-b7e2-cace405653c8/01a12138-d62a-7abc-8768-46c3e73f0d49.png","width":1800,"height":1440,"altText":"Payload admin panel with a document editor and live preview","isPrimary":false,"sourceType":"homepage"},{"id":"01a12138-dd03-7827-a9c2-86eac9980917","url":"/media/apps/01a12135-9367-7ad0-b7e2-cace405653c8/01a12138-db50-72fe-92e1-87780984f187.webp","width":2291,"height":1442,"altText":"Payload admin dashboard with folders for documents","isPrimary":false,"sourceType":"homepage"},{"id":"01a12138-4170-77bb-8cac-273a25b185a8","url":"/media/apps/01a12135-9367-7ad0-b7e2-cace405653c8/01a12138-3fed-720f-9294-7597393f2d59.jpg","width":1200,"height":375,"altText":"Payload banner","isPrimary":false,"sourceType":"repository"}],"licenseUrl":"https://github.com/payloadcms/payload/blob/main/LICENSE.md","freeTierNote":"The template needs Workers Paid ($5 a month) because its bundle is larger than the 3 MB Worker size limit on the free plan. D1 and R2 then come with their usual included allowances.","freeTierSourceUrl":"https://github.com/payloadcms/payload/tree/3.x/templates/with-cloudflare-d1#worker-size-limits","freeTierCheckedAt":null,"pricingNote":null,"pricingUrl":null,"pricingCheckedAt":null,"setupComplexity":"low","setupComplexityNote":"Deploy button with one secret, PAYLOAD_SECRET. New collections are added in code, followed by pnpm payload migrate:create and a redeploy.","verification":{"status":"untested","testedAt":null,"versionRef":null,"deploymentMethod":null,"coreUseCase":null,"publicNote":null,"resources":[],"steps":[],"screenshots":[],"staleReason":null},"alternatives":[{"slug":"contentful","name":"Contentful"},{"slug":"sanity","name":"Sanity"}],"sources":[{"sourceType":"repository","url":"https://github.com/payloadcms/payload","lastSeenAt":"2026-10-13T07:16:19.331Z"},{"sourceType":"homepage","url":"https://payloadcms.com","lastSeenAt":"2026-10-20T03:55:52.260Z"},{"sourceType":"docs","url":"https://payloadcms.com/docs","lastSeenAt":"2026-10-20T03:55:52.260Z"}],"lastSourceRefreshAt":"2026-10-20T03:55:46.435Z","lastReviewedAt":"2026-10-09T15:12:37.748Z","seoTitle":"Payload: headless CMS on Cloudflare Workers with D1 and R2","seoDescription":"Payload is an open-source headless CMS and Next.js backend whose Cloudflare template runs on Workers with D1 and R2, deployed with one click.","changeEvents":[{"id":"01a12139-2e13-77af-a304-b9daf3a358cc","kind":"listed","summary":"Payload listed","createdAt":"2026-10-09T15:12:37.748Z","app":{"slug":"payload","name":"Payload"}}]}