Skip to content

Repository files navigation

SplitDuo logo

SplitDuo

build status coverage report latest version docker pulls docker image size docker version license

Primary repo: gitlab.com/j1mm0/splitduo · GitHub mirror: github.com/c4mbr0nn3/splitduo — development, issues, and releases happen on GitLab; GitHub is kept in sync for visibility and stars.

Shared finances, without the noise. SplitDuo is a self-hosted expense splitting app for small groups — couples, housemates, travel companions, or anyone sharing costs. No subscription, no third-party servers, no data you don't control.

A focused alternative to Splitwise and Cospend, deployable in one docker compose up.

Tech Stack

Layer Technology
Backend .NET 10, Entity Framework Core 10
Frontend Vue 3, Nuxt 4, Nuxt UI v4, TailwindCSS v4, TypeScript
Database PostgreSQL 17
Deployment Single Docker container (multi-stage build)

The frontend is compiled to static files and served directly by the .NET backend — one container, one port, no reverse proxy needed.


SplitDuo


Features

Expense tracking that stays out of your way Add expenses, pick a split, move on. SplitDuo handles the arithmetic — proportional splits, unequal amounts, custom breakdowns — and keeps a live balance so everyone always knows where they stand.

Settlement-aware balances Rather than a raw transaction log, SplitDuo computes net balances across the whole group and surfaces clear settlement suggestions — minimizing the number of transfers needed to settle up.

Recurring expenses Rent, subscriptions, gym memberships — set it once and forget it. Define a template with a split and a schedule (weekly, monthly, or custom intervals), and SplitDuo generates the expenses automatically. Pause when you need to; on resume you choose whether to backfill missed periods or skip them. Generated expenses can require approval before they hit group balances, so nothing lands unnoticed.

Alias mode for subgroup splitting For groups where members act as sub-units (a couple sharing one slot, a household treated as one), turn on alias mode at creation. Members are grouped into named aliases and expenses split by subgroup instead of by person. Balances settle at the alias level.

AI-powered receipt scanning Point your camera at a receipt and SplitDuo prefills the amount, date, and category. Works with any OpenAI-compatible endpoint — bring your own key, keep your data local. Scanned receipts are attached to the expense automatically.

Expense attachments Attach receipts, invoices, or any file to an expense. Files are stored alongside the expense and downloadable at any time.

Mobile-first, installable The interface is designed for a phone screen first. Add it to your home screen as a PWA and it behaves like a native app — no app store required.

Invite by email Add your partner via a secure, time-limited invitation link. No account needed on their end until they accept.

Data portability Import existing data from Cospend, Splitwise, or a SplitDuo CSV export. Alias-mode groups use a dedicated three-section CSV format. Export at any time. No lock-in.

Two-factor authentication Each user can independently enable TOTP-based 2FA on their account, with backup codes for recovery.

Group stats with charts Per-group dashboard with category, monthly, and per-member breakdowns to see where money goes over time.

Internationalization Full UI translation (English and Italian) with per-user language preference. Locale parity is enforced at build time.

Email notifications Stay in the loop without checking the app — invitations, new expenses, group changes, 2FA codes, and password resets arrive in your inbox. Full templates in English and Italian.

Admin panel User management with role-based access — promote users, manage invitations, and oversee the instance.

Fully self-hosted Single Docker container. Your server, your database, your rules.


Quick Start

Requires Docker and Docker Compose. The app image is published on Docker Hub — no build step needed.

git clone https://gitlab.com/j1mm0/splitduo.git
cd splitduo
docker compose up -d

Open http://localhost:3000 — default login is admin@splitduo.local / changeme123.

Before going to production: set SD_JWT_SECRET_KEY and SD_INITIAL_USER_PASSWORD to something you control. See the self-hosting guide for the full walkthrough.


Documentation

Setup & Operations

Architecture & Design

Feature Docs

API


License

MIT

About

A lightweight, open-source, self-hosted expense splitting app for small groups / couples, housemates, travel companions, or anyone sharing costs. Settlement-aware balances, alias mode for subgroup splitting, AI receipt scanning, PWA, 2FA, and CSV import/export. A focused alternative to Splitwise and Cospend, deployable in one docker compose up.

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages