- Go 97.2%
- PLpgSQL 2.3%
- Makefile 0.3%
- Shell 0.2%
- Introduce custom tables and custom fields feature - Strengthen conditions for client and group updates - Provide consistent time zone handling across objects - Make sure no datetime fields need to be written by the API, limiting datetime writing by the API to custom fields - Modernize unit tests a little - Move office IDs from integers to UUIDs |
||
|---|---|---|
| cmd/meek-bank | ||
| db | ||
| docs | ||
| internal | ||
| .gitignore | ||
| app.env.example | ||
| CHANGELOG.md | ||
| CONTRIBUTING.md | ||
| go.mod | ||
| go.sum | ||
| LICENSE | ||
| Makefile | ||
| README.md | ||
| sqlc.yaml | ||
| wait-for.sh | ||
Meek Bank
Idea
This project started with the go-bank of Samir Prakash. (Thanks, Samir, for the nice starting point!)
Meek Bank attempts to lay the foundation of a modern, open source banking application for unbanked or underbanked people. Features primarily useful in middle income environments are sidelined. Some guiding principles:
- low hardware requirements
- scales well with additional cpu/memory
- flexible
- few dependencies
- simple setup
- easy onboarding of developers and users
- Postgres only
- Linux only (for now only Debian has been used)
Features
- single tenant, single legal entity
- ledger based accounting
- loan, saving and payment accounts and products
- groups and individuals as account holders
- multi-currency
- configurable business timezone (for COB, interest posting, and statement generation); API clients can operate in other timezones
- flexible scheduler
- stream based user notifications, emails
- configurable rounding policies
- office/branch based record permissions
- system permissions and permission sets
- authentication based on accessTokens/httpOnly cookies or OAuth
- idempotency both via http (header) and record based
- uuid version 7 IDs used for all safety relevant tables
The backend is complemented with a browser UI based on Svelte, which is hosted in a separate Git project. The browser UI supports almost all features of the backend.
Getting started
The Makefile represents the Debian development workflow, which requires Docker to be installed. The following prerequisites are based on this assumption, but production environments don't require Docker.
Prerequisites
- Go 1.24+
- Docker for Postgres and optional Keycloak
- golang-migrate for setting up database
- sqlc for working on database queries
- mockgen for generating mocks
- swag for generating Swagger docs
1. Clone and configure
git clone https://codeberg.org/Steinwinde/meek-bank.git
cd meek-bank
cp app.env.example app.env
Configure DB_ADMIN_USER (e.g. "postgres") and password, DB_USER (referred to as "meek_runtime" in the documentation) and password, DB_NAME, DB_HOST and DB_PORT in app.env.
2. Get the database up and running (Docker)
make createnetwork
make createpostgres
make createdb
make roles
make migrateup
make seed
3. Run the app
make server
The app should be listening on the port configured in SERVER_ADDRESS now.
4. And else?
To learn more in detail, please have a look at the .md files in the docs folder.
The project is rapidly developing - feedback and criticism is very welcome. Current target: A minimal viable product.
Licensing
This project is licensed under the Apache License, version 2.0.