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.




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.
| SplitDuo | Splitwise | Cospend | |
|---|---|---|---|
| Open source | yes | no | yes |
| Self-hosted | yes | no | Needs Nextcloudpartial |
| Free | yes | Freemiumpartial | yes |
| No vendor account required | yes | no | yes |
| AI receipt scanning | yes | Pro onlypartial | no |
| Mobile app | PWApartial | Nativepartial | no |
| CSV import & export | yes | Export onlypartial | yes |
| Two-factor authentication | yes | Fingerprint onlypartial | Via Nextcloudpartial |
| Multi-language | yes | yes | yes |
Built on a modern, boring-in-the-good-way stack
Stable tools, clean architecture, and no surprises.
Backend
Frontend
Deploy
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 -dThen 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.