> ## Documentation Index
> Fetch the complete documentation index at: https://docs.speckle.systems/llms.txt
> Use this file to discover all available pages before exploring further.

# Version Control

> Keep track of every model

Every time new data is published to a **model**, a new **version** is created.
This is a snapshot of your model at a specific point in time, a moment in your project's history.
Version retention depends on your plan: **Team** and **Enterprise** plans retain full version history, while the **Explore** plan provides access to versions created or updated within the last 30 days. Versions may also be deleted when you delete a model.

Versions help you keep track of changes. They record who published them, from
which source, and when. By default everyone sees the latest version, with the
flexibility to go back to a previous state when needed.

Each version includes:

* All the objects in your model
* The date and time it was created
* The person who published it
* (Optional) A short message describing what changed

This makes collaboration easier, keeps your work organized, and ensures nothing gets lost along the way.

<Note>
  The published version content (the snapshot of objects from that publish)
  is **immutable**: that snapshot is not rewritten in place. What **can** change
  over time is metadata and tooling around the version—for example
  validation results, Speckle Automate run outcomes, issue tracking, and
  other signals layered onto the same version. You can also set or edit a
  **version message** to record status, scope, intent, or milestones for
  readers without changing the underlying published data.
</Note>

## How to use versions?

If you've sent data through a **connector**, you've already used versions, they're
created automatically each time you publish to a project.

Once you've published a new version, to keep things clear you can add a **version message**:
a short note that explains what the version includes. This is optional, some connectors
will suggest a default message for you, but you can decide when a version should have a special status.

### Receiving version data

When **receiving data**, you can choose to:

* Stay synced with the **latest version**, or
* Load a **specific version** using its version ID

If you're synced with the latest version, you'll get a notification when someone
sends new data to the project. You can then click **Receive** to bring in the latest
updates and keep your file current.

### Accessing and managing versions

In the web interface you can open versions from **several** places. On any
version row, open the **...** menu at the end of the row for actions (labels
match the product).

**Row menu actions**

* **Edit message...** — change the version note after publish.
* **Move to...** — move this version to another model in the project.
* **Copy link** / **Copy ID** — copy the viewer URL or raw version id (for
  support and integrations).
* **Delete...** — remove the version from the model.

<Note>
  **Edit message...**, **Move to...**, and **Delete...** are only enabled when
  you are the **version author** or a **project owner** (including workspace
  admins who own the project). If an item is disabled, the product explains that
  only the author or project owner can perform the action. **Copy link** and
  **Copy ID** stay available for sharing.
</Note>

#### Model versions page

<Steps>
  <Step title="Open the model versions list">
    In the project, open **Models** and use the **...** menu on a model → **View
    versions**.
  </Step>

  <Step title="Open the version row menu">
    On that model’s **Versions** page, use the **...** menu on the version row for
    the actions above.
  </Step>
</Steps>

#### All versions in the project

<Steps>
  <Step title="Open project Versions">
    Open the project and select **Versions** in the project sidebar. You get
    every version across models in one searchable table.
  </Step>

  <Step title="Open the version row menu">
    Use the **...** menu on a row for the same actions as on the model versions
    page.
  </Step>
</Steps>

#### Viewer

<Steps>
  <Step title="Open the model in the viewer">
    Open the model in the **viewer**.
  </Step>

  <Step title="Use the version row menu">
    In the models / versions panel for that model, expand the version list and
    use the **...** menu on a version for the same actions.
  </Step>
</Steps>

### Latest version

The latest version is always the default, but you can delete that version which will
promote the immediately previous version to be the latest. Alternatively you can simply
publish a new version which will become the latest.

### Comparing versions

Because each version keeps a fixed snapshot of published object data, you can
compare two versions to see the differences between them. This is useful to review changes,
or to see what changed between two specific points in time. More info about [Comparing Versions](/3d-viewer/compare-versions).

## FAQ

<AccordionGroup>
  <Accordion title="Can I set an approval status on a version?">
    You can only set the version message, potentially to something meaningful like "Approved for release".
  </Accordion>

  <Accordion title="How long are versions stored for?">
    Versions are stored indefinitely, but you may be limited as to how many you can see depending on your workspace plan.
  </Accordion>

  <Accordion title="Can I prevent others from seeing specific versions?">
    No, once a version is published it is visible to all users with permission to view the model.
  </Accordion>

  <Accordion title="Can I prevent others from deleting versions?">
    Only the owner of the model can delete versions.
  </Accordion>

  <Accordion title="How many versions can I publish?">
    You can publish as many versions as you want, but you may be limited as to how many you can see.
  </Accordion>

  <Accordion title="I already published a version, can I still set or edit its version message?">
    Yes, you can set or edit the version message for any version from the version history page.
  </Accordion>

  <Accordion title="I can't see older versions">
    All older versions are stored indefinitely but may be hidden if depending on your workspace plan limits.
  </Accordion>

  <Accordion title="How do I visually compare versions?">
    You can compare two versions to see the differences between them. This is useful to review changes,
    or to see what changed between two specific points in time. You can do this in the 3D viewer, more details
    can be found in the [compare versions](/3d-viewer/compare-versions) page.
  </Accordion>

  <Accordion title="How do I delete a version?">
    If you've published a version by mistake you can delete it. This will remove it from the model
    and if you delete the latest version it will make the previous version the latest.
  </Accordion>

  <Accordion title="How do I restore a version?">
    You can't promote a specific version to be the latest, but you can publish a new version
    which will become the latest. Or delete all newer versions. Receiving a specific
    version and re-publishing it will theoretically restore it, but this can be a lossy
    process depending on the connector. More reliable would be to do so programmatically.
  </Accordion>

  <Accordion title="How do I set a version message?">
    You will prompted in your connector to set a version message when you publish.
  </Accordion>
</AccordionGroup>
