Repository navigation
0.20.2 - get_experiment_groups() Across All SDKs, Key-Independent GCIR target_app_id (Rust/Go), DCS Delta-Sync Stall Recovery, iPadOS User-Agent Parsing Fix
Breaking Changes
- N/A
New Features
- All SDKs (rust core + Node.js, Python, Java, PHP, Go, .NET, Elixir, C++, and the C FFI):
get_experiment_groups(experiment_name)— returns the counterfactual view of an experiment: every group's configuration (group_name,rule_id,id_type,
return_value) plusis_experiment_active, without running a user evaluation or logging an exposure. Lets callers log exposures only when variants would actually
diverge (avoiding dilution).is_experiment_activeis null for unknown names and non-experiment entities (dynamic config, autotune); groups are returned regardless
of active state. Complements theget_experiment_by_group_name/get_experiment_by_group_id_advancedgetters from 0.20.0. Community-contributed by @cam-matsui
(Cameron Matsui, Whatnot) — #54.
- Rust:
target_app_idonClientInitResponseOptions—get_client_initialize_response(GCIR) can now be scoped to a target app independently of the client SDK key,
enabling a single shared ("super") client key across all target apps. Resolution precedence: explicittarget_app_id→ key-derived app id → DCS globalapp_id; an
empty string normalizes to unset. With neither a client key nor a target app id set, behavior is unchanged. Restores the legacygo-sdk/v2GCIROptions{ClientKey, TargetAppID}capability.
- Go:
ClientInitResponseOptions.TargetAppID— exposes the key-independent GCIR target-app scoping in the Go binding, restoring parity with legacygo-sdk/v2.
Improvements & Fixes
- All SDKs (rust core): DCS delta-sync stall recovery.
StatsigHttpSpecsAdapternow tracks consecutive background delta syncs that carry updates but make no LCUT
progress and, past a threshold, forces one full (non-delta) resync — fixing the "sawtooth" config-staleness pattern where a wedged delta stream (server has newer
data, client keeps failing to apply the delta) froze the in-memory snapshot indefinitely. A "no updates" response counts as progress, so an already-current config
never triggers a needless resync. - All SDKs (rust core): fixed iPadOS user-agent parsing. UAs such as
... iPadOS 26.5, iPad13,19previously lost their OS version (surfaced asos_version = 0.0.0), breaking OS-version targeting; they now parse toos_name = iOS,os_version = 26.5, matching the equivalent iPhone UA.
Included In This Release
- e5738b2 statsig-kong[bot]
- chore: bump version to 0.20.2-rc.2607201627
- 5fc00f7 Xin Li (Bot)
- [automated] sync rc with main
- 41d7971 statsig-kong[bot]
- [automated] chore: bump version to 0.20.2-beta.2607180300 (#3077)
- fa1933d Kenneth Yeh
- feat: add get_experiment_groups() across all SDKs (#3062)
- 11c37d9 statsig-kong[bot]
- [automated] chore: bump version to 0.20.2-beta.2607170300 (#3076)
- af560c8 statsig-kong[bot]
- [automated] chore: bump version to 0.20.1-rc.1 (#3075)
- 3e51c05 Sandeep Madugula
- [S2SDK-132] core: force full DCS resync when delta syncs stall (#3032)
- 44929a6 Kenneth Yeh
- fix(go): SIGSEGV under concurrent evaluation — bump purego to v0.10.1 (#3065)
- 651b490 statsig-kong[bot]
- [automated] chore: bump version to 0.20.1-beta.2607150300 (#3064)
- 3137de6 Kenneth Yeh
- go: expose TargetAppID in GCIR ClientInitResponseOptions (#3063)
- 37afbb6 Kenneth Yeh
- fix: recognize iPadOS user-agent strings in first-party UA parser (#3052)
- aeb7168 Kenneth Yeh
- feat: support key-independent target_app_id in GCIR ClientInitResponseOptions (#3059)
- 1c4d152 statsig-kong[bot]
- [automated] chore: bump version to 0.20.1-rc.2607140134 (#3061)
- 32d53c4 statsig-kong[bot]
- [automated] sync rc with main (#3060)
Full Changelog: 0.20.1...0.20.2