Tracking adoption of Chainguard Containers
How to identify Chainguard container images in your environment and measure the progress of a migration.
For the complete documentation index, see llms.txt.
Chainguard Starter is a way to try production-grade Chainguard Containers for free, without committing to a full subscription. It lets you choose a set of five container images from the broader Chainguard catalog so you can validate security, performance, and operational fit in your own environment before you buy.
Note: Chainguard Starter is in beta.
Starter is a free plan. Besides the five container images this page covers, it includes Chainguard Libraries, Chainguard Checks, Chainguard Workspaces, and Guardener. For everything Starter includes, refer to Chainguard plans.
To sign up for Starter, follow the steps on this page. Once set up, you can start piloting up to five secure container images from the Chainguard catalog.
With Starter, users can choose any five non-FIPS images from our catalog of secure-by-default containers. Any Helm charts that depend on those images are included and count toward the five-image limit.
Starter is designed as a standalone free plan, separate from paid Catalog or per-image subscriptions. It’s meant for teams who want to try Chainguard Containers in real workloads before committing to a larger rollout, giving them a better understanding of how Chainguard’s hardened images and CVE posture behave in practice.
Note: Starter is best suited for small teams to get them started right away. When you are ready to standardize on Chainguard and deploy organization-wide, we have several paid plans that provide unlimited user access to the Chainguard Containers and additional features like Custom Assembly, FIPS images, EOL/EmeritOSS image versions, a contractual CVE-remediation SLA, and dedicated support.
Once you’ve added all five images, a prompt directs you to contact Chainguard if you need access to additional images.
After you complete signup, you’re free to use the five images you selected however you like. For example, you can pull them into your CI/CD pipelines and runtime environments, or pull them through a third-party registry like JFrog Artifactory. These container images are the same as those provided to Chainguard’s paying customers, and are covered by Chainguard’s standard hardening, rebuild, and CVE-remediation processes, although they are not covered by Chainguard’s CVE SLA.
Because Starter organizations can’t create assumable identities, CI pipelines authenticate with a pull token. Create one with chainctl:
chainctl auth pull-token create --output=envThis sets CHAINGUARD_IDENTITY_ID to the username and CHAINGUARD_TOKEN to the password. Store both as secrets in your CI platform, then log in to cgr.dev with them. For example, in a GitHub Actions workflow:
name: Pull a Chainguard container
on:
push:
branches: ['main']
permissions:
contents: read
jobs:
pull:
runs-on: ubuntu-latest
steps:
- name: Log in to cgr.dev
env:
CHAINGUARD_IDENTITY_ID: ${{ secrets.CHAINGUARD_IDENTITY_ID }}
CHAINGUARD_TOKEN: ${{ secrets.CHAINGUARD_TOKEN }}
run: |
echo "$CHAINGUARD_TOKEN" | docker login cgr.dev \
--username "$CHAINGUARD_IDENTITY_ID" --password-stdin
- run: docker pull cgr.dev/$ORGANIZATION/python:latestThis workflow doesn’t need the id-token: write permission, because it federates no OIDC token.
Pull tokens expire. The default lifetime is 30 days and the maximum is one year (--ttl=8760h), so rotate the secret before it expires. Refer to Authenticate to Chainguard’s Registry for the rest of the pull token options.
After trying out Chainguard Containers with Starter, you can upgrade to the paid Chainguard Team plan yourself, with chainctl. Team raises the Starter limits and lets you swap images. Refer to Upgrade to Chainguard Team.
For more images or features such as FIPS images, reach out to our sales team about one of Chainguard’s other paid plans:
Moving to a paid plan means moving off Starter; the free five-image entitlement is not stacked on top of a paid subscription.
chainctl
As an alternative to the Console, you can sign up for and manage Starter from the command line with chainctl. For the full sign-up flow, including signing up from a script or a coding agent, refer to Sign up for Chainguard Starter.
chainctl
To sign up for a new account, run the interactive chainctl starter init command:
chainctl starter initThis requires selection of a valid authentication option:
Choose an identity provider to login to Chainguard
> Email and password
Google
GitHub
GitLabUse the arrow keys and press Enter to select an option, which launches a browser window to the Chainguard Console to complete sign-up. A GitHub or GitLab sign-in uses the account’s verified primary email address. A personal address creates an unverified organization, which you name yourself.
chainctl
If your company already has a Starter organization, request access to it with chainctl starter request-access:
chainctl starter request-accesschainctl
You can see which images are available using the Chainguard Directory. To add one or more images, run chainctl starter add-images, substituting the desired image names for the variables:
chainctl starter add-images $IMAGE1 [$IMAGE2 ...]After the Chainguard system has processed your request, the images become accessible. This can take up to a few hours. When available, you can pull the images like this, replacing $ORGANIZATION with your organization’s name, or with its ID if you created it with a personal email address, and $IMAGE with the desired image’s name:
docker pull cgr.dev/$ORGANIZATION/$IMAGE:latestchainctl
To show the status of your Starter organization, including the registry path, account provisioning status, image quota usage, and per-image readiness, run chainctl starter status:
chainctl starter statusStarter allows users to try out Chainguard Containers, but it comes with certain limitations, including the following:
limited_owner role, which lets them browse the Console, pull images, create pull tokens, invite colleagues whose email address is in your organization’s domain or one of its subdomains, and remove members. It doesn’t include access to features like Custom Assembly.starter organizations are not allowed to create identities.setup-chainctl GitHub Action doesn’t work with Starter. It authenticates by assuming a Chainguard identity with the OIDC token GitHub issues to the workflow, and it has no pull token mode. The same applies to the OIDC federation examples for GitLab, CircleCI, Buildkite, Jenkins, and Kubernetes. Authenticate your pipelines with a pull token instead, as described in Authenticate CI pipelines with a pull token.chainctl iam identity delete fails, because the limited_owner role can’t delete identities. To revoke a token, delete its role binding instead: run chainctl iam role-bindings list to find the binding, then chainctl iam role-bindings delete <role-binding-id>. This removes the token’s access, although the identity itself remains in the list.No. Once you’ve selected your five images under Starter, that selection is fixed for the life of the free plan and cannot be swapped or replaced.
If you anticipate needing different images over time, we recommend talking to our team about Catalog Pricing or per-image licensing.
No. FIPS images and Chainguard Commercial Builds are not included in the Starter plan.
If you require FIPS-validated images or dedicated commercial build work, you’ll need a paid plan that includes those capabilities.
No. The setup-chainctl action federates a GitHub OIDC token into a Chainguard assumable identity, and Starter organizations can’t create assumable identities. Log in to cgr.dev with a pull token instead, as described in Authenticate CI pipelines with a pull token.
Yes. Everyone in a Starter organization uses the same five images, and no one can swap them.
Anyone with the limited_owner role can invite a colleague whose email address is in the organization’s domain or one of its subdomains. The viewer role is enough to pull images. Replace $ORGANIZATION with your organization’s name and $EMAIL with your colleague’s email address:
chainctl iam invite create $ORGANIZATION --role viewer --email $EMAILTo let your colleague invite others too, use --role limited_owner instead. That role also manages your organization’s billing.
If a Starter organization already exists for your email domain, you can also ask to join it. In the Console, click Request access, or run chainctl starter request-access. The request goes by email to everyone with the owner or limited_owner role in the organization. The link in that email invites you with the viewer role.
No. Starter is a distinct, standalone free plan meant for new organizations. It can’t be combined with existing licenses or used to “carve out” a subset of images from a current subscription.
If you try to sign up using an email domain already associated with a paid Chainguard account, you’ll receive an error message. Contact your Chainguard account administrator for access to your organization’s existing account.
No. Starter is not a discount instrument for larger deployments. You can’t, for example, license 10 images but expect to pay for only five by applying this plan to the rest.
If you know you’ll need more than five images, it’s usually better to start with Catalog Pricing or per-image licensing so you can scale cleanly.
Yes. A work email address, including a Google account on your company’s domain, creates a verified organization. A GitHub or GitLab sign-in, or a personal email address such as a Gmail address, creates an unverified organization, which you can verify later.
You can also sign up from the command line with chainctl starter init, as described in Sign up with chainctl.
If you upgrade to Chainguard Team, your organization keeps its images and members and gets Team’s limits. Refer to What changes when you upgrade.
When you upgrade to another paid plan through Chainguard’s sales team:
Our team will work with you to map the images you chose on Starter into the right long-term structure.
Last updated: 2026-11-10 18:15
chainctl