- fix(flags): Re-enable reload only when request finishes (#791)
- fix: Handle uninitialised helpers better (#767)
- feat: test a better list of bots and allow users to configure the bot… (#788)
- fix(autocapture): element properties tracked up to 1k bytes (#783)
- feat: Add pathname to prev page events (#776)
- fix: Mitigate testcafe flakiness (#779)
- feat: Filter out events from GPTBot (#772)
- feat: Add previous page properties to page events (#773)
- style: Tighten eslint rules (#775)
- chore: add media examples to playground (#771)
- Fixed up tests to cover all cases (#770)
- feat: remove old UUID code (#755)
- chore: remove unused capture metrics (#766)
- fix: obey server side opt out for autocapture (#762)
- feat: react to rate limiting responses (#757)
- fix: Recording throttling for SVG-like things (#758)
- chore(deps): bump semver from 5.7.1 to 5.7.2 in /react (#732)
- chore(deps): bump semver from 6.3.0 to 6.3.1 in /playground/nextjs (#733)
- chore(deps): bump word-wrap from 1.2.3 to 1.2.4 in /react (#746)
- chore(deps): bump word-wrap from 1.2.3 to 1.2.4 (#747)
- chore(deps): bump word-wrap from 1.2.3 to 1.2.4 in /playground/nextjs (#750)
- fix: protect against bundling bugs (#754)
- feat: use uuidv7 everywhere (#742)
- fix: defensive about unload logging (#751)
- fix(flags): Don't return undefined for flags when decide is not hit but flags exist (#748)
- fix(flags): Make sure flags are reloaded only once on identify calls (#744)
- feat(flags): Allow disabling flags on first load (#740)
- chore: remove some slow tests that have served their purpose (#739)
- chore: Removed people.set and mapped it to identify (#584)
- feat: allow moving to UUID v7 by config in posthog-js (#731)
- fix: UUIDs should not take literally forever to generate (#727)
- feat: callback when session id changes (#725)
- feat: capture page title with pageview (#721)
- fix: invalid module d ts because computers are horrible (#715)
- fix(cd): use package manager field (#704)
- feat(components): Give option to not track events on feature component (#708)
- fix: PosthogProvider doesn't need to have the client be optional (#705)
- feat: Group rrweb events into one capture (#694)
- feat: allow decide response to configure errors to drop by pattern (#692)
- chore: no compatability testing for test files (#690)
- feat: get surveys api (#677)
- Update utils.ts (#686)
- chore: manual version bump (#684)
- feat: send event UUIDs (#672)
Manual addition of version 1.66.0 because CI failed to automatically bump the version
- feat: send event UUIDs (#672)
- feat: backoff with jitter (#678)
- feat: Add missing maskTextFn for recordings (#679)
- add browserlist and eslint checking compatability using it (#673)
- feat: default endpoint for session recordings is /s/ (#674)
- fix: Typescript import issue with rrweb (#670)
- fix: only allow exception capture on remote enabled (#659)
- fix: performance observer is not always available (#663)
- chore: correct pnpm version (#662)
- feat: remove lz compression (#654)
- feat: Exception Autocapture (#649)
- feat(react): Flag autocapture component (#622)
- feat: Added support for cross origin iframe recording (#655)
- feat: remove broken capture using img support (#651)
- Add get_session_id and get_session_replay_url functions (#647)
- fix: Session timeout overridden on reload (#645)
- fix: properties with "length" value (#640)
- docs: Update README around releasing and development (#634)
- chore: add test for $identify events count optimization (#639)
- ci: consolidate library checks into one workflow (#638)
- ci: add prettier and eslint linting stage (#637)
- chore: add pre-commit to run lint staged. (#636)
- chore: add functional tests (#635)
- fix(decide): Make sure all stored properties are sent on first decide request (#633)
- fix(identify): actually send $set_once on identify calls (#629)
- feat: Added OS version to the OS details (#624)
- fix: Don't delete existing flags on decide errors (#621)
- feat: Allow custom masking of network events (#620)
- feat: Added idle timer to recordings (#626)
- docs: Add Nuxt 3 demo (#623)
- fix: Script loading before DOM is ready (#618)
- Expose options to mask text in session recording (#595)
- feat(beta-management): Add opt-in and out functions (#616)
- release new version (#617)
- feat(flags): Allow adding person and group property overrides for flags (#613)
- feat: Allow masking of input by referencing the element (#611)
- fix: Usage of sessionStorage even if memory persistence (#609)
- fix: Don't enable web perf by default for localhost (#608)
- chore: bump version (#607)
- feat: Swap over to storing network events in recordings (#606)
- feat: Custom campaign param support (#603)
- chore(deps): Bump http-cache-semantics from 4.1.0 to 4.1.1 (#528)
- fix: change user_id -> $user_id in docstring (#525)
- Remove flag param from useActiveFeatureFlags (#599)
- fix: Track referrer/search params per browser session (#496)
Note: This change improves the accuracy of properties$referrer
and$referring_domain
in a major way. Previously, the values of these properties often represented pure backlinks in non-SPAs (non-single-page applications). Now those values will represent the true referrer for the current browser-level session (effectively: for the tab). Due to this, referrer data after this update may look different. It will be significantly more accurate though. - ci: Point out and close stale issues/PRs (#602)
- docs(testcafe): update docs removing posthog server requirements (#594)
- fix(segment): handle race condition on loading segment integration (#586)
- fix: fewer moving parts more like safe text (#590)
- try/catch the bit that fails so we don't just eject the element (#585)
- fix(persistence): set SameSite=None explicitly (#578)
- fix: Catch fullsnapshot error (#583)
- fix: debug nested span text, part 3 (#582)
- added types for PostHog provider
options
(#581) - ci(testcafe): run browser tests in parallel (#579)
- fix: debug nested span text (part 2) (#577)
- feat: use autocapture setting from decide (#575)
- reinstate getNestedSpanText, but with no recursion (#576)
- fix: debug return empty string on getNestedSpanText (#573)
- fix: Only call capture snapshot if recording (#572)
- Update rrweb (#570)
- fix: Race condition error with loading rrweb (#569)
- fix: remove warning of duplicate nextjs import (#566)
- chore: Revert canvas recording option (#567)
- tolerate undefined target (#565)
- fix: spans inside buttons (#563)
- fix(bots): add "hubspot" and "crawler" to blocked user agents (#564)
- feat: allow record canvas (#562)
- chore: remove old nextjs utils folder (#559)
- feat: react library (#540)
- feat: augment autocapture using data attributes (#551)
- fix: safari iteration error on web performance server timing (#558)
- chore: expose errors (#557)
- try the compressed-size-action GH action (#556)
- fix: apply terser plugin to module.js and es.js (#555)
- chore: no-op change to allow version bump (#554)
- feat(rrweb): implement rrweb2 dynamic loading on decide (#552)
- no-op change to allow version bump (#549)
- more leniency for envs with 'window' undefined (#541)
- chore: Remove Sentry types to reduce clashes (#546)
- fix: Removed Sentry types from compiled types (#545)
- feat: Add optional loading of rrweb2 (#543)
- feat: Add rrweb2 support (experimental) (#536)
- chore: upgrade @sentry/types (#539)
- fix: default persons to anonymous (#534)
- fix: correctly persist user state across page loads (#531)
- feat: reset marks user anonymous (#524)
- chore(feature-flag): only return truthy values for onFeatureFlag (#522)
- Revert status check
- N/A
- Use decide v3 and return defined JSON payloads with matching flags
- Optimistically save evaluated flags even if server has issues
- Revert "chore: move types dependency from dependencies to devdependencies (#504)" (#509)
- fix: Sentry URL for recording (#507)
- feat: capture clicked elements on rageclicks (#506)
- chore: move types dependency from dependencies to devdependencies (#504)
- fix: use django cache for toolbar js (#503)
- fix(toolbar): Load toolbar only in body for turbolink (#499)
- Install pnpm for usage in PR step (#502)
- fix: page view ids didn't work with server side config (#501)
- chore(deps): Bump json5 from 2.1.3 to 2.2.3 in /react (#498)
- feat: capture server timings (#497)
- feat: Adds performance capture (#488)
- fix(options): Add capture_pageleave option (#491)
- fix(cd): use pnpm to install posthog-js version in main repo (#495)
- fix: Reduce cookie modifications to stop infinite loops with CMP tools (#489)
- feat: page view ids (#487)
- feat: event_allowlist and url_allowlist for autocapture (#481)
- chore(deps): Bump qs from 6.5.2 to 6.5.3 (#484)
- chore(deps): Bump decode-uri-component from 0.2.0 to 0.2.2 (#485)
- chore(deps): Bump decode-uri-component from 0.2.0 to 0.2.2 in /react (#483)
- chore(deps): Bump minimatch from 3.0.4 to 3.1.2 (#469)
- feat(rageclicks): turn on rageclicks by default (#480)
- update sentry types (#479)
- fix: support copying non-extensible objects (#478)
- feat(groups): allow resetting only user's groups (#476)
- feat(sentry-integration): Add
ui_host
option for reverse-proxying (#475) - chore(deps): Bump minimatch from 3.0.4 to 3.1.2 in /react (#468)
- feat: Proper Segment plugin to enable Recordings and more (#471)
- feat: allow disable compression in config (#467)
- feat(toolbar): posthog.loadToolbar({ temporaryToken: 'key' }) (#464)
- chore(deps): Bump node-fetch from 2.6.1 to 2.6.7 (#361)
- chore(deps): bump glob-parent from 5.1.1 to 5.1.2 (#462)
- chore(deps): Bump browserslist from 4.16.1 to 4.21.4 (#463)
- chore(deps): Bump moment from 2.29.1 to 2.29.4 (#422)
- chore(deps): Bump tmpl from 1.0.4 to 1.0.5 (#329)
- chore(deps): Bump jsdom from 16.4.0 to 16.7.0 in /react (#415)
- chore(deps): Bump jsdom from 16.2.2 to 16.5.0 (#416)
- chore(deps): bump nanoid from 3.1.20 to 3.3.4 (#442)
- chore(deps): bump ansi-regex from 5.0.0 to 5.0.1 (#436)
- chore(deps): Bump async from 3.2.0 to 3.2.3 (#409)
- chore(deps): Bump minimist from 1.2.5 to 1.2.6 (#380)
- chore(deps): Bump minimist from 1.2.5 to 1.2.6 in /react (#379)
- chore(deps): Bump lodash from 4.17.19 to 4.17.21 (#353)
- Bump path-parse from 1.0.6 to 1.0.7 (#331)
- feat(capture): Track
navigator.language
as$language
(#460)
- fix(apps): grab the correct global var (#459)
- feat(apps): rename "inject" to "site apps" (#458)
- feat(apps): load web apps from external scripts, no eval (#456)
- feat(apps): add opt_in_web_app_injection (#454)
- feat(apps): inject javascript from decide (#453)
- feat(recordings): server side console log setting (#452)
- feat: Improve SentryIntegration, include error message, type and tags at top level (#450)
- fix(recordings): unique window id on duplication (#446)
- feat(feature-flags): Enable bootstrapping the library (#444)
- fix(pageleave): Improve $pageleave reliability (#439)
- fix(typing): rrweb types (#441)
- fix(toolbar): Use apiURL from state if set (#438)
- fix: Use rollup and fix define module issues (#434)
- refactor: Dummy commit to trigger release (#431)
- chore(typescript): convert library to typescript (#425)
- fix(session-id): reset session_id on reset() call (#430)
- fix(storage): Fix cross subdomain cookies for localpluscookie (#429)
- fix: Testcafe using Posthog cloud (#428)
- fix: dont set initial referrer (#426)
- feat: Add msclkid param to campaign keywords (#424)
- chore(deps): Update @sentry/types for 7.2.0 (#412)
- fix: Add facebook crawlers to blocked user agents (#417)
- feat(feature-flags): Enable experience continuity (#404)
- chore: Update changelog for 1.24.0 (#411)
- feat: Limit session recordings to 24 hours (#405)
- a new recording is immediately started and no data is lost
- feat: Allow overriding device id generation (#401)
- Fix this.get_config undefined error (#397)
- feat: add support to
fbclid
campaign parameter (#400)
- chore(build): bumping to make release (#396)
- chore(dep): update rrweb to 1.1.3 (#395)
- fix(recordings): mask all input fields for recordings (#388)
- feat: add recording url to sentry integration (#371)
- fix(config): Case-insensitive persistence (#389)
- fix(console-logs): handle undefined and null log (#385)
- feat(recordings): add inline stylesheet option (#383)
- fix(config): Handle config undefined (#382)
- fix(web-performance): clear resource timings after reading (#377)
- feat(tracking): add ahrefsbot to list of ignored bots (#378)
- feat: send library version outside of compressed body as a debug signal (#376)
- Revert "feat: send library version outside of compressed body as a debug signal (#351)" (#375)
- fix: truncate console logs (#372)
- feat: send library version outside of compressed body as a debug signal (#351)
- ci: create new PRs in main repo with chore: (#370)
- Add console log recording (#367)
- fix(properties): dont modify input properties (#369)
- fix(web performance): calculate duration when it isn't present on navigation timing (#368)
- Upgrade jest to remove security vulnerability (#365)
- Fix for enabling a disabled session recording (#364)
- fix onFeatureFlag (#363)
- Remove capture failed request (#362)
- Only hit onFeatureFlags callback after decide (#360)
- Fix featureflags not working when /decide is down (#359)
- Add an allow list to skip truncating strings when capturing events (#355)
- remove debug option (#357)
- Reduce the size of the APM performance data payload (#354)
- Send APM data so that we don't need a plugin (#352)
- Allow APM performance on all $pageview events (#350)
- Include browser performance values on $pageview (#347)
- add more advice to pull request template (#349)
- Update README.md (#348)
- add resetSessionId function (#345)
- Feature flags groups support & /decide refactor (#341)
- Avoid needless double /decide calls (#340)
- try sendbeacon (#337)
- allow disabling toolbar tracking for self-hosted users (#335)
- Bumping the build for a release (#334)
- Filter out _nghost attributes from autocapture (#332)
- update rrweb (#328)
- Add window_id and session_id to all events (#326)
- Group analytics support (#325)
- pass toolbar to posthog (#327)
- Add localStorage+cookie as persistence type (#324)
- drop data uri filter limit from 20mb to 5mb (#322)
- Take a full recording snapshot when session ids update (a fix for missing recordings) (#318)
- Revert "Add posthog.people.increment" (#320)
- filter data urls out of large payloads (#317)
- Expand allowed input types to 'button', 'checkbox', 'submit', 'reset' (#315)
- dont mind me, just bumping versions (#316)
- fix: localStorage access denied error being thrown (#312)
- Reduce code paths that could encode post data as the string undefined (#300)
- Bump build and a readme change (#306)
- Add posthog.people.increment (#254)
- Send initial pageview immediately (#295)
- add a test for init-ing and reading the on xhr error handler (#308)
- corrects exported type which got out of sync with core.js file (#307)
- Allow injection from config of a function to call when xhr requests fail (#296)
- add instructions for developing with Yalc (#303)
- Revert "Speculative logging for PostHog/posthog#4816 (#293)" (#302)
- Filter out _ngcontent attributes in autocapture (#298)
- corrects a test where assertion and setup didn't match test name (#299)
- Speculative logging for PostHog/posthog#4816 (#293)
- Bump tmpl from 1.0.4 to 1.0.5 in /react (#287)
- Bump ansi-regex from 5.0.0 to 5.0.1 in /react (#294)
- Revert "Trigger onFeatureFlags on reset (#263)" (#292)
- Trigger onFeatureFlags on reset (#263)
- Do not crash when calling capture() after skipping init(), fixes #281 (#282)
- Change UTM tags from first touch to last touch (#286)
- Do not load toobar only if autocapture enabled (#285)
- Split feature flags into
$feature/*
properties (#278)
- Restore feature flag client-side override method (#280)
- Revert "Do not load toolbar when disabled (#264)" (#276)
- add gclid to campaign params (#277)
- fix groupKey (#274)
- console.warn to error (#273)
- add posthog.group (#270)
- fix "undefined is not an object" error (#272)
- Deprecate client-side feature flag overrides (#271)
- Feature flags API v2 (#268)
- Update
rrweb
to 1.0.3 (#269)
- Update
@sentry/types
to 6.11 (#267)
- Do not load toolbar when disabled (#264)
- Bump path-parse from 1.0.6 to 1.0.7 in /react (#266)
- Fix deps containing types not being installed (#265)
- Add
rrweb-snapshot
to dev deps (#262) - Don't retry 500 responses (#260)
- Update decide.js (#258)
- Allow session recording reload (#253)
- Remove deprecated methods and options (#255)
- fix invalid cookie (#250)
- Capture viewport height and width (#246)
- Add extra local development instructions (#235)
- Update README.md (#243)
- Fix overridden request retry data (#241)
- Fix: avoid directly accessing localStorage (#239)
- Retry Queue (#226)
- Bump hosted-git-info from 2.8.8 to 2.8.9 in /react (#229)
- Bump lodash from 4.17.20 to 4.17.21 in /react (#225)
- Bump ws from 7.4.2 to 7.4.6 in /react (#237)
- Remove duplicates in CHANGELOG (#236)
- Reconcile Server and Client side configurations for session recording and autocapture (#233)
- Fix sessionRecording bug (#234)
- Update outdated releasing instructions (#224)
- changelog for 1.10.0 (#223)
- 1.10.0 (#222)
- Refactor /decide enpoint & allow recording without autocapture (#212)
- Add missing
disable_session_recording
property in Config interface (#221) - Update types, add missing reloadFeatureFlags (#219)
- Fix in-progress check for utils/deepCircularCopy (#216)
- Refactor /decide endpoint & allow recording without autocapture (#212)
- Fix in-progress check for utils/deepCircularCopy (#216)
- Update types, add missing reloadFeatureFlags (#219)
- Add missing disable_session_recording property in Config interface (#221)
- Config Additions: session_recording, mask_all_element_attributes, mask_all_text (#209)
- Support rrweb mask all inputs (#207)
- fix: incorrect typing for isFeatureEnabled (#208)
- Fix SentryIntegration optional param typing (#203)
- Add SentryIntegration TS (#202)
- add SentryIntegration typing (#202)
- Add posthog.debug() to types, remove bad docstring (#201)
- Fix ".identify" docstrings (#200)
- Device Type (#198)
- Add properties_string_max_length = 65535 (#197)
- Remove unused notification code (#191)
- Remove old upgrade code (never used) (#192)
- Support $set_once with identify (#190)
- Add Yarn lock resiliency (#196)
- Update README.md (#194)
- Add debug function (#193)
- Fix auto changelog (#188)
- Fix auto new version (#187)
- Fix internal metric unpacking error
- When logging in as another user, don't link those two identities (#174)
- Testcafe E2E tests, IE11 fixes (#180)
- Allow passing custom domain for sentry integration (#176)
- Update typing (#173)
- Event names must be strings in
posthog.capture
(#171)
- Increase compatibility with IE 11 (#169)
- Using gzip-based compression over lzstring using the fflate library: fflate. This reduces the amount of data transferred, and makes posthog servers respond faster (requires posthog 1.19.0). PostHog/posthog#2560
- Support last touch $referrer and $referring_domain user properties PostHog#139
- Publish a ES dist file PostHog#157
- Publish a react integration for feature flags PostHog#154
- Fix issues with incorrect headers being set on decide
- Force session recording to use lz64 compression (PostHog#134)
- Bundle module.js in es5 (PostHog#132)
- Send session recording events to posthog in (short) batches, separate from rest of events to make sure we drop fewer events (#126)
- Send session recording events to a separate endpoint for newer versions of posthog (#118)
- Send correct LIB_VERSION to posthog with captures (#119)
- Handle capturing self-referential objects (#123)
- Make the library smaller by dropping unneeded code (#123, #128)
- Update request batching logic (#118, #126)
- Notify rrweb when $pageview events happen (#127)
- Fix 'this.people.delete_user is undefined' (issue #39, #113)
- Update rrweb block class to use
ph-no-capture
andph-ignore-input
(#112) - Deprecate calling posthog.capture with a callback (#129)
- Attempted to re-add support for including posthog-js in server-side rendering. (#131)
- Bugfix: Don't truncate session recording data (#121)
- Bugfix: Kill
posthog.capture_links()
andposthog.capture_forms()
. They were broken since initial release - you can use autocapture instead. (#128)
- Allow updating user properties when calling
posthog.identify('identity, { some: 'value' })
(#105) - Allow disabling $feature_flag_called event: `posthog.isFeatureEnabled('flag', { send_event: false }) (#100)
- Make cookieless analytics possible by passing
persistence: 'memory'
to posthog.init (#82) - Avoid sending $pageleave events when
capture_pageview: false
passed to posthog.init (#109) - Code cleanup, bug fixes, integration test suite and more tech debt work
- Autocapture bugfix: Ignore extra spaces in classnames #99
- Improve typing of posthog-js (#103)
- Improve typing of posthog.js #97 (thanks @stonesthatwhisper)
- Improve session recording, generate $session_id fields #91 #96
- Fix a bug with session recording events not being saved #95
- Improve test coverage #94
- Add beta functionality to do session recording
- Add $feature_flag_called event
- Add beta Sentry integration
- Fix clicks in shadowroot for Firefox and Safari
- Fix clicks within shadowroot not being captured
- Fix type definition of loaded
- Remove "?." to support older browsers
- Capture actions even if toolbar is in used
- Remove unused parameter for
.reloadFeatureFlags()
- Have
.onFeatureFlags(callback)
register multiple callbacks, which get called when feature flags are loaded or updated - Update feature flags when
identify
is called. - Add option
.reloadFeatureFlags()
. Call it to trigger a reload of feature flags. (See #71) - Add config option
sanitize_properties
that accepts a function which sanitizes parameters of events (See #75)
- Set
secure_cookie
config totrue
if the page is running over https
- Store toolbar session in localStorage (instead of sessionStorage) so you don't need to authorize in every tab you have open
- Fix a parameter in the type definition
- Add flag to respect Do Not Track setting
- Capture safe attributes (id, name and class) if the element is an input (#63)
- Add payload compression support (with lz-string) (#48)
- Fix request batching when loading the library from npm and running
.init()
after DOM load.
- Support loading the toolbar with a
__posthog
has param (was:state
) andph_authorize
action.
- Add TypeScript defintions
- Add support for feature flags (
posthog.isFeatureEnabled('keyword')
)
- Send $host and $pathname with $pageview requests (was just with $autocapture)
- Track clicks on elements which have
cursor:pointer
- Better test suite
- Allow setting properties on anonymous users
- Simplify passing of API token to editor
- Support passing various/dynamic parameters to the toolbar
- Fix another error when using a new posthog-js version with an old posthog version
- Show a error if calling
posthog.identify
withnull
user (#34 by @rushabhnagda11)
- Support loading new PostHog toolbar
- Send beacon on $pageleave
- Clean up a bunch of code
- Don't reset device id on reset
- Fix Heroku App Cookie Bug
- Batch Event Posts
- Support TurboLinks
- Send Timestamp with events
First Release.