Medici is a minimalistic, self-hostable alternative to Splitwise for managing group expenses. Named after the Florentine House of Medici, it focuses on simplicity and privacy while providing all the essential features you need.
- Privacy-first: Self-host your financial data instead of trusting third parties
- Minimalistic: Clean, distraction-free interface with only essential features
- Easy deployment: Single Docker Compose command to get started
- No subscriptions: Own your data, no recurring fees
- Open Source: Fully transparent codebase, no hidden agendas
- No tracking: No ads, analytics, or data collection
- No limits: Unlimited pools, friends, and expenses without hidden fees
- Pools: Create groups ("pools") to organize expenses by context (roommates, trips, etc.)
- Friend Management: Add friends and organize them into relevant pools
- Smart Splitting:
- Set default split percentages per pool for quick expense entry
- Split expenses evenly or with custom percentages
- Automatic debt simplification to minimize transactions
- Expense Tracking:
- Categorize expenses for better organization
- Add detailed descriptions and notes
- Track who paid and who owes what
- Spending Analytics: View top spending categories
- Debt Overview: See who owes you money and how much you owe others at a glance
- Payment Integration: Add Venmo handles for easy payment requests and settlements
- Self-hosted: Keep your financial data on your own infrastructure
- Open Source: Full transparency and customizability
- No tracking: No analytics, ads, or data collection
| Friends View | Profile View |
|---|---|
![]() |
![]() |
| Roommates | Yosemite Trip |
|---|---|
![]() |
![]() |
The easiest way to get Medici running is with Docker Compose:
curl -O https://raw.githubusercontent.com/mrkaye97/medici/main/compose.example.yaml
docker compose -f compose.example.yaml upThen visit http://localhost:3000 to get started.
For production, make sure to change AUTH_SECRET_KEY to a secure value in the compose file.
For development or if you prefer running without Docker:
Prerequisites:
- Rust (latest stable version)
- Node.js (v18 or higher)
- pnpm package manager
- PostgreSQL (v12 or higher)
- just command runner
- diesel_cli for database migrations
Detailed Setup Steps:
- Install Prerequisites:
# Install Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env
# Install diesel CLI
cargo install diesel_cli --no-default-features --features postgres
# Install just
cargo install just
# Install Node.js and pnpm (using your preferred method)
# On macOS with Homebrew:
brew install node pnpm- Database Setup:
Run the database with docker compose: docker compose up -d
- Clone and Configure:
# Clone the repository
git clone https://github.com/your-username/medici.git
cd medici
# Set up environment files
just set-env-backend
just set-env-frontend
# Review and edit .env files as needed
cat server/.env
cat frontend/.env- Initialize and Start:
# Run the complete setup (installs dependencies, runs migrations)
just setup
# Start development servers in separate terminals:
# Terminal 1: Frontend (React dev server)
cd frontend && pnpm dev
# Terminal 2: Backend (Rust server with hot reload)
cd server && cargo watch -x runThe development setup will be available at:
- Frontend:
http://localhost:3001 - Backend API:
http://localhost:8000




