Installation Guide
This guide will walk you through setting up Midday locally for development or self-hosting. Midday is a monorepo built with modern tools and requires several services to run.Prerequisites
Before you begin, ensure you have the following installed:Required Tools
Bun
Version 1.3.10 or higher
Node.js
Version 20 or higher (for some dependencies)
Git
For cloning the repository
Docker
For running Supabase locally
System Requirements
- RAM: 8GB minimum, 16GB recommended
- Storage: 10GB free space
- OS: macOS, Linux, or Windows (with WSL2)
Clone the Repository
Install Dependencies
Midday uses Bun for package management:This will install all dependencies across the monorepo, including:
- Next.js 16 with React 19
- Supabase client libraries
- tRPC for type-safe APIs
- Tauri for desktop apps
- All shared packages
The monorepo uses Bun workspaces. Dependencies in
apps/* and packages/* are automatically linked.Set Up Environment Variables
Midday requires several environment variables for different services.Dashboard Environment Variables
Copy the example environment file for the dashboard:The
.env file contains configuration for:For local development, you only need Supabase variables. Banking providers, AI, and other services can be added later.
Set Up Supabase
Midday uses Supabase for database, authentication, storage, and real-time features.Option 1: Use Supabase Cloud (Recommended for Development)
- Sign up at supabase.com
- Create a new project
- Go to Settings → API to get your keys:
- Project URL
- Anon (public) key
- Service role key
- Add these to your
.envfile
Supabase Cloud has a generous free tier perfect for development.
Option 2: Run Supabase Locally
Install Supabase CLI and run locally:This will start:
- PostgreSQL database (port 54322)
- PostgREST API (port 54321)
- Auth server (port 54324)
- Storage server (port 54325)
- Realtime server (port 54326)
- Supabase Studio (port 54323)
.env:Set Up Banking Providers (Optional)
To enable bank connections, you need credentials from banking providers.Plaid (US & Canada)
- Sign up at plaid.com
- Create an application in sandbox mode
- Get your Client ID and Secret
- Add to
.env:
Plaid’s sandbox mode allows testing with fake bank credentials without connecting real banks.
Teller (US)
- Sign up at teller.io
- Generate a certificate for authentication
- Base64 encode your certificate and private key
- Add to
.env:
GoCardLess (Europe)
- Sign up at gocardless.com
- Access the Bank Account Data product
- Get your Secret ID and Secret Key
- Configure in Supabase (stored encrypted in database)
GoCardLess credentials are stored in the database, not environment variables, for security.
Run the Development Servers
Now you’re ready to run Midday locally!Start All Services
From the root directory, start all services:This starts:
- Dashboard - http://localhost:3001 (Main app)
- API - http://localhost:3003 (Backend)
- Worker - Background job processor
- Website - http://localhost:3000 (Marketing site)
Access the Application
Open your browser and navigate to:
- Dashboard: http://localhost:3001
- Supabase Studio: http://localhost:54323 (if running locally)
Verify Installation
Create Test Account
- Navigate to http://localhost:3001
- Click “Sign Up”
- Enter your email and password
- Complete the onboarding flow
In development, email verification is disabled by default. Check your Supabase project settings to enable it.
Troubleshooting
Port already in use
Port already in use
If ports 3001 or 3003 are already in use:
Supabase connection error
Supabase connection error
If you can’t connect to Supabase:
- Verify Docker is running:
docker ps - Check Supabase is started:
supabase status - Verify environment variables are correct
- Check firewall isn’t blocking ports 54321-54326
Banking provider errors
Banking provider errors
If bank connections aren’t working:
- Verify you’re using sandbox/test credentials
- Check provider status pages:
- Ensure environment variables are properly set
- Check API logs for detailed errors
Build errors
Build errors
If you encounter build errors:
TypeScript errors
TypeScript errors
If you see TypeScript errors:
Build for Production
To build Midday for production:Next Steps
Now that Midday is running locally:Architecture
Learn about the monorepo structure and how packages work together
API Reference
Explore the tRPC API and learn how to add new endpoints
Database Schema
Understand the Supabase database schema and relationships
Contributing
Learn how to contribute to Midday
Development Tips
Useful Commands
Monorepo Structure
Hot Reload
Next.js and Turbopack provide instant hot reload:- Edit any file in
apps/dashboard/src - Changes appear immediately in the browser
- No manual restart needed
Need help? Join our community or open an issue on GitHub.