Release 1.21 is a big one, on top of exciting new features and improvements, we put extra time into the overall stability of PostHog squashing dozens of issues. Some highlights of this release:
- New: Our new navigation is out of beta and available to all
- New: assign Feature Flags to multiple groups of users
- New: Apps UI and new Taxonomy app
- Improvement: to Insight query caching
- Improvement: to Session Recording filters
We received a lot of great feedback and issue reports and over this release cycle we fixed hundreds of issues, polishing our UI, squashing bugs, and significantly improving our performance.
Make sure to upgrade to get the new features, improvements and fixes.
Release Notes
If you're self-hosting and want to upgrade for a better experience and new features, remember to update your PostHog instance.
New Navigation For All
While this might not be news to all of you, we have now released our new navigation to everyone.
We had this behind a feature flag, but now all our users have access to our fresh "spaceship-like" navigation. What do you think? 🚀
Refreshing Insights
To provide a smooth user experience, we cache query results so that you don't have to wait for a query to run every time you view a chart.
This has the side effect that sometimes you'll be looking at slightly outdated results. We made improvements to clearly indicate when you're looking at a cached result, when it was computed, and allow you to refresh.
Session Recording Filters
Our session recording filters just got so much more powerful. Filter by session duration, user properties, unseen recordings, actions performed in a session, and so much more.
You can now get a lot more out of your session recording sessions by tailoring the recordings to specific areas of your product you're looking into.
For a start, how about integrating PostHog with Sentry and watching all recordings with an $exception
event in them?
Multiple Groups in Feature Flags
Feature flags can now be rolled out to multiple different groups that use distinct settings, unlocking a whole new world of opportunities for your A/B testing and feature rollout processes.
For example, you can now roll out feature flags like this:
- 100% of users in the 'Beta Testers' cohort
- 40% of all your users
- All users in a specific team that requested the feature from you
The filters and rollout percentages can be adjusted per group, giving you greater control degree of how you build and test your products.
A New Plugins UI with Brand New Features
A lot has happened to our apps feature since the last release, including:
- An improved UI
- The ability to reorder apps
- The ability to upgrade apps (and see exactly what changed between versions)
- Autofill on commonly used app configuration fields
- A new app configuration field type, letting app builders specify pre-determined choices for the user to select from
- A ton of performance improvements
Taxonomy Standardizer
Standardize your event names into a single naming pattern by converting the names of your events that don't match your desired pattern into the chosen format, such as camelCase
or snake_case
.
Bitbucket Release Tracker (Beta)
Get your Bitbucket release tags into PostHog as annotations on your graphs, so you can track the impact of releases on your metrics.
User Interviews
We’re working hard to improve PostHog and would love to talk to you about your experience with the product.
If you're interested in helping us out, you can schedule a quick 30-min call with us on Calendly.
Oh, and we're giving away some awesome PostHog merch as a thank you!
Favorite Issue
Darkmode Design + UX
We're redesigning Dark Mode for our Docs - can ya dig it?
PostHog News
Sean has joined us to lead our marketing efforts and we're super excited.
He is a developer with an impressive background in open source software and game development and believes (correctly) that pineapple and pizza must not commingle.
Community Shoutouts
Big thanks to the following members of our community who have contributed to PostHog over this release cycle:
Community MVP
A special shoutout goes to cpankajr, our Community MVP for this release cycle, for helping us say goodbye to the pandas
and numpy
bloat in our images.
Share your feedback
We'd love to hear anything you have to say about PostHog, good or bad. As a thank you, we'll share some awesome PostHog merch.
Want to get involved? Email us to schedule a 30 minute call with one of our teams to help us make PostHog even better!
Open Roles
Are you a Fullstack Engineer, Senior Engineer, Site Reliability Engineer, Customer Success Lead, or Content Writer?
Or perhaps you're not either but think you'd still be a good fit for PostHog?
Bug Fixes and Performance Improvements
In addition to the highlights listed above, we also merged a bunch of PRs improving PostHog's performance and fixing bugs:
- Prefilter post_event_to_webhook_ee more #3368 (Twixes)
- Fix hidden plugin config field #3364 (yakkomajuri)
- Bump rrweb 0.9.14 #3361 (timgl)
- retention dashboard item refresh bug #3359 (EDsCODE)
- 3293 retention hourly bug #3358 (EDsCODE)
- Fix filtering on elements clickhouse #3354 (timgl)
- Fix /demo feature flags loading issue #3350 (yakkomajuri)
- Update launch toolbar CTA for new nav #3347 (yakkomajuri)
- Add Invite Team Member to top bar user dropdown #3343 (Twixes)
- Fix/replace setTimeout in logics #3337 (macobo)
- Fix formula query parsing #3336 (timgl)
- Fix funnel people not showing #3335 (timgl)
- add try catch to persons in retention #3332 (EDsCODE)
- Fix first time retention people query #3331 (EDsCODE)
- Bump plugin server to 0.8.3 #3329 (mariusandra)
- Plugin server 0.8.2 #3327 (mariusandra)
- fix more formula errors #3326 (timgl)
- Bump plugin server to 0.8.1 #3325 (mariusandra)
- Fix infinites in formula #3323 (timgl)
- Fix breaking down by property with no value(s) #3322 (macobo)
- Add try except back to trend class #3320 (EDsCODE)
- Fix nans in counts formula #3319 (timgl)
- Add smarter settings getenv helper function for safety #3317 (Twixes)
- Enable plugin server parallel ingestion #3316 (mariusandra)
- Return 404 instead of 500 when person to be deleted is not found #3314 (macobo)
- Move breakpoints around #3313 (macobo)
- Set Cloud PLUGIN_SERVER_INGESTION to false #3312 (Twixes)
- Update posthog-js to 1.8.7 #3310 (macobo)
- Fix invalid funnel insights
display
filter #3309 (macobo) - Plugin server to 0.8.0 #3307 (mariusandra)
- Bump webhook_url limit to 500 chars #3306 (macobo)
- Ingest all teams via the plugin server #3305 (mariusandra)
- Allow viewing sessions/recordings on persons page #3302 (macobo)
- Remove statsd logspam #3299 (macobo)
- Don't set is calculating for static cohorts #3297 (timgl)
- Rework sessions list query to account for pagination #3296 (macobo)
- Fix instance status page #3292 (Twixes)
- Fix retention linear chart in dashboards #3290 (Twixes)
- Fix ints saved as strings clickhouse #3289 (timgl)
- Misc plugin improvements #3288 (mariusandra)
- Fix filtering by user property in CH sessions list #3285 (macobo)
- Plugin server info on system status page #3284 (mariusandra)
- Bump cryptography from 3.2 to 3.3.2 #3281 (dependabot[bot])
- Remove CH Pool as dependency #3279 (fuziontech)
- Trend component test #3278 (EDsCODE)
- Fix non-anonymous ids #3276 (timgl)
- Formulas #3275 (timgl)
- Use elements_chain in EE webhook #3273 (Twixes)
- Fix non-anonymous distinct id first #3272 (timgl)
- REST/webhook optimizations #3267 (Twixes)
- Persons component test #3266 (EDsCODE)
- Update clickhouse-driver #3265 (macobo)
- Fix mutating process_event_ee bug #3263 (mariusandra)
- Serialize/deserialize elements_chain on webhooks_ee #3262 (macobo)
- Don't show "save" if user has not yet entered all cohort group data. #3261 (macobo)
- Cloud billing trial period & free plan #3259 (paolodamico)
- Fix update indicator on top navigation #3258 (paolodamico)
- Show toast if signup fails #3257 (macobo)
- Updated Go installation instructions #3256 (zegl)
- Improve entity rows layout #3255 (timgl)
- Capture EE webhook task sending error #3254 (Twixes)
- Always show non-anonymous distinct id first #3251 (timgl)
- Plugin server 0.7.5 #3250 (mariusandra)
- Return no data for invalid regexes #3248 (macobo)
- Make page not jumpy on initial load #3246 (macobo)
- Add capture exception cohorts #3245 (timgl)
- Separate Jest from frontend code quality job #3241 (Twixes)
- Enhance Project settings #3240 (Twixes)
- Ellipsis for long action names #3239 (macobo)
- Instrumentation Feb-8 #3238 (paolodamico)
- Fix
Cannot read property 'sessionsPlayLogic' of undefined
#3235 (macobo) - Improve project deletion #3234 (macobo)
- React component tests with cypress #3233 (macobo)
- Improve invites #3232 (Twixes)
- Clean up query timeout notice #3231 (Twixes)
- Add selection option to plugin config #3229 (yakkomajuri)
- Upgrade plugin server to 0.7.4 #3226 (mariusandra)
- Upgrade plugin server to 0.7.3 #3225 (mariusandra)
- add type and null check before reporting #3224 (EDsCODE)
- Make action null safe #3223 (EDsCODE)
- Don't blow up if funnel has no steps #3222 (macobo)
- Try catch property #3221 (EDsCODE)
- Remove any loaders errors #3220 (timgl)
- Update posthog-js 1.8.6 #3219 (timgl)
- Add breakpoint() calls to cohortLogic #3217 (macobo)
- Add missing
await
s to breakpoint(X) calls #3216 (macobo) - Avoid erroring when loading dashboards with no active project #3214 (macobo)
- Return 1 week of data when choosing 'all time' with no event data #3212 (macobo)
- Fix SelectBox keyboard navigation #3211 (macobo)
- Fix more z-index wonkiness #3210 (paolodamico)
- Emit timing gauge to statsd for sync_execute on clickhouse #3209 (fuziontech)
- str(team.organization_id) in PLUGINS_CLOUD_WHITELISTED_ORG_IDS check #3208 (Twixes)
- Handle navigation race in insights logic #3207 (macobo)
- Flip PLUGIN_SERVER_INGESTION on #3206 (mariusandra)
- Bump plugin server to 0.7.2 #3205 (Twixes)
- Update plugin server to 0.7.1 #3204 (mariusandra)
- Alltime compare sentry error #3203 (EDsCODE)
- Fix numerical person properties turning to strings on save #3202 (yakkomajuri)
- Add clickhouse connection envs for plugin server #3201 (mariusandra)
- Grab all events and properties even if job hasn't run yet #3200 (timgl)
- Update @sentry/browser #3199 (macobo)
- Fix mobile menu z-index #3198 (paolodamico)
- Return a 400 when /decide called with invalid token #3197 (macobo)
- Fix stickiness comparison #3195 (macobo)
- Fix LinkButton component #3194 (macobo)
- Billing page improvements #3192 (paolodamico)
- Avoid
TypeError
when assets have been regenerated loading a scene #3188 (macobo) - Fix bug introduced by typing trendsLogic #3186 (macobo)
- Remove broken copy-pasted code #3184 (macobo)
- Fix recursion problems caused by sessionsTableLogic #3183 (macobo)
- Remove proj settings tests #3179 (EDsCODE)
- Handle empty content-type from IE11 in capture endpoint #3178 (macobo)
- Fix axis labels color on bar charts #3176 (yakkomajuri)
- Release onboarding #2822 & final tweaks #3174 (paolodamico)
- Extra test features for posthog-js E2E test #3173 (macobo)
- Make migration for person_email index only if not exists #3172 (fuziontech)
- Wrap saved funnel name smarterly #3171 (Twixes)
- Type path logic #3170 (EDsCODE)
- Handle corrupted cache #3169 (yakkomajuri)
- Fix broken url in paths #3168 (EDsCODE)
- Simplify cohort queries #3165 (timgl)
- Fix key error in capture #3164 (Twixes)
- Do not open people modal on retention panel in dashboard #3162 (yakkomajuri)
- Clean up EE settings.py and fix Google auth whitelisted domains #3159 (Twixes)
- Update contributor avatars #3158 (yakkomajuri)
- Make pies listen to color changes and update #3157 (yakkomajuri)
- Autofocus on email instead of first name on signup #3155 (timgl)
- Improve Saved Funnels UX #3153 (Twixes)
- Type trend logic #3152 (EDsCODE)
- Update plugin server to 0.6.11 #3151 (Twixes)
- Fix FOSS copyright formatting #3146 (Twixes)
- Update copyright years and use MIT license in posthog-foss #3145 (Twixes)
- Bulk invite team members (setup section II) #3143 (paolodamico)
- Chart above fold #3142 (Twixes)
- Improve handling of .git* files/dirs #3141 (Twixes)
- Fix Person page loading by email under persons-2353 #3139 (yakkomajuri)
- Remove clickhouse pooler from sync execute path #3138 (fuziontech)
- Setup Section II & General State #3129 (paolodamico)
- add null check to eventusage logic #3125 (EDsCODE)
- Fix condition for disabled compare filter when all time is selected #3123 (EDsCODE)
- Revamp and optimize hooks on EE #3119 (Twixes)
- Add person email index #3116 (timgl)
- 2794 retention people #3108 (EDsCODE)
- Enable PLUGIN_SERVER_INGESTION #3107 (Twixes)
- 1269 funnel trends 2 #3079 (timgl)
- Remove Stats from Toolbar #3040 (yakkomajuri)
- Added new functionality to readme #2963 (jamesefhawkins)
- Migrate team invite signup to React - Part I (Backend) #2734 (paolodamico)
- Make social login work with new Onboarding logic #3131 (macobo)
- Onboarding: Populate a sample session recording #3128 (macobo)
- Onboarding: Save personalization data #3126 (macobo)
- Make PluginConfig.order mandatory #3122 (Twixes)
- Apply type and optional checks to billing var #3121 (EDsCODE)
- Update demo data warning styles #3120 (macobo)
- Onboarding personalisation adjustments (retention#9) #3117 (paolodamico)
- Remove emails from csv #3115 (timgl)
- Add team filter to cohort query to speed up #3112 (timgl)
- Improve demo data #3111 (macobo)
- Fix unbound plugin update response #3106 (Twixes)
- Add action filter button on remove-shownas flag #3105 (EDsCODE)
- Onboarding setup page (continues #2822) #3104 (paolodamico)
- Onboarding: Create demo data, show demo alert at top, route directly to dashboard #3103 (macobo)
- Fix API incompatibility with old feature flags code #3102 (macobo)
- Fix multi-group feature flags #3101 (macobo)
- Plugin order #3100 (mariusandra)
- Add whitelists for domains on Google OAuth #3098 (fuziontech)
- Move adding feature flags to event to capture endpoint 2: This Time It's Personal #3096 (Twixes)
- Only show tooltips when you can actually click #3093 (EDsCODE)
- Retention logic types #3091 (EDsCODE)
- Move adding feature flags to event to capture endpoint #3090 (Twixes)
- Fix paths background color in dashboard #3089 (yakkomajuri)
- Milestone P1 - #2822 implementation #3088 (paolodamico)
- Reduce axes logspam #3086 (macobo)
- Make feature flag query faster #3084 (macobo)
- Plugins required in preflight check #3083 (mariusandra)
- 3072 retention person modal fix #3080 (EDsCODE)
- Fix retention "load more" people #3075 (macobo)
- Allow configuring session recording retention period #3074 (macobo)
- Private token support for GitHub and npm URLs #3070 (mariusandra)
- Hotfix for missing session recording events #3069 (macobo)
- Fix exception when using a bad selector to select actions #3067 (mariusandra)
- Closes #3065 resolve sessions by distinct ID error #3066 (stevenphaedonos)
- Remove bulk events gen #3061 (yakkomajuri)
- Various fixes 210122 #3058 (paolodamico)
- Plugin upgrades #3057 (mariusandra)
- Add missing logic for action days in cohort calculating #3056 (EDsCODE)
- Use KAFKA_HOSTS instead of KAFKA_URL in ECS dockerized plugin server #3054 (Twixes)
- Fix plugin server task definition rendering #3053 (Twixes)
- Run independently dockerized plugin server in Cloud #3052 (Twixes)
- Run typescript with strict in CI, allow no new errors #3050 (macobo)
- Some typescript fixes #3049 (mariusandra)
- Kea TypeGen types in the same folder as logic #3048 (mariusandra)
- Fix session recording breakage #3045 (macobo)
- Plugin Server 0.6.8 #3043 (mariusandra)
- Add try statement for deleting persons in case the table is distributed #3042 (EDsCODE)
- Add refresh param to retention and paths #3039 (EDsCODE)
- Hide plugins from nav in Cloud #3038 (yakkomajuri)
- Patch DNE in sessionsplaylogic #3037 (EDsCODE)
- Plugin server 0.6.6 #3035 (mariusandra)
- Don't install unused pandas and numpy #3034 (Twixes)
- Plugin unique url with different private tokens & improve privacy #3033 (mariusandra)
- Exclude health from ip block #3027 (timgl)
- Don't include materialized columns in kafka table #3026 (fuziontech)
- Add user param for clickhouse if provided #3025 (fuziontech)
- Setup logging to system.text_log in dev environment #3024 (fuziontech)
- Only aggregate breakdown if it's a table or pie chart #3023 (EDsCODE)
- feat: set event root logger severity using the DJANGO_LOG_LEVEL env variable #3016 (FUSAKLA)
- feat: allow setting Sentry environment by using the SENTRY_ENVIRONMENT env variable #3015 (FUSAKLA)
- Delete omni_person.proto #3014 (Twixes)
- Fix multiple actions in funnel #3011 (timgl)
- Add denormalized prop config #3009 (timgl)
- Plugins page UX improvement #3006 (mariusandra)
- Upgrade to plugin server 0.6.5 #3003 (mariusandra)
- Change suggestion and save cypress test #3002 (EDsCODE)
- Bump version to 1.20.0, update changelog #3001 (yakkomajuri)
- Allow filtering by unseen recordings #3000 (macobo)
- Use utc moment for retention dates and fix modal title #2998 (EDsCODE)
- 2248 remove pandas numpy #2997 (cpankajr)
- Show progress in retention table #2995 (EDsCODE)
- Fix interval persons bug for trends #2992 (EDsCODE)
- Support for installing plugins from private GitLab repositories #2991 (mariusandra)
- Standardize created at and by table columns #2961 (timgl)
- Highlight filtered events in events table and in session recording #2954 (macobo)
- Refactor web ingestion onboarding & add bookmarklet #2953 (paolodamico)
- Round sessions value #2925 (EDsCODE)
- Denormalize clickhouse props #2903 (timgl)
- Add handing off event ingestion to plugin server #2898 (Twixes)
- Add timeout and error messages #2876 (timgl)
- Add autofill for posthog props in plugin config #2838 (yakkomajuri)
- Enable SSL PostgreSQL configuration through env variables #2967 (tmilicic)
Ready to find out more?