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

Preview

Subscriptions & invoices

  • Plans, trials, proration
  • Card, TWINT or QR-bill
  • Reminders & retries
  • VAT on every invoice

membershipkit

In progress

Members & renewals

  • Membership types & seasons
  • Households & families
  • Renewal campaigns
  • Signup forms & custom fields

shopkit

planned

Commerce

  • 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.

Payment part

Currency

CHF

Amount

228.00

Account / Payable to

CH44 3199 9123 0008 8901 2
Acme AG
Bahnhofstrasse 1
8001 Zürich

Reference

21 00000 00003 13947 14300 09017

Additional information

Invoice 2026-0142 · Club Pro, annual plan
incl. 8.1 % VAT CHF 17.08 · CHE-123.456.789 VAT

Payable by

FC Seebach
Dorfstrasse 12
8052 Zürich
Generated by subkit: QR-IBAN with QR reference, VAT line, payer from your customer table. Sample data.

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.

MITv0.1

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.

  1. 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.

  2. subkit for PHP

    Q1 2027

    Conformance suite as language-neutral fixtures, PHP port with Eloquent, Doctrine and PDO adapters, Laravel and Symfony integration.

  3. membershipkit

    Q1 2027

    Fee invoices through subkit. camt.054 bank reconciliation, Datatrans and PostFinance Checkout.

  4. 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