BirrJS

Billing framework
for Ethiopian apps

Define plans and features in code. BirrJS handles subscriptions, webhooks, and entitlements — with usage tracking, all inside your codebase.

$ npx @birrjs/cli init
Read Docs
import { feature, plan } from "birrjs"

const messages = feature({ id: "msgs", type: "metered" })
const proAccess = feature({ id: "pros", type: "boolean" })

export const free = plan({
  id: "free",
  default: true,
  includes: [
    messages({ limit: 20, reset: "month" }),
  ],
})

export const pro = plan({
  id: "pro",
  price: { amount: 499, interval: "month" },
  includes: [
    messages({ limit: 100, reset: "month" }),
    proAccess(),
  ],
})

Features

Plugins, webhooks, and type-safe entitlements. Everything you need to bill Ethiopian users.

Plugin System

Extend BirrJS with plugins. Integrate SMS providers, email services, or custom logic — all through a simple plugin interface.

Type-Safe

Full TypeScript inference from your plan schema. Plan IDs, feature keys — all typed.

Entitlements

Feature flags based on subscription status. Check entitlements instantly with check().

Webhooks

Verified, deduplicated webhook handling. Automatically sync to your database.

Your Database

All billing state in your Postgres. Low latency, joinable with your app tables.

Provider Agnostic

Built-in support for Chapa, Arifpay, Santimpay — and any provider via the provider interface.

Ready to add subscriptions?

Define your plans, connect Chapa, and ship billing in minutes.

Get Started
·© 2026 BirrJS