{"adoption": {"forks": 243, "observed_at": "2026-08-28T04:07:46.005531+00:00", "stars": 3146}, "canonical_url": "https://ross.abutalabs.com/products/sqldef", "card": {"archived": false, "artifact_type": "cli-tool", "description": "Idempotent schema management for MySQL, PostgreSQL, SQLite, and SQL Server", "domain": ["databases", "developer-tools"], "enriched": true, "function": ["database", "developer-tools", "cli"], "health_score": 100, "homepage": "https://sqldef.github.io", "language": "Go", "license": "NOASSERTION", "license_family": "other", "maturity": "active", "member_repos": ["sqldef/sqldef"], "name": "sqldef/sqldef", "platform": ["windows", "cli", "wasm"], "pushed_at": "2026-08-25T13:43:18+00:00", "repo": "sqldef/sqldef", "stars": 3146, "tags": ["schema-migration", "declarative-migrations", "idempotent", "mysql", "postgresql", "sqlite", "sql-server", "mariadb", "tidb", "ddl-diff", "devops", "linux", "macos"], "topics": ["mysql", "postgresql", "schema-changes", "mssql", "sqlite3", "declarative-migrations", "sqldef", "database-migrations", "mariadb"], "urls": [], "use_cases": ["manage database schema as a single SQL file", "generate migrations from desired schema instead of writing them by hand", "diff two SQL schema files offline in CI", "apply idempotent schema changes safe to run repeatedly", "export current database schema to SQL", "preview DDL changes with a dry run before applying", "validate that database schema matches the schema file in CI/CD"], "what_it_is": "sqldef is a single-binary CLI tool for idempotent, declarative database schema management using plain SQL DDL files. It diffs the desired schema against the current database schema and generates the migrations needed to reach the desired state, with per-database commands for MySQL/MariaDB/TiDB, PostgreSQL, SQLite3, and SQL Server.", "when_to_avoid": ["you need versioned, sequential migration files with rollback history", "your workflow depends on ORM-managed migrations (e.g., Rails, Django, Alembic)", "you use a database other than MySQL/MariaDB/TiDB, PostgreSQL, SQLite3, or SQL Server"], "when_to_choose": ["you prefer plain SQL DDL over ORM or DSL-based migration tools", "you want declarative, idempotent schema management across MySQL, PostgreSQL, SQLite, and SQL Server", "you need a dependency-free single binary for schema drift detection in CI pipelines", "you want to generate up (and down) migration DDLs by diffing schema files"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/sqldef", "repo": "sqldef/sqldef", "role": "main", "score": 95}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:46.005531+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T07:25:58.063821+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e5eca30ecd9f65ea8aa440a54694c35318022bfd429c6d4dca06919ed0966044", "fetched_at": "2026-08-28T04:07:46.005531+00:00", "kind": "readme", "missing": false, "url": "https://github.com/sqldef/sqldef"}, {"content_hash": "ceabe6390af0d68ebce774351acecf554b7cd83b9b24ddaf0eff884256a5853c", "fetched_at": "2026-08-29T09:40:33.969158+00:00", "kind": "homepage", "missing": false, "url": "https://sqldef.github.io"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:46.005531+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T07:25:58.063821+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e5eca30ecd9f65ea8aa440a54694c35318022bfd429c6d4dca06919ed0966044", "fetched_at": "2026-08-28T04:07:46.005531+00:00", "kind": "readme", "missing": false, "url": "https://github.com/sqldef/sqldef"}, {"content_hash": "ceabe6390af0d68ebce774351acecf554b7cd83b9b24ddaf0eff884256a5853c", "fetched_at": "2026-08-29T09:40:33.969158+00:00", "kind": "homepage", "missing": false, "url": "https://sqldef.github.io"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T07:25:58.063821+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e5eca30ecd9f65ea8aa440a54694c35318022bfd429c6d4dca06919ed0966044", "fetched_at": "2026-08-28T04:07:46.005531+00:00", "kind": "readme", "missing": false, "url": "https://github.com/sqldef/sqldef"}, {"content_hash": "ceabe6390af0d68ebce774351acecf554b7cd83b9b24ddaf0eff884256a5853c", "fetched_at": "2026-08-29T09:40:33.969158+00:00", "kind": "homepage", "missing": false, "url": "https://sqldef.github.io"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:07:46.005531+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:46.005531+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:46.005531+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T07:25:58.063821+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e5eca30ecd9f65ea8aa440a54694c35318022bfd429c6d4dca06919ed0966044", "fetched_at": "2026-08-28T04:07:46.005531+00:00", "kind": "readme", "missing": false, "url": "https://github.com/sqldef/sqldef"}, {"content_hash": "ceabe6390af0d68ebce774351acecf554b7cd83b9b24ddaf0eff884256a5853c", "fetched_at": "2026-08-29T09:40:33.969158+00:00", "kind": "homepage", "missing": false, "url": "https://sqldef.github.io"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:46.005531+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:46.005531+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T07:25:58.063821+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e5eca30ecd9f65ea8aa440a54694c35318022bfd429c6d4dca06919ed0966044", "fetched_at": "2026-08-28T04:07:46.005531+00:00", "kind": "readme", "missing": false, "url": "https://github.com/sqldef/sqldef"}, {"content_hash": "ceabe6390af0d68ebce774351acecf554b7cd83b9b24ddaf0eff884256a5853c", "fetched_at": "2026-08-29T09:40:33.969158+00:00", "kind": "homepage", "missing": false, "url": "https://sqldef.github.io"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:46.005531+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:46.005531+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:46.005531+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T07:25:58.063821+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e5eca30ecd9f65ea8aa440a54694c35318022bfd429c6d4dca06919ed0966044", "fetched_at": "2026-08-28T04:07:46.005531+00:00", "kind": "readme", "missing": false, "url": "https://github.com/sqldef/sqldef"}, {"content_hash": "ceabe6390af0d68ebce774351acecf554b7cd83b9b24ddaf0eff884256a5853c", "fetched_at": "2026-08-29T09:40:33.969158+00:00", "kind": "homepage", "missing": false, "url": "https://sqldef.github.io"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:46.005531+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:46.005531+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T07:25:58.063821+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e5eca30ecd9f65ea8aa440a54694c35318022bfd429c6d4dca06919ed0966044", "fetched_at": "2026-08-28T04:07:46.005531+00:00", "kind": "readme", "missing": false, "url": "https://github.com/sqldef/sqldef"}, {"content_hash": "ceabe6390af0d68ebce774351acecf554b7cd83b9b24ddaf0eff884256a5853c", "fetched_at": "2026-08-29T09:40:33.969158+00:00", "kind": "homepage", "missing": false, "url": "https://sqldef.github.io"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T07:25:58.063821+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e5eca30ecd9f65ea8aa440a54694c35318022bfd429c6d4dca06919ed0966044", "fetched_at": "2026-08-28T04:07:46.005531+00:00", "kind": "readme", "missing": false, "url": "https://github.com/sqldef/sqldef"}, {"content_hash": "ceabe6390af0d68ebce774351acecf554b7cd83b9b24ddaf0eff884256a5853c", "fetched_at": "2026-08-29T09:40:33.969158+00:00", "kind": "homepage", "missing": false, "url": "https://sqldef.github.io"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T07:25:58.063821+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e5eca30ecd9f65ea8aa440a54694c35318022bfd429c6d4dca06919ed0966044", "fetched_at": "2026-08-28T04:07:46.005531+00:00", "kind": "readme", "missing": false, "url": "https://github.com/sqldef/sqldef"}, {"content_hash": "ceabe6390af0d68ebce774351acecf554b7cd83b9b24ddaf0eff884256a5853c", "fetched_at": "2026-08-29T09:40:33.969158+00:00", "kind": "homepage", "missing": false, "url": "https://sqldef.github.io"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T07:25:58.063821+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e5eca30ecd9f65ea8aa440a54694c35318022bfd429c6d4dca06919ed0966044", "fetched_at": "2026-08-28T04:07:46.005531+00:00", "kind": "readme", "missing": false, "url": "https://github.com/sqldef/sqldef"}, {"content_hash": "ceabe6390af0d68ebce774351acecf554b7cd83b9b24ddaf0eff884256a5853c", "fetched_at": "2026-08-29T09:40:33.969158+00:00", "kind": "homepage", "missing": false, "url": "https://sqldef.github.io"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 86}, "computed_at": "2026-09-03T02:39:23.370411+00:00", "flags": ["no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2931, "days_push": 8, "days_rel": 14, "gap_med": 1, "n_releases_24m": 150}, "score": 95, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}