Medici
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.
Why Medici?
- 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
Features
Core Functionality
- 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
Analytics & Insights
- 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
Privacy & Control
- Self-hosted: Keep your financial data on your own infrastructure
- Open Source: Full transparency and customizability
- No tracking: No analytics, ads, or data collection
Screenshots
View Pools
| Friends View | Profile View |
|---|---|
![]() |
![]() |
Pool Details
| Roommates | Yosemite Trip |
|---|---|
![]() |
![]() |
Add Expenses
Quick Start
Docker Compose (Recommended for Self-Hosting)
The easiest way to get Medici running in production is to run the compose.example.yaml file, which will pull the necessary Docker images. You'll need a .env for the backend like this:
DATABASE_URL=postgres://postgres:postgres@localhost:5442/medici
AUTH_SECRET_KEY=medici-key
and for the frontend like this:
VITE_API_URL=http://medici-server:8000
Local Development Setup
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:
# Start PostgreSQL (method varies by OS) # On macOS with Homebrew: brew services start postgresql # Create database and user psql postgres -c "CREATE DATABASE medici;" psql postgres -c "CREATE USER medici WITH PASSWORD 'medici';" psql postgres -c "GRANT ALL PRIVILEGES ON DATABASE medici TO medici;"
- 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 run
The development setup will be available at:
- Frontend:
http://localhost:3001 - Backend API:
http://localhost:8000




