Meek Bank is a modern, open source banking application for unbanked or underbanked people.
  • Go 97.5%
  • PLpgSQL 2%
  • Makefile 0.3%
  • Shell 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-09-17 16:31:02 +02:00
cmd/meek-bank Moved module and imports from codeberg to steinwinde. 2026-08-26 09:07:29 +02:00
db Merge dev branch: 2026-08-21 12:55:32 +02:00
docs Regenerated Swagger with version 0.4.0. 2026-09-17 16:31:02 +02:00
internal Bumped version to 0.0.4, summarized changes in CHANGELOG. 2026-09-17 16:16:55 +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 Bumped version to 0.0.4, summarized changes in CHANGELOG. 2026-09-17 16:16:55 +02:00
CONTRIBUTING.md Added CONTRIBUTING.md. 2026-06-01 13:30:01 +02:00
go.mod Add ability to use formula fields, extend validation rules to standard fields of custom tables. 2026-08-30 13:46:19 +02:00
go.sum Add basic Common Expression Language capabilities along with create/archive validation rules. 2026-08-26 13:04:40 +02:00
LICENSE First commit to Codeberg. 2026-04-13 14:07:49 +02:00
Makefile Moved module and imports from codeberg to steinwinde. 2026-08-26 09:07:29 +02:00
README.md Moved module and imports from codeberg to steinwinde. 2026-08-26 09:07:29 +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

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://git.steinwinde.de/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.