> For the complete documentation index, see [llms.txt](https://engine.sygnal.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://engine.sygnal.com/special/posthog.md).

# PostHog

## Installing

### Install the package;

```
npm install posthog-js
```

### Initalize site-wide in your site.ts

At the top under imports, add;

```typescript
import posthog from 'posthog-js'
```

In the setup() method, use the posthog.init code given to you;

e.g.;

{% code overflow="wrap" %}

```typescript
posthog.init('phc_YOUR_KEY', { api_host: 'https://us.i.posthog.com', person_profiles: 'identified_only' })
```

{% endcode %}

Note; you can choose to initialize only on production sites, e.g.;&#x20;

{% code overflow="wrap" %}

```typescript
// Init Posthog
// Only on non-staging pages 
if (!window.location.host.endsWith('.webflow.io')) {
  posthog.init('phc_YOUR_KEY', { api_host: 'https://us.i.posthog.com', person_profiles: 'identified_only' })
}

```

{% endcode %}

## Usage Notes

In the exec() method, you'll perform your actual tests.

### Feature Flags

Good for;

* Switching on or off specific features
* Doing a limited deployment of a feature to a smaller audience

```typescript
if (posthog.isFeatureEnabled('flag-key') ) {
    // Do something differently for this user

    // Optional: fetch the payload
    const matchedFlagPayload = posthog.getFeatureFlagPayload('flag-key')
}
```

### Experiments (A/B tests)

* Good for handling variants&#x20;

{% code overflow="wrap" %}

```typescript
if (posthog.getFeatureFlag('flag-key')  == 'variant-key') { // replace 'variant-key' with the key of your variant
    // Do something differently for this user
    
    // Optional: fetch the payload
    const matchedFlagPayload = posthog.getFeatureFlagPayload('flag-key')
}
```

{% endcode %}
