Overview
Discover what makes Kresus powerful
Kresus is a fully self‑hosted, open‑source personal finance manager that aggregates banking data from multiple institutions, automatically imports transactions on a daily cadence, and exposes rich analytical views. From a developer’s standpoint it is engineered as a modular web service that can be deployed behind any reverse‑proxy, container orchestrator, or traditional VM. The core goal is to give teams and individuals full control over their financial data while providing a clean API surface for integration with external tools.
Backend
API
Database
Background Workers
Overview
Kresus is a fully self‑hosted, open‑source personal finance manager that aggregates banking data from multiple institutions, automatically imports transactions on a daily cadence, and exposes rich analytical views. From a developer’s standpoint it is engineered as a modular web service that can be deployed behind any reverse‑proxy, container orchestrator, or traditional VM. The core goal is to give teams and individuals full control over their financial data while providing a clean API surface for integration with external tools.
Technical Stack & Architecture
- Backend: The application is written in Go (Golang) and follows a clean‑architecture pattern. Services are split into domain, application, and infrastructure layers, allowing independent testing and replacement of persistence or transport mechanisms.
- API: A RESTful API (JSON‑encoded) serves CRUD operations for accounts, transactions, tags, and budgets. It also offers a WebSocket stream for real‑time updates to dashboards.
- Database: PostgreSQL is the default persistence layer, accessed via the
pgxdriver. The schema is versioned with a lightweight migration tool that can be run as part of the Docker entrypoint. - Background Workers: A scheduler (based on
cronexpressions) triggers bank connectors nightly. Each connector runs in its own goroutine, enabling parallel fetches across institutions. - Frontend: The UI is a single‑page application built with React and TypeScript, communicating over the REST API. It leverages Webpack for bundling and supports server‑side rendering to improve SEO and initial load times.
The services are packaged in Docker images, making it trivial to spin up a replica set or deploy on Kubernetes. The application also exposes health‑check endpoints (/healthz, /readyz) for orchestration tools.
Core Capabilities & Developer APIs
- Bank Connectors: A pluggable connector framework allows adding new banking institutions by implementing a simple interface. Connectors are distributed as Go plugins, which can be compiled against the same version of Kresus to guarantee binary compatibility.
- Tagging & Categorization: Transactions can be annotated with arbitrary tags and categories; the API exposes endpoints for bulk tagging, tag inheritance, and conflict resolution.
- Budgeting & Alerts: Developers can define budget thresholds per category or account and register email/webhook callbacks that trigger when limits are breached.
- Reporting: The API supports complex query parameters (date ranges, amount filters, tag predicates) and returns aggregated statistics suitable for charting libraries.
- Webhooks: Outgoing webhooks are configurable per event type (e.g.,
transaction.created,budget.exceeded). Payloads include the full resource representation and a HMAC signature for verification.
Deployment & Infrastructure
- Self‑Hosting: Kresus requires only a PostgreSQL database and a reachable HTTPS endpoint. SSL termination can be handled by any proxy (NGINX, Traefik).
- Containerization: Official Docker images are available on GitHub Container Registry. A single
docker-compose.ymlfile can spin up the app, database, and reverse‑proxy. - Scalability: The stateless API layer can be horizontally scaled behind a load balancer. Background workers are isolated and can run on dedicated nodes to avoid contention with the API.
- High Availability: PostgreSQL replication and Kubernetes StatefulSets are supported out of the box, allowing zero‑downtime upgrades.
Integration & Extensibility
- Plugin System: Go plugins enable developers to extend Kresus without modifying the core codebase. A plugin can add new connectors, UI components, or even custom business logic.
- Custom Connectors: The connector SDK exposes HTTP clients, OAuth helpers, and retry mechanisms. Developers can integrate with any REST or SOAP banking API that returns transaction data in a predictable format.
- Webhooks & Callbacks: By subscribing to webhook events, external services (e.g., Slack bots, accounting software) can react instantly to financial changes.
- CLI Tool: A command‑line interface (
kresusctl) provides CRUD operations and migration utilities, making scripting and automation straightforward.
Developer Experience
The project follows a well‑structured repository layout (cmd/, pkg/, internal/), with comprehensive unit and integration tests. Documentation is hosted on the official website, which includes an API reference generated from OpenAPI specs and a developer guide for creating connectors. The community is active on GitLab, with contributors frequently merging PRs that add new banks or improve performance. Licensing under the MIT license guarantees freedom to modify and redistribute, a strong incentive for enterprises that require compliance with internal security policies.
Use Cases
- Personal Finance SaaS: A small startup can deploy Kresus on a VPS, expose the API to its mobile app, and offer automated budgeting features without handling sensitive banking data externally.
- Enterprise Expense Tracking: Companies can host Kresus internally, integrate it with corporate banking APIs, and generate expense reports for audit purposes while keeping data on-premises.
- Open‑Source Finance Projects: Researchers building financial analytics tools can fork Kresus, extend connectors for niche institutions, and use the API to feed datasets into machine‑learning pipelines.
Advantages
- Performance: Go’s concurrency model and compiled binaries deliver low latency for both API requests and background fetches.
- Flexibility: The plugin architecture allows rapid addition of new banks and custom business
Open SourceReady to get started?
Join the community and start self-hosting Kresus today
Related Apps in other
Immich
Self‑hosted photo and video manager
Syncthing
Peer‑to‑peer file sync, no central server
Strapi
Open-source headless CMS for modern developers
reveal.js
Create stunning web‑based presentations with HTML, CSS and JavaScript
Stirling-PDF
Local web PDF editor with split, merge, convert and more
MinIO
Fast, S3-compatible object storage for AI and analytics
Weekly Views
Repository Health
Information
Explore More Apps
Shlink
Self-hosted URL shortener with analytics and QR codes
HeyForm
Build conversational forms without code
UVDesk
Open‑source helpdesk for multi‑channel support
Part-DB
Open‑source electronic parts inventory for web browsers
Simple NixOS Mailserver
Self-hosted apis-services
Invidious
Open‑source YouTube alternative front‑end
