PostHog is an open-source analytics platform designed for product analytics, including features like event tracking, session recording, feature flagging, and A/B testing. It is built with a focus on privacy and security, allowing users to self-host their instances. The project exhibits a healthy state with ongoing development efforts aimed at enhancing functionality, improving user experience, and maintaining system integrity. Its trajectory suggests a commitment to addressing user needs through technological advancements and optimizations.
Notable elements of the project include:
Recent activities highlight a dynamic development team working on various aspects of the platform:
Team members like Bianca Yang, Brett Hoerner, and Eric Duong have contributed significantly across different areas, indicating a collaborative effort towards platform enhancement.
Notable issues and risks identified include:
posthog-js
) could introduce risks related to versioning and tracking.database.py
could lead to potential bugs if not well-documented or understood.Work in progress or notable todos include:
PostHog demonstrates a strong commitment to advancing its analytics platform through continuous improvements in functionality, user experience, and system integrity. The project's active development cycle, coupled with a focus on quality and reliability, positions it well for future growth. However, attention to managing complexity, especially in backend configurations, and ensuring robust dependency management will be crucial for maintaining its upward trajectory.
Developer | Avatar | Branches | PRs | Commits | Files | Changes |
---|---|---|---|---|---|---|
Julian Bez | ![]() |
2 | 12/6/0 | 9 | 103 | 10733 |
vs. last report | +2 | +12/+6/-1 | +9 | +103 | +10733 | |
David Newell | ![]() |
1 | 2/3/0 | 3 | 8 | 4072 |
vs. last report | = | -7/-4/-1 | -5 | -276 | +2766 | |
Michael Matloka | ![]() |
1 | 7/6/1 | 6 | 39 | 777 |
vs. last report | = | -4/-2/= | -2 | -48 | +191 | |
Tom Owers | ![]() |
1 | 3/5/0 | 5 | 24 | 765 |
vs. last report | = | =/+3/= | +3 | +18 | +728 | |
Tiina Turban | ![]() |
1 | 7/6/0 | 6 | 39 | 630 |
vs. last report | = | +4/+5/= | +3 | +26 | +279 | |
Robbie | ![]() |
2 | 6/3/0 | 6 | 34 | 608 |
vs. last report | = | +2/-1/= | -1 | +17 | -245 | |
Eric Duong | ![]() |
1 | 10/8/0 | 8 | 11 | 540 |
vs. last report | = | +2/-1/= | -1 | -31 | -543 | |
timgl | ![]() |
1 | 3/3/0 | 3 | 40 | 462 |
vs. last report | = | +1/+3/= | +2 | +38 | +459 | |
ted kaemming | ![]() |
1 | 3/2/1 | 2 | 18 | 417 |
vs. last report | = | =/-2/+1 | -3 | +2 | +115 | |
Ben White | ![]() |
1 | 1/1/0 | 4 | 18 | 371 |
vs. last report | = | -3/=/= | +3 | +15 | +283 | |
Tomás Farías Santana | ![]() |
1 | 4/2/1 | 2 | 7 | 359 |
vs. last report | = | +4/+1/+1 | +1 | -15 | -549 | |
Nikita Vorobev | ![]() |
1 | 2/1/0 | 2 | 10 | 291 |
vs. last report | = | -1/=/= | +1 | +9 | +288 | |
Brett Hoerner | ![]() |
2 | 4/3/1 | 4 | 13 | 263 |
vs. last report | +1 | -1/=/-1 | +1 | +5 | +148 | |
Juraj Majerik | ![]() |
1 | 2/0/0 | 1 | 8 | 191 |
vs. last report | = | -3/-3/= | -2 | -6 | -524 | |
Paul D'Ambra | ![]() |
1 | 4/2/0 | 3 | 11 | 141 |
vs. last report | = | -9/-8/= | -9 | -31 | -2799 | |
Zach Waterfield | ![]() |
1 | 1/0/0 | 1 | 5 | 129 |
vs. last report | -1 | -3/-7/= | -8 | -22 | -224 | |
PostHog Bot | ![]() |
1 | 12/10/1 | 10 | 4 | 123 |
vs. last report | = | +10/+8/+1 | +8 | +2 | +103 | |
Cory Watilo | ![]() |
1 | 0/1/0 | 1 | 16 | 114 |
Marcus Hof | ![]() |
1 | 5/3/0 | 3 | 5 | 102 |
vs. last report | = | +3/+2/= | +2 | +2 | +68 | |
Raquel Smith | ![]() |
1 | 2/2/0 | 2 | 5 | 83 |
vs. last report | = | -1/=/= | = | -4 | -123 | |
Thomas Obermüller | ![]() |
1 | 3/3/0 | 3 | 8 | 73 |
vs. last report | = | -1/=/= | -1 | -116 | -2471 | |
Steven Shults | ![]() |
1 | 2/0/0 | 5 | 1 | 71 |
Neil Kakkar | ![]() |
1 | 2/2/1 | 2 | 4 | 71 |
vs. last report | = | -2/-1/+1 | -1 | -2 | -556 | |
Bianca Yang | ![]() |
1 | 1/1/0 | 1 | 9 | 57 |
vs. last report | = | =/=/= | = | +6 | -261 | |
Frank Hamand | ![]() |
1 | 7/7/0 | 7 | 2 | 56 |
Xavier Vello | ![]() |
1 | 5/3/0 | 3 | 2 | 37 |
vs. last report | = | +2/-1/-1 | -1 | -17 | -707 | |
dependabot[bot] | ![]() |
1 | 4/0/0 | 1 | 2 | 22 |
vs. last report | +1 | +2/=/= | +1 | +2 | +22 | |
Joe Martin | ![]() |
1 | 2/1/0 | 1 | 7 | 15 |
James Greenhill | ![]() |
1 | 1/2/0 | 2 | 3 | 10 |
vs. last report | = | =/+1/= | = | -1 | -346 | |
Jacob Gillespie | ![]() |
1 | 1/1/0 | 1 | 2 | 8 |
Steven Miller (sjmiller609) | 0 | 1/0/0 | 0 | 0 | 0 |
PRs: created by that dev and opened/merged/closed-unmerged during the period
Since the last report 9 days ago, the PostHog development team has been actively engaged in enhancing the platform's features and addressing various issues. The activities have spanned across multiple aspects of the project including user interface improvements, backend optimizations, and updates to the documentation and testing frameworks.
Several branches have been active, with contributions focusing on bug fixes, feature enhancements, and testing improvements. Notable branches include:
bug_report_template-update
by Steven Shults (slshults) aimed at updating bug report templates.add-session-filters
by Robbie (robbie-c) focused on adding session filters to web analytics queries.billing-q2-auto-subscribe-new-users
by Zach Waterfield (zlwaterfield) which dealt with auto-subscribing new users to all products.The PostHog development team continues to demonstrate a strong commitment to enhancing the platform's functionality and user experience. The recent activities indicate a balanced focus on both front-end improvements and back-end stability, ensuring that PostHog remains a robust solution for product analytics. The ongoing efforts in optimizing data handling and improving integration capabilities are particularly noteworthy, reflecting the team's proactive approach to addressing user needs and technological advancements.
Developer | Avatar | Branches | PRs | Commits | Files | Changes |
---|---|---|---|---|---|---|
Julian Bez | ![]() |
2 | 12/6/0 | 9 | 103 | 10733 |
vs. last report | +2 | +12/+6/-1 | +9 | +103 | +10733 | |
David Newell | ![]() |
1 | 2/3/0 | 3 | 8 | 4072 |
vs. last report | = | -7/-4/-1 | -5 | -276 | +2766 | |
Michael Matloka | ![]() |
1 | 7/6/1 | 6 | 39 | 777 |
vs. last report | = | -4/-2/= | -2 | -48 | +191 | |
Tom Owers | ![]() |
1 | 3/5/0 | 5 | 24 | 765 |
vs. last report | = | =/+3/= | +3 | +18 | +728 | |
Tiina Turban | ![]() |
1 | 7/6/0 | 6 | 39 | 630 |
vs. last report | = | +4/+5/= | +3 | +26 | +279 | |
Robbie | ![]() |
2 | 6/3/0 | 6 | 34 | 608 |
vs. last report | = | +2/-1/= | -1 | +17 | -245 | |
Eric Duong | ![]() |
1 | 10/8/0 | 8 | 11 | 540 |
vs. last report | = | +2/-1/= | -1 | -31 | -543 | |
timgl | ![]() |
1 | 3/3/0 | 3 | 40 | 462 |
vs. last report | = | +1/+3/= | +2 | +38 | +459 | |
ted kaemming | ![]() |
1 | 3/2/1 | 2 | 18 | 417 |
vs. last report | = | =/-2/+1 | -3 | +2 | +115 | |
Ben White | ![]() |
1 | 1/1/0 | 4 | 18 | 371 |
vs. last report | = | -3/=/= | +3 | +15 | +283 | |
Tomás Farías Santana | ![]() |
1 | 4/2/1 | 2 | 7 | 359 |
vs. last report | = | +4/+1/+1 | +1 | -15 | -549 | |
Nikita Vorobev | ![]() |
1 | 2/1/0 | 2 | 10 | 291 |
vs. last report | = | -1/=/= | +1 | +9 | +288 | |
Brett Hoerner | ![]() |
2 | 4/3/1 | 4 | 13 | 263 |
vs. last report | +1 | -1/=/-1 | +1 | +5 | +148 | |
Juraj Majerik | ![]() |
1 | 2/0/0 | 1 | 8 | 191 |
vs. last report | = | -3/-3/= | -2 | -6 | -524 | |
Paul D'Ambra | ![]() |
1 | 4/2/0 | 3 | 11 | 141 |
vs. last report | = | -9/-8/= | -9 | -31 | -2799 | |
Zach Waterfield | ![]() |
1 | 1/0/0 | 1 | 5 | 129 |
vs. last report | -1 | -3/-7/= | -8 | -22 | -224 | |
PostHog Bot | ![]() |
1 | 12/10/1 | 10 | 4 | 123 |
vs. last report | = | +10/+8/+1 | +8 | +2 | +103 | |
Cory Watilo | ![]() |
1 | 0/1/0 | 1 | 16 | 114 |
Marcus Hof | ![]() |
1 | 5/3/0 | 3 | 5 | 102 |
vs. last report | = | +3/+2/= | +2 | +2 | +68 | |
Raquel Smith | ![]() |
1 | 2/2/0 | 2 | 5 | 83 |
vs. last report | = | -1/=/= | = | -4 | -123 | |
Thomas Obermüller | ![]() |
1 | 3/3/0 | 3 | 8 | 73 |
vs. last report | = | -1/=/= | -1 | -116 | -2471 | |
Steven Shults | ![]() |
1 | 2/0/0 | 5 | 1 | 71 |
Neil Kakkar | ![]() |
1 | 2/2/1 | 2 | 4 | 71 |
vs. last report | = | -2/-1/+1 | -1 | -2 | -556 | |
Bianca Yang | ![]() |
1 | 1/1/0 | 1 | 9 | 57 |
vs. last report | = | =/=/= | = | +6 | -261 | |
Frank Hamand | ![]() |
1 | 7/7/0 | 7 | 2 | 56 |
Xavier Vello | ![]() |
1 | 5/3/0 | 3 | 2 | 37 |
vs. last report | = | +2/-1/-1 | -1 | -17 | -707 | |
dependabot[bot] | ![]() |
1 | 4/0/0 | 1 | 2 | 22 |
vs. last report | +1 | +2/=/= | +1 | +2 | +22 | |
Joe Martin | ![]() |
1 | 2/1/0 | 1 | 7 | 15 |
James Greenhill | ![]() |
1 | 1/2/0 | 2 | 3 | 10 |
vs. last report | = | =/+1/= | = | -1 | -346 | |
Jacob Gillespie | ![]() |
1 | 1/1/0 | 1 | 2 | 8 |
Steven Miller (sjmiller609) | 0 | 1/0/0 | 0 | 0 | 0 |
PRs: created by that dev and opened/merged/closed-unmerged during the period
Since the last report 9 days ago, there has been a significant amount of activity in the repository. This includes both the opening and closing of numerous issues, as well as ongoing discussions and updates on existing issues.
Issue #21517: Clean up the pay gate mini component
Issue #21515: Allow other session properties beyond $session_duration
Issue #21514: Fix UI glitch with HogQL expression as aggregation
Issue #21513: Fix insights export size
Issue #21512: Session filters 1
Issue #21518: Delay sending usage reports until 2am
Issue #21516: Update posthog-js to 1.121.2
Issue #21510: Wait for DBs before starting Temporal
The recent activity in the PostHog repository indicates a healthy and active development cycle focused on both expanding features and maintaining the existing system's integrity and usability. The project's responsiveness to issues, both in terms of introducing enhancements and resolving bugs, suggests a strong commitment to user satisfaction and continuous improvement.
Since the last analysis 9 days ago, there has been a significant amount of activity in the repository. Several pull requests (PRs) have been opened, closed, or merged. The focus of these PRs ranges from dependency updates and bug fixes to new features and performance improvements.
PR #21520: This PR aimed to reintroduce support for distinct_id
-based person overrides in HogQL but was closed without being merged. It's crucial to understand why this change was not incorporated, as it could impact future developments related to HogQL and person ID handling.
PR #21517: Aimed at cleaning up a component for better readability and maintainability. While it was closed without merging, the reasons behind this decision are not clear from the provided data. It might be worth investigating if the changes were unnecessary or if they were integrated through another PR.
PR #21523: Introduced a new feature for live activity tracking in the toolbar. This feature enhances real-time user interaction tracking, which could be significant for user experience improvements.
PR #21487: Focused on improving heatmap ingestion by creating a separate table for heatmap events. This change is likely to enhance performance and scalability for features that rely heavily on heatmap data.
These PRs address important performance improvements and bug fixes that could significantly impact system stability and efficiency.
The recent activity indicates a healthy development environment with ongoing efforts to enhance functionality, fix bugs, and improve performance. However, some closed PRs without merging could indicate missed opportunities or unresolved challenges that may need revisiting. The open PRs suggest that there are still several enhancements in the pipeline that require completion or further review.
This pull request introduces a new feature called "toolbar-live-activity" which enhances the toolbar functionality in the PostHog analytics platform. The feature appears to allow users to view live events and debug them directly from the toolbar, providing immediate insights into event capture and processing.
EventDebugMenu
and eventDebugMenuLogic
) that handle the display and logic of live event debugging.Toolbar.tsx
, Toolbar.scss
) to accommodate the new feature, including a new button for toggling the event debugger view.posthog-js
dependency to a local version, which suggests that this PR depends on changes in the posthog-js
library that are not yet published.Clarity and Maintainability:
EventDebugMenu.tsx
, eventDebugMenuLogic.ts
), which is good for maintainability.Functionality:
Scalability:
Security and Performance Considerations:
Dependency Management:
posthog-js
. This is potentially risky as it relies on local changes that might not be tracked or versioned properly in production environments. It would be advisable to merge those changes into the main posthog-js
repository or use a versioned package.The pull request introduces a useful feature that enhances the debugging capabilities directly from the PostHog UI. The implementation follows good coding practices with some areas for improvement around dependency management and performance evaluation. With adequate testing and final adjustments, this feature could significantly improve user experience for PostHog users engaging in real-time event monitoring and debugging.
The pull request in question is aimed at enhancing the HogQL feature within the PostHog platform, specifically focusing on the handling of distinct_id
-based person overrides. This feature is crucial as it impacts how data is queried and managed, ensuring that user interactions and functionalities are accurately captured and processed.
HogQL Query Modifier: A new modifier has been introduced, controlled by a feature flag, which allows enabling the reading from a new table (person_distinct_id_overrides
) on a per-team or organization basis. This change aims to make the queries more efficient by using this new table that directly contains the necessary data for overrides.
Support Across Different Modes: The PR ensures that both legacy and HogQL queries are supported across different modes as outlined in the table below:
Mode | Legacy | HogQL |
---|---|---|
DISABLED |
Yes | Yes |
PERSON_ID_NO_OVERRIDE_PROPERTIES_ON_EVENTS |
Yes | Yes |
PERSON_ID_OVERRIDE_PROPERTIES_ON_EVENTS |
person_overrides ("v2") only |
Yes |
PERSON_ID_OVERRIDE_PROPERTIES_JOINED |
No | Yes |
/debug
, and automated tests have been added to ensure the functionality works as expected.Clarity and Maintainability: The code changes are well-documented with clear comments explaining the purpose of major changes. The use of descriptive variable names and structured code blocks enhances readability.
Error Handling: There is no explicit error handling seen in the diffs provided for scenarios where feature flags might not work as expected or database reads might fail. It's crucial to handle such cases to avoid disruptions in production.
Efficiency: The decision to use a new table for overrides seems to be driven by efficiency, reducing the complexity of queries by avoiding unnecessary joins. This should theoretically improve performance, though benchmark results or metrics would be beneficial for validation.
Testing: The addition of both manual checks and automated tests is positive, showing a commitment to quality and stability. However, the scope of automated tests could be expanded to cover edge cases more comprehensively.
Security and Safety: The changes do not seem to introduce any new security concerns directly. However, careful management of feature flags and access controls around the new modifiers is essential to prevent unauthorized use.
Documentation: While inline comments are helpful, updating external documentation to reflect these changes and guide users on when to use these new modifiers would enhance usability and adoption.
Overall, the pull request introduces significant improvements to how person overrides are handled in HogQL queries, with a focus on efficiency and flexibility. With some enhancements around error handling, testing, and documentation, this can be a valuable update to the PostHog platform.
PostHog is an open-source analytics platform that provides a suite of tools for product analytics, including event tracking, session recording, feature flagging, and A/B testing. The platform is designed to be self-hosted, ensuring data privacy and security. The source code is primarily written in Python and TypeScript, reflecting its backend and frontend components respectively.
DefinitionPopoverContents.tsx
Purpose: This TypeScript file is part of the frontend and manages the content displayed in a popover when users interact with definitions (like events or properties) in the UI.
Structure:
VerifiedDefinitionCheckbox
, DefinitionView
, and DefinitionEdit
which are used to render different parts of the popover based on the context (view or edit mode).DefinitionPopover
.Quality:
database.py
Purpose: This Python file is part of the backend, specifically within the GraphQL API layer (hogql
), managing database schema definitions and interactions.
Structure:
Database
class that encapsulates various tables and their configurations.Quality:
test_session_recording_list_from_session_replay.py
Purpose: This Python file contains tests for session recording queries, ensuring that session replay data is correctly retrieved and filtered.
Structure:
Quality:
The examined files from PostHog's repository demonstrate a high standard of code quality with good practices in modularity, readability, and maintainability. However, there are areas where complexity could be reduced, particularly in dynamic schema configurations in the backend. Overall, PostHog's source code reflects its robustness and scalability as an analytics platform.