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

# Versioning

> Store snapshots of a project's data, impulse, and settings so you can restore, share, or publish a known-good state.

A version is a complete snapshot of your project at a point in time: the dataset, the impulse configuration, the trained models, and the project settings, stored together and kept indefinitely. Creating one does not change your project, and you can keep working immediately afterwards.

Unlike a Git commit, a version includes your data as well as configuration, and restoring one replaces the project state instead of merging into it.

<Frame caption="The Versions page listing stored project versions.">
  <img src="https://mintcdn.com/edgeimpulse/sFtdfPhSpbLZ2-cz/.assets/images/studio-versioning.png?fit=max&auto=format&n=sFtdfPhSpbLZ2-cz&q=85&s=fe0a8f1ee895c0fae879e6c08db31205" alt="The Versions page listing stored project versions with accuracy and sample counts" width="1600" height="824" data-path=".assets/images/studio-versioning.png" />
</Frame>

## What a version captures

Each version is a full copy of the project, stored separately from the project itself. By default, the copy goes to storage that Edge Impulse hosts. Projects in an enterprise organization can store versions in one of the organization's [storage buckets](/studio/organizations/data/cloud-data-storage) instead, so the copies stay in your own cloud account. [List versions](/apis/studio/projects/list-versions) returns the bucket and path of each version.

Each stored version records:

* The version number and description you gave it.
* Who created it and when.
* The training accuracy, measured on the validation set, and the test accuracy, measured on the test set. Object detection projects record mean average precision at IoU 0.5 instead.
* Which impulse those metrics came from, if the project has more than one [experiment](/studio/projects/experiments).
* The total number of data samples.
* Whether the version is public or private.

A version only shows accuracy if you trained and tested the project before creating it. To record an up-to-date test accuracy, choose to run [model testing](/studio/projects/model-testing) when you create the version.

## Creating a version

1. Open the **Versions** tab in the left-hand menu of your project.

2. Click **Store your current project version**.

   <Frame caption="Storing the current project version.">
     <img src="https://mintcdn.com/edgeimpulse/YmjKhgkCrlx3Nxh9/.assets/images/create-version.png?fit=max&auto=format&n=YmjKhgkCrlx3Nxh9&q=85&s=ef5d053123c362af51ffdae1ec9d654a" alt="The Versions page with the Store your current project version button highlighted" width="1600" height="585" data-path=".assets/images/create-version.png" />
   </Frame>

3. Write a description. Record what changed and why, so you can tell versions apart later.

   <Frame caption="Describing the version before saving it.">
     <img src="https://mintcdn.com/edgeimpulse/BCrJzLAs8FGQ0Eny/.assets/images/second-version.png?fit=max&auto=format&n=BCrJzLAs8FGQ0Eny&q=85&s=789a28ec4832a09cb725f058a7845520" alt="The version details dialog with fields for the version name and description" width="797" height="557" data-path=".assets/images/second-version.png" />
   </Frame>

4. Decide whether to publish it. Checking **Publish this version under the Apache 2.0 license** makes the version public, which is covered below.

5. Click **Save**. Versioning runs as a job, so large datasets take a while to copy.

<Info>
  If your project uses a custom learning block pushed through [Bring Your Own Model](/studio/projects/dashboard/byom), the Studio warns you before publishing, because that block becomes available to anyone who clones the public version.
</Info>

## Restoring a version

Select a version from the list and click **Revert to this version**.

<Frame caption="Restoring a stored version.">
  <img src="https://mintcdn.com/edgeimpulse/KpGxseVgo6WAQqJB/.assets/images/revert-version.png?fit=max&auto=format&n=KpGxseVgo6WAQqJB&q=85&s=eccac6605bf02519ca42ac84c338a1a2" alt="The version details view with the Revert to this version button" width="1600" height="729" data-path=".assets/images/revert-version.png" />
</Frame>

Restoring overwrites the impulse and all project settings with the contents of the version. The underlying API only accepts a restore into a project with no data, so a restore returns the whole project to the version's state. It can't roll back a single change.

<Tip>
  To inspect an old version without changing your current project, create an empty project and restore the version into it. Restoring can read a version from a different project, so you can compare the old and current states side by side.
</Tip>

Deleting a version removes it from the project's list, but the underlying snapshot remains in cold storage.

## Public versions

Publishing a version makes its data and state readable on a public URL, and lets anyone clone it into their own account as a starting point. Published versions appear in the [public project repository](https://edgeimpulse.com/projects/overview).

Because publishing exposes the dataset as well as the model, check what your samples contain before you publish: recorded audio, images of people, and file names carrying customer or site identifiers all travel with the version.

A published version can be made private again, which removes the public URL.

## When to create a version

Create a version at these points:

* **Before anything destructive**, such as rebalancing the dataset, deleting samples, or changing a DSP block's parameters. These are the changes that are hard to undo by hand.
* **At the point a model becomes a candidate for deployment**, so that the exact data and configuration behind a deployed binary stays recoverable.
* **Before handing the project to someone else**, so there is a known-good state to return to.

[Experiments](/studio/projects/experiments) compare several impulses on the same data inside one project. Versions snapshot the whole project, including the data. Use experiments to pick a configuration, and a version to save it.

## Versioning in an organization

In enterprise projects, all collaborators see the same version history, so a version created by one engineer is a restore point for the whole team.

Each version records who created it, when, and their description, so the version list also serves as a change log.

Permissions work differently for people and API keys:

* **Collaborators have full access to versions.** A project collaborator can create, restore, and delete any version in that project. There is no setting that limits a person to reading versions.
* **API keys can be limited.** Version operations have their own scopes, so a key can read versions without being able to create or delete them. Use scoped keys for automation.

## API reference

| Endpoint | Use |
| - | - |
| [Version project](/apis/studio/jobs/version-project) | Create a version, optionally publishing it, running model testing, or targeting a bucket |
| [List versions](/apis/studio/projects/list-versions) | Retrieve every version with its metrics and storage location |
| [Restore project to version](/apis/studio/jobs/restore-project-to-version) | Restore a version, including from another project |
| [Restore project to public version](/apis/studio/jobs/restore-project-to-public-version) | Restore from a published version |
| [Make a version public](/apis/studio/jobs/make-a-version-public) | Publish an existing version |
| [Make version private](/apis/studio/projects/make-version-private) | Withdraw a published version |
| [Update version](/apis/studio/projects/update-version) | Change a version's description |
| [Delete versions](/apis/studio/projects/delete-versions) | Remove a version from the project |

## Additional resources

* [Experiments](/studio/projects/experiments) for comparing impulses within a project
* [Model testing](/studio/projects/model-testing) for the accuracy figures stored with a version
* [Project dashboard](/studio/projects/dashboard) for project-wide settings and collaborators
