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 ↗OpenBank Labs / Shared banking intelligence
Every bank needs to count money, understand business days and speak payment rails. Those rules should be written once, tested deeply and shared.

From common logic to extraordinary banks.
Build on what matters.Inside openbank-libs
The domain core is plain Kotlin without framework dependencies. Shared types and rules help services agree at the source instead of reconciling differences later.
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 ↗Amortization, APRC, IFRS 9 and delinquency calculations are shared building blocks rather than slightly different implementations in every service.
Explore libs-lending ↗Reusable messages for pacs.008, pacs.002, pacs.004 and camt.054/056 make payment flows speak the same language.
Explore libs-iso20022 ↗Transactional outbox, idempotency, audit and authorization primitives reduce the need to rebuild the same infrastructure service by service.
Explore libs-runtime ↗Shared temporal patterns help long-running banking work remain explicit and recoverable.
Explore libs-temporal ↗Testcontainers, money generators for property tests and conformance checks help prove outbox and authorization behavior.
Explore libs-testing ↗Open source · open questions
The ambition is a reusable bank kernel: shared foundations that leave teams free to build their own customer experience.