Clearcutt Catalog
Reference Catalog

App-Team Getting Started

Choose a catalog image, generate a starter, build with the matching Dev image, and certify the app image before deployment. No Nix required.

Role boundary

Platform teams own the fork, Nix builds, release evidence, and catalog. Application teams use Docker, Podman, Kubernetes, Cosign, devcontainers, and the ClearCutt CLI.

1

Prove The CLI From A Clean Clone

Start with the committed fixture catalog. After your platform team publishes a catalog, replace the fixture path with that generated catalog directory.

git clone https://github.com/northcutted/clearcutt.git
cd clearcutt
go -C cli build -o ../clearcutt ./cmd/clearcutt

./clearcutt --catalog cli/internal/testdata/catalog list
./clearcutt --catalog cli/internal/testdata/catalog inspect java21-distroless
./clearcutt --catalog cli/internal/testdata/catalog verify image java21-distroless \
  --require-signature \
  --require-sbom \
  --require-provenance \
  --max-critical 0 \
  --max-high 3 \
  --allow-preview
2

Generate A Starter App

The starter includes a Dockerfile, devcontainer, certification policy, release workflow, and rebase workflow.

./clearcutt app template java --output examples/my-java-service --name my-java-service
3

Use The Dev Path

Use the matching Dev image for build tools. The first command is fixture-backed and prints a devcontainer; the container command needs Docker or Podman access to the configured dev image.

./clearcutt --catalog cli/internal/testdata/dev-catalog dev java21-distroless --devcontainer --print
./clearcutt --catalog cli/internal/testdata/dev-catalog dev java21-distroless --container --engine docker --command 'java -version'
4

Build And Certify

Certify the app image archive before deployment or admission.

docker build -t ghcr.io/acme/payments-api:1.0.0 examples/my-java-service
docker push ghcr.io/acme/payments-api:1.0.0
APP_DIGEST=$(docker buildx imagetools inspect ghcr.io/acme/payments-api:1.0.0 \
  --format '{{json .Manifest.Digest}}' | tr -d '"')
docker save ghcr.io/acme/payments-api:1.0.0 -o payments-api.tar

./clearcutt certify payments-api.tar \
  --base java21-distroless \
  --policy examples/my-java-service/certification-policy.yaml \
  --image-ref "ghcr.io/acme/payments-api@${APP_DIGEST}"

Use JSON exec form

Distroless has no shell. Use ENTRYPOINT ["java","-jar","/workspace/app.jar"], not shell form.

Keep tools in dev

Install and compile dependencies in the Dev stage, then copy only runtime artifacts into the final image.

Separate proof paths

Use verify image for catalog policy checks and registry-side commands for cryptographic evidence.