SQLite is often described as a “toy database” — and that description is both unfair and unhelpful.
SQLite is an extremely capable, well-engineered piece of software. It powers mobile apps, desktop software, embedded systems, and countless internal tools. In the right context, it’s fast, reliable, and elegant.
But Strapi is not that context.
While Strapi supports SQLite for development and testing, it is not a suitable choice for production Strapi applications. This isn’t about scale, traffic volume, or whether SQLite is “good enough”. It’s about architectural fit, operational risk, and long-term correctness.
Let’s break down why.
SQLite is designed to be embedded. That means:
This design is a feature, not a flaw. It’s exactly why SQLite works so well for:
Strapi, however, is a long-running server application. Even in its simplest production form, a Strapi instance typically involves:
These characteristics introduce operational demands that SQLite is intentionally not designed to solve.
SQLite stores all data in a single file. In production environments, this becomes a liability.
As write activity increases — even modestly — SQLite relies on file-level locking. Overlapping admin actions, background tasks, and API writes can result in:
These issues rarely show up immediately. They tend to surface gradually, once a project is live and actively used.
Restarts and deployments are another pressure point. In modern hosting environments, processes restart. Containers are replaced. Infrastructure is upgraded. When all states live in a single file, unexpected interruptions increase the risk of database corruption or an inconsistent state.
Recovering from these situations is far more fragile than with a server-based database designed for long-running workloads.
One of the most common arguments in favour of SQLite is that it works fine for “small” sites.
The problem is that production risk is not driven by traffic volume alone.
For CMS-driven applications like Strapi, risk comes from:
A Strapi project with five editors and a modest API footprint can hit SQLite’s limits faster than a read-heavy public website.
Once content becomes the source of truth for a business, “mostly works” is no longer good enough.
Another subtle but important issue is data integrity.
SQLite is more permissive by default than databases like PostgreSQL. Historically, foreign key constraints were disabled by default, and even today, SQLite’s type system and constraint enforcement are looser than what most production teams expect.
In practice, this means:
PostgreSQL (and similar databases) enforce stricter constraints by default. They fail fast when data is incorrect, which is exactly what you want in a system managing structured content.
For Strapi projects, this difference alone is often enough reason to avoid SQLite in production.
There are tools that attempt to add replication, backups, or higher availability on top of SQLite. They can be impressive pieces of engineering.
But needing to add layers of infrastructure just to make your database safe is a strong signal that you’re using the wrong tool for the job.
Strapi does not test, document, or support these setups. Adding them increases complexity, creates unclear failure modes, and pushes responsibility entirely onto the application team.
Production systems benefit from boring, well-understood foundations.
For production deployments, Strapi strongly recommends using a server-based relational database, such as PostgreSQL (recommended) or MySQL/MariaDB.
These databases are designed to:
SQLite remains an excellent choice for:
But once your Strapi application goes live, switching early to a production-grade database will save time, reduce risk, and avoid painful migrations later.
If you’re looking for a simple, low-friction way to run Strapi with a production-grade database, Strapi Cloud is the easiest option.
Strapi Cloud provisions and manages a production-ready database for you, with sensible defaults and best practices already in place. You don’t need to worry about database setup, configuration, or ongoing maintenance — everything is designed to work seamlessly with Strapi out of the box.
This allows teams to:
If you’d prefer to self-host, PostgreSQL or MySQL/MariaDB remain the recommended choices. But if you want the fastest path to a stable production setup, Strapi Cloud removes much of the operational overhead.
Learn more about running Strapi on Cloud: https://strapi.io/cloud
SQLite is not “bad”. It’s just not the right tool for production Strapi applications.
Choosing infrastructure that aligns with how your system actually behaves — not how you hope it behaves — is one of the simplest ways to avoid long-term pain.
Implementation manager at Strapi.