Meek Bank is a modern, open source banking application for unbanked or underbanked people.
  • Go 97.2%
  • PLpgSQL 2.3%
  • Makefile 0.3%
  • Shell 0.2%
Find a file
Felix van Hove 9efd44329a Merge dev branch:
- 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
2026-08-21 12:55:32 +02:00
cmd/meek-bank Merge dev branch: 2026-08-21 12:55:32 +02:00
db Merge dev branch: 2026-08-21 12:55:32 +02:00
docs Merge dev branch: 2026-08-21 12:55:32 +02:00
internal Merge dev branch: 2026-08-21 12:55:32 +02:00
.gitignore Added CHANGELOG, updated .gitignore. 2026-06-01 14:52:31 +02:00
app.env.example Finished implementation of password reset form. 2026-05-11 21:26:41 +02:00
CHANGELOG.md Merge dev branch: 2026-08-21 12:55:32 +02:00
CONTRIBUTING.md Added CONTRIBUTING.md. 2026-06-01 13:30:01 +02:00
go.mod Updated dependency for mock to point at https://github.com/uber-go/mock . 2026-04-15 20:11:46 +02:00
go.sum Updated dependency for mock to point at https://github.com/uber-go/mock . 2026-04-15 20:11:46 +02:00
LICENSE First commit to Codeberg. 2026-04-13 14:07:49 +02:00
Makefile Added useStructName to swag call in Makefile and regenerated project. 2026-05-29 19:23:01 +02:00
README.md Merge dev branch: 2026-08-21 12:55:32 +02:00
sqlc.yaml First commit to Codeberg. 2026-04-13 14:07:49 +02:00
wait-for.sh First commit to Codeberg. 2026-04-13 14:07:49 +02:00

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.