Prerequisites
Before you begin, ensure you have:- Docker and Docker Compose installed
- Git to clone the repository
- Node.js 20+ and pnpm (for running the desktop client)
- A GitHub or Google OAuth application
Step 1: Clone the Repository
Step 2: Create OAuth Application
You need at least one OAuth provider. Choose GitHub, Google, or both.- GitHub OAuth
- Google OAuth
- Go to GitHub Developer Settings
- Click New OAuth App
- Fill in the details:
- Application name: Vibe Kanban Local
- Homepage URL:
http://localhost:3000 - Authorization callback URL:
http://localhost:3000/v1/oauth/github/callback
- Click Register application
- Copy the Client ID
- Click Generate a new client secret and copy it
Step 3: Configure Environment
Create a.env.remote file in the repository root:
.env.remote:
.env.remote
PUBLIC_BASE_URL (your public URL, e.g. https://kanban.example.com) and REMOTE_SERVER_PORTS=0.0.0.0:3000:8081 so the server is reachable from other hosts. Defaults keep local dev unchanged.
Step 4: Start the Stack
From thecrates/remote directory, start all services:
- PostgreSQL on port 5433 (external) / 5432 (internal)
- ElectricSQL on port 3000 (internal only, used by Remote Server for real-time sync)
- Remote Server on port 3000 (external) / 8081 (internal)
Step 5: Access the Web Interface
Open http://localhost:3000 in your browser. You should see the Vibe Kanban Cloud login page. Sign in with your configured OAuth provider (GitHub or Google).Step 6: Connect the Desktop Client (Optional)
To use the desktop client with your local server:Stopping the Stack
To stop all services:Troubleshooting
Database connection errors
Database connection errors
Ensure the database is healthy before the server starts:
OAuth callback errors
OAuth callback errors
Verify your OAuth callback URLs match exactly:
- GitHub:
http://localhost:3000/v1/oauth/github/callback - Google:
http://localhost:3000/v1/oauth/google/callback
ElectricSQL fails to connect
ElectricSQL fails to connect
ElectricSQL requires the
electric_sync database user, which is created automatically by the Remote Server on first startup. If ElectricSQL fails to connect:- Ensure the Remote Server has started successfully and run its migrations
- Check that
ELECTRIC_ROLE_PASSWORDis set in your.env.remote - Restart the stack — ElectricSQL will retry the connection
Port already in use
Port already in use
If port 3000 is in use, you can change it in Update your OAuth callback URLs accordingly.
docker-compose.yml:Next Steps
Once you have local development working, you can:- Deploy to Fly.io for production (coming soon)
- Deploy with Docker Compose on your own server (coming soon)