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

Time Travel

Time Travel is D1’s approach to backups and point-in-time-recovery, and allows you to restore a database to any minute within the last 30 days.

  • You do not need to enable Time Travel. It is always on.
  • Database history and restoring a database incur no additional costs.
  • Time Travel automatically creates bookmarks on your behalf. You do not need to manually trigger or remember to initiate a backup.

By not having to rely on scheduled backups and/or manually initiated backups, you can go back in time and restore a database prior to a failed migration or schema change, a DELETE or UPDATE statement without a specific WHERE clause, and in the future, fork/copy a production database directly.

​​ Terminology

Time Travel introduces the concept of a “bookmark” to D1. A bookmark represents the state of a database at a specific point in time, and is effectively an append-only log.

  • Bookmarks are lexicographically sortable. Sorting orders a list of bookmarks from oldest-to-newest.
  • Bookmarks older than 30 days are invalid and cannot be used as a restore point.
  • Restoring a database to a specific bookmark does not remove or delete older bookmarks. For example, if you restore to a bookmark representing the state of your database 10 minutes ago, and determine that you needed to restore to an earlier point in time, you can still do so.

Bookmarks can be derived from a Unix timestamp (seconds since Jan 1st, 1970), and conversion between a specific timestamp and a bookmark is deterministic (stable).

​​ Timestamps

Time Travel supports two timestamp formats:

​​ Requirements

  • Wrangler v3.4.0 or later installed to use Time Travel commands.
  • A database on D1’s new beta backend. You can check whether a database is using this backend via wrangler d1 info DB_NAME - the output show version: beta.

​​ Retrieve a bookmark

You can retrieve a bookmark for the current timestamp by calling the d1 info command, which defaults to returning the current bookmark:

$ wrangler d1 time-travel info YOUR_DATABASE
# Example output
🚧 Time Traveling...
⚠️ The current bookmark is '00000085-0000024c-00004c6d-8e61117bf38d7adb71b934ebbf891683'
⚡️ To restore to this specific bookmark, run:
`wrangler d1 time-travel restore YOUR_DATABASE --bookmark=00000085-0000024c-00004c6d-8e61117bf38d7adb71b934ebbf891683`

To retrieve the bookmark for a timestamp in the past, pass the --timestamp flag with a valid Unix or RFC3339 timestamp:

# Using an RFC3339 timestamp, including the timezone:
$ wrangler d1 time-travel info YOUR_DATABASE --timestamp="2023-07-09T17:31:11+00:00"

​​ Restore a database

To restore a database to a specific point-in-time:

$ wrangler d1 time-travel restore YOUR_DATABASE --timestamp=UNIX_TIMESTAMP
# Example output:
🚧 Restoring database YOUR_DATABASE from bookmark 00000080-ffffffff-00004c60-390376cb1c4dd679b74a19d19f5ca5be
⚠️ This will overwrite all data in database YOUR_DATABASE.
In-flight queries and transactions will be cancelled.
✔ OK to proceed (y/N) … yes
⚡️ Time travel in progress...
✅ Database YOUR_DATABASE restored back to bookmark 00000080-ffffffff-00004c60-390376cb1c4dd679b74a19d19f5ca5be
↩️ To undo this operation, you can restore to the previous bookmark: 00000085-ffffffff-00004c6d-2510c8b03a2eb2c48b2422bb3b33fad5

Note that:

  • Timestamps are converted to a deterministic, stable bookmark. The same timestamp will always represent the same bookmark.
  • Queries in flight will be cancelled, and an error returned to the client.
  • The restore operation will return a bookmark that allows you to undo and revert the database.

​​ Undo a restore

You can undo a restore by:

  • Taking note of the previous bookmark returned as part of a wrangler d1 time-travel restore operation
  • Restoring directly to a bookmark in the past, prior to your last restore.

To fetch a bookmark from an earlier state:

# Get a historical bookmark
$ wrangler d1 time-travel info YOUR_DATABASE
# Example output
🚧 Time Traveling...
⚠️ The current bookmark is '00000085-0000024c-00004c6d-8e61117bf38d7adb71b934ebbf891683'
⚡️ To restore to this specific bookmark, run:
`wrangler d1 time-travel restore YOUR_DATABASE --bookmark=00000085-0000024c-00004c6d-8e61117bf38d7adb71b934ebbf891683`

​​ Notes

  • You can quickly get the Unix timestamp from the command-line in macOS and Windows via date %+s.
  • Time Travel does not yet allow you to clone or fork an existing database to a new copy. In the future, Time Travel will allow you to fork (clone) an existing database into a new database, or overwrite an existing database.
  • You can restore a database back to a point in time up to 30 days in the past (Workers Paid plan) or 7 days (Workers Free plan). Refer to Limits for details on Time Travel’s limits.