# PostHog changelog

What changed in each PostHog simulator release, newest first.

What changed in each PostHog simulator release, newest first.

## v0.0.1 — 2026-11-11

1. **Capture refuses a key PostHog would refuse.** `POST /i/v0/e/` now answers 401 `API key is not valid: <reason>` to a personal API key (`phx_`), a key longer than 64 bytes or one with a non-ASCII character, as PostHog does, where the simulator used to accept it with 200. A well-formed key for an unknown project is still accepted.

2. **A local PostHog for the code that sends analytics events.** The first release of the PostHog simulator serves event capture at `POST /i/v0/e/`: one JSON event per request, with your project API key in the body as `api_key`. A request missing the key, `distinct_id` or `event` is refused with PostHog's status and plain-text reason. The simulator stores one event per `uuid`, and `GET /_rystic/inspect` reads the stored events back. Nothing reaches PostHog.

3. **Five scenarios to boot straight into.** `posthog_first_event` (one server-side signup), `posthog_signup_funnel` (three visitors on a signup funnel), `posthog_identify_handoff` (one visitor from an anonymous id to an identified user), `posthog_flag_experiment` (a two-variant checkout experiment) and `posthog_billing_backfill` (five weeks of billing events for two customers). `--scenario` boots one, and `POST /_rystic/scenario` loads one without a restart.

4. **Tested against live PostHog Cloud.** The newest full measurement, of 2026-11-11, matched 9 of the 9 tests that compare the simulator with PostHog (100%), and none of them was left without a verdict. The simulator's page lists, under Limitations, the differences this release ships with, among them that PostHog's own libraries send to routes this release does not serve.

---

Source: https://www.rystic.ai/docs/simulators/posthog/changelog · Markdown: https://www.rystic.ai/docs/simulators/posthog/changelog.md
