{"id":35248717,"url":"https://github.com/nicolab/migratex","last_synced_at":"2026-04-07T06:31:13.252Z","repository":{"id":324471013,"uuid":"1097343117","full_name":"Nicolab/migratex","owner":"Nicolab","description":"Migratex is an agnostic migration toolkit library. It can be used to migrate database / data / files / binaries, etc from one version to another. Migrate anything! Anywhere! 🚀","archived":false,"fork":false,"pushed_at":"2025-11-25T02:14:53.000Z","size":43,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-03T18:37:29.529Z","etag":null,"topics":["database","json","migration","migration-tool","rust-crate","rust-library","sqlx"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Nicolab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-16T01:37:41.000Z","updated_at":"2026-02-15T04:10:37.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Nicolab/migratex","commit_stats":null,"previous_names":["nicolab/migratex"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Nicolab/migratex","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nicolab%2Fmigratex","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nicolab%2Fmigratex/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nicolab%2Fmigratex/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nicolab%2Fmigratex/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Nicolab","download_url":"https://codeload.github.com/Nicolab/migratex/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nicolab%2Fmigratex/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31503380,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T03:10:19.677Z","status":"ssl_error","status_checked_at":"2026-04-07T03:10:13.982Z","response_time":105,"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","json","migration","migration-tool","rust-crate","rust-library","sqlx"],"created_at":"2025-12-30T06:16:35.018Z","updated_at":"2026-04-07T06:31:13.241Z","avatar_url":"https://github.com/Nicolab.png","language":"Rust","readme":"# Migratex\n\n[![Crates.io](https://img.shields.io/crates/v/migratex.svg)](https://crates.io/crates/migratex)\n[![Docs.rs](https://docs.rs/migratex/badge.svg)](https://docs.rs/migratex)\n[![License](https://img.shields.io/crates/l/migratex.svg)](https://github.com/nicolab/migratex/blob/main/LICENSE)\n\n**Migratex** is an agnostic migration toolkit library.\n\n\u003e Migrate anything! Anywhere! 🚀\n\n💪 It can be used to migrate database / data / files / binaries, etc from one version to another.\n\n- ✅ Easy to use\n- ✅ Agnostic\n- ✅ Standalone\n- ✅ Async\n- ✅ Easy to extend\n- ✅ Easy to use with any storage (DB, file, etc)\n- ✅ Easy to use with any migration type\n- ✅ Minimal boilerplate - Ready-to-use metadata stores\n\nSimple and intuitive API: `migrate_up`, `migrate_down`, `migrate_to`, `migrate_to_latest`, `migrate_to_zero`, `latest_version`, `metadata`, etc.\n\n## Quick Start\n\n### With JSON file storage\n\n```rust\nuse migratex::{JsonMetadata, Migratex};\n\n// Load or initialize metadata\nlet mut meta = JsonMetadata::load_or_init(\"metadata.json\")?;\n\n// Run migrations\nlet mut mx = Migratex::new(\u0026mut ctx, \u0026mut meta, migrations);\n\nmx.migrate_to_latest().await?;\n\n// Save metadata\nmeta.save(\"metadata.json\")?;\n```\n\n### With SQLite storage\n\n```rust\nuse std::sync::Arc;\nuse std::path::PathBuf;\n\nuse migratex::{SqliteMetadata, SqliteStorage, connect_to_sqlite, Migratex};\n\n// Connect to database\nlet pool = connect_to_sqlite(PathBuf::from(\"app.db\")).await?;\nlet storage = SqliteStorage::new(Arc::new(pool));\n\n// Load or initialize metadata\nlet mut meta = SqliteMetadata::load_or_init(\u0026storage).await?;\n\n// Run migrations\nlet mut mx = Migratex::new(\u0026mut ctx, \u0026mut meta, migrations);\n\nmx.migrate_to_latest().await?;\n\n// Save metadata\nmeta.save(\u0026storage).await?;\n```\n\n## Examples\n\nLook at the [examples](https://github.com/nicolab/migratex/tree/main/examples):\n\n- [json example](https://github.com/nicolab/migratex/tree/main/examples/json) - JSON file-based metadata storage\n- [sqlx example](https://github.com/nicolab/migratex/tree/main/examples/sqlx) - SQLite database metadata storage\n- [custom example](https://github.com/nicolab/migratex/tree/main/examples/custom) - Custom metadata implementation\n\n## Usage\n\nAdd this to your `Cargo.toml`:\n\n```toml\n[dependencies]\nmigratex = \"*\"\n```\n\n\u003e Put the latest version of `migratex` in your `Cargo.toml`!\n\n### Features\n\n#### JSON\n\nEnable the `json` feature for JSON file-based metadata storage:\n\n```toml\n[dependencies]\nmigratex = { version = \"*\", features = [\"json\"] }\n```\n\nThis provides the `JsonMetadata` struct for storing metadata in a JSON file.\n\n#### SQLx\n\nEnable the `sqlx` feature for SQLite database metadata storage:\n\n```toml\n[dependencies]\nmigratex = { version = \"*\", features = [\"sqlx\"] }\n```\n\n\u003e Put the latest version of `migratex` in your `Cargo.toml`!\n\nThis provides:\n\n- `SqliteMetadata` - Metadata stored in a SQLite table\n- `SqliteStorage` - Storage configuration\n- `connect_to_sqlite()` - Helper function to connect to SQLite database\n\n\u003e Note: Other database drivers can be implemented by implementing the `Metadata` trait (look at SQLite implementation for inspiration).\n\n## Custom Metadata Storage\n\nYou can implement your own metadata storage by implementing the `Metadata` trait:\n\n```rust\nuse migratex::{Metadata, MetaStatus};\n\n#[derive(Debug, Clone)]\npub struct CustomMetadata {\n    pub version: i32,\n    pub status: MetaStatus,\n    pub app_version: String,\n    pub created_at: String,\n    pub updated_at: String,\n}\n\nimpl CustomMetadata {\n    pub fn load_or_init(path: impl AsRef\u003cPath\u003e) -\u003e Result\u003cSelf\u003e {\n        // Your custom implementation\n    }\n\n    pub fn save(\u0026self, path: impl AsRef\u003cPath\u003e) -\u003e Result\u003c()\u003e {\n        // Your custom implementation\n    }\n}\n\nimpl Metadata for CustomMetadata {\n    migratex::metadata_accessors!();\n}\n```\n\nSee the [custom example](https://github.com/nicolab/migratex/tree/main/examples/custom) for a complete implementation.\n\n## Tests\n\nRun all tests:\n\n```sh\ncargo test --all-features\n```\n\n## Notes\n\n- This library is in its early stages, so expect minor breaking changes.\n- `okerr` is used for error handling (100% compatible with `anyhow`), this should work properly with any error-handling library.\n\n## LICENSE\n\n[MIT](https://github.com/nicolab/migratex/blob/main/LICENSE) (c) 2025, Nicolas Talle.\n\n## Author\n\n- [Nicolas Talle](https://ntalle.com)\n- \u003chttps://www.linkedin.com/in/ntalle/\u003e\n\n\u003e Buy me a coffee ☕ via [PayPal](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick\u0026hosted_button_id=PGRH4ZXP36GUC)!\n","funding_links":["https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick\u0026hosted_button_id=PGRH4ZXP36GUC)!"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnicolab%2Fmigratex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnicolab%2Fmigratex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnicolab%2Fmigratex/lists"}