# Feature flags

> Feature flags with variants, targeting rules over tenant, user, plan, role and custom contexts such as brand, overrides and a percentage rollout bucketed by SHA-256. flag_enabled() goes in policies; createFeatureFlagsProvider() evaluates the same way for OpenFeature and the Flags SDK.

- Category: Growth & engagement
- Module: `feature-flags`
- Modes: `managed`, `custom`
- Docs: https://bettersupabase.com/docs/blocks/feature-flags
- Page: https://bettersupabase.com/blocks/feature-flags

## Install

```bash
npx better-supabase add feature-flags
```

The command also installs `updated-at`, `memberships`.

## Configure

Add the block to `better-supabase.config.ts`:

```ts
import { defineConfig } from "better-supabase/config";

export default defineConfig({
  blocks: {
    // Required by feature-flags; add installs them too.
    "updated-at": {},
    memberships: {},
    // Modes: "managed", "custom". The default is "managed".
    "feature-flags": { mode: "managed" },
  },
});
```

## Client

The block has no React entry yet. Its server-side TypeScript is in `better-supabase/blocks/feature-flags`.

## Events

- `flag.deleted`
- `flag.override_set`
- `flag.saved`

## Related blocks

Requires: [memberships](https://bettersupabase.com/blocks/memberships.md)

Works with: [permissions](https://bettersupabase.com/blocks/permissions.md), [entitlements](https://bettersupabase.com/blocks/entitlements.md)

## Recipes

- [Feature flags](https://bettersupabase.com/recipes/feature-flag-toggles.md): Which feature flags are on for the active organization, read-only.
