OpenChart
Claude·Codex와 함께하는 무료 데스크톱 차트 도구. 알림 설정·차트 움직임 분석·데이터 제공자 선택
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Open-source billing for SaaS. Subscriptions, metering, invoices, and wallets — without the enterprise price tag.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Most billing platforms assume Stripe-only, USD-only, and card-only. PimaBill is built for businesses that operate across multiple currencies, countries, and payment providers — especially in Africa where mobile money, bank transfers, and regional gateways are the norm.
| Category | What you get |
|---|---|
| Subscriptions | Create plans with recurring billing (monthly, yearly, weekly), upgrade/downgrade with proration |
| Usage Metering | Ingest events via API, aggregate with billable metrics, charge based on consumption |
| Invoicing | Auto-generated invoices with PDF export, email delivery, hosted checkout pages |
| Prepaid Wallets | Customer credit wallets with purchased/granted credits, auto-deduction on invoices |
| Coupons & Add-ons | Percentage or fixed-amount discounts, one-time add-on charges |
| Credit Notes | Issue refunds, void invoices, pro-rated credits on cancellation |
| Analytics | Revenue, subscriptions, customers, and payment analytics dashboards |
| Customer Portal | Self-service portal for customers to view invoices and manage subscriptions |
| Webhooks | Real-time event notifications for invoice, payment, and subscription lifecycle |
| SDKs | Auto-generated TypeScript and Python SDKs via Fern |
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Landing │ │ Dashboard │ │ Docs │ │ Portal │
│ Next.js │ │ Next.js │ │ Nuxt/Docus │ │ Next.js │
│ :4001 │ │ :4002 │ │ :4003 │ │ :4002/… │
└──────┬──────┘ └──────┬──────┘ └─────────────┘ └──────┬──────┘
│ │ │
└────────────────┼──────────────────────────────────┘
│
┌──────▼──────┐
│ NestJS │
│ API │
│ :4000 │
└──┬───┬───┬──┘
│ │ │
┌─────┘ │ └─────┐
▼ ▼ ▼
PostgreSQL Redis BullMQ
(Central + (Cache) (Workers)
Tenant DBs)
git clone https://github.com/pimabill/billing.git
cd billing
cp .env.example .env
# Edit .env — set JWT_SECRET, JWT_REFRESH_SECRET, ENCRYPTION_KEY
docker compose up -d --build
| Service | URL |
|---|---|
| API | http://localhost:4000 |
| Landing | http://localhost:4001 |
| Dashboard | http://localhost:4002 |
| Docs | http://localhost:4003 |
# On your server:
curl -O https://raw.githubusercontent.com/pimabill/billing/main/docker-compose.prod.yml
curl -O https://raw.githubusercontent.com/pimabill/billing/main/.env.example
cp .env.example .env
# Edit .env with real secrets and domain URLs
docker compose -f docker-compose.prod.yml up -d
See nginx.conf.example for a reverse proxy setup with custom domains.
# Start infrastructure
docker compose up -d central-db internal-tenant-db redis --wait
# Backend
cd backend
npm ci
npx prisma generate --schema=./prisma/schema-central.prisma
npx prisma generate --schema=./prisma/schema-tenant.prisma
npm run migrate:central # tenant databases are migrated when created
npm run start:dev
# Dashboard (separate terminal)
cd dashboard
npm ci
npm run dev
backend/ NestJS API — TypeScript, Prisma, BullMQ, PostgreSQL
dashboard/ Next.js 16 dashboard — shadcn/ui, Tailwind v4, Zustand
landing/ Next.js 15 marketing site
docs/ Nuxt/Docus documentation site
fern/ Fern SDK generation config
sdks/ Generated TypeScript and Python SDKs
PimaBill exposes a REST API with 107 endpoints across 18 controllers. Interactive API docs are available at /api/reference (powered by Scalar).
Authentication: Register a tenant, get a JWT, and pass it as Authorization: Bearer <token>. Alternatively, use the API key from your tenant settings as X-API-Key: <key>.
# Register
curl -X POST http://localhost:4000/api/auth/register \
-H "Content-Type: application/json" \
-d '{"name": "John", "email": "[email protected]", "password": "secret", "companyName": "Acme Corp"}'
# Create a customer
curl -X POST http://localhost:4000/api/customers \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"name": "Jane Doe", "email": "[email protected]", "currency": "USD"}'
Official SDKs for TypeScript, Python and PHP are generated from the OpenAPI spec and published with every release (MIT licensed):
npm install pimabill
pip install pimabill
composer require pimabill/pimabill-php
import { PimaBillClient, PimaBillEnvironment } from "pimabill";
const client = new PimaBillClient({ token: process.env.PIMABILL_API_KEY! });
// Sandbox: new PimaBillClient({ token: "sk_test_...", environment: PimaBillEnvironment.Sandbox })
// Self-hosted: new PimaBillClient({ token, baseUrl: "https://billing.example.com" })
const customer = await client.customers.create({
externalId: "usr_98765",
name: "Jane Doe",
email: "[email protected]",
currency: "USD",
});
import os
from pimabill import PimaBillClient
client = PimaBillClient(token=os.environ["PIMABILL_API_KEY"])
customer = client.customers.create(
external_id="usr_98765",
name="Jane Doe",
email="[email protected]",
currency="USD",
)
See the SDK guides and RELEASING.md for how the packages are built and published.
A sandbox deployment (SANDBOX_MODE=true) runs the same code against payment providers' test accounts, with sk_test_ keys. The live dashboard can switch between live and sandbox; see the Sandbox guide.
| Provider | Regions | Methods |
|---|---|---|
| Stripe | Global | Cards, bank transfers, wallets |
| Paystack | Nigeria, Ghana, South Africa, Kenya | Cards, bank transfers, mobile money |
| Flutterwave | 30+ African countries | Cards, mobile money, bank transfers |
| DPO | 20+ African countries | Cards, mobile money |
| PayU | South Africa, Nigeria, Kenya | Cards, EFT, mobile money |
| PesaPal | Kenya, Uganda, Tanzania | M-Pesa, Airtel Money, cards |
Configure providers per-tenant in the dashboard under Settings > Payment Providers. Credentials are encrypted at rest.
We're actively looking for contributors and testers. See CONTRIBUTING.md for setup instructions and the roadmap.
Areas where help is needed:
See SECURITY.md for vulnerability reporting.
PimaBill is licensed under AGPL-3.0. The generated SDKs are MIT-licensed, so they can be used in any project.