Open source · Self-hosted

Self-hosted expense splitting for couples, housemates & travel companions.

The open-source Splitwise alternative you host yourself. One Docker container, your data, no subscription.

SplitDuo mobile dashboard showing group expenses and balances

Yours to host

Deploy with a single docker compose up. The app and PostgreSQL share one stack; beyond localhost, terminate TLS at your own reverse proxy.

Private by default

Your financial data stays on your infrastructure. No analytics, no tracking. AI receipt scanning is optional and off by default.

Portable

Import from Splitwise or Cospend. Export to CSV anytime. Your data is never locked in.

Installable

Add it to your home screen as a PWA. Works as a standalone app on your phone or desktop.

Everything you actually need to split costs

No bloat. Just the features that matter for sharing expenses with people you trust.

Groups & members

One place for the household, trip, or flat: invite members and assign roles.

Flexible splits

Split equally, by exact amounts, proportional shares, percentages, or subgroups.

Recurring expenses

Set expenses to repeat weekly, monthly, or on a custom schedule, with pause/resume and optional approval.

Balances & settlements

See who owes whom at a glance and settle up with the fewest transfers.

Stats & charts

See spending by category, person, or month with built-in charts.

Attachments

Attach receipts and invoices to any expense so the record stays complete.

CSV import & export

Bring your history from Splitwise or Cospend; export it all to CSV whenever you like.

Security

TOTP two-factor authentication with backup codes, JWT sessions with refresh rotation, and account lockout.

Admin & notifications

Bring your own SMTP for invites, 2FA codes, and password resets; manage users, roles, and token revocation.

Snap a receipt, let AI do the rest

Optional AI receipt scanning prefills the amount, date, category, and payment mode, so you don't have to. Bring your own OpenAI-compatible endpoint, or keep it off. Your data, your choice.

Instant prefill

Capture a receipt and the amount, date, category, and payment mode are extracted and ready to review.

Any AI endpoint

Works with any OpenAI-compatible API, cloud, self-hosted, or a local LLM. You pick the provider.

Private by default

Receipt scanning is optional and off by default. No data leaves your server unless you enable it.

Optimized uploads

Images are compressed client-side before upload, capped at 5MB. Rate-limited to keep costs predictable.

Compare

SplitDuo vs Splitwise vs Cospend

The open-source Splitwise alternative you host yourself. No subscription, no vendor account, no Nextcloud required.

SplitDuoSplitwiseCospend
Open sourceyesnoyes
Self-hostedyesnoNeeds Nextcloudpartial
FreeyesFreemiumpartialyes
No vendor account requiredyesnoyes
AI receipt scanningyesPro onlypartialno
Mobile appPWApartialNativepartialno
CSV import & exportyesExport onlypartialyes
Two-factor authenticationyesFingerprint onlypartialVia Nextcloudpartial
Multi-languageyesyesyes

Built on a modern, boring-in-the-good-way stack

Stable tools, clean architecture, and no surprises.

Backend

.NET 10
EF Core 10
PostgreSQL 17

Frontend

Nuxt 4
Nuxt UI v4
Tailwind v4

Deploy

Docker

Frequently asked questions

Everything you need to know before self-hosting SplitDuo.

Is SplitDuo free?

Yes. SplitDuo is completely free and open source under the MIT license. No subscription, no premium tier, no feature gating. You only pay for the server you run it on.

How do I self-host SplitDuo?

Clone the repository, create a .env file with your admin password and JWT secret, then run docker compose up. SplitDuo ships as a single Docker container with PostgreSQL included in the stack and runs as a non-root user. It serves plain HTTP, so put it behind a TLS-terminating reverse proxy for anything beyond localhost.

Is AI receipt scanning private?

Receipt scanning is optional and off by default. You bring your own OpenAI-compatible endpoint, cloud, self-hosted, or a local LLM. No receipt data leaves your server unless you enable it, and images are compressed client-side before upload.

Can I migrate from Splitwise or Cospend?

Yes. Import your history from Splitwise or Cospend via CSV, and export everything back to CSV at any time. Your data is never locked in.

Where is my financial data stored?

On your own infrastructure, in the PostgreSQL database inside your Docker stack. There is no analytics, no tracking, and no third-party server involved.

How many people can use one group?

SplitDuo is built for two people or small groups: couples, housemates, travel companions. Invite members by email, assign roles, and use aliases to split expenses across subgroups within a group.

Does SplitDuo support two-factor authentication?

Yes. SplitDuo supports TOTP 2FA with backup codes, JWT authentication with refresh-token rotation, and account lockout protection.

Is there a mobile app?

SplitDuo is an installable PWA. Add it to your phone or desktop home screen and it works as a standalone app, no app store required.

Up and running in one command

Clone the repo, set two secrets, run the compose stack, and log in.

$ git clone https://gitlab.com/j1mm0/splitduo.git
$ cd splitduo
# create .env with the admin password and JWT signing key
$ printf 'SD_INITIAL_USER_PASSWORD=%s\nSD_JWT_SECRET_KEY=%s\n' \
  "$(openssl rand -base64 24)" "$(openssl rand -base64 48)" > .env
$ docker compose up -d

Then open http://localhost:3000 and log in as admin@splitduo.local with the password from .env.

Needs Docker Compose v2. Images are published for linux/amd64 and linux/arm64; budget about 1 GB RAM and 10 GB disk.

Read the full self-hosting guide