PostHog
The PostHog package provides a managed PostHog adapter for the Flags SDK.
Learn more about Adapters
Deploy the template
Example Usage
import { flag } from "flags/next";
import { postHogAdapter } from '@flags-sdk/posthog'
import identify from "@/lib/identify";
export const myFlag = flag({
key: "posthog-is-feature-enabled",
adapter: postHogAdapter.isFeatureEnabled(),
identify,
});
export const myFlagVariant = flag({
key: "posthog-feature-flag-value",
adapter: postHogAdapter.featureFlagValue(),
identify,
});
export const myFlagPayload = flag({
key: "posthog-feature-flag-payload",
adapter: postHogAdapter.featureFlagPayload((v) => v),
defaultValue: {},
identify,
});Getting Started
Install the required dependencies:
pnpm i @flags-sdk/posthogSet up required environment variables:
# https://posthog.com/docs/libraries/next-js
# Or Settings > Project > Project API Key
NEXT_PUBLIC_POSTHOG_KEY=key
NEXT_PUBLIC_POSTHOG_HOST=https://us.i.posthog.comImport the PostHog adapter for Flags SDK, which uses the enviroment variables above as defaults:
import { postHogAdapter } from '@flags-sdk/posthog'If needed, you can instead initialize the adapter with your own options by importing createPostHogAdapter
import { createPostHogAdapter } from '@flags-sdk/posthog'
const postHogAdapter = createPostHogAdapter({
postHogKey: process.env.NEXT_PUBLIC_POSTHOG_KEY,
postHogOptions: {
host: process.env.NEXT_PUBLIC_POSTHOG_HOST,
// ...
},
})You can define flags using the PostHog adapter's methods, which are:
isFeatureEnabled: Returns a boolean indicating whether a feature flag is enabledfeatureFlagValue: Returns a boolean, or astringfor multivariate flagsfeatureFlagPayload: Maps a PostHog flag's payload to a structured flag value
import { flag } from 'flags/next'
import { postHogAdapter } from '@flags-sdk/posthog'
import { identify } from '@/lib/identify'
export const exampleFlag = flag({
key: 'example-flag',
defaultValue: false,
adapter: postHogAdapter.isFeatureEnabled(),
identify,
})Then use it in your framework:
import { exampleFlag } from "@/flags";
export default async function Page() {
const exampleValue = await exampleFlag();
return <div>Example Flag: {String(exampleValue)}</div>;
}Flags Explorer
How to inform the Flags Explorer about flags
You can view and override these flags using the Flags Explorer
For getProviderData, you will also need a personal API key and your project ID.
# Settings > User > Personal API keys
POSTHOG_PERSONAL_API_KEY=key
# Settings > Project > Project ID
POSTHOG_PROJECT_ID=projectIdimport { createFlagsDiscoveryEndpoint } from 'flags/next'
import { getProviderData as getPostHogProviderData } from '@flags-sdk/posthog'
import * as flags from '../../../../flags'
export const GET = createFlagsDiscoveryEndpoint(() => getPostHogProviderData({
personalApiKey: process.env.POSTHOG_PERSONAL_API_KEY,
projectId: process.env.NEXT_PUBLIC_POSTHOG_PROJECT_ID,
}))Learn more about the Flags Explorer