Skip to content
Cloudflare Docs

Connect to databases

Cloudflare Workers can connect to and query your data in both SQL and NoSQL databases, including:

  • Cloudflare's own D1, a serverless SQL-based database.
  • Traditional hosted relational databases, including Postgres and MySQL, using Hyperdrive (recommended) to significantly speed up access.
  • Serverless databases, including Supabase, MongoDB Atlas, PlanetScale, FaunaDB, and Prisma.

D1 SQL database

D1 is Cloudflare's own SQL-based, serverless database. It is optimized for global access from Workers, and can scale out with multiple, smaller (10GB) databases, such as per-user, per-tenant or per-entity databases. Similar to some serverless databases, D1 pricing is based on query and storage costs.

DatabaseLibrary or DriverConnection Method
D1Workers binding, integrates with Prisma, Drizzle, and other ORMsWorkers binding, REST API

Traditional SQL databases

Traditional databases use SQL drivers that use TCP sockets to connect to the database. TCP is the de-facto standard protocol that many databases, such as PostgreSQL and MySQL, use for client connectivity. These drivers are also widely compatible with your preferred ORM libraries and query builders.

This also includes serverless databases that are PostgreSQL or MySQL-compatible like Supabase, Neon or PlanetScale, which can be connected to using both native TCP sockets and Hyperdrive or serverless HTTP-based drivers (detailed below).

DatabaseIntegrationLibrary or DriverConnection Method
PostgresDirect connectionPostgres.js,node-postgresTCP Socket via database driver, using Hyperdrive for optimal performance (optional, recommended)
MySQLDirect connectionmysql2, mysqlTCP Socket via database driver, using Hyperdrive for optimal performance (optional, recommended)

Serverless databases

Serverless databases provide HTTP-based proxies and drivers, also known as serverless drivers. These address the lack of connection reuse between Worker invocation similarly to Hyperdrive for traditional SQL databases.

By providing a way to query your database with HTTP, these serverless databases and drivers eliminate several roundtrips needed to establish a secure connection.

DatabaseIntegrationLibrary or DriverConnection Method
FaunaYesfaunaAPI through client library
PlanetScaleYes@planetscale/databaseAPI via client library
SupabaseYes@supabase/supabase-jsAPI via client library
PrismaNoprismaAPI via client library
NeonYes@neondatabase/serverlessAPI via client library
HasuraNoAPIGraphQL API via fetch()
Upstash RedisYes@upstash/redisAPI via client library
TiDB CloudNo@tidbcloud/serverlessAPI via client library

Once you have installed the necessary packages, use the APIs provided by these packages to connect to your database and perform operations on it. Refer to detailed links for service-specific instructions.

Authentication

If your database requires authentication, use Wrangler secrets to securely store your credentials. To do this, create a secret in your Cloudflare Workers project using the following wrangler secret command:

Terminal window
wrangler secret put <SECRET_NAME>

Then, retrieve the secret value in your code using the following code snippet:

const secretValue = env.<SECRET_NAME>;

Use the secret value to authenticate with the external service. For example, if the external service requires an API key or database username and password for authentication, include these in using the relevant service's library or API.

For services that require mTLS authentication, use mTLS certificates to present a client certificate.

Next steps