c2pa
Rust SDK for C2PA (Coalition for Content Provenance and Authenticity) implementors
0.90.15
9.7M downloads/mo
#3155 most downloaded on crates.io
contentauth/c2pa-rs
What this package is like to depend on
Last release 10 days ago
13 Aug 2026
Ships on a steady schedule
a new release about every 2 weeks
Nearly every release is documented
notes for 216 of 233 stable releases
4 versions withdrawn
withdrawn after publishing
4 years old
237 releases · first in 2022
101 releases in the last 12 months
see the full history below
Release timeline
237 releases · Mar 2022 to Aug 2026Releases
latest 60 of 237-
1.0.003 Aug 2022 withdrawnNothing published for this version
-
0.90.1513 Aug 2026Release notes
Open source →What's Changed
- fix: Hardening against potential deep recursion in update manifests with parent cycles (backport #2493) by @caiopensrc in #2501
- chore: release by @caiopensrc in #2502
Full Changelog: c2pa-v0.90.14...c2pa-v0.90.15
-
0.90.1413 Aug 2026Release notes
Open source →What's Changed
- fix: Diamond inputTo manifest exponential reverifications depending on ingredient paths reachability (backport #2492) by @caiopensrc in #2498
- chore: release by @caiopensrc in #2499
Full Changelog: c2pa-v0.90.13...c2pa-v0.90.14
-
0.90.1313 Aug 2026Release notes
Open source →What's Changed
- fix(sdk): Parse PEM cert chain to DER for RemoteSigner (backport #2414) by @caiopensrc in #2481
- chore: release by @caiopensrc in #2495
Full Changelog: c2pa-v0.90.12...c2pa-v0.90.13
-
0.90.1212 Aug 2026Nothing published for this version
-
0.90.1112 Aug 2026Nothing published for this version
-
0.90.1011 Aug 2026Nothing published for this version
-
0.90.910 Aug 2026Nothing published for this version
-
0.90.810 Aug 2026Nothing published for this version
-
0.90.707 Aug 2026Nothing published for this version
-
0.90.606 Aug 2026Nothing published for this version
-
0.90.505 Aug 2026Nothing published for this version
-
0.90.404 Aug 2026Nothing published for this version
-
0.90.324 Jul 2026Nothing published for this version
-
0.90.224 Jul 2026Nothing published for this version
-
0.90.121 Jul 2026Nothing published for this version
-
0.90.017 Jul 2026Nothing published for this version
-
0.89.313 Jul 2026 -
0.89.209 Jul 2026 -
0.89.107 Jul 2026Release notes
Open source →07 July 2026
Documented
- Update README.md doc links (#2261)
Fixed
- Resolve crate audit advisories (lopdf, quick-xml, crossbeam-epoch, ttf-parser) (#2268)
- Don't serialize empty values (#2254)
- CAI-10364 (Server-Side Request Forgery (SSRF) via CAWG did:web Resolution during Post-Validation ) (#2168)
Other
- Lazy load all ingredient resources & remove old to_archive zip format. (#2173)
-
0.89.022 Jun 2026Release notes
Open source →19 June 2026
Added
Fixed
- Harden JUMBF and JPEG XL parsers against Brotli decompression bombs (#2210)
-
0.88.011 Jun 2026Release notes
Open source →Removal of deprecated APIs
Release 0.88.0 removes several long-deprecated APIs. These are breaking changes; update your code before upgrading.
Rust API
The following
Ingredientmethods and types have been removed:Removed Use instead Ingredient::from_file(path)Open the file and call Ingredient::from_stream(format, &mut stream)Ingredient::from_file_with_folder(path, folder)Ingredient::from_stream(format, &mut stream)Ingredient::from_file_with_options(path, options)Ingredient::from_stream(format, &mut stream)+ builder setter methodsIngredient::from_memory(format, bytes)Ingredient::from_stream(format, &mut std::io::Cursor::new(bytes))Ingredient::set_memory_thumbnail(format, bytes)Ingredient::set_thumbnail(format, bytes)IngredientOptions,DefaultOptionsUse builder setter methods directly on IngredientC FFI
The following C API functions have been removed:
Removed Use instead c2pa_read_filec2pa_reader_from_context()c2pa_read_ingredient_filec2pa_reader_from_context()c2pa_sign_filec2pa_builder_from_context() -
0.87.011 Jun 2026Release notes
Open source → -
0.86.108 Jun 2026 -
0.86.008 Jun 2026 -
0.85.203 Jun 2026Release notes
Open source →03 June 2026
Fixed
- Exact ingredient redaction URI matching (#2203)
- Harden against integer underflow in JUMBF box parsers (#2200)
- Dup redaction (#2199)
- Harden against unchecked array index in JUMBF brotli box accessor (#2192)
- Make GIF box map C2PA placeholder len 0 rather than 1 (#2156)
- Error with validation results on invalid manifest after verify after sign (#2147)
-
0.85.101 Jun 2026Release notes
Open source →01 June 2026
Fixed
- Preserve validation status log kind after deserialization (#2162)
- Declare c2pa XML namespace on SVG root, not manifest tag (#2113)
Other
-
0.85.027 May 2026Release notes
Open source →27 May 2026
Added
- Support CAWG callback signing via c_ffi (#2118)
Fixed
- Sync resolver for CAWG web DID (#2172)
- Load ingredient manifest store esp. to load resources on search/load miss (#2164)
- Share reqwest HTTP clients (#2152)
- Improve archive APIs to be able to link archives to actions (#2095)
- Use XMP instance_id from source asset in sign and save_to_stream (#2158)
- Harden against Builder::base_path injection attack on archive deserialisation (#2139)
- Harden against integer overflow attacks in hash_stream_by_alg_with_progress range validation (#2140)
Other
- Skip intermediate stream copy for common signing path (#2161)
- Avoid buffering PNG into memory when writing (#2159)
- Avoid buffering stream when computing placeholder PNG C2PA chunk (#2154)
- Avoid buffering stream when computing placeholder JPEG C2PA chunk (#2155)
- Fix lints in newer Rust versions. (#2153)
- Optimize signing passes/copies for large PNGs (#1967)
- Optimize signing passes/copies for large RIFFs (#1970)
- Optimize signing passes/copies for large JPEGs (#1971)
- Lazy-load ingredient manifest stores from shared Arc<Store> (#2103)
- Consolidate embeddable async functions (#2149)
- Consolidate async verify functions (#2146)
-
0.84.112 May 2026Release notes
Open source →12 May 2026
Fixed
- Case-insensitive enums in settings to preserve backwards compatibility with
configcrate (#2138)
- Case-insensitive enums in settings to preserve backwards compatibility with
-
0.84.012 May 2026Release notes
Open source →11 May 2026
Fixed
- Archive preserves duplicate label assertions (#2135)
Other
- [breaking] Remove
configcrate and useserde_jsondirectly (#2132)
-
0.83.011 May 2026Release notes
Open source →11 May 2026
Added
- Large and complex benchmark suite (#2116)
Fixed
Other
- Update
cargo-udepssetup (#2047)
-
0.82.104 May 2026 -
0.82.001 May 2026Release notes
Open source → -
0.81.001 May 2026 -
0.80.329 Apr 2026Release notes
Open source →29 April 2026
Added
- Support DNG big data (#2092)
- Add
init trust, trust sidecars, and atomic sidecar writes, plus fixes (#2093)
Updated dependencies
- Bump openssl from 0.10.77 to 0.10.78 (#2082)
-
0.80.228 Apr 2026Release notes
Open source →28 April 2026
Documented
- Adds redaction docs and example (#2071)
Fixed
c2pa-c-ffiUB detected by miri (#2089)- Harden RSA validators against invalid BER sequences (#2065)
- Harden against deep linear ingredient chains with max limits (#2064)
- Harden BMFF hash merkel tree creation with max merkel leaves limits (#2063)
- Harden against image decompression bomb attacks in building thumbnail (#2062)
- Harden tiff parser against forged IFD entry count fields (#2059)
- Harden builder and resource store addition against path traversal zip slip attacks (#2066)
-
0.80.127 Apr 2026Release notes
Open source →27 April 2026
Fixed
- Harden against empty certificates during OCSP certificate validation (#2067)
- Prevent duplicate timestamp assertion (#2085)
- Harden riff chunk parser against forged size field memory attacks (#2053)
- Harden bmff parsing against integer overflow attack (#2054)
- Harden against cyclic IFD chain in tiff parser (#2068)
-
0.80.017 Apr 2026Release notes
Open source →16 April 2026
Added
- Add ingredient archive FFI functions and relax Builder mutability (#2061)
- Compressed manifest (#2027)
Documented
- Separate out C docs (#2052)
Fixed
- Multi rendition support (#2058)
-
0.79.515 Apr 2026 -
0.79.414 Apr 2026Release notes
Open source →Deprecation of thread-local settings APIs
Release 0.79.4 deprecates all legacy thread-local configuration APIs in favor of explicit
Context-based equivalents. These are not breaking changes: All deprecated methods retain their original behavior and continue to work, but will produce compiler warnings. Note that some of these deprecated methods were subsequently removed in Version 0.88.0.Rust API
Builder::default()andReader::default()are now the idiomatic way to construct with default settings, replacing the more verboseBuilder::from_context(Context::new())andReader::from_context(Context::new()).The following methods are now deprecated:
Deprecated Use instead Builder::new()Builder::default()Builder::from_json(json)Builder::default().with_definition(json)Builder::from_archive(stream)Builder::default().with_archive(stream)Reader::from_stream(format, stream)Reader::default().with_stream(format, stream)Reader::from_file(path)Reader::default().with_file(path)Reader::from_manifest_data_and_stream(...)Reader::default().with_manifest_data_and_stream(...)Reader::from_fragmented_files(path, fragments)Reader::default().with_fragmented_files(path, fragments)Settings::from_toml(toml)Settings::new().with_toml(toml)Settings::from_string(str, format)Settings::new().with_json(str)orSettings::new().with_toml(str)Settings::signer()Configure a signer on a Contextand pass it toBuilder::from_contextTo use custom settings, create a
ContextwithContext::new().with_settings(...)and pass it toBuilder::from_context(context)orReader::from_context(context).C FFI
The following C API functions are deprecated:
Deprecated Use instead c2pa_load_settingsc2pa_settings_new()+c2pa_context_builder_set_settings()c2pa_reader_from_streamc2pa_reader_from_context()c2pa_reader_from_filec2pa_reader_from_context()c2pa_reader_from_manifest_data_and_streamc2pa_reader_from_context()+c2pa_reader_with_manifest_data_and_stream()c2pa_builder_from_jsonc2pa_builder_from_context()+c2pa_builder_set_definition()c2pa_builder_from_archivec2pa_builder_from_context()+c2pa_builder_with_archive()c2pa_signer_from_settingsc2pa_context_builder_set_signer()c2pa_read_file,c2pa_read_ingredient_file,c2pa_sign_fileContext-based equivalents (removed in Version 0.88.0) c2pa_reader_free,c2pa_builder_free,c2pa_string_free,c2pa_manifest_bytes_free,c2pa_signer_free,c2pa_release_string,c2pa_signature_freec2pa_free()C and C++ headers now emit compiler deprecation warnings when deprecated functions are called.
-
0.79.309 Apr 2026Release notes
Open source →09 April 2026
Added
- (sdk) Ingredient JUMBF archives, archive metadata typing (#2007)
Fixed
- Redaction follow-up fix (#2030)
-
0.79.208 Apr 2026Release notes
Open source →08 April 2026
Fixed
- Harden against integer overflow panic in big tiff processing (#2012)
- Harden against integer underflow panic in assertion label parsing (#2013)
- Harden assertion label URI parsing logic to fix index out of bounds access (#2018)
- Harden BMFF hash merkle validation via count/range mismatch (#2019)
- Harden BmffHash timed media chunk verification against out of bounds access issue (#2020)
- Harden BMFF Merkle maps processing logic to avoid panic (#2021)
- Harden against invalid MP4 files during BmffHash timed-media chunk mapping (#2022)
- Redact thumbnails when ingredient with thumbnails added through add_ingredient is being thumbnail-redacted too (#2016)
- Allow any file type to be signed with a sidecar (#2014)
-
0.79.108 Apr 2026 -
0.79.003 Apr 2026 -
0.78.801 Apr 2026Release notes
Open source →31 March 2026
Added
- Expose a C FFI API to help determine the hashtype a Builder uses with embeddable APIs (#1992)
- Add support for JPEG XL file format (#1870)
Fixed
- Switch to Firefox for CI web tests (#1999)
Other
- Fix clippy lints (#1996)
-
0.78.727 Mar 2026Release notes
Open source →27 March 2026
Added
- Adds a progress/cancel feature to Context for the c2pa-rs sdk (#1927)
Fixed
- Harden JUMB embed media description box parser against integer underflow attack (#1950)
- Harden JUMB description box parser against integer underflow attack (#1949)
- Harden JUMBF nested box parsing against stack overflow attack (#1966)
- Harden BMFF Merkle tree hash processing code against integer underflow attack (#1963)
- Updated crJSON Schema (#1975)
- TIFF backcompatibility for RAW formats (#1976)
- Check for malicious recursion (#1979)
-
0.78.624 Mar 2026 -
0.78.523 Mar 2026Release notes
Open source →23 March 2026
Added
- Add
cr_json()andcr_json_value()toReader; remove separateCrJsonReader(#1919)
Fixed
- Add
-
0.78.416 Mar 2026 -
0.78.316 Mar 2026Release notes
Open source →13 March 2026
Added
- Impl
Send + SynconEphemeralSigner(#1934)
Fixed
- Apply same restrictions on ingredient deltas as active manifest for validation state (#1624)
- Impl
-
0.78.212 Mar 2026 -
0.78.112 Mar 2026 -
0.78.011 Mar 2026 -
0.77.111 Mar 2026Release notes
Open source → -
0.77.004 Mar 2026Release notes
Open source →04 March 2026
Added
- Embeddable manifest API with Context/Settings, CAWG and BMFF.v3 support. (#1847)
Release notes
Open source →Embeddable API
Release 0.77.0 adds a new embeddable manifest API with
Context/Settings, CAWG, and BMFF.v3 support. For details, see Embeddable signing API.API changes for C2PA 2.2
Readerhas some new methods:validation_state()returnsValidationState, which can beInvalid,Valid, orTrusted. Use this method instead of checking forvalidation_status() = None.validation_results()returnsValidationResults, which is a more complete form ofValidationStatusand returnssuccess,informational, andfailurecodes for the active manifest and ingredients.ValidationStatusis deprecated in favor ofValidationResults.
Ingredientnow supports avalidation_results()method and avalidation_resultsfield.An
AssetTypeassertion is now supported.C2PA v2 claims
[!NOTE] The library now supports C2PA v2 claims by default. V2 claims have many new checks and status codes.
Additionally:
- The
title()andformat()methods of bothManifestandIngredientobjects now return anOption<String>because in v2 claims,titleis optional andformatdoes not exist. - The first
actionmust bec2pa.createdorc2pa.opened(which requires an ingredient).
[!WARNING] Implementations should not generate deprecated v1 claims. If needed, though, you can generate v1 claims by setting the
Buildermanifest definitionclaim_versionfield to1. -
0.76.203 Mar 2026Release notes
Open source → -
0.76.102 Mar 2026Release notes
Open source →02 March 2026
Fixed
- Handle meta box without FullBox header from Apple devices (#1889)
Updated dependencies
-
0.76.024 Feb 2026Release notes
Open source →23 February 2026
Added
- Enable self-signed ephemeral certs on Wasm build (#1858)
Documented
- Fix doc for verify_after_sign due to bug (#1876)
- Doc cleanup and some reorg (#1822)
- SignerSettings doc comments (#1856)
Fixed
- Use cose_sign1 signature field for timestamp assertion verification (#1867)
- [breaking] Allow
Builder::sign_asyncfuture to be spawnable on Tokio runtime (#1846)
Updated dependencies
-
0.75.2112 Feb 2026 -
0.75.2012 Feb 2026Release notes
Open source →