{"id":37067666,"url":"https://github.com/fairy-select/chronovoyage","last_synced_at":"2026-01-14T07:57:05.932Z","repository":{"id":254525872,"uuid":"846808962","full_name":"fairy-select/chronovoyage","owner":"fairy-select","description":"Simple database migration framework.","archived":false,"fork":false,"pushed_at":"2024-11-17T00:52:05.000Z","size":10745,"stargazers_count":1,"open_issues_count":6,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-05T06:41:15.931Z","etag":null,"topics":["database","migration"],"latest_commit_sha":null,"homepage":"https://chronovoyagemigration.net/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fairy-select.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-24T02:46:23.000Z","updated_at":"2025-10-08T09:20:41.000Z","dependencies_parsed_at":"2024-08-24T03:43:30.053Z","dependency_job_id":"04209772-d6e7-4b19-8c2b-a6ade4d42a23","html_url":"https://github.com/fairy-select/chronovoyage","commit_stats":null,"previous_names":["noritakaizumi/chronovoyage","fairy-select/chronovoyage"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/fairy-select/chronovoyage","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fairy-select%2Fchronovoyage","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fairy-select%2Fchronovoyage/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fairy-select%2Fchronovoyage/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fairy-select%2Fchronovoyage/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fairy-select","download_url":"https://codeload.github.com/fairy-select/chronovoyage/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fairy-select%2Fchronovoyage/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28413527,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T05:26:33.345Z","status":"ssl_error","status_checked_at":"2026-01-14T05:21:57.251Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["database","migration"],"created_at":"2026-01-14T07:57:05.176Z","updated_at":"2026-01-14T07:57:05.924Z","avatar_url":"https://github.com/fairy-select.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ChronoVoyage\n\n[![PyPI - Version](https://img.shields.io/pypi/v/chronovoyage.svg)](https://pypi.org/project/chronovoyage)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/chronovoyage.svg)](https://pypi.org/project/chronovoyage)\n![PyPI - License](https://img.shields.io/pypi/l/chronovoyage)\n[![Package Health | Snyk](https://snyk.io/advisor/python/chronovoyage/badge.svg)](https://snyk.io/advisor/python/chronovoyage)\n\n![logo](https://raw.githubusercontent.com/fairy-select/chronovoyage/main/assets/images/logo.jpeg)\n\nChronovoyage is a simple database migration framework.\n\n[Visit Documentation](https://chronovoyagemigration.net/)\n\n-----\n\n## Table of Contents\n\n- [Simple Usage](#simple-usage)\n- [Contributing](#contributing)\n- [Security Policy](#security-policy)\n- [License](#license)\n\n## Simple Usage\n\nTo use MariaDB version, you need the MariaDB development package (`libmariadb-dev` in apt).\n\n```shell\npip install chronovoyage[mariadb]\n```\n\n## Usage\n\nFirst, you should name and initialize a directory.\n\n```shell\nchronovoyage init my-project --vendor mariadb\ncd my-project\n```\n\nEdit `config.json`.\n\n```json\n{\n  \"$schema\": \"https://raw.githubusercontent.com/fairy-select/chronovoyage/main/schema/config.schema.json\",\n  \"vendor\": \"mariadb\",\n  \"connection_info\": {\n    \"host\": \"127.0.0.1\",\n    \"port\": 3306,\n    \"user\": \"mariadb\",\n    \"password\": \"password\",\n    \"database\": \"test\"\n  }\n}\n```\n\nCreate migration template directory.\n\n```shell\nchronovoyage add ddl initial_migration\n```\n\nIf you create DML,\n\n```shell\nchronovoyage add dml second_migration\n```\n\nWrite up sql to `go.sql`, and rollback sql to `return.sql`.\n\nThen, migrate.\n\n```shell\nchronovoyage migrate\n```\n\n## Contributing\n\nPlease read the following docs before you contribute to this repo:\n\n- [Contributing](CONTRIBUTING.md)\n- [Code Of Conduct](CODE_OF_CONDUCT.md)\n\n## Security Policy\n\nWe support the latest version based on GitHub's vulnerability alerts.\n\n[Security Policy](SECURITY.md)\n\n## License\n\n`chronovoyage` is distributed under the terms of the [MIT](https://spdx.org/licenses/MIT.html) license.\n\n[License](LICENSE.txt)\n\n## Roadmap\n\n- Support for\n    - [x] Python 3.8 or later\n    - [ ] Docker\n- Database support\n    - [x] MariaDB\n    - [ ] MySQL\n    - [ ] PostgreSQL\n- Migration file support\n    - [x] SQL (.sql)\n    - [ ] Shell script (.sh)\n- Commands\n    - ~~new~~ init\n        - [x] Create migration directory and config file\n    - ~~generate~~ add\n        - [x] Create migration files from template\n    - migrate\n        - [x] To latest\n        - [x] To specific version\n        - [x] From the beginning\n        - [x] From the middle\n        - --dry-run\n            - [ ] Show executing SQL\n        - [ ] Detect ddl or dml\n    - ~~status~~ current\n        - [x] Show current migration status\n    - rollback\n        - [x] To version\n    - test\n        - [ ] Check if every \"migrate -\u003e rollback\" operation means do nothing for schema\n        - [ ] If dml, the operation means do nothing for data (including autoincrement num)\n- Other\n    - [x] CLI logging\n    - [x] Documentation\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffairy-select%2Fchronovoyage","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffairy-select%2Fchronovoyage","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffairy-select%2Fchronovoyage/lists"}