⚠ Testversion — Inhalte sind nicht rechtsverbindlich
Version 3.0

Database Migrations. Professional Grade.

Deploy versioned SQL migrations to multiple databases simultaneously. SQL Server, PostgreSQL, MariaDB & MySQL — with enterprise-level safety and control.

~ RayMigrator
$ RayMigrator Migrate-Up --product MyApp --environment Production --run-mode Migrate
[INF] RayMigrator v3.0.0 starting...
[INF] Product: MyApp | Environment: Production
[INF] Repository connected (SQL Server)
[INF] Found 12 pending migrations
[OK] Release 2.1 / 001_create_users.sql (42ms)
[OK] Release 2.1 / 002_create_roles.sql (38ms)
[OK] Release 2.1 / 003_add_permissions.sql (55ms)
[OK] Release 2.2 / 001_alter_users_email.sql (21ms)
... 8 more migrations applied
Migration completed successfully.
12 applied | 0 skipped | 0 failed | 312ms total

Trusted across database platforms

SQL Server
PostgreSQL
MariaDB
MySQL

Everything you need for safe migrations

Built for teams that take database integrity seriously. Every feature designed to prevent disasters, not just manage them.

Multi-Target Deployment

Deploy one migration run to multiple targets simultaneously or successively. Sharded DBs, read replicas — one command.

Separate Repository Database

Track all migrations centralized, separate from targets. SQL Server + PostgreSQL + MariaDB in one repository.

Block-Level Progress Tracking

Individual SQL blocks tracked. Know exactly where a migration stopped, not just which file.

Transactional Safety

4 error handling modes: Terminate, Rollback, RollbackErrorOnly, RollbackRelease. Your data stays safe.

Hash Validation

SHA-256 integrity checks with 3 scopes: File, SqlBlocks, or Disabled. Detect unauthorized changes to executed migrations.

Rollback Support

Paired rollback files enable safe downgrades to any previous release. Always have an exit strategy.

Concurrency Protection

Check-and-insert locking pattern prevents concurrent migration runs. Safe for CI/CD pipelines and multi-instance deployments.

3 Run Modes

Migrate applies changes, Simulate shows what would happen, Validate checks integrity — without touching data.

Hierarchical Configuration

6-level raysettings.txt inheritance + 4-file appsettings.json hierarchy. One setup, every environment.

Out-of-Order Migrations

Run migrations out of sequence with --allow-out-of-order (-ooo). Ideal for parallel development across teams and branches.

Release-Based Execution

Migrations execute in release order first, then file order within each release. Predictable deployment across environments.

RunAlways Migrations

Mark files with RunAlways = true to re-execute on every run. Perfect for stored procedures, views, and seed data.

How it works

Four simple steps from writing migrations to verified deployments.

1

Write

Write SQL migrations with TOML metadata headers

.sql files with metadata
2

Configure

Define products, target groups, and environments in appsettings.json + raysettings.txt

appsettings.json
3

Run

Execute with CLI — choose your run mode for each deployment

Migrate | Simulate | Validate
4

Track

Block-level progress, checksums, and history archiving in a separate repository DB

SHA-256 verified

Powerful CLI, simple commands

Seven commands cover your entire migration lifecycle — from initial deployment to production rollbacks and orphaned run recovery.

~ Migrate-Up
$ RayMigrator Migrate-Up --product MyApp --environment Production --run-mode Migrate
[INF] Starting Migrate-Up for MyApp (Production)
[INF] Found 5 pending migrations
[OK] Release 2.0 / 001_create_orders.sql (34ms)
[OK] Release 2.0 / 002_create_payments.sql (28ms)
[OK] Release 2.1 / 001_add_order_status.sql (19ms)
 
Migration completed. 5 applied | 0 failed

Clean, layered architecture

Six cleanly separated layers following SOLID principles. Each layer has a clear responsibility and minimal coupling.

Console Layer

CLI entry point powered by System.CommandLine

Service Layer

Business logic orchestration and migration pipeline

Core Layer

Domain models, MigrationContext, and options

Infrastructure Layer

Database logging, hierarchical config, and transient error retry

Database Layer

19 SQL templates per DB type, advisory locking, and DAL implementations

Shared Layer

Common types, enums, and exception definitions

Elegant migration file format

TOML metadata headers embedded in SQL files. Your migrations stay valid SQL while carrying rich configuration.

001_create_users.sql
/*
[RayMigrator]
Description = "Create user authentication tables"
Environments = ["*"]
Targets = ["*"]
UseTransaction = true
RunAlways = false
RequireRollbackFile = true
*/
 
CREATE TABLE Users (
Id INT IDENTITY(1,1) PRIMARY KEY,
Username NVARCHAR(100) NOT NULL,
Email NVARCHAR(255) NOT NULL,
CreatedAt DATETIME2 DEFAULT GETUTCDATE()
);

TOML Metadata Block

Wrapped in a SQL comment block. Controls execution behavior, environment targeting, and transaction handling.

Environment Filtering

Target specific environments or use wildcards. Skip dev-only seed data in production.

Standard SQL

The migration body is plain SQL. No proprietary syntax, no XML, no learning curve.

6-Level Settings Inheritance

raysettings.txt cascades from global → product → target group → target → environment → release. Override only what you need.

Environment-Specific Files

Name files like 001_seed.Production.sql to run them only in specific environments. No config needed — just a naming convention.

AI-Powered

Let AI write your migrations

Paste your schema, describe your change, get production-ready migration files — with correct TOML metadata, rollback scripts, and database-specific SQL.

Your Schema
-- Your schema
CREATE TABLE Users (
    Id INT IDENTITY(1,1) PRIMARY KEY,
    Username NVARCHAR(100) NOT NULL,
    Email NVARCHAR(255) NOT NULL
);

↓ AI generates migration + rollback

RAYCOON AI — Migration Generator
-- Generated by RAYCOON AI for SQL Server
-- Input: "Add audit columns to the Users table"

/*
[RayMigrator]
Description = "Add audit columns to Users table"
Environments = ["*"]
Targets = ["*"]
UseTransaction = true
RunAlways = false
RequireRollbackFile = true
*/

ALTER TABLE Users
ADD CreatedAt DATETIME2 NOT NULL
        DEFAULT GETUTCDATE(),
    UpdatedAt DATETIME2 NULL,
    CreatedBy NVARCHAR(100) NOT NULL
        DEFAULT SYSTEM_USER;
GO

CREATE NONCLUSTERED INDEX IX_Users_CreatedAt
    ON Users(CreatedAt DESC);

The AI Playground understands your existing schema. Paste your CREATE TABLE statements, describe the change you need, and get production-ready migration files with proper TOML metadata, rollback scripts, and database-specific SQL idioms.

Migration GeneratorConfig BuilderSQL TranslatorMigration Reviewer

Coming soon as part of RayMigrator Pro

How RayMigrator compares

See how RayMigrator stacks up against popular migration tools.

FeatureRayMigratorFlywayLiquibaseEF Migrations
Separate Repository DB
Block-Level Progress Tracking
3 Run Modes (Migrate/Simulate/Validate)
Concurrency Protection
6-Level Settings Inheritance
Database Logging
Orphaned Run Recovery
Env Variable Substitution in SQL
Multi-Target Deployment
Multi-Database Support
Transactional DDL
SHA-256 Hash Validation
Paired Rollback Files
Config Hierarchy
CLI Tool
Pure SQL Files
TOML Metadata
Environment Targeting
Out-of-Order Migrations
RunAlways Migrations
Baseline Command
Environment-Specific SQL

What's next

RayMigrator is actively developed. Here's what we're working on.

Planned

Oracle Database Support

Full Oracle support with PL/SQL statement handling.

Planned

SQLite Support

Lightweight migrations for embedded and mobile applications.

Planned

User Manual

Comprehensive documentation covering all features and configuration options.

Get started in 3 steps

From zero to first migration in under 5 minutes.

1

Install RayMigrator

Terminal
$ dotnet tool install -g RayMigrator
2

Configure your project

appsettings.json
{
"RayMigrator": {
"Repository": {
"DatabaseType": "SqlServer",
"ConnectionString": "{ENV:REPO_CONNECTION}"
},
"Products": [{
"Alias": "MyApp",
"MigrationFilesRootDirectory": "./Migrations"
}]
}
}
3

Run your first migration

Terminal
$ RayMigrator Migrate-Up --product MyApp --environment Production --run-mode Migrate
[INF] Starting migration...
[OK] 001_init_schema.sql (45ms)
Migration completed successfully.

Questions?

Reach out — we're happy to help.