A centralized control plane for your database migrations. Secure, multi-engine, and modern.
Managing database migrations across disparate environments—staging, production, or customer-specific database instances—often leads to fragmented workflows and manual friction. Open Migration is a framework-agnostic, centralized tool born out of the need for a unified source of truth.
It provides a high-density interface to manage, track, and execute schema changes across multiple database engines—regardless of the application's underlying framework—from a single, secure control plane. No more context switching or fragmented logs; just one platform for all your migrations.
- 🚀 Centralized Dashboard: A single overview of all your connected databases and their migration statuses.
- 🔧 Multi-Engine Support: Native support for executing migrations on SQLite, PostgreSQL, and MySQL.
- 📦 SCM Integration: Fetch migration files directly from GitHub or GitLab using secure, encrypted personal access tokens.
- 🔐 Secure by Design: Master password authentication and encrypted storage for all database and API secrets.
- 🎨 Premium UI: A modern, dark-mode first interface built with Nuxt UI and Tailwind CSS v4, featuring glassmorphism and smooth micro-animations.
- 🕒 Activity Tracking: Detailed audit logs of migration executions and health checks for all connections.
The high-density dashboard provides a status of all your database, and recent execution history.
Manage SQLite, PostgreSQL, and MySQL connections seamlessly with a unified interface designed for efficiency.
Link your GitHub or GitLab repositories with encrypted tokens and configure migration paths with instant connection feedback.
Drill down into specific database instances to view full execution history, logs, and pending schema shifts.
- Frontend: Nuxt 4 + Nuxt UI
- Styling: Tailwind CSS v4
- ORM / Internal Storage: Drizzle ORM + SQLite
- Languages: TypeScript
- Node.js:
> 18.x - Internal Database: SQLite (bundled)
-
Clone the repository:
git clone [repository-url] cd open-migration -
Configure environment variables: Copy the example and fill in the secrets:
cp .env.example .env
Note: See Generating Secrets for details on setting up secure environment variables.
-
Install dependencies:
pnpm install
-
Initialize the application database:
pnpm run migrate:up
-
Start the development server:
pnpm run dev
For production-ready deployments, we provide a Docker configuration that bundles the environment and persists data.
-
Prepare your
.env: Ensure.envexists withENCRYPTION_SECRETandSESSION_PASSWORDcorrectly set. (See Generating Secrets) -
Spin up the container:
docker compose up -d --build
-
Initialization: The application handles internal database migrations automatically on startup. No extra commands are typically required.
The application will be available at http://localhost:3000.
| Variable | Description | Requirement |
|---|---|---|
ENCRYPTION_SECRET |
Used to encrypt SCM tokens and DB credentials | Min 32 chars |
SESSION_PASSWORD |
Used for admin session signing | Min 32 chars |
DATABASE_PATH |
Path to the SQLite storage file | ./.data/sqlite.db |
Both ENCRYPTION_SECRET and SESSION_PASSWORD MUST be at least 32 characters long. You can generate secure secrets using either Node.js or OpenSSL:
Option 1: Node.js
node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"Option 2: OpenSSL (Shell)
openssl rand -base64 32On the first launch (either via Docker or Local), follow the setup wizard to create your Master Password. This will be used to encrypt all sensitive data.
Built with ❤️ for the Engineering Community



