Warning

This article is for an older version of Sanity Studio (v2), which is deprecated. Learn how to migrate to Studio v3 →

Drafts

How drafts work, and how you disable them

When you create a new document a draft is created. A draft document does not appear on the APIs to unauthenticated users and you may not refer to it as a reference before it is published.

When you publish a document it becomes available on the public APIs and you may reference it from other documents.

When you start working on a published document a new draft gets created. This creates a new event in the document history. You can access the document history from the context menu:

Access the document history from the context menu

Behind the scenes

Drafts are saved in a document with an id beginning with the path drafts.. When you publish a document it is copied from the draft into a document without the drafts.-prefix (e.g. drafts.ca307fc7-4413-42dc-8e38-2ee09ab6fb3d vs ca307fc7-4413-42dc-8e38-2ee09ab6fb3d). When you keep working a new draft is created and kept read protected in the drafts document until you publish again.

Drafts are not available to the public API, but can be accessed using an authenticated client or using an access token. Sometimes you therefore might need to filter drafts from your queries. You can do this by adding the following filter:

*[!(_id in path('drafts.**'))] // _id matches anything that is *not* in the drafts-path

Timestamps

The published and draft document both have _createdAt and _updatedAt fields.

  • _createdAt is the same value for both and reflects the time when the document was first created.
  • _updatedAt on the draft is the time of when it was last edited
  • _updatedAt on the published is the time when it last got published

We're doing it live

Sometimes you might not need drafts at all. Say you're using listeners to update a ranking list in an app and you just want the changes in the studio to go out in real-time on the wire as mutations as the order is being changed.

To disable drafts for a data type simply include liveEdit: true in the schema definition:

export default {
  name: 'author',
  title: 'Author',
  type: 'document',
  liveEdit: true,