- fix: XHR req method capture (#1527)
- feat: allow triggering sessions when events occur (#1523)
- feat: Add customization to add all person profile properties as setPersonPropertiesForFlags (#1517)
- fix(flags): support multiple children prop in PostHogFeature (#1516)
- fix: Don't use session storage in memory mode (#1521)
- chore: add type to Sentry exception (#1520)
- feat: deadclicks in heatmaps (#1510)
- feat: add recording url blocklist (#1500)
- chore: upgrade rrweb to alpha.17 (#1489)
- chore: add stack type (#1511)
- fix: dead click fixes from watching in prod (#1508)
- feat: allow mutation rate limiter configuration (#1506)
- feat: dead click detection (#1463)
- chore: refactor towards dead clicks autocapture (#1505)
- feat: Add timezone to events (#1504)
- chore: update README to include missing steps for running local nextjs playground (#1455)
- feat: Only set missing campaign params to null if there is at least one non-null (#1493)
- fix: reduce keep alive threshold (#1501)
- fix: empty query param when calling external dependency toolbar.js (#1456)
- fix: careful now (#1497)
- fix(surveys): Reset Survey storage after posthog.reset is called (#1494)
- chore: set platform on stack frame (#1495)
- fix: allow canvas local config (#1496)
- fix: expose the last activity timestamp in session id check result (#1491)
- chore: upgrade rrweb to alpha.16 (#1276)
- chore: test that autocapture allowlists are unioned (#1476)
- fix: no need to swallow import errors (#1486)
- fix: do not capture entire elements in web vitals (#1483)
- Make entire cancel button area clickable (#1473)
- feat: swap the default to identified_only (#1468)
- feat(web-analytics): Store nulls for unset campaign params (#1482)
- chore: add crossOrigin='anonymous' to snippet script (#1481)
- chore: build an es5 bundle and move main to es6 (#1480)
- feat: start session recording on url trigger (#1451)
- chore: babel targets in rollup config (#1479)
- feat: add stack to stacktraceless "exceptions" (#1472)
- fix: web vitals delayed capture (#1474)
- chore: skip if Array.from is missing (#1475)
- feat: report reason for recording start (#1452)
- chore: improve exception autocapture (#1466)
- fix(errors): Better define schema, align with python (#1460)
- chore: refactor some cypress setup (#1467)
- fix: sanitize set_once properties (#1462)
- feat(web experiments): Emit web_experiment_applied event and do not render experiments for bots (#1443)
- fix: Remove posthog error capture from replay (#1454)
- fix: skip addition of
src
attribute for HLS videos (#1446)
- feat: default replay partial compression on (#1445)
- chore: Add test for reset() and anonymous users (#1444)
- fix: no custom events when idle (#1438)
- chore: downgrade jest types (#1442)
- feat: compress replay data (#1436)
- fix: it's just rude to assign to date now (#1435)
- fix: get computed style error (#1433)
- fix: changelog (#1431)
- chore: build when publishing (#1430)
- feat: Bundle option without any external scripts (#1413)
- fix: session idle timestamp correction (#1428)
- feat: type safe posthog extensions (#1407)
- fix(surveys): 7-point likert scale didn't work with branching logic (#1424)
- fix: when capturing without performance entry we can capture manual initiator type (#1422)
- chore: auto publish alpha versions (#1414)
- chore: move test file into tests (#1418)
- fix: teardown and restart recording on session id change (#1411)
- fix: no keep alive for large payloads (#1416)
- feat(experiments): Apply no-code experiments to the webpage. (#1409)
- fix: manage capture pageview hook lifecycle (#1408)
- fix: some clients need web vitals directly on window (#1406)
- fix: warn on unavailable lazy load not throw (#1400)
- feat: web vitals 3000 (#1401)
- fix: captured network requests must always have name property (#1398)
- fix: report requests even without timing (#1386)
- fix: flushing the buffer for debug signal while idle extends session activity (#1396)
- fix: network capture tests should fail if we exhaust the body (#1395)
- chore: clarify that tests are exercising our fetch wrapper (#1393)
- feat: manually capture errors (#1374)
- fix: capture a $pageview event on opting in (#1372)
- fix(errors): Build endpoint for sentry integration & exception observer correctly (#1390)
- chore: skip rate limiting of snapshot events (#1383)
- chore: Remove retries for testcafe tests but increase timeout. Wait for lag in parallel (#1380)
- feat: default api host to new ingestion domain (#1370)
- fix: event listeners should obey start and stop (#1379)
- fix(segment): Posthog can identify after segment identifies a user, not just during bootstrap. (#1373)
- fix: Revert cypress back to 13.6.3 (#1384)
- feat: Use NavigatorUAData and navigator.webdriver to improve bot detection (#1359)
- chore: Move chrome tests off of browserstack, add firefox (#1369)
- Revert "fix: pass original fetch args along (#1351)" (#1371)
- feat: allow overriding linked flag (#1368)
- fix: Move @types/web to dev dependencies (#1367)
- fix: pass original fetch args along (#1351)
- fix: only add to window when it exists (#1362)
- fix: endpoint for is already called inside loadscript (#1365)
- chore: Run ts on test files (#1358)
- fix: Expose version (#1357)
- feat: default to gzip compression instead of base64 (#1355)
- remove x-posthog-token header (#1354)
- feat: Added token to headers (#1347)
- feat: Add prev pageview duration (#1348)
- chore: make password capture more explicit (#1345)
- fix(surveys): style the link button with black text (#1343)
- feat: Remove storage logging and add reset logging (#1342)
- feat(surveys): added a customizable submit button text color (#1339)
- fix(surveys): textarea border box was being set in the preview but not in the surveys rendered on user websites (#1340)
- Add instructions for cross subdomain development (#1336)
- fix(surveys): fix textarea, and make it easier to query the survey question description in the DOM (#1337)
- feat: Add debug logging for the initial props that posthog was started with (#1335)
- feat(flags): give users the ability to suppress override warning logs, if desired (#1328)
- chore: mask password by default (#1334)
- feat: Add debug messages around storage (#1333)
- feat: add renderSurvey option (#1324)
- feat: Add debug logic for set_config (#1330)
- fix(surveys): Center the X (#1329)
- Accept eventPayload in onEvent handler (#1331)
- fix: Array.from override (#1322)
- chore: finally remove given (#1321)
- feat(surveys): add support for a 7 point likert scale (#1319)
- feat: add debug startup log message (#1318)
- fix: web vitals ignored error on init (#1317)
- chore: fix the rollup bundle visualiser output (#1315)
- fix: Fix the referrer changing mid-session (#1314)
- fix: don't load preact until you have to (#1311)
- chore: one less posthog mock and two fewer given tests (#1312)
- fix: ignore ridonculously large web vitals values (#1309)
- chore: move test file (#1306)
- feat: split large replay buffers before sending (#1305)
- feat: add url_ignorelist for autocapture config (#1302)
- feat: add new google crawler (#1300)
- chore: add a test (#1299)
- fix: warn when on xhr error used (#1298)
- fix: add web vitals to array full (#1297)
- feat(Surveys): Activate surveys based on actions (#1295)
- feat(Surveys): Add ActionMatcher to match CaptureResult to any known actions (#1294)
- feat: move heatmaps to their own event (#1287)
- fix: capture network recording type (#1296)
- feat(surveys): added close button text customization feature (#1288)
- chore: fix error tests listener registration (#1291)
- feat: send errors one way (#1289)
- chore: missing changelog entry (#1290)
- fix(surveys): polishing the popup survey UI (#1279)
- add rdt_cid as a campaign parameter (#1286)
- fix: only take scheduled full snapshots (#1285)
- feat: add payload host denylist (#1282)
- feat(survey): Allow events to repeatedly activate surveys (#1273)
- feat: warn when distinct id invalid for replay (#1277)
- feat: Improved various bundles (#1265)
- fix: use includes over contains (#1275)
- chore: add browsertack build name (#1271)
- fix: dropped styles on route transition (#1272)
- feat: add lazily loaded web vitals collection (#1203)
- fix: exception autocapture (#1261)
- feat(surveys): add configurable delay to popup surveys (#1228)
- chore: update pnpm action setup worfklow version (#1268)
- fix: unwind recent changes things seem less stable (#1267)
- feat(web-analytics): Add property for autocapture link click (#1259)
- chore: add sanitization test to heatmaps tests (#1256)
- fix(surveys branching): rename confirmation_message -> end (#1257)
- fix(surveys): fix missing confirmation message state (#1263)
- fix(surveys): handle missing getNextSurveyStep (#1260)
- fix: Allow no capture of $opt_in event (#1250)
- fix: no scheduled snapshots while idle (#1254)
- feat: Allow bootstrapping session id (#1251)
- feat(surveys): add branching logic (#1247)
- fix: only wrap once when patching (#1245)
- chore: add clarifying test (#1246)
- feat: allow not operators in survey url targeting (#1219)
- fix: less strict idle event dropping (#1241)
- chore: add inlineStylesheet prop (#1237)
- feat(personless-events): set_once more initial properties accurately when a person is created (#1236)
- fix: circular refs shouldn't explode capture (#1230)
- feat: Updated v8 sentry integration (#1224)
- feat: wrap fetch and add tracing headers (#1186)
- feat(survey): Support identifying iterations of a repeatable survey (#1200)
- feat(surveys):
posthog-js
changes to support valid HTML question rendering (#1206)
- chore: Bump version to 1.137.0 (#1227)
- feat(survey): Event based survey: Show survey popup based on custom event (#1213)
- feat(survey): Event based survey: Show survey popup based on custom event #1213
- fix: flush on idle (#1225)
- fix: no full snapshot while idle (#1222)
- chore(surveys): refactor survey popup (vol. 1) (#1214)
- feat: add an explicit in-memory buffer (#1217)
- fix: do not start recording buffer without id (#1215)
- fix: heatmaps with segment integration (#1218)
- fix: reference canvas not client (#1212)
- fix: Add auto approver for JS prs (#1209)
- fix: fallback size when resizing (#1208)
- feat: Refactor GDPR stuff into a more readable consent class (#1176)
- feat: Add tests and fix regex for some obscure android browsers (#1196)
- fix: Add missing retry info and test (#1202)
- fix: Pass
retriesPerformedSoFar
to keep count of retries (#1201)
- fix(survey): Retain question index if questions are shuffled (#1198)
- feat(survey): support internal_targeting_flag to show/hide survey popup (#1181)
- feat(web-analytics): Add function for explictly enabling person processing (#1191)
- fix: redact not hide headers (#1190)
- chore: Bump release to 1.131.5 (#1183)
- fix issue with shuffling questions on every render (#1182)
- feat(survey): Randomize questions & choices in surveys (#1177)
- feat: Support shuffling questions within a survey and options within a question (#1177)
- fix: Update ui_host if using old app one (#1179)
- feat: Added global state check for toolbar (#1173)
- fix: Retriable queued requests (#1171)
- fix: remove transport method that doesn't work (#1167)
- feat: Refactor request to make sure we only use available transports (#1166)
- fix: don't modify history state when loading toolbar (#1162)
- feat(surveys): add Vite devserver (#1164)
- feat: Allow sending automatic pageleave with manual pageview (#1165)
- chore: Add script to deprecate old versions (#1161)
- feat: Add rate limit info to events (#1160)
- chore: logging on start (#1158)
- fix(surveys): use correct render method (#1157)
- feat: Move heatmaps out of preview (#1156)
- feat: Remotely enable heatmaps via decide (#1154)
- chore: Fix duplicate string (#1153)
- chore: Update nextjs project to have more realistic controls (#1151)
- fix: Don't track heatmaps of toolbar (#1152)
- chore: upgrade rrweb to alpha-13 (#1149)
- feat: add deepscan agent (#1145)
- fix: Remove underscores from all functions (#1140)
- feat: Heatmaps instrumentation (#1131)
- feat: Added client side capture rate limiting (#1051)
- chore: add a test (#1144)
- fix: Reacting to config changes (#1138)
- Rename $process_person to $process_person_profile (#1143)
- Update docs on versioning (#1142)
- feat: Update support for segment analytics (#1119)
- feat: Update support for segment analytics (#1119)
- feat: Rename process_person config option to person_profiles (#1141)
- feat: readonly event emitter (#1136)
- fix: Allow capturing
aria-label
attribute on sensitive elements (#1118) - chore: Autocapture refactor (#1126)
- chore: patch to fix broken worker (#1134)
- fix: continue recording after reset (#1135)
- fix: sampling typescript error (#1129)
- chore: no only tests are allowed (#1128)
- feat: readonly event emitter (#1136)
- fix: Allow capturing
aria-label
attribute on sensitive elements (#1118)
- chore: Autocapture refactor (#1126)
- chore: patch to fix broken worker (#1134)
- fix: continue recording after reset (#1135)
- fix: sampling typescript error (#1129)
- chore: no only tests are allowed (#1128)
- feat(surveys): Add disable config option (#1123)
- feat: Person Processing 3: Handle $initial props across sessions, send $initial props with all person processing events, remove __preview (#1127)
- fix: missing parentNode protection (#1125)
- feat: Person processing 2 - handle group and setPersonProperties (#1124)
- fix: typing of maskTextFn (#1122)
- Fix to include project in urls (#1098)
- chore: Add workflow to update the posthog.com repo with new posthog-js versions (#1120)
- feat: Add person processing mode preview (#1109)
- chore: upgrade rrweb to 2.0.0-alpha.12 (#1115)
- fix: Default api host to us.i.posthog.com (#1087)
- feat: allow override sampling (#1105)
- Fix nextjs playground version of posthog-js (#1117)
- Fix $is_identified (#1116)
- feat: capture more sentry levels (#1104)
- feat: measure identified events (#1114)
- fix: block bytespider bot (#1113)
- fix: remove alpha comments from groups (#1111)
- feat: Add __posthog_debug query string (#1108)
- fix(decide): Respect disable_compression for flags (#1102)
- fix: Reloading toolbar after closing (#1095)
- fix: posthog init should reject invalid config in TypeScript (#1097)
- fix: custom event on sampling decision (#1094)
- feat: signal we have wrapped fetch (#1083)
- fix: Return this if already loaded (#1092)
- feat: add property so we can check if a client is using a proxy (#1084)
- chore: Remove v2 rrweb checks (#1080)
- fix: allow payload scrubbing override (#1085)
- fix: canvas recording patches (#1082)
- chore: remove cypress log noise (#1086)
- chore: remove v1 rrweb loading (#1078)
- feat: track recording URL without pageview capture (#1076)
- fix: return typing of global functions (#1081)
- fix: patch rrweb zero width canvas bug (#1075)
- fix: Disabled compression and application json (#1074)
- feat: report browser visibility state in replay (#1071)
- fix: typo in deny list (#1073)
- fix(posthog-js): manually bump patch (#1072)
- fix(posthog-js): manually bump patch (#1072)
- fix: no empty requests (#1063)
- fix: Send beacon request encoding (#1068)
- fix: clarify redaction message (#1069)
- feat: scrub payloads with forbidden words (#1059)
- chore: remove unused path (#1066)
- Fix compression (#1062)
- feat: Refactor request logic (#1055)
- feat: Add more ad ids (#1057)
- chore: Rework SDK initialisation (#1023)
- feat: Ensure ingestion domains follow the same logic. (#1049)
- chore: Removed jsc callbacks (#1052)
- fix: posthog path to ignore (#1054)
- chore: add some privacy examples to the copy autocapture demo (#1053)
- feat: copy and cut autocapture (#1047)
- fix: timezones are fun (#1050)
- feat: allow linked flag variants to control recording (#1040)
- feat: reecord when timestamp is overriden by caller (#1033)
- chore: deprecate property_blacklist in favor of property_denylist (#1044)
- feat: improve user agent detection (#1038)
- Fix (#1042)
- feat: Rollout new ingestion endpoints (#1032)
- fix: Path for site apps (#1037)
- fix(surveys): fix emoji scale (#1036)
- fix(surveys): Render feedback preview (#1030)
- feat: Allow changing persistence (#1025)
- fix(surveys): survey popover improvements (#1029)
- fix: protect against parent is not element (#1027)
- fix: body capture handling (#1026)
- ci: Use GITHUB_OUTPUT envvar instead of set-output command (#958)
- feat(surveys): preact surveys components (#964)
- fix: empty token should be invalid (#1022)
- feat: Simplify to just -api and -assets (#1018)
- fix: for want of a v the war was lost (#1017)
- fix: allow custom events when idle (#1013)
- chore: no need to account for performance raw (#1012)
- chore: add test case for ahrefs bot (#1011)
- chore: really really write changelog to release (#1008)
- feat: save posthog config at start of session recording (#1005)
- chore: test stopping and starting (#1009)
- feat: account for persistence for canvas recording (#1006)
- chore: improve template to account for backwards compatibility (#1007)
- feat: Add dynamic routing of ingestion endpoints (#986)
- Update CHANGELOG.md (#1004)
identical to 1.105.1 - bug in CI scripts
identical to 1.105.1 - bug in CI scripts
- fix: autocapture allowlist should consider the tree (#1000)
- chore: move posthog test instance helper (#999)
- chore: nit pick log message (#997)
- chore: copy most recent changelog entry when creating a release (#995)
- fix: Add warning and conversion for number distinct_id (#993)
- fix: Remove
baseUrl
from TypeScript compiler options (#996)
- fix: very defensive body redaction (#988)
- fix: less eager timeout (#989)
- feat: Fetch without window (#985)
- fix: no throwing when reading the body (#984)
- chore: make rate limiter error less scary (#983)
- feat: Fetch support (#898)
- chore: Swap to main (#979)
- fix: safer body processing (#980)
- feat: safer rrweb events and regular full snapshots (#973)
- chore: update rollup (#974)
- chore: re-enable bundle checker now main and branches both use pnpm (#972)
- feat: pnpm patch rrweb (#971)
- chore: convert to pnpm (#970)
- chore: add debug logging for session id/recording (#969)
- feat: send custom event when network status changes (#965)
- fix: integration test opting out (#959)
- feat: canvas recording support (#946)
- refactor(surveys): Use Preact instead of vanilla JS (#963)
- Enable scroll stats by default (#962)
- feat: Support custom scroll selector (#961)
- fix: Don't allow us.posthog.com to be used (#957)
- fix: set the session id as soon as it changes (#956)
- fix: simplify test setup (#955)
- feat: capture session options in a custom event (#954)
- fix(surveys): fix feedback widget bugs (#953)
- fix: add a comment explaining browser type prop (#952)
- feat: add opt_out_useragent_filter and $browser_type (#949)
- chore(surveys): add basic survey e2e tests (#948)
- Tidying and removing of old value (#941)
- Add gas_source to campaign params (#934)
- feat: simplify payload config compared to rrweb proposal (#939)
- feat: remove given from another test file (#940)
- make link survey link optional (#938)
- fix: import nuxt composables from #imports (#879)
- Remove debug code from survey-utils (#937)
- feat(surveys): custom and tab widget (#933)
- Add a few more blocked uas (#936)
- fix: class string separator (#935)
- fix: cache subdomain discovery (#928)
- chore: corrects the changelog (#931)
- fix: incorrect localhost handling (#930)
- feat: Swap to localstorage+cookie as default (#927)
- fix: sanitize class string more (#925)
- chore: redirect users to the supportModal when implementation errors occur (#921)
- chore: Add comment to remind about updating the plugin-server (#924)
- add wbraid and gbraid to campaignParams (#923)
- fix: Sanitize given api_host urls to not have a trailing slash (#920)
- fix: handle newlines in classnames (#919)
- feat: Show warning if identifying with "distinct_id" (#918)
- fix: safer custom event on return from idle (#913)
- Add deprecation notice for disable_cookie (#912)
- fix(flags): Make sure we don't override flags when decide is disabled (#911)
- feat: send idle markers in session (#909)
- feat(surveys): Add open-ended choices for multiple and single choice surveys (#910)
- feat: payload capture - move timing into copied plugin (#902)
- feat: Create elements chain string as we store it (#823)
- Move blocked UAs to own file (#905)
- chore: deflake a test (#904)
- chore: convert more tests to TS (#903)
- latest cypress action version (#900)
- fix(surveys): button text field fix (#899)
- fix: Window or document access across the code (#894)
- chore: uniquify differently (#897)
- correct CHANGELOG.md (#896)
- fix: seek subdomain correctly (#888)
- fix: merge server permissions for payload capture (#892)
- fix(surveys): prioritize question button text field and thank you countdown is not automatic (#893)
- fix: a little session buffering logic (#890)
- fix: make header comparison case insensitive (#891)
- fix: extend header denylist (#889)
- fix(surveys): fix emoji rating scale bug (#887)
- feat: capture network payloads (internal alpha) (#886)
- fix: meaningful recordings integration tests (#885)
- fix(surveys): Send responded property with every type of survey (#883)
- Bump playground next yarn version (#874)
- chore: convert 2 more test files to remove given and switch to TS (#882)
- fix(surveys): whitelabel, input radio grouping, and auto text color bugs (#881)
- fix: session id should start null (#878)
- chore(deps): bump @babel/traverse from 7.11.0 to 7.23.2 (#835)
- chore(deps): bump @babel/traverse from 7.12.12 to 7.23.2 in /react (#836)
- chore(deps): bump next from 13.1.6 to 13.5.0 in /playground/nextjs (#855)
- feat: capture network payloads (internal alpha) (#886)
- fix: meaningful recordings integration tests (#885)
- fix(surveys): Send responded property with every type of survey (#883)
- Bump playground next yarn version (#874)
- chore: convert 2 more test files to remove given and switch to TS (#882)
- fix(surveys): whitelabel, input radio grouping, and auto text color bugs (#881)
- fix: session id should start null (#878)
- chore(deps): bump @babel/traverse from 7.11.0 to 7.23.2 (#835)
- chore(deps): bump @babel/traverse from 7.12.12 to 7.23.2 in /react (#836)
- chore(deps): bump next from 13.1.6 to 13.5.0 in /playground/nextjs (#855)
- Tweak session prop names (#873)
- feat(web-analytics): Add client-side session params (#869)
- fix: add tests for browser and browser version detection (#870)
- fix: include raw user agent in event properties (#868)
- fix: logging pointless error when offline (#866)
- feat: retry count in url (#864)
- fix(surveys): Publish types in module (#863)
- fix(surveys): clearer user property names (#861)
- feat(surveys): Make selector targeting work, add user props (#858)
- feat: allow backend to specify a custom analytics endpoint (#831)
- fix: checkout every X minutes (#860)
- feat: lazily load exception autocapture (#856)
- feat: Toolbar loading from state faster (#849)
- fix(surveys): cancel listener should be on all questions (#854)
- Fix changelog.md (#853)
- fix: eslint does not fail build (#852)
- fix: Disable the string reduction code until we can battle test it more. (#851)
- feat: allow sampling based on decide response (#839)
- log when browser offline (#850)
- chore: type checking in one place makes bundle smaller (#843)
- fix: full snapshot every 10 minutes (#847)
- fix: really fix subdomain check to satisfy codeql (#845)
- fix: heroku subdomain check (#842)
- fix(surveys): fix multiple choice input unique ID bug (#841)
- Fix bot user agent detection (#840)
- fix(surveys): add listener to 0th element (#837)
- chore: Make ratings start at 0 (#834)
- feat: Move all logs everything over to logger (#830)
- Update DOMAIN_MATCH_REGEX (#787)
- feat(surveys): Optional survey questions (#826)
- fix: Typescript compilation of survey types (#827)
- fix(surveys): open text value bug (#825)
- fix(surveys): multiple choice survey submit button bug (#822)
- feat: allow regex patterns and wildcards in survey url (#821)
- fix(capture): Always update stored person props from $set (#820)
- fix(surveys): Handle filtering on undefined (#810)
- feat(surveys): popup changes and multiple questions support (#819)
- Fix config access (#816)
- fix: Remove complex get_config (#812)
- fix: Mask page URLs in session recordings (#811)
- fix(types): Relative import to fix typescript compilation (#809)
- feat(surveys): Make surveys site app native to posthog-js (#801)
- Add root $el_text (#806)
- fix: Increase timeout to 60 seconds (#803)
- chore: add tests on impact of empty autocapture config (#802)
- feat: add an attribute denylist for autocapture (#800)
- fix: toolbar cache busting (#798)
- fix(flags): Enqueue follow up requests without dropping (#797)
- feat: different rate limiting handling (#765)
- fix: Update rrweb (#793)
- 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 #139
- Publish a ES dist file #157
- Publish a react integration for feature flags #154
- Fix issues with incorrect headers being set on decide
- 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.