Snapshots
Snapshots are the foundation that makes Null Autos fast. A snapshot is a point-in-time copy of a disk volume, stored on a high-performance storage tier. The platform uses snapshots to boot emulators quickly and to start builds warm instead of cold.
The problem snapshots solve
Android Automotive builds are huge, and emulator disk images are large. Doing either from scratch every time is slow and wasteful. Snapshots let you capture a known-good state once and clone it instantly thereafter.
Two ways snapshots are used
1. Fast emulator boot
Every emulator launches by cloning a snapshot rather than building or downloading an image. Cloning on the high-performance storage tier is near instant, so devices go from "create" to "running" quickly and consistently.
2. Warm CI builds
For CI/CD, the platform automatically:
- restores the most recent matching snapshot when a job starts, so the job begins with prior state already in place, and
- captures a new snapshot when the job finishes (configurable: on success, on failure, or always).
A pipeline opts in with a few environment variables, and no manual volume management is required. See CI/CD integration.
Snapshot trees
Snapshots are related in a tree: a snapshot can have a parent it was derived from. This captures the lineage of your build and device state.
The portal visualizes this tree, and you can explore it from the CLI
(nullctl get snapshots) or API (GET /api/v1/snapshots/tree).
Retention & storage health
Snapshots consume storage, so the platform manages them automatically:
- Retention policies keep the most relevant snapshots by count, size, or age, per logical group.
- Roots are protected. A snapshot promoted to a retention root, or one still referenced as the source of a volume, is never deleted out from under you.
- Storage stays fast. The platform monitors capacity and consolidates long snapshot chains in the background to maintain performance.
- Portability (optional). Snapshots can be backed up to object storage for movement across environments.
You can see storage capacity at any time:
nullctl get snapshots # list snapshots
or via GET /api/v1/snapshots/diskpool.
Managing snapshots
| Action | Portal | CLI | API |
|---|---|---|---|
| List | Snapshots dashboard | nullctl get snapshots | GET /snapshots |
| Inspect | Snapshot detail | nullctl get snapshot <name> | GET /snapshots/{name} |
| View tree | Snapshot tree view | nullctl get snapshots | GET /snapshots/tree |
| Delete | Snapshot actions | nullctl delete snapshot <name> | DELETE /snapshots/{name} |
| Promote to root | Admin actions | nullctl snapshot promote-root <name> | POST /snapshots/{name}/promote-root |
| Demote root | Admin actions | nullctl snapshot demote-root <name> | POST /snapshots/{name}/demote-root |
| Score for retention | n/a | nullctl snapshot score | n/a |
Promoting checks that the snapshot is safe to protect and returns 409 with a
list of problems if not (e.g. not deployable yet); pass force: true to
promote anyway. The Snapshots dashboard shows each snapshot's root status,
retention score, and (when the controller has annotated one) a breakdown of
what drove that score, and lets an admin promote or demote directly from the
table or detail drawer. The emulator creation picker only lists deployable
snapshots and defaults to the newest promoted root.
Next steps
- Emulators: what snapshots boot into.
- Android Builds: where snapshots come from.
- CI/CD integration: automating warm builds.