Getting started
Install and wire the usage plugin
Install
bun add @eggermarc/better-auth-usageServer
import { betterAuth } from "better-auth"
import { usage } from "@eggermarc/better-auth-usage"
import { durableObjectDriver } from "@eggermarc/better-auth-usage/cloudflare"
export const auth = betterAuth({
plugins: [
usage({
features: {
"api-calls": { maxLimit: 1000, reset: "monthly", resetValue: 0 },
"credits": { reset: "never", resetValue: 0 },
},
driver: durableObjectDriver({ namespace: env.USAGE_DO }),
}),
],
})Drivers also ship for Redis (redisDriver), Upstash (upstashDriver),
Postgres (postgresDriver), and in-memory (memoryDriver) — import from
@eggermarc/better-auth-usage/drivers.
Client (React)
import { createUsageProvider } from "@eggermarc/better-auth-usage/react"
const { UsageProvider, useFeature } = createUsageProvider<typeof auth>()
function ApiCalls() {
const { usage, consume } = useFeature("api-calls")
return <button onClick={() => consume(1)}>{usage?.current ?? 0} used</button>
}The reference is the tenancy key — a user id, an org id, or a shared "room". Everyone on the same reference shares its counters + realtime.