The CAI open-source projects define three levels of support for various build configurations. These levels of support are inspired by the Rust language project’s Target Tier Policy and uses similar language.
The CAI team will determine at its discretion – with input from various internal and external client teams – which configurations are supported at which tier. A change in tier support will always be announced with at least a minor semantic version bump.
A build configuration will specify:
- A Rust build tuple (e.g.
aarch64-apple-darwinfor ARM-based MacOS)- 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)
- A feature flag set, which will be either
all(all flags defined in the c2pa-rs crate) or a list of specific features. - A crypto library flag, which will be either
rust_native_cryptooropenssl, depicting which cryptogrpahy stack is being built and tested. - On platforms where relevant, a C library identifier (i.e.
glibcormusl).
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. A pull request will be blocked if the tests do not pass. - 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.
These requirements are enforced in the Tier 1A workflow.
- Ubuntu:
x86_64-unknown-linux-gnu, Ruststable,allfeatures,openssl|rust_native_crypto,glibc - Windows (ARM):
aarch64-pc-windows-msvc, Ruststable,allfeatures,openssl|rust_native_crypto - Wasm:
wasm32-unknown-unknown, Ruststable,fetch_remote_manifestsfeature,rust_native_crypto - WASI:
wasm32-wasip2, Rustnightly-2026-01-16,allfeatures
- Ubuntu:
x86_64-unknown-linux-gnu, Ruststable,allfeatures,openssl|rust_native_crypto,glibc - Windows (ARM):
aarch64-pc-windows-msvc, Ruststable,allfeatures,openssl|rust_native_crypto
- Ubuntu:
x86_64-unknown-linux-gnu, Ruststable,allfeatures,openssl|rust_native_crypto,glibc - Windows (ARM):
aarch64-pc-windows-msvc, Ruststable,allfeatures,openssl|rust_native_crypto
A Tier 1B configuration will:
- Have continuous integration tests that build and pass for every versioned release. A release will be blocked if the tests do not pass.
- 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.
These requirements are enforced in the Tier 1B workflow.
- Ubuntu:
x86_64-unknown-linux-gnu, RustMSRV,allfeatures,openssl|rust_native_crypto,glibc - Ubuntu (ARM):
aarch-unknown-linux-gnu, Ruststable|MSRV,allfeatures,openssl|rust_native_crypto,glibc - MacOS:
aarch64-apple-darwin, Ruststable|MSRV,allfeatures,openssl|rust_native_crypto - Windows:
x86_64-pc-windows-msvc, Ruststable|MSRV,allfeatures,openssl|rust_native_crypto
- Ubuntu:
x86_64-unknown-linux-gnu, RustMSRV,allfeatures,openssl|rust_native_crypto,glibc - Ubuntu (ARM):
aarch-unknown-linux-gnu, Ruststable|MSRV,allfeatures,openssl|rust_native_crypto,glibc - MacOS:
aarch64-apple-darwin, Ruststable|MSRV,allfeatures,openssl|rust_native_crypto - Windows:
x86_64-pc-windows-msvc, Ruststable|MSRV,allfeatures,openssl|rust_native_crypto
- Ubuntu:
x86_64-unknown-linux-gnu, RustMSRV,allfeatures,openssl|rust_native_crypto,glibc - Ubuntu (ARM):
aarch-unknown-linux-gnu, Ruststable|MSRV,allfeatures,openssl|rust_native_crypto,glibc - MacOS:
aarch64-apple-darwin, Ruststable|MSRV,allfeatures,openssl|rust_native_crypto - Windows:
x86_64-pc-windows-msvc, Ruststable|MSRV,allfeatures,openssl|rust_native_crypto
A Tier 2 configuration will:
- Have continuous integration tests that build for this build configuration for each versioned release.
A release will be blocked if the build fails.
This test suite may be triggered for a PR by adding the
release-readinesslabel to the PR. - A test suite that is a subset of the Tier 1 test suite may be defined for this build configuration. If it exists, a release will be blocked if the test suite fails.
- Tier 2 should generally be avoided, but may necessary when a fully-native execution environment is not available to us. (As an example, we can run iOS code in a simulator, but we do not currently pay for hosted iPhone test machines that we can use from GitHub, so iOS native builds can not be in Tier 1.)
- If built artifacts are generated for this build configuration, they should be built for every versioned release and the location should be documented.
These requirements are enforced in the Tier 2 workflow.
- Ubuntu:
x86_64-unknown-linux-gnu, Ruststable, no default features,openssl,glibc - iOS:
aarch64-apple-ios|x86_64-apple-ios|aarch64-apple-ios-sim,file_io,rust_native_crypto - Android:
aarch64-linux-android|armv7-linux-androideabi|i686-linux-android|x86_64-linux-android,file_io,rust_native_crypto
- Ubuntu:
x86_64-unknown-linux-gnu, Ruststable,file_io,rust_native_crypto,glibc, build artifacts - MacOS:
aarch64-apple-darwin, Ruststable,file_io,rust_native_crypto, build artifacts - Windows:
x86_64-pc-windows-msvc, Ruststable,file_io,rust_native_crypto, build artifacts - iOS:
aarch64-apple-ios|x86_64-apple-ios|aarch64-apple-ios-sim,file_io,rust_native_crypto, build artifacts - Android:
aarch64-linux-android|armv7-linux-androideabi|i686-linux-android|x86_64-linux-android,file_io,rust_native_crypto, build artifacts
Build artifacts are posted to the releases page for each versioned release.
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.