NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #4153 most downloaded on npm
Type definitions for the PostHog JavaScript SDK
Last release today
17 Sep 2026
Ships on a steady schedule
a new release about every 9 days
Nearly every release is documented
notes for 57 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
8 months old
258 releases · first in 2026
One column per month.
### Minor Changes - #3777 `f601c49` Thanks @dustinbyrne! - Promote external dependency script versioning to supported strict_script_versioning and ass
f601c49 Thanks @dustinbyrne! - Promote external dependency script versioning to supported strict_script_versioning and asset_host config options.
(2026-06-10)c11794d Thanks @dustinbyrne! - Reload feature flags by default when resetting person properties for flags.
(2026-06-10)### Patch Changes - #3791 `2d21ada` Thanks @marandaneto! - Deprecate __preview_disable_beacon in favor of disable_beacon and mark __preview_disable_xh
2d21ada Thanks @marandaneto! - Deprecate __preview_disable_beacon in favor of disable_beacon and mark __preview_disable_xhr_credentials as a no-op.
(2026-06-10)### Patch Changes - #3789 `d9462b3` Thanks @marandaneto! - Deprecate __preview_eager_load_replay as a no-op now that session replay lazy loading is th
d9462b3 Thanks @marandaneto! - Deprecate __preview_eager_load_replay as a no-op now that session replay lazy loading is the default.
(2026-06-10)Nothing published for this version
Note: $browser_version for Google Search App is not comparable across platforms — iOS yields a version like 284.0 (from GSA/284.0.564099828) while And
#3782 0c2acb9 Thanks @pauldambra! - Detect the Google Search App (GSA) as its own $browser value (Google Search App) via the cross-platform GSA/ UA marker, instead of reporting the embedded webview as Mobile Safari (iOS) or Chrome (Android). Gated behind the new detect_google_search_app config option, which the 2026-05-30 config defaults opt into automatically — left off otherwise to keep existing browser attribution backwards-compatible.
Note: $browser_version for Google Search App is not comparable across platforms — iOS yields a version like 284.0 (from GSA/284.0.564099828) while Android yields a version like 14.21 (from GSA/14.21.20.28.arm64), since Google maintains separate versioning schemes for the two apps. Avoid building cross-platform version dashboards on $browser_version for this browser. (2026-06-10)
### Patch Changes - #3776 `783ba46` Thanks @marandaneto! - Deprecate the no-op __preview_flags_v2 browser SDK config option. The SDK already uses the
783ba46 Thanks @marandaneto! - Deprecate the no-op __preview_flags_v2 browser SDK config option. The SDK already uses the /flags/?v=2 endpoint by default.
(2026-06-09)Nothing published for this version
Nothing published for this version
### Minor Changes - #3771 `227c9b0` Thanks @dustinbyrne! - feat(persistence): add split_storage config option to store the feature-flag config cluster
#3771 227c9b0 Thanks @dustinbyrne! - feat(persistence): add split_storage config option to store the feature-flag config cluster in its own localStorage entry (<name>__flags) instead of the single main persistence blob. This payload is large and changes rarely, so keeping it out of the main blob stops it riding on every high-frequency main-blob write and broadcasting on cross-tab storage events. Reads are unchanged: on load the entry is merged back into the in-memory props, and the old main-blob location is read once and migrated forward so upgrades never miss a cached flag. The split only applies when persistence resolves to localStorage / localStorage+cookie (it is pointless for memory / sessionStorage and impossible for cookie), and reset() / opt-out wipe every entry. Defaults to false for backwards compatibility; the new 2026-05-30 config default opts in automatically.
(2026-06-08)
#3727 393f9e2 Thanks @pauldambra! - feat(surveys): extend split_storage to also move the survey config ($surveys) out of the main persistence blob into its own <name>__surveys localStorage entry, on top of the feature-flag split. Surveys now stamp a $surveys_loaded_at freshness timestamp on every /surveys load — the survey analogue of $feature_flag_evaluated_at — so a stale __surveys entry can no longer win over a fresher survey payload written back into the main blob by a gate-off / older-SDK tab. With no timestamp on either side (migration leftover) the group entry still wins, so the migration path is unchanged. Same backend and reset() / opt-out semantics as the flag split.
(2026-06-08)
Nothing published for this version
### Minor Changes - #3719 `a7bd828` Thanks @lricoy! - Add __preview_cookie_wins_on_conflict opt-in config to prefer cookie values over localStorage wh
Nothing published for this version
### Minor Changes - #3715 `2387084` Thanks @dustinbyrne! - Promote browser tracing header configuration to the public tracing_headers option while kee
2387084 Thanks @dustinbyrne! - Promote browser tracing header configuration to the public tracing_headers option while keeping addTracingHeaders and __add_tracing_headers as deprecated aliases.
(2026-06-04)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
### Minor Changes - #3688 `8181354` Thanks @pauldambra! - feat(persistence): add persistence_save_debounce_ms config option to coalesce rapid storage
8181354 Thanks @pauldambra! - feat(persistence): add persistence_save_debounce_ms config option to coalesce rapid storage saves into a single write. Setting a positive value debounces writes to localStorage/cookie by that window; the in-memory props object still updates synchronously so within-tab reads see the latest values immediately, and pending writes flush on beforeunload and pagehide so no state is lost on tab close. Cross-tab storage events are reduced proportionally to the debounce window. Defaults to 0 (no debouncing) for backwards compatibility. On pages that capture many events per second, 250 is a reasonable starting point. The new 2026-05-30 config default opts into persistence_save_debounce_ms: 250 automatically.
(2026-06-01)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
### Minor Changes - #3641 `2e1d5f4` Thanks @dustinbyrne! - Add flag_keys config to restrict browser feature flag remote evaluation to specific flag ke
2e1d5f4 Thanks @dustinbyrne! - Add flag_keys config to restrict browser feature flag remote evaluation to specific flag keys.
(2026-05-21)Nothing published for this version
### Patch Changes - #3607 `557b893` Thanks @eli-r-ph! - Enable $web_vitals reporting when cookieless mode is enabled (2026-05-20)
Nothing published for this version
Nothing published for this version
### Minor Changes - #3620 `594ea11` Thanks @pauldambra! - Dead clicks: add a .ph-no-deadclick CSS class (and capture_dead_clicks.css_selector_ignoreli
594ea11 Thanks @pauldambra! - Dead clicks: add a .ph-no-deadclick CSS class (and capture_dead_clicks.css_selector_ignorelist config option) to exclude specific elements from dead-click detection without affecting autocapture, session replay, or heatmaps. Mirrors the existing .ph-no-rageclick pattern.
(2026-05-18)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
### Minor Changes - #3547 `4c0c7d9` Thanks @williamchong! - capture() now accepts an optional uuid on CaptureOptions. (2026-05-11) ### Patch Changes -
4c0c7d9 Thanks @williamchong! - capture() now accepts an optional uuid on CaptureOptions.
(2026-05-11)0a835fa Thanks @marandaneto! - Skip remote config background refreshes when no document is available.
(2026-05-11)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
### Patch Changes - #3453 `96f19b7` Thanks @turnipdabeets! - Lift OTLP log serialization helpers from posthog-js into @posthog/core so the upcoming Re
96f19b7 Thanks @turnipdabeets! - Lift OTLP log serialization helpers from posthog-js into @posthog/core so the
upcoming React Native logs feature consumes the same builders. Browser gains
two fixes as a side effect: NaN and ±Infinity attribute values no longer get
silently dropped during JSON encoding, and the scope.version OTLP field is
now populated with the SDK version (changes the server's instrumentation_scope
column from "posthog-js@" to "posthog-js@<semver>"). (2026-04-23)Nothing published for this version
Also exposes patchFetchForTracingHeaders from @posthog/core so non-browser SDKs can reuse the implementation. (2026-04-23)
#3432 1a8b727 Thanks @richardsolomou! - refactor: rename __add_tracing_headers to addTracingHeaders. The __ prefix signalled an internal/experimental option, but the config is a public API (documented for linking LLM traces to session replays). __add_tracing_headers continues to work as a deprecated alias on the browser SDK.
Also exposes patchFetchForTracingHeaders from @posthog/core so non-browser SDKs can reuse the implementation. (2026-04-23)
Nothing published for this version
### Minor Changes - #3389 `922a1c1` Thanks @hpouillot! - Add exception steps to error tracking (aka breadcrumbs) (2026-04-22)
922a1c1 Thanks @hpouillot! - Add exception steps to error tracking (aka breadcrumbs)
(2026-04-22)Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →