Open source · MIT · FastAPI + MySQL

Banking software
that actually works.

A complete banking platform you can run in minutes: customer online banking, a separate operator console, a double-entry ledger, cards, loans, KYC and live database management — all backed by MySQL.

2 appscustomer + operator 12 tablesMySQL schema MITfree to fork 14 testsledger invariants
Danube Bank customer dashboard showing total balance, balance chart, accounts and recent transactions
Double-entry ledgerevery cent traced
InstantTransfers settle inside one DB transaction
Row-lockedSELECT … FOR UPDATE prevents double spends
AuditedEvery operator action is logged
DB-drivenRates and limits change without redeploying
Everything included

A real banking system, not a mock-up.

Every button on every page is wired to the database. No placeholder screens, no fake data behind disabled controls — what you see is what the system does.

Accounts & balances

Multiple checking and savings accounts per customer, overdraft facilities, savings interest and full statements with CSV export.

Payments & transfers

Instant local transfers, saved beneficiaries, printable receipts and standing orders that run on a real schedule.

Debit cards

Luhn-valid card numbers, encrypted PAN storage, hashed PINs, freeze/cancel, daily limits and simulated purchases.

Loans & schedules

Rate quotes, applications, operator approval, annuity amortisation schedules, instalment and early repayment.

Operator console

A separate app on port 8001: customers, KYC, accounts, transactions, card and loan decisions, settings and audit trail.

Database management

Browse any table, export CSV, run audited SQL, and download a complete SQL backup — from inside the admin app.

Product tour

Two apps, one database.

The customer sees a clean banking experience. Operators get the tools to run it.

Virtual debit cards page with encrypted numbers, freeze and daily limits
Customer · CardsLuhn-valid · encrypted · freeze
Danube Ops admin dashboard with deposits, pending loans and operator audit trail
Operator · Overviewlive MySQL data
Loan calculator and amortisation-backed loan application
Customer · Loansannuity maths
Under the hood

A ledger you can audit.

Balances are never just a number that gets overwritten. Every movement writes a transaction and signed ledger entries with the running balance attached.

1
Lock, validate, postBoth accounts are locked with SELECT … FOR UPDATE, then funds are checked before anything is written.
2
Double-entry transfersTransfers produce two signed entries that sum to zero; deposits record the bank's external side.
3
Reversible, never deletedOperators reverse transactions by posting the mirror image. The original stays in the ledger.
4
Settings live in MySQLRates, limits and maintenance mode are rows in settings — editable without a redeploy.

Runtime topology

Customer appFastAPI · :8000
↓ shared models & services ↓
Banking servicesledger · cards · loans
Session + CSRFsigned cookies
↓ SQLAlchemy ↓
MySQL 8.4Docker · 12 tables
↑ same connection ↑
Danube OpsFastAPI · :8001

Both apps share the database and the banking service layer. The operator app never bypasses the ledger for balance changes.

Four commands

From clone to banking in a minute.

Docker runs MySQL; the seed script creates the schema, settings and demo data.

terminal
# 1 · start MySQL
docker compose up -d

# 2 · python environment
python -m venv .venv
# Windows: .venv\Scripts\activate
# macOS/Linux: source .venv/bin/activate
pip install -r requirements.txt

# 3 · configuration + schema + demo data
cp .env.example .env
python -m scripts.seed

# 4 · run both apps
uvicorn app.main:app --reload          # :8000 customers
uvicorn admin_app.main:app --port 8001 # :8001 operators

Demo users

Seeded on first run. Password for all: Password123!

alex@danube.demo · customer maria@danube.demo · customer andrei@danube.demo · customer admin@danube.demo · operator

Requirements

Docker Desktop and Python 3.11+. MySQL 8.4 runs in a container, so nothing else needs to be installed. Works on Windows, macOS and Linux.

Operator app

Run the bank, not just the demo.

Danube Ops is a standalone FastAPI application with its own login, cookie and audit context. It connects to the same MySQL database and the same ledger services.

Fork it. Break it. Learn from it.

MIT licensed, self-contained and built to be read. Start with the ledger, then follow the routers — every feature is a few hundred lines.