Skip to main content

Overview

Canvas apps have built-in version control. Every time you publish config changes or deploy a new code bundle, an immutable version record is created with:
  • A content hash (SHA-256) — like a git commit SHA
  • A commit message (required) — describes what changed
  • A full config snapshot — serialized as diffable JSON files
  • Who published and when
You can list all versions, diff any two versions, download previous bundles, and restore (rollback) to any version instantly.

How versioning works

There are two ways a new version is created: Both paths create a VersionRecord in the app’s versions array. The version number auto-increments.

Content hashing

When you publish, Mixpeek generates a deterministic SHA-256 hash of your entire config snapshot. This hash changes only when the config actually changes — identical publishes produce the same hash.

Config as diffable files

Your app config is serialized into individual JSON files for each top-level key. This makes version diffs meaningful:

Listing versions

Response:

Viewing version details

Get full metadata for a specific version, including the source files snapshot and which environments it’s active in:
Response:

Diffing versions

Compare any two versions to see what changed — like git diff v1..v2:
Response:
The summary counts file-level changes (based on content hashes). The source_diff provides unified diffs of the actual content — the same format as git diff.

Rollback

Quick rollback (one level)

Restore the previous published config instantly:

Restore any version

For deploy-based versions (code bundles), restore any specific version to any environment:
This is instant — no rebuild required. The previous assets are always retained in S3.

Download a version’s bundle

Download the original zip bundle for any deployed version and work locally:
1

Download the bundle

Response:
2

Download and extract

3

Edit files locally

Make your changes to the extracted source.
4

Re-zip and deploy


Git metadata

When deploying via CI/CD or the CLI, you can attach git metadata to each version for full traceability:
Git metadata appears in version detail responses and Studio’s version history panel.
If you connect a GitHub repository via POST /v1/apps/{id}/connect-repo, deploys are triggered automatically on push. Git metadata is captured from the webhook payload — no manual fields needed.

Version record fields