mg
Version, currently 0.5.05 versions
github.com/hkalexling/mg
A minimal database migration tool for Crystal
9 stars
6 dependents
License: MIT
Installation
# Add this to your shard.yml
dependencies:
mg:
github: hkalexling/mg
version: ~> 0.5.0Then run:
shards installshard.yml
- Crystal
1.0.0- License
- MIT
- Author
- Alex Ling
Dependencies
Runtime Dependencies
- db*github: crystal-lang/crystal-db
Development Dependencies
README
MG
A minimal database migration tool for Crystal.
Installation
- Add the dependency to your
shard.yml:
dependencies:
mg:
github: hkalexling/mg
- Run
shards install
Usage
First define some database versions by inheriting from MG::Base. Here are two examples:
# migration/users.1.cr
class CreateUser < MG::Base
def up : String
<<-SQL
CREATE TABLE users (
username TEXT NOT NULL,
password TEXT NOT NULL,
email TEXT NOT NULL
);
SQL
end
def down : String
<<-SQL
DROP TABLE users;
SQL
end
# Optional lifecycle method to be executed after the `up` query.
def after_up(conn : DB::Connection)
puts "Table users created"
end
# Optional lifecycle method to be executed after the `down` query.
def after_down(conn : DB::Connection)
puts "Table users dropped"
end
end
# migration/users_index.2.cr
class UserIndex < MG::Base
def up : String
<<-SQL
CREATE UNIQUE INDEX username_idx ON users (username);
CREATE UNIQUE INDEX email_idx ON users (email);
SQL
end
def down : String
<<-SQL
DROP INDEX username_idx;
DROP INDEX email_idx;
SQL
end
end
Note that the migration files must be named as [filename].[non-negative-version-number].cr.
Now require the relevant files and the migrations in your application code, and start the migration.
require "mg"
require "sqlite3"
require "./migration/*"
Log.setup "mg", :debug
DB.open "sqlite3://file.db" do |db|
mg = MG::Migration.new db
# Migrates to the latest version (in our case, 2)
mg.migrate
# Migrates to a specific version
mg.migrate to: 1
# Migrates down to version 0
mg.migrate to: 0
# Returns the current version
puts mg.user_version # 0
end
Contributors
- Alex Ling - creator and maintainer
Documentation
Built from the current release. The first visit to a release nobody has asked for starts its build.
Links
This release
- Version
0.5.0- Tagged
- Jul 11, 2021
- Commit
697e46e27cde- Crystal
1.0.0- Indexed
- yes
Dependents
Repository
github.com/hkalexling/mg
Metadata
- Created
- Aug 12, 2026
- Updated
- Sep 25, 2026
- Synced
- Sep 25, 2026
- Versions
- 5