Tanstack Start

Getting started

Install and wire the usage plugin

Install

bun add @eggermarc/better-auth-usage

Server

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.

On this page