No description
Find a file
Joakim Carlstein e6e4433018 feat(cli): rename extension short option from -e to -x
BREAKING CHANGE: if you've been using the `-e` short option you should change it to `-x` or use the long option name `--extension`
2023-12-20 09:27:43 +01:00
.changeset feat(cli): rename extension short option from -e to -x 2023-12-20 09:27:43 +01:00
.github ci: and now then? 2023-12-18 16:02:44 +01:00
.husky chore: first commit 🎉 2023-11-08 11:41:05 +01:00
bin chore: first commit 🎉 2023-11-08 11:41:05 +01:00
docs feat(cli): rename extension short option from -e to -x 2023-12-20 09:27:43 +01:00
packages feat(cli): rename extension short option from -e to -x 2023-12-20 09:27:43 +01:00
.editorconfig docs: split the getting started guide into two separate pages in the "introduction" section 2023-12-18 15:32:53 +01:00
.gitignore chore: first commit 🎉 2023-11-08 11:41:05 +01:00
.npmrc chore: add some package init defaults 2023-11-09 09:00:56 +01:00
.nvmrc chore: first commit 🎉 2023-11-08 11:41:05 +01:00
.prettierignore chore: first commit 🎉 2023-11-08 11:41:05 +01:00
.prettierrc chore: first commit 🎉 2023-11-08 11:41:05 +01:00
commitlint.config.js chore: first commit 🎉 2023-11-08 11:41:05 +01:00
LICENSE chore: first commit 🎉 2023-11-08 11:41:05 +01:00
package.json chore(deps): remove unused @manypkg/cli package 2023-12-19 10:33:05 +01:00
pnpm-lock.yaml chore(deps): upgrade ansis package 2023-12-19 14:34:54 +01:00
pnpm-workspace.yaml docs: first commit for the docs 2023-12-18 15:32:53 +01:00
README.md feat(cli): rename extension short option from -e to -x 2023-12-20 09:27:43 +01:00
turbo.json chore: remove dependencies from "build:watch" task as it can make the process halt/exit 2023-12-08 13:14:56 +01:00

Emigrate

The modern, modular and flexible migration tool for any database

It's effectively a successor of klei-migrate and Immigration.

📖 Read the documentation for more information!

Features

  • Database agnostic
    • Emigrate can migrate any database
  • Works at any scale
    • Supports any database as storage so multiple instances of the same app can share the same migration history
    • Supports multiple projects/apps doing migrations on the same database without interfering with each other
    • Uses smart locking to ensure only one instance migrates a certain migration at a time
    • Thanks to the smart locking it's safe to run migrations in parallel
  • Can be run inside containers
    • It's common for Docker or Kubernetes to kill containers with health checks if migrations takes too long to run
    • Emigrate makes sure the migration history does not get stuck in a locked state if that's the case
  • Supports any file type for your migration files
    • You can easily write migrations in JavaScript, TypeScript or plain SQL (or any other language)
    • JavaScript migration files written using CommonJS or ES modules (ESM) are supported out of the box
    • You can customize the template for your migration files to fit your needs (or use a plugin to do it for you)
  • Easy to debug
    • Emigrate will store any errors that occur during migration in the migration history so you can easily debug them

Installation

Install the Emigrate CLI in your project:

npm install @emigrate/cli
# or
pnpm add @emigrate/cli
# or
yarn add @emigrate/cli
# or
bun add @emigrate/cli

Usage

Create a new migration:

npx emigrate new -d migrations create some fancy table
# or
pnpm emigrate new -d migrations create some fancy table
# or
yarn emigrate new -d migrations create some fancy table
# or
bunx --bun emigrate new -d migrations create some fancy table

Will create a new empty JavaScript migration file with the name "YYYYMMDDHHmmssuuu_create_some_fancy_table.js" in the migrations directory.

License

Emigrate is licensed under the MIT license. See LICENSE for the full license text.