Changelog
0.19.1
September 8, 2026
Summary
Adds server-driven forced re-consent. When the server stamps a forceReconsent instant on a config, consent recorded before it is treated as no longer valid: the SDK settles to essential-only, revokes Google Consent Mode, clears any stored IAB TCF string, and re-prompts. The same auto-prompt now also fires for consent that expired.
New Features
- Forced re-consent (
forceReconsent) — The SDK honors a server-authoredforceReconsenttimestamp (Unix seconds) on the config. Consent recorded before that instant is invalidated on load, sogetConsent()returns essential-only and the banner re-opens; re-consenting clears the condition. The client never writes the field. Malformed values (absent,≤ 0, or in the future — including a value mistakenly sent in milliseconds) are ignored rather than causing repeated invalidation. Why it matters: A property can invalidate stale consent (for example when Do Not Sell is newly enabled) and re-collect it, without any app changes. - IAB TCF revocation on invalidation — When consent is invalidated, the stored TC string and
IABTCF_*keys are cleared instead of rehydrated, so Google Ads cannot keep reading a granted consent string after Osano and Google Consent Mode have revoked.
Changes
- Expired consent now auto-opens the banner — Previously expired consent was cleared silently and the host was expected to re-prompt. It now re-prompts through the same path as forced re-consent. Hosts that already call
showBanner()themselves are unaffected, andhideUIhosts see no visual change. - No initial Google Consent Mode GRANT for invalidated consent — On init, the Consent Mode grant now fires from validated consent, so expired or force-invalidated consent revokes (all params denied) instead of leaking a GRANT before the visitor re-consents.
forceReconsentconfig type — Typed asnumber(Unix seconds) to match the wire format. The field is not part of the public context; JSON always shipped a number, so there is no runtime change.
0.19.0
August 31, 2026
Summary
Adds the consent UUID (with a Copy button) and "Powered by Osano" banner branding to the consent UI, and turns on the Do Not Sell opt-out by default.
This release adds @react-native-clipboard/clipboard to power the consent UUID Copy button. It ships as a runtime dependency of the SDK, so it is installed automatically, but it must be linked into your app:
npm install @osano/osano-cmp-react-native
cd ios && pod install # links RNCClipboard (and the Osano native module)
Then rebuild your app. The drawer degrades gracefully if the module is not linked — the Copy button is hidden (for example in Expo Go, which cannot load custom native modules), and the UUID text remains selectable for manual copy.
New Features
- Consent UUID display — New
showConsentUuidconfig property (defaultfalse). When enabled, the visitor's consent UUID is shown in the preferences drawer, in a tinted box, with a Copy button that writes it to the clipboard. - Powered by Osano banner logo — New
showBannerLogoconfig property (defaultfalse) shows the logo on the consent banner. The preferences drawer always shows the logo (a visual swap for the previous text link), regardless of this flag.
Changes
- Do Not Sell on by default —
enableDoNotSellnow defaults totrue, so the opt-out shows wherever CCPA applies unless a tenant turns it off. Note: when your remote config includesenableDoNotSell, its value still wins; the new default only applies when the field is omitted, so a property that previously relied on thefalsedefault will now show the opt-out.enableDoNotSellDefaultanddoNotSellCategoriesare unchanged.
0.18.6
August 18, 2026
Summary
Do Not Sell (DNS) opt-out is now driven by property configuration, matching the web CMP.
New Features
- DNS opt-out from config — Adds
enableDoNotSell,enableDoNotSellDefault, anddoNotSellCategories. The opt-out shows whenenableDoNotSellis on and CCPA applies, toggles the configured categories (default: Marketing), and defaults fromenableDoNotSellDefault. Existing consent behavior and public APIs are unchanged.
0.18.5
August 13, 2026
Summary
Adds consent expiration, matching the Android SDK. Stored consent now expires after a per-country interval, after which it is cleared on the next load and your app re-prompts. A debug-only testing mode lets you override that interval with a short window to validate re-consent flows quickly.
New Features
- Consent expiration — Stored consent now expires based on a per-country interval read from the GDPR mappings (
/mappings.json). When consent is older than its interval, it is cleared on the next load, sogetConsent()returns essential-only and your app re-prompts. Countries without a configured interval never expire. The mappings are cached for 24 hours and fall back to the last cached copy while offline. Why it matters: Consent is honored for the period each jurisdiction requires and is re-collected when it lapses, without any app changes. - Consent expiration testing mode (debug only) — Override the production expiration interval with a configurable number of seconds. Set it at init via
overrides={{ consentExpirationTestingSeconds: 10 }}(the reliable path for a reload-and-reprompt test, mirroring the Android builder), or at runtime viasetConsentExpirationTestingMode(seconds)fromOsanoContext(passnullto disable). Why it matters: You can validate re-consent flows in seconds instead of waiting out a real expiration window. It overrides the production interval rather than adding a separate one, is held in memory only (never persisted), and is a no-op outside__DEV__, so it can't affect production builds.
0.18.4
July 31, 2026
Summary
Adds SDK support for a new server-configured consent dialog layout, including its associated default category states. The layout is not generally available and must be enabled by Osano. Existing properties are unaffected.
New Features
- Added handling for an additional banner layout delivered via property configuration, including layout-specific default consent states and available banner actions.
- No changes to existing layouts, stored consent behavior, or public APIs.
0.18.3
June 29, 2026
Summary
Adds a public jurisdiction getter so you can read the visitor's effective jurisdiction as a single composite value, matching the web SDK's Osano.cm.jurisdiction and the Android SDK's getJurisdiction().
New Features
- Jurisdiction getter — Read the visitor's jurisdiction as a lowercase composite of country and region (for example,
usorus-ca), available both fromOsanoContext(viaReact.useContext) asgetJurisdiction()and directly asconsentManager.jurisdiction. Why it matters: You can now read the jurisdiction in one call and in a consistent, lowercase format across platforms, with the same value surfaced through the hook used for the rest of the public API.
0.18.2
May 6, 2026
Summary
Improves reliability of the consent configuration fetch by correctly handling cached responses.
Bug Fixes
- CMP configuration fetch — The SDK now treats both
200 OKand304 Not Modifiedas successful responses when verifying the consentconfig.json. Why it matters: Prevents the SDK from failing to load its configuration when the server returns a cached (304) response, ensuring the consent UI initializes reliably.
0.18.0
April 8, 2026
Summary
Updates React Native and related dependencies to address security advisories and keep the SDK current with supported toolchains.
Improvements
- Dependency and security updates — Upgraded React Native and supporting dependencies to their latest secure versions. Why it matters: Keeps your app on patched, supported dependencies and reduces exposure to known vulnerabilities.
0.17.3
February 25, 2026
Summary
Centralizes all translation keys, improves translation reliability for mobile apps. The SDK now uses mobile-specific translations when available, with automatic fallback to web keys.
Improvements
-
Centralized translation keys — All translation keys are now defined with a prefix for mobile-specific strings.
Why it matters: Makes it easier to update, audit, and maintain localizations across your app. -
Smarter translation lookup — The SDK checks for mobile-specific translations first, then falls back to web keys in both customer and global translation maps.
Why it matters: Ensures users always see the most relevant, up-to-date text with less developer effort. -
UI and IAB translation consistency — All UI and IAB-related translation lookups now use the new centralized keys. Policy links and consent screens are easier to localize and maintain.
Why it matters: Reduces the risk of missing or inconsistent translations, and simplifies localization updates.
Action Required
To use mobile custom translations, add or update your strings in your web configuration (Osano dashboard).
0.17.2
January 27, 2026
Summary
Introduces user-specific consent storage to prevent cross-device consent contamination and comprehensive migration system for backward compatibility.
New Features
-
User-specific consent storage isolation - Each user's consent is now stored separately using hashed user identifiers, preventing consent data from being shared between different users on the same device.
Why it matters: Ensures privacy compliance by preventing one user's consent choices from affecting another user's experience on shared devices. -
Automatic storage migration system - Seamlessly migrates existing consent data from legacy storage format to the new user-specific format.
Why it matters: Existing users won't lose their consent preferences when upgrading to the new storage system.
Improvements
-
Enhanced test coverage - Added comprehensive test suite for the migration functionality with 13 different scenarios covering edge cases and error handling.
Why it matters: Ensures reliability and stability of the migration process across different user scenarios. -
Robust error handling - Enhanced
hashExtUsrDatafunction to gracefully handle undefined values and improved storage operation error handling.
Why it matters: Prevents runtime errors and ensures consistent behavior across different edge cases.
Deprecations
- None in this release.
Known Issues
- None at this time.
0.17.1
January 20, 2026
Summary
Enhanced developer documentation with comprehensive API reference and internal implementation details for better integration and debugging experience.
Improvements
-
Comprehensive public API documentation: Added detailed method signatures, parameters, return types, and practical usage examples for all
OsanoContextmethods in the integration guide.
Why it matters: Developers can now easily understand what each method does, how to use it correctly, and what to expect as return values. -
Internal developer API reference: Extended README.dev.md with in-depth technical documentation including implementation details, performance optimizations, and debugging information.
Why it matters: Internal developers and contributors can better understand the SDK's architecture, state management patterns, and troubleshooting approaches. -
Enhanced method documentation: Documented all public methods (
getConsent,clearConsent,getDeviceId,locale,setLocale,showBanner,showDrawer,isReady) with behavioral notes and best practices.
Why it matters: Reduces integration confusion and provides clear guidance on proper usage patterns and timing.
Deprecations
- None in this release.
Known Issues
- None at this time.
0.17.0
December 29, 2025
Summary
Expands IAB TCF support by adding vendor disclosure handling end-to-end (selection, state, and TC string encoding), plus small spec-alignment updates for v2.3.
Improvements
-
Spec alignment for disclosed-vendors segments: Updated internal mappings and options so the encoded TC string includes the vendor-disclosure segment.
Why it matters: Ensures your consent signals meet current policy expectations across regions. -
Active-vendor handling for cleaner disclosures: The SDK now filters out deprecated vendors and generates clean disclosure flags only for currently active vendors.
Why it matters: Reduces noise and prevents stale vendor entries from appearing in consent/disclosure data. -
Policy/version metadata refresh: Internal version and initialization options were aligned with the latest TCF policy vintage.
Why it matters: Keeps your integration current with yearly policy/metadata updates without requiring app changes.
Learn more: IAB Europe TCF overview → https://iabeurope.eu/tcf-2-0/ · IAB Canada TCF → https://iabcanada.com/resources/transparency-consent-framework/
Deprecations
- None in this release.
Known Issues
- None at this time.
0.15.0
December 04, 2025
Summary
Run the SDK in Expo Dev Build and Expo Go without native modules and adopt React Native New Architecture (TurboModule) without changing your integration. Also includes a small dependency hardening and a minor deprecation.
New Features
-
Expo Dev Build & Expo Go support - The SDK now falls back to in-memory storage (with device ID generation) when native modules aren’t available in Expo Go.
Why it matters: You can prototype and test consent flows directly in Expo Go; production builds continue to use native storage. No code changes required. -
React Native New Architecture (TurboModule) compatibility - Public interface exposed via TurboModule while remaining compatible with Legacy architecture.
Why it matters: If your app switches to RN’s New Architecture, your Osano integration keeps working with no changes.
Improvements
- Dialog buttons & layout refinements - Adjusted components and layouts for clearer translations and modern RN behavior.
Why it matters: More consistent user experience without API changes.
Deprecations
- None in this release.
Security
- Minor dependency hardening - Overrides applied to transitive JS packages to mitigate a resource-release issue.
Why it matters: Improves supply-chain safety with no action required from integrators.
0.13.0
July 31, 2025
Summary
Adds Google Consent Mode v2 with a dedicated callback and automatic IAB TCF integration.
New Features
- Google Consent Mode v2 support.
onGoogleConsentUpdatecallback prop to react to Google consent changes.- Automatic IAB TCF integration with Google Consent Mode.
0.12.0
February 3, 2025
Summary
Improves reliability and startup behavior with retries, readiness gating, and caching.
New Features
- Config caching with a 24-hour TTL.
Improvements
- Config fetch retries for robustness.
showBanner/showDrawernow wait untilisReadyistrue.
0.11.0
November 19, 2024
Summary
Refines analytics copy and button behavior.
Improvements
- Updated dialog analytics translation (uses analytics wording correctly).
- Updated Flavor 3 Accept button action.
0.10.0
November 14, 2024
Summary
Restores previously removed build artifacts for compliance.
Fixes
- Reverted USP & GPP build file removal.
0.9.0
November 13, 2024
Summary
Enables cross-device consent as a stable feature.
New Features
- Cross-device consent finalized.
0.8.0
November 7, 2024
Summary
Fixes consent payloads and adds external user data support for cross-device consent.
New Features
extUsrDataprop on theOsanocomponent (for cross-device consent).
Fixes
- Corrected consent recording payload.
0.7.0
October 16, 2024
Summary
Prevents accidental usage of test endpoints in dev mode.
Fixes
- Development mode no longer routes to test API endpoints inadvertently.
0.6.0
August 2, 2024
Summary
Routine dependency refresh.
Improvements
- Dependencies updated.
0.5.0
July 30, 2024
Summary
IAB correctness and locale refinements.
Fixes
- Resolved edge case in IAB applying.
Improvements
- Locale updated.
0.4.0
June 26, 2024
Summary
Improves policy visibility and localization.
New Features
- Support for two policy links.
Improvements
- Locale updated.
0.3.0
June 24, 2024
Summary
Stability fixes for IAB actions and dialog behavior.
Fixes
- Fixed bug with IAB “Accept All” button.
- Addressed dialog open issue.
0.2.0
May 21, 2024
Summary
Adds IAB TCF 2.2 support.
New Features
- IAB TCF 2.2 support.
0.1.0
April 18, 2024
Summary
Initial public release.
New Features
- First release of the SDK.