A headless, pure TypeScript permission engine. Define flags (boolean, string, variant) with rollout, targeting, and schedule — without coupling to a specific framework or database. Same philosophy as better-auth — but for flags.
bun add @better-flag/core @better-flag/adapter-memory @better-flag/handler-honoimport { betterFlags } from "@better-flag/core";
import { createMemoryAdapter } from "@better-flag/adapter-memory";
import { createHonoHandler } from "@better-flag/handler-hono";
const adapter = createMemoryAdapter();
const engine = betterFlags({ adapter });
// Mount HTTP API
const handler = createHonoHandler(engine, { getContext: () => ({}) });
app.route("/flags", handler);| Package | Description |
|---|---|
@better-flag/core |
Engine, flags, evaluate, routes |
@better-flag/types |
Flag types, context, evaluation result |
@better-flag/errors |
FlagNotFoundError, EvaluationError |
@better-flag/handler-hono |
Hono bridge |
@better-flag/handler-express |
Express bridge |
@better-flag/handler-fastify |
Fastify bridge |
@better-flag/handler-next |
Next.js bridge |
@better-flag/adapter-memory |
In-memory adapter for dev/E2E |
@better-flag/adapter-file |
File-based adapter |
@better-flag/adapter-redis |
Redis adapter |
@better-flag/adapter-drizzle |
Drizzle adapter |
@better-flag/client |
HTTP client for flags API |
@better-flag/cli |
CLI for migrations and config |
bun install
bun run test
bun run lint
bun run typecheckMIT — see LICENSE
See CONTRIBUTING.md