Open source from v0.1 · built in Switzerland
The billing framework for Swiss software.
Subscriptions, invoices, shop and members – as a library that runs inside your app. QR-bill, TWINT, VAT and four languages are built in, and the data stays in your database. From club projects to SaaS, in TypeScript and PHP.
4 languages · 0 customer records on our servers · MIT open source from v0.1
import { subkit } from '@agentkit/subkit';
import { drizzleAdapter } from '@agentkit/drizzle';
import { zahls } from '@agentkit/zahls';
import { db, env } from './db';
export const billing = subkit({
// your Postgres, your tables
database: drizzleAdapter(db),
provider: zahls({ instance: 'acme', apiKey: env.ZAHLS_KEY }),
plans: [
{ id: 'free', name: 'Free', prices: {} },
{
id: 'pro',
name: 'Pro',
features: ['export'],
prices: { month: { amount: 1900, currency: 'CHF' } },
},
],
defaultPlanId: 'free',
tax: { rateBps: 810 }, // Swiss VAT 8.1 %
});Pick what your product needs.
Each kit works on its own, and they all share one adapter, one customer and one payment provider. Same kit, same behaviour, in every programming language we ship.
subkit
PreviewSubscriptions & invoices
- Plans, trials, proration
- Card, TWINT or QR-bill
- Reminders & retries
- VAT on every invoice
membershipkit
In progressMembers & renewals
- Membership types & seasons
- Households & families
- Renewal campaigns
- Signup forms & custom fields
shopkit
plannedCommerce
- Products & variants
- Cart & checkout with TWINT
- Orders & refunds
- Stock & Swiss Post shipping
Not localised later. Swiss from the first line.
Generic billing libraries think in Stripe, cents and one language. Swiss customers pay by QR-bill and TWINT, expect VAT on every invoice and read it in German, French, Italian or Romansh. agentkit starts there.
Receipt
Account / Payable to
Acme AG
Bahnhofstrasse 1
8001 Zürich
Reference
Payable by
Dorfstrasse 12
8052 Zürich
Currency
Amount
Payment part
Currency
Amount
Account / Payable to
Acme AG
Bahnhofstrasse 1
8001 Zürich
Reference
Additional information
incl. 8.1 % VAT CHF 17.08 · CHE-123.456.789 VAT
Payable by
Dorfstrasse 12
8052 Zürich
Swiss QR-bill
Payment part per SIX guidelines, QR-IBAN with QR reference or IBAN with RF creditor reference. CHF and EUR. Scan-to-pay in every Swiss banking app.
TWINT & Swiss PSPs
zahls.ch (Payrexx) with TWINT, PostFinance Card and credit cards. Datatrans and PostFinance Checkout next. Card data never touches your server.
VAT done right
Inclusive or exclusive prices, VAT line and CHE number on every invoice, integer Rappen instead of floats. Per-line rates (8.1 / 2.6 / 3.8 %) and 5-Rappen rounding are next.
de · fr · it · en
UI, emails and invoices in German, French, Italian and English, with Swiss formats: 15.10.2026, CHF 1’900.00, «guillemets», ss instead of ß. Romansh on request.
next: Bank reconciliation, Reminders, Swiss style, revDSG friendly, eBill
Everything around the money, done once.
The data never leaves your app.
Kits write to tables in your database through adapters. Join them, back them up, migrate away – no sync, no silo.
TypeScript and PHP, one HTTP API.
Native libraries per language, mounted as a route in your framework. Every implementation speaks the same API, so the same UI works on top.
Your servers, your data centre.
Vercel, a Swiss cloud or the server in the basement: the kits go wherever your app goes. There is no agentkit backend to call home to.
Self-service out of the box.
Drop-in components for the boring screens – React, or a web component for Blade and Twig. Headless hooks when you want your own.
Every lifecycle email, ready.
Receipts, failed payments, reminders, renewals, order confirmations – in four languages, HTML and text, any mailer. Printable invoices with QR-bill.
Your coding agent can wire it in.
llms.txt, skills, an MCP server per kit and errors that link to the fix. One prompt from zero to a working checkout.
Open source from version 0.1.
Kits, adapters, payment providers and CLI will be published on GitHub under the MIT licence with version 0.1. Read the code, change it and run it yourself – no per-transaction fee and no dependency on us.
MIT licence
Free for commercial use, including closed-source software.
No lock-in
The code runs in your app, the data lives in your database. A fork is all it takes to carry on without us.
Built in the open
Roadmap, issues and pull requests become public – contributions welcome.
Extracted from production, one kit at a time.
Every kit comes from code that already runs in production and is pulled out once it has proven itself.
core + subkit
Q4 2026 · now
Adapter contract and test suite, Drizzle adapter, subkit 0.1 with QR-bill, VAT and zahls.ch/TWINT on npm. Docs in German and English.
subkit for PHP
Q1 2027
Conformance suite as language-neutral fixtures, PHP port with Eloquent, Doctrine and PDO adapters, Laravel and Symfony integration.
membershipkit
Q1 2027
Fee invoices through subkit. camt.054 bank reconciliation, Datatrans and PostFinance Checkout.
shopkit & more
2027
Catalogue, cart, TWINT checkout, Swiss Post shipping, vouchers. eBill, then eventkit and bookingkit.
Roll your own billing – in minutes, not months.
Ship the product. Let the kits handle subscriptions, orders and members – Swiss-ready, in your database, under your control.
npx agentkit init