OpenBank Labs / Shared banking intelligence

A shared kernel
for modern banks.

Every bank needs to count money, understand business days and speak payment rails. Those rules should be written once, tested deeply and shared.

OpenBank Labs: lioness scientist and bot illustrating layers of the shared banking kernel.
Original OpenBank Labs artwork · illustrative module diagram; the repository is the source of truth.

From common logic to extraordinary banks.

Build on what matters.

Inside openbank-libs

The banking knowledge
services share.

The domain core is plain Kotlin without framework dependencies. Shared types and rules help services agree at the source instead of reconciling differences later.

01 / DOMAIN CORE

Money, identity & time

Money types with rounding policy, IBAN and Czech account checks, identity numbers and a banking calendar that handles working days and Easter.

Explore libs-domain ↗
02 / CREDIT MATH

Loans that add up

Amortization, APRC, IFRS 9 and delinquency calculations are shared building blocks rather than slightly different implementations in every service.

Explore libs-lending ↗
03 / PAYMENT LANGUAGE

ISO 20022

Reusable messages for pacs.008, pacs.002, pacs.004 and camt.054/056 make payment flows speak the same language.

Explore libs-iso20022 ↗
04 / RELIABLE RUNTIME

Rules around the work

Transactional outbox, idempotency, audit and authorization primitives reduce the need to rebuild the same infrastructure service by service.

Explore libs-runtime ↗
05 / MONEY FLOWS

Durable workflows

Shared temporal patterns help long-running banking work remain explicit and recoverable.

Explore libs-temporal ↗
06 / PROOF

Test the promises

Testcontainers, money generators for property tests and conformance checks help prove outbox and authorization behavior.

Explore libs-testing ↗

Open source · open questions

No one should write APRC
for the hundred and first time.

The ambition is a reusable bank kernel: shared foundations that leave teams free to build their own customer experience.