Generated banner for Feature Flags React
Generated logo for Feature Flags React

Feature Flags React

PostHogOfficialCreated by PostHog

  • Skill
  • Tool integration
  • Data and AI
  • MIT
  • No issues found

From the author

PostHog feature flags for React applications
— the description by PostHog

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

This skill provides guidance and best practices for implementing PostHog feature flags within React applications. It covers installation, flag evaluation patterns, and strategies for managing feature states effectively. The skill emphasizes performance, consistency, and clean code practices, such as using hooks for flag management and avoiding common pitfalls with React's useEffect hook.

What it does

  • Provides patterns for implementing boolean and multivariate feature flags in React.
  • Offers guidance on handling loading states and ensuring flags are available for use.
  • Outlines best practices for flag naming, targeting, and lifecycle management.
  • Explains how to use PostHog hooks for efficient flag evaluation.
  • Provides strategies to prevent UI flicker and improve performance through local evaluation.
  • Integrates with PostHog MCP tools for direct flag management.

When to use it

  • When you need to perform controlled feature rollouts or A/B testing in a React app.
  • When you want to manage feature availability without redeploying code.
  • When you need to ensure consistent user experiences across sessions and devices.
  • When you want to optimize feature flag performance and reduce network latency.

Advantages

  • Enables safe, incremental feature releases.
  • Reduces the risk of breaking changes by allowing instant toggling.
  • Supports data-driven decision-making through experiments.
  • Promotes clean code by encouraging centralized flag logic.

Usage examples

“How do I check a boolean feature flag in my React component?”
The agent will recommend using the useFeatureFlagEnabled() hook to check the flag status and handle loading states appropriately.
“How can I avoid UI flicker when using feature flags?”
The agent will suggest server-side flag evaluation or bootstrapping flags during initialization to ensure they are available immediately upon render.

Install

  1. Download the skill as a ZIP:

    https://autogineer.com/agent-skills/posthog/feature-flags-react/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip feature-flags-react.zip -d .agents/skills

Documentation by PostHog

PostHog feature flags for React

This skill helps you add PostHog feature flags to React applications.

Reference files

  • references/react.md - React feature flags installation - docs

  • references/adding-feature-flag-code.md - Adding feature flag code - docs

  • references/best-practices.md - Feature flag best practices - docs

Consult the documentation for API details and framework-specific patterns.

Key principles

  • Environment variables: Always use environment variables for PostHog keys. Never hardcode them.

  • Minimal changes: Add feature flag code alongside existing logic. Don't replace or restructure existing code.

  • Boolean flags first: Default to boolean flag checks unless the user specifically asks for multivariate flags.

  • Server-side when possible: Prefer server-side flag evaluation to avoid UI flicker.

PostHog MCP tools

Check if a PostHog MCP server is connected. If available, look for tools related to feature flag management (creating, listing, updating, deleting flags). Use these tools to manage flags directly in PostHog rather than requiring the user to do it manually in the dashboard.

Framework guidelines

  • For feature flags, use useFeatureFlagEnabled() or useFeatureFlagPayload() hooks - they handle loading states and external sync automatically

  • Add analytics capture in event handlers where user actions occur, NOT in useEffect reacting to state changes

  • Do NOT use useEffect for data transformation - calculate derived values during render instead

  • Do NOT use useEffect to respond to user events - put that logic in the event handler itself

  • Do NOT use useEffect to chain state updates - calculate all related updates together in the event handler

  • Do NOT use useEffect to notify parent components - call the parent callback alongside setState in the event handler

  • To reset component state when a prop changes, pass the prop as the component's key instead of using useEffect

  • useEffect is ONLY for synchronizing with external systems (non-React widgets, browser APIs, network subscriptions)

Files

references/react.md

React feature flags installation - Docs

  1. 1

    Install the package

    Required

    Install posthog-js and @posthog/react using your package manager:

    PostHog AI

    npm
    npm install posthog-js @posthog/react
    yarn
    yarn add posthog-js @posthog/react
    pnpm
    pnpm add posthog-js @posthog/react
  2. 2

    Add environment variables

    Required

    Add your PostHog project token and host to your environment variables. For Vite-based React apps, use the VITE_PUBLIC_ prefix:

    .env

    PostHog AI

    VITE_PUBLIC_POSTHOG_PROJECT_TOKEN=<ph_project_token>
    VITE_PUBLIC_POSTHOG_HOST=https://us.i.posthog.com
  3. 3

    Initialize PostHog

    Required

    Wrap your app with the PostHogProvider component at the root of your application (such as main.tsx if you're using Vite):

    main.tsx

    PostHog AI

    import { StrictMode } from 'react'
    import { createRoot } from 'react-dom/client'
    import './index.css'
    import App from './App.jsx'
    import { PostHogProvider } from '@posthog/react'
    const options = {
      api_host: import.meta.env.VITE_PUBLIC_POSTHOG_HOST,
      defaults: '2026-01-30',
    } as const
    createRoot(document.getElementById('root')).render(
      <StrictMode>
        <PostHogProvider apiKey={import.meta.env.VITE_PUBLIC_POSTHOG_PROJECT_TOKEN} options={options}>
          <App />
        </PostHogProvider>
      </StrictMode>
    )

    defaults option

    The defaults option automatically configures PostHog with recommended settings for new projects. See SDK defaults for details.

  4. 4

    Accessing PostHog in your code

    Recommended

    Use the usePostHog hook to access the PostHog instance in any component wrapped by PostHogProvider:

    MyComponent.tsx

    PostHog AI

    import { usePostHog } from '@posthog/react'
    function MyComponent() {
        const posthog = usePostHog()
        function handleClick() {
            posthog.capture('button_clicked', { button_name: 'signup' })
        }
        return <button onClick={handleClick}>Sign up</button>
    }

    You can also import posthog directly for non-React code or utility functions:

    utils/analytics.ts

    PostHog AI

    import posthog from 'posthog-js'
    export function trackPurchase(amount: number) {
        posthog.capture('purchase_completed', { amount })
    }
  5. 5

    Send events

    Recommended

    Click around and view a couple pages to generate some events. PostHog automatically captures pageviews, clicks, and other interactions for you.

    If you'd like, you can also manually capture custom events:

    JavaScript

    PostHog AI

    posthog.capture('my_custom_event', { property: 'value' })
  6. 6

    Use feature flags

    Required

    Using hooks

    PostHog provides several hooks to make it easy to use feature flags in your React app. Use useFeatureFlagEnabled for boolean flags:

    import { useFeatureFlagEnabled } from '@posthog/react'
    function App() {
        const showWelcomeMessage = useFeatureFlagEnabled('flag-key')
        const payload = useFeatureFlagPayload('flag-key')
        return (
            <div className="App">
                {showWelcomeMessage ? (
                    <div>
                        <h1>Welcome!</h1>
                        <p>Thanks for trying out our feature flags.</p>
                    </div>
                ) : (
                    <div>
                        <h2>No welcome message</h2>
                        <p>Because the feature flag evaluated to false.</p>
                    </div>
                )}
            </div>
        )
    }
    Multivariate flags

    For multivariate flags, use useFeatureFlagVariantKey:

    import { useFeatureFlagVariantKey } from '@posthog/react'
    function App() {
        const variantKey = useFeatureFlagVariantKey('show-welcome-message')
        let welcomeMessage = ''
        if (variantKey === 'variant-a') {
            welcomeMessage = 'Welcome to the Alpha!'
        } else if (variantKey === 'variant-b') {
            welcomeMessage = 'Welcome to the Beta!'
        }
        return (
            <div className="App">
                {welcomeMessage ? (
                    <div>
                        <h1>{welcomeMessage}</h1>
                        <p>Thanks for trying out our feature flags.</p>
                    </div>
                ) : (
                    <div>
                        <h2>No welcome message</h2>
                        <p>Because the feature flag evaluated to false.</p>
                    </div>
                )}
            </div>
        )
    }
    Flag payloads

    The useFeatureFlagPayload hook does not send a $feature_flag_called event, which is required for experiments. Always use it with useFeatureFlagEnabled or useFeatureFlagVariantKey:

    import { useFeatureFlagPayload, useFeatureFlagEnabled } from '@posthog/react'
    function App() {
        const variant = useFeatureFlagEnabled('show-welcome-message')
        const payload = useFeatureFlagPayload('show-welcome-message')
        return (
            <>
                {variant ? (
                    <div className="welcome-message">
                        <h2>{payload?.welcomeTitle}</h2>
                        <p>{payload?.welcomeMessage}</p>
                    </div>
                ) : (
                    <div>
                        <h2>No custom welcome message</h2>
                        <p>Because the feature flag evaluated to false.</p>
                    </div>
                )}
            </>
        )
    }

    Using PostHogFeature component

    The PostHogFeature component simplifies code by handling feature flag related logic:

    App.tsx

    PostHog AI

    import { PostHogFeature } from '@posthog/react'
    function App() {
        return (
            <PostHogFeature flag='show-welcome-message' match={true}>
                <div>
                    <h1>Hello</h1>
                    <p>Thanks for trying out our feature flags.</p>
                </div>
            </PostHogFeature>
        )
    }

    The match prop can be either true, or the variant key, to match on a specific variant. If you also want to show a default message, you can pass these in the fallback prop.

    If your flag has a payload, you can pass a function to children whose first argument is the payload:

    App.tsx

    PostHog AI

    <PostHogFeature flag='show-welcome-message' match={true}>
        {(payload) => {
            return (
                <div>
                    <h1>{payload.welcomeMessage}</h1>
                    <p>Thanks for trying out our feature flags.</p>
                </div>
            )
        }}
    </PostHogFeature>
  7. 7

    Running experiments

    Optional

    Experiments run on top of our feature flags. Once you've implemented the flag in your code, you run an experiment by creating a new experiment in the PostHog dashboard.

  8. 8

    Next steps

    Recommended

    Now that you're evaluating flags, continue with the resources below to learn what else Feature Flags enables within the PostHog platform.

    ResourceDescription
    Creating a feature flagHow to create a feature flag in PostHog
    Adding feature flag codeHow to check flags in your code for all platforms
    Framework-specific guidesSetup guides for React Native, Next.js, Flutter, and other frameworks
    How to do a phased rolloutGradually roll out features to minimize risk
    More tutorialsOther real-world examples and use cases
Community questions

Ask a question

Was this page useful?

HelpfulCould be better

Requirements and compatibility

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Needs: Needs an MCP server

Security

No issues found by our static scan· No issues found

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Created by
PostHog
Publisher
PostHog (Official)
Source
PostHog/skills · skills/posthog/feature-flags/skills/react · commit a5d30e7
Licence
MIT License (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced
Also distributed in
PostHog/skills

AutoGineer is not affiliated with or endorsed by PostHog or PostHog.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download feature-flags-react.zip