kinetis / migrations
A thin database migration runner for Kinetis — raw SQL up()/down() migrations, no fluent DDL builder, no schema-diffing.
Requires
- php: ^8.4
- kinetis/framework: ^1.2.5
- kinetis/persistence: ^1.1.1
Requires (Dev)
- infection/infection: ^0.35.0
- phpstan/phpstan: ^2.2.8
- phpunit/phpunit: ^12.5.33
- vimeo/psalm: ^6.16.1
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
kinetis/migrations
A thin database migration runner for Kinetis
Part of Kinetis, a non-blocking PHP framework for API-first applications, developed in the kinetis-dev/kinetis monorepo.
Raw SQL up()/down() migrations, tracked in a kinetis_migrations
table, run through migrate* commands registered on
vendor/bin/kinetis. No fluent
DDL builder, no schema-diffing — the same "thin, not an ORM" shape as
kinetis/query-builder.
// migrations/20260810143000_create_orders_table.php use Amp\Mysql\MysqlLink; use Amp\Postgres\PostgresLink; use Kinetis\Migrations\Migration; return new class implements Migration { public function up(MysqlLink|PostgresLink $db): void { $db->execute(<<<'SQL' CREATE TABLE orders ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, customer_id BIGINT UNSIGNED NOT NULL, status VARCHAR(20) NOT NULL DEFAULT 'pending', created_at DATETIME NOT NULL ) SQL); } public function down(MysqlLink|PostgresLink $db): void { $db->execute('DROP TABLE orders'); } };
vendor/bin/kinetis migrate # runs every pending migration vendor/bin/kinetis migrate:rollback # rolls back the most recently applied one vendor/bin/kinetis migrate:status # lists applied/pending migrations vendor/bin/kinetis migrate:make <description>
Provides
Installing this package is what opts it in — it registers the
following automatically, through the extra.kinetis declaration in its
composer.json (see
kinetis.dev/docs/cli.html):
- Commands:
migrate,migrate:rollback,migrate:status, andmigrate:makeonvendor/bin/kinetis. All four run without the application's bootstrap (bootstrap: false) — they readDB_*directly, so they work in bare contexts (CI, an init container) with nothing but environment variables. - Events:
Kinetis\Migrations\Events\MigrationAppliedandMigrationRolledBack, dispatched once per migrationmigrate/migrate:rollbackactually runs. See kinetis.dev/docs/events.html for the full list across every package.
That's the entire extra.kinetis surface — no service bindings,
routes, middleware, event listeners it registers itself, or MCP tools.
Configuration
The migrate* commands read the same DB_* keys kinetis/persistence
documents (DB_CONNECTION/DB_HOST/DB_NAME/DB_USER/DB_PASSWORD/
DB_PORT, ...) from the environment or .env, plus one key of this
package's own:
| Key | Default | Purpose |
|---|---|---|
MIGRATE_CONNECTION_NAME |
default |
Which named DB_* block to migrate; the --connection=<name> flag wins over it. |
Full reference across every package: kinetis.dev/docs/config.html.
Installation
composer require kinetis/migrations
Requires PHP 8.4+, kinetis/framework,
and kinetis/persistence.
Full documentation:
kinetis.dev/docs/migrations.html.
License
MIT — see LICENSE.