This document defines the levels of support that this project provides for various build configurations. It's adapted from c2pa-rs's support tiers document – this repo's tier structure is deliberately simpler, since c2patool is a single binary shipped for a small, fixed set of platforms rather than a library with many optional build configurations. These levels of support are inspired by the Rust language project's Target Tier Policy and use similar language.
The CAI team will determine, at its discretion and with input from various internal and external client teams, which configurations are supported at which tier. The CAI team will always announce a change in tier support with at least a minor semantic version bump.
A build configuration will specify:
- A Rust build tuple (e.g.
x86_64-pc-windows-msvcfor 64-bit Windows).- Unless otherwise specified this is executed on the
(platform)-latestrunner image provided by GitHub.
- Unless otherwise specified this is executed on the
- A Rust version specifier, which will be one of:
stable(the most recent "stable" release)MSRV(the oldest release supported by this project, currently1.96.0, tracked inCargo.toml'srust-versionfield)
- A feature flag set. c2patool currently ships one meaningful choice here: the default (
networking) feature, which pulls inc2pa's remote-manifest-fetching support. - A crypto library, which is not independently selectable the way it is in c2pa-rs: c2patool's
Cargo.tomlpinsopensslon every native target andrust_native_cryptoonwasm32-wasip2(openssl doesn't build for wasm). - On platforms where relevant, a C library identifier (i.e.
glibcormusl). c2patool only tests againstglibc.
The tiers map onto the branching model in c2patool's own release process.
Unlike c2pa-rs, which splits its per-PR merge gate (Tier 1A) from a slower cross-platform-and-MSRV gate (Tier 1B) that only runs against release-targeting branches, c2patool folds both into a single required workflow, ci.yml:
- c2patool ships a macOS/Linux/Windows binary as its core product, and has real per-OS code (e.g. the
cfg(windows)windows-sysdependency), so cross-platform coverage isn't a lower-priority concern the way it is for a library crate. - There is no separate slower tier to catch a cross-platform or MSRV regression if it were left out of the fast gate, so both run in the same required workflow on every pull request.
As a result, Tier 1A is the merge gate for main, and is also required for any pull request targeting a release-line (stable, v0.x) or release-candidate (*-rc*) branch – including backport PRs and the release-plz release PR.
A daily scheduled run of the same workflow also validates main on a nightly cadence.
See validation gating in the release process for how this fits the overall flow.
Tier 1A configurations are the most actively supported. A Tier 1A configuration will:
- Have continuous integration tests that build and pass for this build configuration on every commit to
main, as well as to the release-line (stable,v0.x) and release-candidate (*-rc*) branches described in the release process. Failing tests block the pull request. - This test suite is the most complete set of tests available for this component.
- Tier 1A configurations may also have built artifacts generated for each versioned release. The location where these artifacts are published will be documented.
The ci.yml workflow enforces these requirements.
- Ubuntu:
x86_64-unknown-linux-gnu, Ruststable|MSRV, default (networking) feature,openssl,glibc - macOS:
aarch64-apple-darwin(GitHub'smacos-latestrunner), Ruststable|MSRV, default feature,openssl - Windows:
x86_64-pc-windows-msvc, Ruststable|MSRV, default feature,openssl - WASI:
wasm32-wasip2, Rustnightly-2026-01-16,rust_native_crypto, run underwasmtime
The same workflow also runs Clippy, the cargo +nightly fmt check, a default-features cargo check, a cargo-deny license/vulnerability audit, and an internal-docs build (ubuntu-latest, stable only).
These don't vary by platform, so they aren't separate build configurations, but they gate merges the same way.
Build artifacts: c2patool-release.yml builds and publishes a binary (plus an SBOM) for every versioned release and every release-candidate build:
- macOS: universal binary (
aarch64-apple-darwinandx86_64-apple-darwincombined vialipo) - Linux:
x86_64-unknown-linux-gnu - Windows:
x86_64-pc-windows-msvc
These are published to the releases page; the macOS build is additionally distributed via Homebrew.
A Tier 1B configuration will:
- Have continuous integration tests that build and pass for every versioned release. Failing tests block the release.
- This test suite should be the same as for Tier 1A.
- Tier 1B configurations may also have built artifacts generated for each versioned release. The location where these artifacts are published will be documented.
A decision to place a configuration in Tier 1B is typically made because the CI test suite for this configuration adds significantly to the time required to complete a PR validation and the likelihood of finding issues that are specific to this configuration is deemed low.
There are no current Tier 1B configurations for c2patool: as explained under how the tiers gate merges and releases, the cross-platform and MSRV coverage that c2pa-rs places in Tier 1B runs directly in c2patool's Tier 1A gate instead.
A Tier 2 configuration will:
- Have continuous integration tests that build for this build configuration for each versioned release. A failing build blocks the release.
- A test suite that is a subset of the Tier 1 test suite may be defined for this build configuration. If it exists, a failing test suite blocks the release.
- Generally avoid Tier 2, but it may be necessary when a fully-native execution environment is not available to us.
- If built artifacts are generated for this build configuration, they should be built for every versioned release and the location should be documented.
There are no current Tier 2 configurations for c2patool.
A Tier 3 configuration is experimental and minimally supported. It has been shown to work at one time, but no special effort is made to ensure that such a configuration can be built on an ongoing basis.
There are no current Tier 3 configurations for c2patool.