{"id":48915406,"url":"https://github.com/block/schemabot","last_synced_at":"2026-06-17T20:00:55.180Z","repository":{"id":349871102,"uuid":"1204300413","full_name":"block/schemabot","owner":"block","description":"GitOps for database schemas","archived":false,"fork":false,"pushed_at":"2026-06-10T22:17:15.000Z","size":38865,"stargazers_count":2,"open_issues_count":41,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-06-10T22:22:18.119Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/block.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":"GOVERNANCE.md","roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-04-07T22:08:33.000Z","updated_at":"2026-06-10T22:12:10.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/block/schemabot","commit_stats":null,"previous_names":["block/schemabot"],"tags_count":26,"template":false,"template_full_name":"block/oss-project-template","purl":"pkg:github/block/schemabot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/block%2Fschemabot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/block%2Fschemabot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/block%2Fschemabot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/block%2Fschemabot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/block","download_url":"https://codeload.github.com/block/schemabot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/block%2Fschemabot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34463558,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-17T02:00:05.408Z","response_time":127,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-17T02:04:29.627Z","updated_at":"2026-06-17T20:00:55.142Z","avatar_url":"https://github.com/block.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# \u003ca href=\"./assets/schemabot-avatar.svg\"\u003e\u003cimg src=\"./assets/schemabot-avatar.svg\" alt=\"SchemaBot\" style=\"height: 1em; max-width: 100%;\"\u003e\u003c/a\u003e SchemaBot\n\nGitOps for database schemas. Define your desired schema in SQL files, open a PR, and SchemaBot plans and executes your schema changes safely.\n\n\u003e [!WARNING]\n\u003e **Experimental** — SchemaBot is under active development. APIs and configuration may change without notice.\n\n## Schema Changes via Pull Request\n\nOpen a PR with schema changes and SchemaBot handles the rest — plan, apply, and verify across environments:\n\n![SchemaBot PR Demo](./assets/pr-demo.gif)\n\n## Interactive CLI\n\nSchemaBot provides a fully interactive CLI for planning, applying, and monitoring schema changes:\n\n![SchemaBot CLI Demo](./assets/cli-demo.gif)\n\n## How It Works\n\nSchemaBot uses **declarative schema** — you describe the desired end state in SQL files, and SchemaBot figures out the DDL needed to get there:\n\n```sql\n-- schema/testapp/users.sql\nCREATE TABLE users (\n    id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,\n    name VARCHAR(255) NOT NULL,\n    email VARCHAR(255) NOT NULL,       -- add a column: just edit this file\n    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;\n```\n\nSchemaBot diffs your schema files against the live database, computes the DDL, and applies it:\n\n```\n$ schemabot plan -s ./schema -e staging\n\n  ALTER TABLE `users` ADD COLUMN `email` VARCHAR(255) NOT NULL\n\nPlan: 1 table to alter\n\n$ schemabot apply -s ./schema -e staging -y\n\nApply started: apply-a1b2c3d4\nstatus=running  progress=45%  table=users  rows=1.2M/2.7M  eta=3m\nstatus=completed\n```\n\nSchemaBot handles the full lifecycle:\n- **Plan** — diff desired vs current schema → compute DDL\n- **Apply** — execute DDL online using Spirit (MySQL) or PlanetScale deploy requests (Vitess)\n- **Progress** — track row copy progress, ETA, per-table/per-shard status\n- **Control** — `stop` (pause), `start` (resume), `volume` (adjust speed), `cutover` (trigger table swap), `revert` (roll back)\n\nSimple changes (e.g., adding a column) use instant DDL and complete in milliseconds. Operations that require a row copy (e.g., adding an index) run online without blocking reads or writes.\n\n## Quick Start\n\n```bash\nmake demo    # Start services, apply schema, seed data\nmake test    # Run all tests (unit + integration + e2e)\n```\n\nConnect to databases:\n```bash\nmake mysql              # SchemaBot storage DB (port 13371)\nmake mysql DB=staging   # Staging testapp (port 13372)\nmake mysql DB=production # Production testapp (port 13373)\n```\n\n## Architecture\n\nSee [docs/architecture.md](./docs/architecture.md) for the full documentation.\n\n## Configuration\n\nSee [docs/configuration.md](./docs/configuration.md) for setup instructions (local mode, gRPC mode, secret resolution).\n\n## Docs\n\nGeneral design docs are in the [docs](./docs/) folder.\n\n## Contributing\n\nContributors are welcome — see [CONTRIBUTING.md](./CONTRIBUTING.md).\n\nFor feature requests and bugs, [open an issue](https://github.com/block/schemabot/issues).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblock%2Fschemabot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fblock%2Fschemabot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblock%2Fschemabot/lists"}