Repository navigation
v0.1.0
Pre-release
Pre-release
0.1.0 (2026-10-26)
⚠ BREAKING CHANGES
- providers: the API lists every supported provider without credentials, and live and sandbox keep to their own keys (#141)
- deploy: the stack no longer starts without real secrets in .env.
- payments: Stripe needs webhookSecret and Flutterwave secretHash configured, or their payments are not confirmed.
- auth: portal links with ?key= stop working; keys with resource scopes are limited to those resources.
Features
- add PayPal provider, fix multi-provider dashboard, regroup analytics KPIs (f120fe8)
- apply PR review comments, analytics KPIs backend endpoint, ARR display, tooltips, provider ordering, multi-provider checkout (2fcdff1)
- auth: two-step sign-in with an authenticator app, and organisations that require it (#134) (857bd87)
- charges: charge a customer once or on a plan, from the dashboard or in one API call (#143) (9234bba)
- cloud plans, managed payments for every payment, and a simpler managed sign-up (#129) (24cd918)
- cloud-plans: African pricing in every Flutterwave currency, a generous Free tier, unlimited Growth, and Partner (#131) (b007d89)
- cloud-plans: Growth at $15, and Enterprise with no public price (#133) (60ac503)
- currencies: custom currencies, a reporting currency, and daily exchange rates kept by date (#138) (0e05894)
- dashboard: an Overview that shows setup, payments and your plan; Analytics in tabs (#132) (147bb02)
- dashboard: branded sign-in pages, brand fonts, kept out of search (b2afe54)
- dashboard: managed payments gets its own tab (#125) (85e75ad)
- dashboard: Sandbox switch sits with Documentation in the sidebar (#126) (a666e84)
- dashboard: the animated mark is the loading indicator everywhere (58ba521)
- friendlier SDKs, kept in step with the API and docs (46694f1)
- landing: a premium look: a deep hero with the product rising out of it, a facts strip, dark feature bands and a lit Growth plan (#139) (5bde19b)
- landing: rebuild the landing page on the PimaBill brand (833b8eb)
- landing: show the product, compare fairly with Stripe Billing, Lago and Chargebee, and logos on the payment rails (#137) (ccbac7b)
- managed: tell merchants when their managed payments are approved, refused, paused or restored (#140) (1a55649)
- money movement, ledger, crypto, team access and migrations (425c284)
- money: change managed payments contact details and payout destination (#124) (721c788)
- money: managed payments collect mobile money and PayPal too (e4cbc87)
- money: managed payments collect mobile money and PayPal too (b56270a)
- money: managed payments pay out to mobile money, bank or PayPal (202e936)
- money: managed payments pay out to mobile money, bank or PayPal (83e81c0)
- organisation access controls, a platform service API and an operator command (165eb23)
- organisation access controls, a platform service API and an operator command (d012579)
- plan limits an operator can set per organisation (73cc5c4)
- plan limits an operator can set per organisation (0a98d35)
- platform: control-plane service API exposes the console's organisation data (dcde48b)
- platform: control-plane service API exposes the console's organisation data (e55475e)
- platform: the platform console moves to the private control panel (e5ae4e9)
- platform: the platform console moves to the private control panel (5b804fd)
- price PimaBill Cloud at $15/month (656b836)
- price PimaBill Cloud at $15/month and capitalise the wordmark (92106a1)
- providers: the API lists every supported provider without credentials, and live and sandbox keep to their own keys (#141) (32456cf)
- rebuild the landing page, sign-in pages and docs on the PimaBill brand (b80d758)
- sandbox mode, a Live/Sandbox dashboard switch, and SDK publishing (#116) (239a0d6)
- sandbox: managed payments in the sandbox follow the live approval (#145) (ccd314f)
- sdk: PimaBillClient everywhere and the hosted API by default (ebdbba8)
Bug Fixes
- add noopener,noreferrer to checkout window.open to prevent tabnabbing (bea3798)
- add proper auth error handling in PesapalProvider.getAccessToken (12d91c6)
- address CI findings on the system review changes (1c7f7d9)
- api: describe the responses of the money, ledger and team endpoints (132382e)
- api: optional, typed query parameters and a real amount type (77cc2ec)
- api: typed parties, whole-number counts and one request type per endpoint (28e08df)
- auth: enforce API key scopes, hash keys, scope portal links (f55aad9)
- Auto-register Pesapal IPN URL on provider creation (Option A) (c2c2134)
- billing: bill each period exactly once, and fix dunning (55a7287)
- currency-aware amount formatting and environment label in Pesapal charge errors (010acbc)
- dashboard: hydration on every page, revenue months, honest charts, brand colours and provider logos (#136) (159e78e)
- database: stop tenant pools exhausting Postgres connections (85197e9)
- database: stop tenant pools exhausting Postgres connections (7e75ac6)
- deploy: refuse placeholder secrets; document the security changes (762cfac)
- deploy: ship the compose file and pull images from this repo's owner (c743e03)
- deploy: ship the compose file and pull images from this repo's owner (b2cb7b4)
- Docker compose on server (e6525cc)
- Docker compose on server (c7017ef)
- handle webhook pending status, fix priority nullish coalescing, tabnabbing security (ab02851)
- keep platform access fields out of the sign-in response (b53dd96)
- landing: three cloud plans with self-hosted on its own, a Growth button that sells, and managed payments described without our providers or fee (#135) (4306fa3)
- migrate tenant databases as the database admin (7083383)
- migrate tenant databases as the database admin (364e2f9)
- money: say the managed fee comes on top of the provider's fee (88ee02c)
- money: say the managed fee comes on top of the provider's fee (c446ed6)
- one broken tenant database no longer keeps the API down (5adc6d0)
- one broken tenant database no longer keeps the API down (23a5ef6)
- payments: verify every payment notification before settling (43ef528)
- paypal: remove redundant application_context causing every checkout to 422 (243f5e9)
- paypal: remove redundant application_context causing every checkout to 422 (df58681)
- Pesapal checkout 'Invalid IPN URL ID' by supporting ipnId credential (de4aae3)
- regenerate backend/package-lock.json to resolve CI npm ci failure (82f040a)
- resolve Pesapal transaction amount limit error (1199674)
- sandbox: no cloud plans in the sandbox (#130) (c730c8a)
- sdk: one bearer token, positional ids, binary invoice PDF (09ba8aa)
- security: block SSRF, encrypt with AES-GCM, run each cron once (948df5f)
- security: patch vulnerable dependencies, least-privilege workflows, and a stricter plain-text email (#142) (d7ccc32)
- ship the brand fonts with the apps instead of fetching them at build time (59d50d4)
- ship the brand fonts with the apps instead of fetching them at build time (2815d94)
- webhooks: keep looking when a shared provider account is not this tenant's (d89d847)
- webhooks: keep looking when a shared provider account is not this tenant's (579d01d)
- write the brand as PimaBill in the wordmark, not lowercase (f54fce9)