---
title: Version history
description: Preview, restore, and label earlier versions of a dashboard, and know which retention rules decide what survives.
updated: 2026-09-24
tier: free
---

Every republish snapshots the previous version automatically. There is no save
button and no moment where you decide to keep one.

## Where to find them

Open [dashies.ai/app/versions](https://dashies.ai/app/versions).

:::note{title="The page shows the workspace you are in"}
It lists the dashboards of the space you have switched into, so switch workspaces
to see another one's history. Your AI reaches the same history from anywhere:
`list_dashboard_versions`, `get_dashboard_version`, `restore_dashboard_version`,
and `update_dashboard_version`.

Any current member of a workspace may restore or label a dashboard's version, on
the principle that whoever may republish it may also roll it back.
:::

## What you can do with a version

- **Preview** it in place, without changing anything live.
- **Download** it as a file.
- **Restore** it, which replaces the live dashboard's body.
- **Label** it, which is what stops it being pruned.

:::note{title="A preview of a dashboard that keeps its data with Dashies uses its current data"}
A dashboard that [keeps its data with Dashies](/guides/connect-warehouse#a-warehouse-dashboard-is-served)
answers every preview from the data it holds **now**, because a version keeps its layout and not
a copy of its data. So the preview shows that version's layout with the dashboard's current
data, and says so at the bottom of the preview; side by side with the current dashboard, both
sides show the same current data. A tile that uses data the dashboard has since removed reads "no longer available".
Markup you wrote yourself, a `custom` tile or a `look`, shows whatever its own code draws when a dataset fails.
A version that carries its own numbers shows those numbers, as before.
:::

## Restoring

Restoring first snapshots the **current** body, then overwrites the live
dashboard with the chosen version's bytes. Because the current state is captured
first, a restore is normally itself reversible: the version you just replaced is
now sitting in the list.

The slug, the URL, and the metadata are unchanged. Only the body moves.

## Retention: label what you want to keep

| Kind | How many are kept |
|---|---|
| Unlabelled autosaves | the most recent **20** |
| Labelled versions | up to **30** |

Autosaves past the most recent 20 are pruned. **A labelled version is never
pruned**, which makes labelling the only way to keep a specific state
indefinitely.

Labels are up to 80 characters. Saving a blank label clears it, which puts that
version back into the autosave pool and therefore back in line to be pruned.

If you try to label a previously-unlabelled version when 30 labels already exist,
you get:

```bash
named version limit reached
```

Clear a label off something else first. Relabelling an already-labelled version
and clearing a label are never capped.

:::note{title="Label before the 21st republish, not after"}
The pruning is by count, not by age, and it happens on republish. A state worth
keeping is worth labelling the day you publish it, because by the time you go
looking for it, twenty republishes later, it is gone.
:::

## Check it worked

1. Open [dashies.ai/app/versions](https://dashies.ai/app/versions) and select
   your dashboard. Republish it once, then reload: a new entry should appear at
   the top.
2. **Preview** an older entry and confirm it renders that version's layout. It shows
   the older numbers when the version carries its own numbers; otherwise it shows the
   dashboard's current data and says so.
   Preview changes nothing live, so this is safe to do on a shared dashboard.
3. **After a restore**, open the dashboard's own URL and confirm the body
   changed. Then check the versions list again: the state you just replaced
   should be the newest entry, which is how you undo the restore.
4. **After labelling**, confirm the label shows on the entry. That entry is now
   exempt from pruning.
