Data and databases · Edition No. 62 · 26 Oct 2026

sqitchers/sqitch

Applies database changes in dependency order, written as plain scripts in each engine's own dialect.

← Data and databasesRead the whole edition →
Sqitch: database changes in the right order. Plain scripts applied in dependency order.

3200 stars · MIT (named in the About sidebar and on the Perl archive) · v1.6.1 (2026-01-06), settled from metacpan.org; GitHub shows no releases and the page header reads v1.6.2-dev · Track this in Scout

Applies database changes in dependency order, written as plain scripts in each engine's own dialect.

Verified26 Oct 2026

Radar check

What we found when we opened it. Every bar is one fact, with its date.

Alive90

Last code pushed 26 Sep 2026, 29 days before this check.

Releases50

Latest release v1.6.1 on 6 Jan 2026.

Maturity100

Public since January 2012, a little over 14 years.

Adoption70

3,178 stars and 215 forks.

Activity25

2 commits and 3 new issues in the last 90 days.

Community80

67 contributors. 2 pull requests merged in 90 days.

Security40

No security policy file says how to report a problem. No published security advisories.

Licence MIT: permissive: use it for anything, keep the notice
How the bars are scored
  • Alive. Days since the last code push: a week or less 100, a month 90, three months 70, six months 50, a year 30, eighteen months 15, older 0.
  • Releases. Age of the latest GitHub release, on a similar scale; no bar when the project publishes no releases.
  • Maturity. Age of the project: eight years 100, five 90, three 70, two 55, one 40, six months 25, younger 10.
  • Adoption. Stars on a log scale: 100,000 stars is 100, 10,000 is 80, 1,000 is 60, 100 is 40.
  • Activity. Commits in the last 90 days: 300 or more 100, 100 85, 30 65, 10 45, any 25.
  • Community. People who have contributed: 100 or more 100, 30 80, 10 60, 5 40, 2 25, one 10.
  • Security. A published security policy 80, none 40; published advisories are listed, not scored.

Checked by Repo Radar on 26 Oct 2026 from the repository on GitHub. Covered in Edition 62.

▶Repo detailsthe review · specs · pros & cons · install

What it does

Each change is a script written in the native language of the target database, so a PostgreSQL change is PostgreSQL and an Oracle change is Oracle. A plan file records the changes and what each one depends on, and Sqitch works out the order from those dependencies rather than from numbered file names. The dependency tracking works across separate projects, so one project's change can require another's. Until a project is tagged and released, its deploy scripts can still be edited freely, which is unusual and useful during development. Twelve engines are supported, with stated minimum versions: PostgreSQL 8.4, YugabyteDB 2.6, CockroachDB 21, SQLite 3.8.6, MySQL 5.1, MariaDB 10.0, Oracle 10g, Firebird 2.0, Vertica 7.2, Exasol 6.0, ClickHouse 25.8 and Snowflake. It writes no SQL on anyone's behalf and reads no model definitions: there is no code that turns a class into a table, and that absence is deliberate.

Why it matters

Who it suits. Teams that write SQL by hand and want the ordering problem solved without a framework deciding how the schema is described. It suits anyone running more than one engine, or anyone who has had a numbered migration applied twice. Skip it if your framework already owns the schema, because Django, Rails and Laravel each bring their own system and two systems managing one database is worse than either.

Verdict. Mature, careful software, and the installation is the part to think about. Version 1.6.1 was released on 6 January 2026 and the repository header already shows 1.6.2 in development, so it is maintained. The project is written in Perl, which is why the install differs from everything else in today's list: use the packaged version from your operating system rather than building it. The twelve-engine support is not padding — the same approach works unchanged across them, which is rare. If you want one small binary and a simpler model, amacneil/dbmate and pressly/goose are both excellent and both use numbered migrations instead of dependencies.

Stars3200
LicenceMIT (named in the About sidebar and on the Perl archive)
Latestv1.6.1 (2026-01-06), settled from metacpan.org; GitHub shows no releases and the page header reads v1.6.2-dev
Good
  • Changes are plain SQL in the engine's own dialect, with nothing in between.
  • Ordering comes from stated dependencies, so files do not need numbering.
  • Twelve database engines, with stated minimum versions for each.
Watch for
  • Written in Perl, so building it from source pulls in a toolchain most people would rather avoid.
  • Conflicts with a framework that already manages migrations.
  • 3,200 stars, and the GitHub releases page is empty — the versions are published to the Perl archive instead, which makes the project look quieter than it is.
Similar repositories
Install
# Debian or Ubuntu
sudo apt-get install sqitch libdbd-pg-perl
# macOS
brew install sqitch
sqitch init myproject --engine pg
sqitch add users -n "Add the users table"
# write the SQL in deploy/users.sql, revert/users.sql and verify/users.sql
sqitch deploy db:pg://localhost/mydb
Screenshots
sqitchers/sqitch: GitHub preview card

Get the next edition in your inbox

A dozen repositories, opened and checked. The licence read, the last release dated, and the ones that did not make it named with the reason. It is the half most lists leave out.

No tracking pixels. One click to leave. The archive stays free either way.

We use your address to send the edition and nothing else. Confirm by email, leave in one click. How we handle it.