Cloudflare Docs
D1
View RSS feed
Edit this page on GitHub
Set theme to dark (⇧+D)

Changelog

​​ 2024-02-16

​​ API changes to .run()

A previous change (made on 2024-02-13) to the run() query statement method has been reverted.

run() now returns a D1Result, including the result rows, matching its original behaviour prior to the change on 2024-02-13.

Future change to run() to return a D1ExecResult, as originally intended and documented, will be gated behind a compatibility date as to avoid breaking existing Workers relying on the way run() currently works.

​​ 2024-02-13

​​ API changes to .raw(), .all() and .run()

D1’s raw(), all() and run() query statement methods have been updated to reflect their intended behaviour and improve compatibility with ORM libraries.

raw() now correctly returns results as an array of arrays, allowing the correct handling of duplicate column names (such as when joining tables), as compared to all(), which is unchanged and returns an array of objects. To include an array of column names in the results when using raw(), use raw({columnNames: true}).

run() no longer incorrectly returns a D1Result and instead returns a D1ExecResult as originally intended and documented.

This may be a breaking change for some applications that expected raw() to return an array of objects.

Visit the query databases documentation to review D1’s query methods, return types and TypeScript support in detail.

​​ 2024-01-18

​​ Support for LIMIT on UPDATE and DELETE statements

D1 now supports adding a LIMIT clause to UPDATE and DELETE statements, which allows you to limit the impact of a potentially dangerous operation.

​​ 2023-12-18

​​ Legacy alpha automated backups disabled

Databases using D1’s legacy alpha backend will no longer run automated hourly backups. You may still choose to take manual backups of these databases.

The D1 team recommends moving to D1’s new production backend, which will require you to export and import your existing data. D1’s production backend is faster than the original alpha backend. The new backend also supports Time Travel, which allows you to restore your database to any minute in the past 30 days without relying on hourly or manual snapshots.

​​ 2023-10-03

​​ Create up to 50,000 D1 databases

Developers using D1 on a Workers Paid plan can now create up to 50,000 databases as part of ongoing increases to D1’s limits.

  • This further enables database-per-user use-cases and allows you to isolate data between customers.
  • Total storage per account is now 50 GB.
  • D1’s analytics and metrics provide per-database usage data.

If you need to create more than 50,000 databases or need more per-account storage, reach out to the D1 team to discuss.

​​ 2023-09-28

​​ The D1 public beta is here

D1 is now in public beta, and storage limits have been increased:

  • Developers with a Workers Paid plan now have a 2 GB per-database limit (up from 500 MB) and can create 25 databases per account (up from 10). These limits will continue to increase automatically during the public beta.
  • Developers with a Workers Free plan retain the 500 MB per-database limit and can create up to 10 databases per account.

Databases must be using D1’s new storage subsystem to benefit from the increased database limits.

Read the announcement blog for more details about what is new in the beta and what is coming in the future for D1.

​​ 2023-08-19

​​ Row count now returned per query

D1 now returns a count of rows_written and rows_read for every query executed, allowing you to assess the cost of query for both pricing and index optimization purposes.

The meta object returned in D1’s Client API contains a total count of the rows read (rows_read) and rows written (rows_written) by that query. For example, a query that performs a full table scan (for example, SELECT * FROM users) from a table with 5000 rows would return a rows_read value of 5000:

"meta": {
"duration": 0.20472300052642825,
"size_after": 45137920,
"rows_read": 5000,
"rows_written": 0
}

Refer to D1 pricing documentation to understand how reads and writes are measured. D1 remains free to use during the alpha period.

​​ 2023-08-09

​​ Bind D1 from the Cloudflare dashboard

You can now bind a D1 database to your Workers directly in the Cloudflare dashboard. To bind D1 from the Cloudflare dashboard, select your Worker project -> Settings -> Variables -> and select D1 Database Bindings.

Note: If you have previously deployed a Worker with a D1 database binding with a version of wrangler prior to 3.5.0, you must upgrade to wrangler v3.5.0 first before you can edit your D1 database bindings in the Cloudflare dashboard. New Workers projects do not have this limitation.

Legacy D1 alpha users who had previously prefixed their database binding manually with __D1_BETA__ should remove this as part of this upgrade. Your Worker scripts should call your D1 database via env.BINDING_NAME only. Refer to the latest D1 getting started guide for best practices.

We recommend all D1 alpha users begin using wrangler 3.5.0 (or later) to benefit from improved TypeScript types and future D1 API improvements.

​​ 2023-08-01

​​ Per-database limit now 500 MB

Databases using D1’s new storage subsystem can now grow to 500 MB each, up from the previous 100 MB limit. This applies to both existing and newly created databases.

Refer to Limits to learn about D1’s limits.

​​ 2023-07-27

​​ New default storage subsystem

Databases created via the Cloudflare dashboard and Wrangler (as of v3.4.0) now use D1’s new storage subsystem by default. The new backend can be 6 - 20x faster than D1’s original alpha backend.

To understand which storage subsystem your database uses, run wrangler d1 info YOUR_DATABASE and inspect the version field in the output.

Databases with version: beta use the new storage backend and support the Time Travel API. Databases with version: alpha only use D1’s older, legacy backend.

​​ Time Travel

Time Travel is now available. Time Travel allows you to restore a D1 database back to any minute within the last 30 days (Workers Paid plan) or 7 days (Workers Free plan), at no additional cost for storage or restore operations.

Refer to the Time Travel documentation to learn how to travel backwards in time.

Databases using D1’s new storage subsystem can use Time Travel. Time Travel replaces the snapshot-based backups used for legacy alpha databases.

​​ 2023-06-28

​​ Metrics and analytics

You can now view per-database metrics via both the Cloudflare dashboard and the GraphQL Analytics API.

D1 currently exposes read & writes per second, query response size, and query latency percentiles.

​​ 2023-06-16

​​ Generated columns documentation

New documentation has been published on how to use D1’s support for generated columns to define columns that are dynamically generated on write (or read). Generated columns allow you to extract data from JSON objects or use the output of other SQL functions.

​​ 2023-06-12

​​ Deprecating Error.cause

As of wrangler v3.1.1 the D1 client API now returns detailed error messages within the top-level Error.message property, and no longer requires developers to inspect the Error.cause.message property.

To facilitate a transition from the previous Error.cause behaviour, detailed error messages will continue to be populated within Error.cause as well as the top-level Error object until approximately July 14th, 2023. Future versions of both wrangler and the D1 client API will no longer populate Error.cause after this date.

​​ 2023-05-19

​​ New experimental backend

D1 has a new experimental storage back end that dramatically improves query throughput, latency and reliability. The experimental back end will become the default back end in the near future. To create a database using the experimental backend, use wrangler and set the --experimental-backend flag when creating a database:

$ wrangler d1 create your-database --experimental-backend

Read more about the experimental back end in the announcement blog.

​​ Location hints

You can now provide a location hint when creating a D1 database, which will influence where the leader (writer) is located. By default, D1 will automatically create your database in a location close to where you issued the request to create a database. In most cases this allows D1 to choose the optimal location for your database on your behalf.

​​ 2023-05-17

​​ Query JSON

New documentation has been published that covers D1’s extensive JSON function support. JSON functions allow you to parse, query and modify JSON directly from your SQL queries, reducing the number of round trips to your database, or data queried.