Skip to main content

Consume images

Reading published image data from imgsrv is unauthenticated in v0.1. Consumers reach published artifacts through two surfaces: the native HTTP API and the Incus Simple Streams projection.

For the wire contract, see /openapi/v1.yaml.

Native HTTP API

List images and versions

curl -sf "$IMGSRV/v1/images" | jq
curl -sf "$IMGSRV/v1/images/debian-bookworm/versions" | jq

Download a primary artifact

A published version's manifest enumerates its artifacts. Each artifact has a stable artifact_id for use in the download URL:

curl -sf "$IMGSRV/v1/images/debian-bookworm/versions/12.5.0" | jq '.artifacts[]'

curl -fL -o image.qcow2 \
"$IMGSRV/v1/images/debian-bookworm/versions/12.5.0/artifacts/$ARTIFACT_ID/download"

Downloads stream through imgsrv. There are no expiring URLs and no redirects to S3-shaped hosts.

Download an attachment

Attachments share the same URL shape:

curl -fL -o image.tar.xz \
"$IMGSRV/v1/images/debian-bookworm/versions/12.5.0/artifacts/$ARTIFACT_ID/attachments/$ATTACHMENT_ID/download"

Resolve an alias

An alias points to a published version. The consumer is free to resolve the alias first and then download from the resulting version:

curl -sf "$IMGSRV/v1/images/debian-bookworm/aliases/latest" \
| jq -r '.version'

Alias resolutions are evaluated at request time; a consumer that follows latest always lands on whatever version the operator most recently pointed it at.

Incus Simple Streams

imgsrv projects eligible published artifacts into the Incus Simple Streams format. Add the service as an Incus remote and consume images using normal incus commands:

incus remote add imgsrv "$IMGSRV" --protocol=simplestreams
incus image list imgsrv:
incus launch imgsrv:debian-bookworm/12.5.0 my-instance

The Simple Streams documents are served at:

  • GET /streams/v1/index.json — index document.
  • GET /streams/v1/images.json — image product file.

Eligibility

An artifact appears in Simple Streams when:

  • Its version is published.
  • The artifact's format is qcow2.
  • The artifact has an attachment named incus.tar.xz.

Aliases are resolved live when the Simple Streams documents render, so a consumer who follows an alias-shaped Incus remote sees alias movement without any change on their side.

For the operator side of producing Simple Streams-eligible releases, see Publish image versions.

Immutability guarantees a consumer can rely on

  • A published version's manifest does not change after the publish job reaches succeeded. A version reference is stable for the lifetime of the service deployment.
  • A primary artifact's blob_digest matches the bytes served by its download URL, as long as the deployment trust boundary holds. See Trust model for the limits.
  • An alias is mutable. A consumer who needs a fixed target must depend on a version string, not on an alias.