Codegea

Development

Custom software developmentSystems, platforms and integrations built around your operationCorporate websitesProfessional, fast and built to inspire trustOnline storesCatalog, payments and shipping ready to sell 24/7WooCommerceFast WooCommerce stores with each country’s payments and invoicingLanding pagesA page focused on one goal: turning visitors into customersMobile appsCustom iOS and Android apps that put your business in your customers’ pockets

Integration and CMS

CMS integrationsWordPress, Strapi, Directus and Arc XP connected to your whole ecosystemArc XPSupport, implementation and integrations for the media platformMigrationsMigrate your site, platform or database without losing anything

Growth and infrastructure

AI automationTechnology does the repetitive work and your team focuses on what mattersOn-page SEOBe found and recommended by Google: technical and content optimizationServers & hostingFast, secure servers monitored 24/7
RetainerYour dev team, by the monthFrom 20h a month. Fixed fee.
An AI quoting tool to quote services in minutesProfessional quotes in minutes, with projects, sellers and payments tracked in one place.See the case

By type

EcommerceStores and catalogsCorporate sitesBrand and lead genPlatforms & appsCustom software

Explore

All projectsCases and resultsClientsWho trusts usRetainerMonthly dev team

Blog

All articlesGuides and opinionNewsletterOne email a monthContactWe reply in 24h

Latest articles

How codegea.com is built: Next.js, Payload, Turso and R2CMS · 2026-10-20Cloudflare Workers: what they are and when to use themNode.js · 2026-10-19Live Preview in Payload with Next.jsCMS · 2026-10-19
NewsletterJoin our newsletterPractical web, SEO and AI notes.
ServicesCustom software developmentCorporate websitesOnline storesWooCommerceLanding pagesMobile appsCMS integrationsArc XPMigrationsAI automationOn-page SEOServers & hostingYour dev team, by the month
ProjectsProfessional quotes in minutes, with projects, sellers and payments tracked in one place.EcommerceCorporate sitesPlatforms & appsAll projectsClientsRetainer
Retainer
BlogAll articlesNewsletterContactHow codegea.com is built: Next.js, Payload, Turso and R2Cloudflare Workers: what they are and when to use themLive Preview in Payload with Next.jsJoin our newsletter
ESEN
Let's talk

CMS

Which databases Payload CMS supports and which to choose

Payload CMS works with MongoDB, Postgres, SQLite and Cloudflare D1. What sets them apart and how to choose for your project.

Derian Pinto · Founder & Full Stack Developer2026-10-183 min

One of the questions we get most about Payload is which database it works with. The short answer: the most common ones, chosen through an adapter. But the choice matters more than it seems, because it changes how you deploy, how you migrate and how much you pay.

The adapters

Payload does not ship its own database. You install the adapter for the one you want and set it in db inside the config:

Database

Package

Notes

MongoDB

@payloadcms/db-mongodb

Uses Mongoose. Documents, no rigid schema.

Postgres

@payloadcms/db-postgres

Uses Drizzle. Relational, SQL migrations.

Postgres on Vercel

@payloadcms/db-vercel-postgres

Variant for Vercel's Postgres.

SQLite

@payloadcms/db-sqlite

Uses Drizzle. A local file or a libSQL server such as Turso.

Cloudflare D1

@payloadcms/db-d1-sqlite

Cloudflare's SQLite, for running Payload on Workers.

The list changes between versions, so before deciding confirm the current adapters in the Payload documentation.

How each one feels

MongoDB. Natural if your team already uses it and your data is nested. You don't need migrations to change a field. In return, relationships between collections are weaker and querying highly related data costs more.

Postgres. The sturdiest option for related data and heavy concurrency. It has tables, foreign keys and the whole SQL tooling ecosystem. What changes: you handle migrations and need a database server (your own or managed).

SQLite. A database in a file. In development it is the most comfortable: nothing to install, delete and recreate at will. In production the file only needs to be reachable, and that is where Turso comes in.

D1. Cloudflare's SQLite. It makes sense if you already deploy Payload on Cloudflare Workers, because the database connects as a binding. Outside that case there is no reason to pick it.

Migrations and development mode

With relational databases (Postgres and SQLite), in development Payload adjusts the tables on its own when you change your schema, and in production you use versioned migrations: payload migrate:create generates the SQL and payload migrate applies it. With MongoDB there are no tables to migrate. How we set it up with Turso, command by command, is in Payload CMS with Turso step by step.

How to choose

  • Content site, blog, corporate site: SQLite/Turso or Postgres. Little writing, a lot of reading; either holds up.
  • Application with many simultaneous writes (orders, bookings, sessions): Postgres. SQLite allows a single writer at a time.
  • Your team already lives in MongoDB: MongoDB, no need to overthink it.
  • Everything on Cloudflare: D1.
  • You want local and production to be as alike as possible without installing anything: SQLite, with a file locally.

What we chose and why

For this site we use SQLite locally and Turso in production: content that is read a lot, few writes, and the same adapter in both environments. It is not a universal decision. If the project were a store with concurrent orders, we would go with Postgres. The full CMS comparison is in Payload vs Strapi vs Directus, and the rest of the stack in how codegea.com is built.

Share this article?LinkedInWhatsAppX

Written by

Derian Pinto

Founder & Full Stack Developer

Founder of Codegea. Builds custom websites, stores and platforms, and integrates and supports Arc XP for media companies.

Join our newsletter

An email with news and practical web, SEO and AI notes. No spam, unsubscribe anytime.

Shall we build your project?

Need help? Chat with us