Files
Dominik Ferber aec3c03430 @flags-sdk/posthog: upgrade posthog-node; explicit evaluation modes (#436)
* @flags-sdk/posthog: upgrade posthog-node

* @flags-sdk/posthog: make local vs remote evaluation explicit

The default adapter passed POSTHOG_PERSONAL_API_KEY into the runtime
posthog-node client, which enabled local evaluation and started a
feature-flag poller in every warm process. On serverless this produced
large, traffic-independent PostHog feature flag request volume.

Local evaluation is now opt-in via POSTHOG_SECRET_KEY; without it the
adapter evaluates remotely. POSTHOG_PERSONAL_API_KEY is used only by
getProviderData (Flags Explorer) and no longer affects runtime
evaluation. Drops the forced 10s poll interval in favor of the v5
default. Updates docs, README, and tests.

* remove unused @vercel/edge-config dependency

* add remote vs local tradeoffs

* rm edge config tag

* modernize

* rm trimKey

* lockfile

* update

* fixes

* reword changeset

* merge changesets

* reword changelog
2026-07-29 14:54:40 +00:00

2.2 KiB

Flags SDK — PostHog Adapter

The PostHog adapter for Flags SDK supports dynamic server side feature flags powered by PostHog.

Setup

Install the adapter

pnpm i @flags-sdk/posthog

Example Usage

import { flag } from "flags/next";
import { postHogAdapter } from "@flags-sdk/posthog";

export const marketingGate = flag<boolean>({
  // The key in PostHog
  key: "my_posthog_flag_key_here",
  adapter: postHogAdapter,
});

Environment variables

Always required, read by postHogAdapter:

# Regional API host, determines where your data lives
POSTHOG_HOST=https://us.i.posthog.com # or https://eu.i.posthog.com
# Settings > Project > Project API Key
POSTHOG_PROJECT_API_KEY=phc_...

Optional, opts postHogAdapter into local evaluation:

# Settings > Project > Feature flags secret key
POSTHOG_SECRET_KEY=phs_...

For the Flags Explorer, read by getProviderData only:

# Settings > User > Personal API keys
POSTHOG_PERSONAL_API_KEY=phx_...
# Settings > Project > Project ID
POSTHOG_PROJECT_ID=521742

Evaluation modes

  • Remote (default): with only POSTHOG_PROJECT_API_KEY and POSTHOG_HOST set, each evaluation calls PostHog. No background polling; request volume scales with traffic. Recommended for serverless.
  • Local: set POSTHOG_SECRET_KEY (phs_...) to opt in. posthog-node polls flag definitions (~30s) and evaluates in-process for lower latency. Polling runs per warm server process and counts against your PostHog feature flag request quota regardless of user traffic.

POSTHOG_PERSONAL_API_KEY is used only by the Flags Explorer (getProviderData) and does not enable local evaluation.

Runtimes

Runtime Supported
Node ✅
Edge Runtime ❌

Note: posthog-node does not support the Edge Runtime.

To use with Routing Middleware and precompute, read more: Middleware now supports Node.js

Documentation

View more PostHog documentation at posthog.com.