PostHog 1.22 is out with awesome new features, usability and performance improvements, and the usual bug squashing.
Community MVP
The community MVP for PostHog 1.22.0 is oshura3, who did a thorough review and edit of our website content and continues to be active in design and marketing discussions.
Anyone can contribute to PostHog and open source, whether it's code, copy, design or discussion. We're delighted that our community are so passionate that they even share PostHog with their family ;)
Thank you oshura3, we look forward to collaborating with you more!
In this release:
- New: Support for bar charts by value
- New: UTM tags now get automatically set as user properties
- New: Equality filters now allow the selection of multiple values
- New: Two more apps!
- New: API Key autofill on our Docs
- Improvement: All events can now set properties on a user
- Improvement: Better tooling for updating data in dashboards
- Improvement: A whole new UX for individual person pages
Important Announcement for Self-Hosted Users
If you're self hosting PostHog, make sure you have your app server up and running by looking at the color of the middle circle on the top left of the PostHog UI.
If it is running, you'll see a green checkmark, and hovering over it will give the message "All systems operational", like so:
From this release (1.22.0) onwards, if your app server is not running, this circle will turn amber. You can click on the server to verify if your app server is indeed the problem.
Important: next release we will move all our event ingestion to the app server, meaning that you will not be able to ingest events if your app server isn't running.
PostHog 1.22.0 Release Notes
If you're self-hosting and want to upgrade for a better experience and new features, remember to update your PostHog instance.
Bar Charts by Graph Series/Value
Before this release bar charts were time-based, which meant that if you had multiple graph series (values), they would all be stacked into one bar for each time period.
We now support two different types of bar charts! When selecting a chart type, you will see the options 'Time' and 'Value' under 'Bar Chart'. Selecting 'Value' will give you the view from the image above, where each graph series is represented in a separate bar, with the value consisting of the aggregate value for the time period specified.
UTM Tags Automatically Set as User Properties
PostHog now automatically sets user properties from UTM tags. You can now filter and create cohorts of users much more easily based on what campaign, source, or medium brought them to your product or landing page. This is a big feature for us as it gives our users an automatic way of connecting marketing and product to have a more complete view of your business. We're very excited for our community to start using this feature and extending it through apps.
Multiple Value Selector for Equality Filters
Writing complex filters is now easier than ever before. You can now select multiple values for Equality Filters instead of just one - this will simplify filter creation and debugging and just save people a lot of time!
Refreshing Dashboards and Updating Time Range for All Panels
It's now easier to work through your key metrics in Dashboards:
- All dashboard panels can be refreshed at the same time to ensure you're not seeing cached results
- Time ranges for all dashboard panels can be changed at the same time
- The dashboard author and creation time are displayed below the title
A Much Better UI for Person Pages
The UI of our person pages just got a whole lot better! As is often the case with our larger features, this isn't news to all of you. We had this behind a feature flag and have now decided to roll it out for everyone.
Now you can visualize user properties alongside a user's events, and most of the context you need on a person is available to you in a sleek UI without you needing to scroll.
Oh, and the code got much better as a result too...
Exposing $set and $set_once on all events
The event properties $set
and $set_once
can now be used on any event to set properties directly to the user associated with that event.
Previously, this would only work on $identify
events, making it so that you needed to call multiple methods in order to send an event and set user properties based on the same data. But now, you can do it all in one, as shown in the image above.
Event Sequence Timer
Our users requested a way to measure the time passed between certain events, and this is it!
By installing the Event Sequence Timer, you can specify as many sets of events as you want and the app will track the time between them, either using a first touch or last touch mechanism.
It will then add a property to your events that allows you to easily build visualizations in PostHog of the average, minimum, and maximum time between events, as well as all the other mathematical operations we support.
Property Flattener
The new Property Flattener allows you to convert event properties contained in a nested structure into a flat structure, allowing you to set filters based on the nested properties.
Project API Key Autofill in Docs for Cloud Users
If you're a user of PostHog Cloud, we now autofill your Project API Key and API Host automatically in the Docs for you, meaning you can copy-paste snippets and use them directly with no manual changes!
This key will be based on the last project you used in PostHog, and you can check what project that is by simply hovering your cursor over the highlighted key.
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!
Favorite Issue Banter
On the rare occasions that our M² team (Michael & Marius) is not found working hard (and oftentimes late) on our app server, they can be found taking the names of Pull Requests out of context:
PostHog News
Kunal has joined us as our first Growth Engineer, and he's already been making a solid impact. Kunal is a startup vet, who started out as a developer and now works on growth, being passionate about building the right product experience to drive the most value.
He sent shockwaves across the company by claiming that pineapple belongs on pizza... sometimes? Never before has the entire company disagreed with someone's stance on this sensitive topic.
Community Shoutouts
Big thanks to the following members of our community who have contributed to PostHog over this release cycle:
Open Roles
Are you a Fullstack Engineer, Senior Engineer, Site Reliability Engineer, Sales Engineer, Product Marketer, 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:
- Closes #3520 fix custom date filter dashboards #3533 (timgl)
- Closes #3524 filters do not reset #3532 (ungps)
- Random fixes Mar 1 #3530 (paolodamico)
- fix plugin invalid config error #3529 (yakkomajuri)
- Add explanation for clipboard not working on remote HTTP #3528 (Twixes)
- Parse retention timestamps to local time #3522 (EDsCODE)
- Disable unnecessary chart filters on retention #3521 (EDsCODE)
- Fix minor UI issue with funnel loading #3519 (yakkomajuri)
- Fix cannot read property 0 of undefined #3518 (yakkomajuri)
- Add no-PR-description-shaming workflow #3517 (Twixes)
- Instrument person properties management #3511 (paolodamico)
- Make PLUGIN_SERVER_INGESTION True by default #3485 (Twixes)
- Add ability to add person props on the UI #3394 (yakkomajuri)
- Use plugin-server container in containerized deploys #3515 (Twixes)
- Fix debug toolbar sql panel #3507 (timgl)
- Don't recalculate deleted cohorts #3506 (macobo)
- Fix limit of events in CSV export #3503 (Twixes)
- Update plugin server to 0.11.1 #3502 (posthog-bot)
- Fix getting earliest timestamp on EE with no events #3501 (macobo)
- Fix filtering sessions by action with property filters #3500 (macobo)
- Update plugin server to 0.10.3 #3498 (posthog-bot)
- Run all connections through clickhouse connection pooler #3495 (fuziontech)
- Reduce calls to api/action #3493 (timgl)
- e2e-test-runner: Only start webpack if not already running #3484 (macobo)
- Fix: funnels & retention person links, funnel calculations #3483 (macobo)
- Update plugin server to 0.10.1 #3481 (posthog-bot)
- Fix "unseen sessions" filter #3478 (macobo)
- Reload our feature flags after changing them #3477 (macobo)
- Add test for bar charts #3474 (macobo)
- Fix "password" on invite page #3473 (Twixes)
- Create a connection every time a query is run #3467 (fuziontech)
- Fix invite being inaccessible for users without org or project #3466 (Twixes)
- Alert if plugin server down #3465 (mariusandra)
- Earlier IP anonymization #3464 (mariusandra)
- Fix webhooks specifity #3463 (Twixes)
- Don't null IPs for teams who toggled an ancient field #3462 (mariusandra)
- Rename posthog-production to posthog-cloud #3460 (paolodamico)
- Update plugin server to 0.9.29 #3459 (posthog-bot)
- Bar chart by value #3457 (macobo)
- Update plugin server to 0.9.28 #3456 (posthog-bot)
- Send all events to plugin server #3452 (mariusandra)
- Fix setting up test databases on clickhouse #3451 (macobo)
- Update plugin server to 0.9.26 #3450 (posthog-bot)
- Update plugin server to 0.9.25 #3447 (posthog-bot)
- change frequency of cohort calculation #3446 (EDsCODE)
- Update plugin server to 0.9.24 #3445 (posthog-bot)
- Add telemetry for the hooks task #3442 (Twixes)
- Add : in front of password for ioredis #3439 (mariusandra)
- Send 20% of events to plugin server #3437 (mariusandra)
- Update plugin server to 0.9.23 #3436 (posthog-bot)
- Update plugin server to 0.9.22 #3435 (posthog-bot)
- 935 trend legend #3434 (EDsCODE)
- Fix authenticated invite signup #3433 (paolodamico)
- Update plugin server to 0.9.21 #3430 (posthog-bot)
- Fix find_key_with_source (2231571657) #3429 (paolodamico)
- Fix clicking datapoint with multiple entities #3428 (EDsCODE)
- Support POSTHOG_REDIS_* vars in bin/plugin-server #3426 (Twixes)
- Separate stricter team model migration into two #3424 (Twixes)
- Rename DAU -> Active Users #3420 (yakkomajuri)
- Update plugin server to 0.9.20 #3419 (posthog-bot)
- Run tests via pytest #3417 (macobo)
- Fix "Finish setup" button in billing #3416 (Twixes)
- Finish the purge on curly-less if statements #3414 (yakkomajuri)
- Improve reordering funnel steps #3412 (macobo)
- Improve django admin for organizations #3405 (timgl)
- Fix tooltips over property type icons #3404 (Twixes)
- Plugin server 0.9.14 #3403 (mariusandra)
- Plugin server 0.9.12 #3401 (mariusandra)
- Update plugin server to 0.9.11 #3400 (Twixes)
- Update plugin server to 0.9.7 #3398 (Twixes)
- 10% to plugin server #3397 (mariusandra)
- Update plugin server to 0.9.6 #3396 (Twixes)
- Plugin server 0.9.5 #3395 (mariusandra)
- Update plugin server to 0.9.4 #3393 (Twixes)
- Order distinct ids by anonymous #3392 (timgl)
- Fix loading billing plans on self-hosted #3389 (paolodamico)
- Update plugin server to 0.9.3 #3388 (mariusandra)
- Change 10% to 1% ingestion via the plugin server #3385 (mariusandra)
- Str the UUID #3383 (mariusandra)
- Ingest 10% of events via plugin server #3382 (mariusandra)
- Plugin server ingestion again #3381 (mariusandra)
- Add plugin server version to System Status #3380 (Twixes)
- Reuse Postgres connections in Celery #3379 (Twixes)
- Auto log in for e2e tests and review apps #3377 (macobo)
- Plugin server 0.9.1 #3376 (mariusandra)
- Fix breaking down by "all" cohorts when no other cohorts #3374 (macobo)
- Add some missing team_id filters #3372 (macobo)
- Bump version #3371 (yakkomajuri)
- Fix path for demo data generation #3369 (paolodamico)
- Prefilter post_event_to_webhook_ee more #3368 (Twixes)
- Add created by tag to individual dashboards #3367 (yakkomajuri)
- Fix hidden plugin config field #3364 (yakkomajuri)
- Dashboards: allow changing date filters & refresh #3363 (macobo)
- Bump rrweb 0.9.14 #3361 (timgl)
- Support client-side compact number formatting & instrumentation #3360 (paolodamico)
- retention dashboard item refresh bug #3359 (EDsCODE)
- 3293 retention hourly bug #3358 (EDsCODE)
- Fix filtering on elements clickhouse #3354 (timgl)
- Clean-up post-migration of invite signup #3353 (paolodamico)
- Fix unselecting fields in action #3352 (timgl)
- Fix /demo feature flags loading issue #3350 (yakkomajuri)
- Update launch toolbar CTA for new nav #3347 (yakkomajuri)
- Bulk invite the Polish #3346 (Twixes)
- Add Invite Team Member to top bar user dropdown #3343 (Twixes)
- Fix/replace setTimeout in logics #3337 (macobo)
- Fix formula query parsing #3336 (timgl)
- Migrate team invite signup to React - Part II (Front-end) #3300 (paolodamico)
- Remove statsd logspam #3299 (macobo)
- Trend component test #3278 (EDsCODE)
- Stricter Team model #3252 (Twixes)
- Change graphs to ts #3181 (EDsCODE)
- Static cohort on person modal #2952 (EDsCODE)
Ready to find out more?