open-iban Docker Image
1.4K
TypeScript IBAN validation & BIC lookup service with web UI for bank data management. A modern port of fourcube/goiban that powers openiban.com.
✅ IBAN validation across 80+ countries (ISO 13616)
✅ BIC lookup for DE, AT, BE, NL, CH, LU, LI
✅ Calculate IBAN from country + bank code + account
✅ Admin web UI to upload/refresh bank register files
✅ Full audit trail with structured logging
✅ REST API compatible with openiban.com
✅ Prometheus metrics at /metrics
docker run -d \
-p 3000:3000 \
-e JWT_SECRET=$(openssl rand -hex 32) \
-v ./data:/app/data \
--name open-iban \
m2aadhil/open-iban:latest
Open http://localhost:3000 for the API.
docker exec -it open-iban node packages/server/dist/scripts/seedAdmin.js
Or set ADMIN_USERNAME and ADMIN_PASSWORD environment variables:
docker run -d \
-p 3000:3000 \
-e JWT_SECRET=$(openssl rand -hex 32) \
-e ADMIN_USERNAME=admin \
-e ADMIN_PASSWORD=supersecret \
-v ./data:/app/data \
m2aadhil/open-iban:latest
# Then run seed inside container
docker exec open-iban node packages/server/dist/scripts/seedAdmin.js
GET /validate/:iban?getBIC=true — validate + optional BIC lookupGET /calculate/:country/:bankCode/:account — build IBANGET /countries — list supported countriesGET /health — health checkGET /metrics — Prometheus metricsPOST /admin/login — authenticatePOST /admin/data/:country — upload bank register fileGET /admin/data/status — data status per countryGET /admin/audit — audit log| Variable | Required | Default | Description |
|---|---|---|---|
JWT_SECRET | Yes (prod) | dev fallback | Secret for JWT signing (use 32+ random hex) |
PORT | No | 3000 | Server port |
NODE_ENV | No | production | Environment mode |
LOG_LEVEL | No | info | Logging level (fatal/error/warn/info/debug) |
CORS_ORIGIN | No | * | CORS allowed origins |
MAX_UPLOAD_SIZE_MB | No | 50 | Max file upload size |
services:
open-iban:
image: m2aadhil/open-iban:latest
ports:
- "3000:3000"
environment:
JWT_SECRET: ${JWT_SECRET}
NODE_ENV: production
volumes:
- ./data:/app/data
restart: unless-stopped
Save as docker-compose.yml, then:
JWT_SECRET=$(openssl rand -hex 32) docker compose up -d
Upload official register files via the admin UI:
| Country | Source | Format |
|---|---|---|
| 🇩🇪 DE | Bundesbank | .txt (ISO-8859-1) |
| 🇦🇹 AT | OeNB | .csv |
| 🇧🇪 BE | NBB | .xlsx |
| 🇳🇱 NL | Betaalvereniging Nederland | .xlsx |
| 🇨🇭 CH | SNB/SIX | .xlsx |
| 🇱🇺 LU | BCL | .xlsx |
| 🇱🇮 LI | FMA | .xlsx |
Download the file → Admin UI → Select country → Upload. Data is replaced atomically in a SQLite transaction.
React SPA (Vite + Tailwind)
↓
Fastify REST API (TypeScript)
↓
SQLite (WAL mode) + better-sqlite3
↓
7 country-specific parsers
/app/data — SQLite DB + uploaded files (persist this!)curl http://localhost:3000/health
# {"status":"ok","ts":"2026-05-19T..."}
Validate an IBAN:
curl "http://localhost:3000/validate/DE89370400440532013000?getBIC=true"
Calculate an IBAN:
curl "http://localhost:3000/calculate/DE/37040044/0532013000"
Upload Bundesbank file (requires auth):
# First login to get cookie
curl -c cookies.txt -X POST http://localhost:3000/admin/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"supersecret"}'
# Upload file
curl -b cookies.txt -X POST http://localhost:3000/admin/data/DE \
-F "[email protected]"
✨ Enhancements:
MIT — same as the original goiban project.
Content type
Image
Digest
sha256:5cd29546a…
Size
88.5 MB
Last updated
5 months ago
docker pull m2aadhil/open-iban