---
title: Drafts, revisions and publishing
description: How an entry moves from a draft to a published page, and what Hollware keeps along the way.
section: concepts
order: 2
---

# Drafts, revisions and publishing

An entry is one page in one locale: a collection, a locale and a slug. Its content is a list of **revisions**.

## Revisions

Every `create_draft` and `update_draft` adds a revision: the whole Markdown file, frontmatter included, exactly as it was sent. Revisions are never changed or deleted, so you can always see what an entry said, and when.

An entry has a **version**, which goes up with every change. `update_draft` takes the version the agent last read, and answers `conflict` with the current one when someone else changed the entry in between: nothing is overwritten by accident.

## Publishing

`publish` makes one revision the live one. The contracts run again in the publish phase, which can see more than a write can: whether the links point at published entries, whether the translations exist.

After that:

- sites that read over the binding or the read API see the new content on their next read;
- the events of the publication go to the webhooks and to IndexNow, if the config names them, through a queue that retries.

An entry with unpublished changes keeps serving its published revision until you publish again. `unpublish` takes it off the sites and keeps its revisions.

## Scheduling

`publish` takes `publishAt`, a moment in the future: the entry is published then, by the cron trigger of the Worker, with the contracts run again at that moment.

## Your Markdown

`get_entry` with `formats: ['markdown']` returns a revision exactly as it went in, byte for byte. Your content is never locked in a format of Hollware's.
