Skip to content
Pocket Homelab
Get the appComing soon to the App Store

Pocket Split

v0.7.1 · Self-hosted · MIT

Shared costs, settled in a few taps.

Pocket Split keeps track of who paid what on trips, in a shared flat or after a dinner out. Pay in any currency, split it the way it really happened, and see the fewest payments that bring everyone back to zero. One small binary and one SQLite file, light enough for a Raspberry Pi.

Pocket Split on an iPhone: the Lisbon week group with expenses in euros, dollars and pounds and your share on each linePocket Split on an iPhone: the Lisbon week group with expenses in euros, dollars and pounds and your share on each line

Groups

One group for each pot of money.

A trip, a flat or a dinner gets its own group with a main currency. Expenses are listed by month with a monthly total, and every line shows who paid, what it was in the group currency and what you owe or lent.

The Lisbon week group: expenses for fuel, a lunch paid in dollars and souvenirs paid in pounds, each with what you owe or lentThe Lisbon week group: expenses for fuel, a lunch paid in dollars and souvenirs paid in pounds, each with what you owe or lent

Expenses

Any currency, any split.

Pick the currency on the expense and the day's exchange rate is looked up and saved with it, so balances never drift. Then split evenly, by shares, by percentage or by exact amounts, and the parts always add up to the cent.

  • Rates from the ECB via Frankfurter, with a fallback for about 160 currencies
  • Type your own rate if your bank charged a different one
  • Categories with icons, notes, and your own categories from the form
A new 96 dollar boat tour in a euro group, converted at 0.9218 and split 40, 30 and 30 per cent between three peopleA new 96 dollar boat tour in a euro group, converted at 0.9218 and split 40, 30 and 30 per cent between three people

Settle up

The fewest payments to get even.

Balances show what each person paid minus their share. Settle up pairs the biggest debtor with the biggest creditor, so a group of n people needs at most n minus 1 payments. Mark one as paid and it is recorded as a reimbursement.

  • Balances always in the group's main currency
  • Record any other payment between two people by hand
Balances on an iPhone: Marko is owed 404.01 euros, and Jelena and Alex each have one payment to Marko to mark as paidBalances on an iPhone: Marko is owed 404.01 euros, and Jelena and Alex each have one payment to Marko to mark as paid

Stats

See where the money went.

Each group has its total, the cost per head and your own share, spending by month and by category, who paid against whose share, and which currencies were used, all converted at the rate saved on each expense.

  • Reports for any period, category and person
  • Export a report as a PDF, a group as JSON or CSV
Stats for the Lisbon week: 1,754.70 euros spent, a chart by month, spending by category and the currencies usedStats for the Lisbon week: 1,754.70 euros spent, a chart by month, spending by category and the currencies used

And the rest of it

  • Your position everywhere

    Home shows what you owe and are owed across all groups, per currency, your share this month and the latest activity.

  • Strictly per person

    A group is seen only by the person who created it and the accounts linked to its people. Admins see no one else's groups.

  • Works with your other apps

    Other Pocket apps you allow in Pocket Core can read your groups or add shared expenses. Pocket Kitchen posts a shopping trip as one, marked with the app's name.

  • An API for shortcuts

    Personal API tokens let an iOS Shortcut or a script add expenses, look up a rate, or feed a dashboard widget.

Install

One container, one volume.

Pocket Split is one Go binary with its data in a single SQLite file. Start the container, open port 8080 and create your account. Add DEMO_DATA=true and AUTH_MODE=none to look around a sample trip and flat share first.

On a Pocket Box it is already installed, with sign-in through Pocket Core.

Every setting in the README →

docker run -d --name pocket-split -p 8080:8080 \
  -v ./data:/data -e TZ=Europe/Berlin \
  ghcr.io/abjelosevic88/pocket-homelab-cost-split:latest
# open http://localhost:8080 and create your account