Split bills with friends and family. Track, calculate, and settle expenses together, with a focus on offline-first, collaborative data synchronization.
- Offline-first architecture. Works without internet, syncs when you're back online
- Real-time collaboration. Changes sync across devices instantly via Automerge CRDTs
- Multi-party expense splitting. Supports equal splits, custom amounts, and weighted percentages
- Settlement calculations. Automatically calculates who owes whom
- Receipt attachments. Attach photos of receipts to expenses
- PWA & Native apps. Available as a Progressive Web App and native Android/iOS apps
- Multi-language support. Internationalized with Lingui (English & Spanish for now)
- Migration support. Import your data from other proprietary apps (currently only Tricount is supported).
- Node.js 24+ (use
nvm useto set the correct version) - pnpm 10.14.0+
# Clone the repository
git clone https://github.com/HorusGoul/trizum.git
cd trizum
# Use correct Node version
nvm use
# Install dependencies
pnpm install# Start the PWA development server
cd packages/pwa
pnpm dev
# Or run commands from root
pnpm build # Build all packages
pnpm test # Run all tests
pnpm lint # Lint all packages
pnpm typecheck # Type check all packagescd packages/mobile
# Android
pnpm dev:android
# iOS
pnpm dev:iosWe welcome contributions! See our Contributing Guide for details on:
- Development setup and workflow
- Code style guidelines
- Testing requirements
- Pull request process
trizum is built as a monorepo with a local-first architecture. The core principle is that all data lives on the client first, with optional synchronization to a server for cross-device access.
- Local Changes. All user actions immediately update the local Automerge document
- Persistence. Documents are stored in IndexedDB for offline access
- Sync. When online, changes are synchronized via WebSocket to the server
- Conflict Resolution. Automerge CRDTs automatically merge changes from multiple devices
| Package | Description |
|---|---|
@trizum/pwa |
Main web application. React + Vite PWA with offline support |
@trizum/mobile |
Native mobile apps wrapper using Capacitor (Android & iOS) |
@trizum/server |
Sync server. Hono + Automerge repo for WebSocket synchronization |
@trizum/screenshots |
Automated screenshot generation for app stores using Playwright |
@trizum/eslint-config |
Shared ESLint configuration |
@trizum/prettier-config |
Shared Prettier configuration |
@trizum/tsconfig |
Shared TypeScript configuration |
This project is licensed under the MIT License. See the LICENSE file for details.
Horus Lugo 🚇 🚧 💻 📖 🎨 🛡️ 🔧 |
Mario Nachbaur 🤔 💻 🎨 |