A modern, open-source expense splitting application that helps groups track shared expenses and automatically calculates who owes what to whom. Perfect for roommates, festivals, holidays, dinner parties, and any shared expenses.
Use it now at tabsplid.com - completely free, no ads, no registration required!
Try the demo at tabsplid.com/demo to see how it works.

- Smart payment calculation: Automatically calculates the most efficient way to settle debts
- Flexible expense splitting: Split expenses equally or among selected members
- Real-time updates: Changes are reflected immediately in the calculation
- No registration required: Create projects instantly without accounts and just send the generated link for your friends to collaborate
- Framework: FastAPI with Python
- Database: SQLModel for ORM
- Migrations: Alembic for database schema management
- Framework: React with TypeScript
- Build Tool: Vite for fast development and builds
- State Management: TanStack Query (React Query)
- Routing: React Router for navigation
- Styling: Tailwind CSS
The automatically generated REST API specification is available at tabsplid.com/docs.
Rate limiting is applied to all endpoints to prevent abuse.
-
Get the docker-compose.yml file from tabplid/docker-compose.yml:
curl -o compose.yml https://raw.githubusercontent.com/robin-moser/tabsplid/main/docker-compose.yml
-
Edit the environment variables in
docker-compose.yml
as needed. It's recommended to change the Mariadb passwords and to use a reverse proxy like Nginx or Traefik for public accessable deployments. -
Start with Docker Compose:
docker-compose up -d
-
Access the application:
- Frontend: http://localhost:3000
- API docs: http://localhost:8000/docs
-
Clone the repository:
git clone https://github.com/robin-moser/tabsplid.git cd tabsplid
-
Configure environment:
Optional: Edit the
frontend/.env
andbackend/.env
files to set custom environment variables like API URL, database connection, etc. -
Start the backend:
For local development, the application uses SQLite by default (no separate database setup required):
cd backend poetry install poetry run uvicorn app.main:app --reload --port 8000 # This creates a database.db file automatically
-
Start the frontend:
cd frontend npm install npm run dev
To add a new language:
- Create new locale files in
frontend/public/locales/{language-code}/
- Copy the structure from existing locale files (
en
,de
,es
) - Add the language to the dropdown in
LanguageDropdown.tsx