{"id":21417837,"url":"https://github.com/adonmo/goroom","last_synced_at":"2025-06-21T07:33:49.876Z","repository":{"id":71198587,"uuid":"266064243","full_name":"adonmo/goroom","owner":"adonmo","description":"An embedded data store version manager","archived":false,"fork":false,"pushed_at":"2020-06-30T14:37:49.000Z","size":9248,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-06-13T19:44:57.379Z","etag":null,"topics":["golang","gorm","migrations","room","version-control"],"latest_commit_sha":null,"homepage":"","language":"Go","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/adonmo.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}},"created_at":"2020-05-22T08:54:41.000Z","updated_at":"2021-05-13T09:37:37.000Z","dependencies_parsed_at":"2023-03-05T02:15:34.964Z","dependency_job_id":null,"html_url":"https://github.com/adonmo/goroom","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/adonmo/goroom","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adonmo%2Fgoroom","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adonmo%2Fgoroom/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adonmo%2Fgoroom/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adonmo%2Fgoroom/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/adonmo","download_url":"https://codeload.github.com/adonmo/goroom/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adonmo%2Fgoroom/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261083846,"owners_count":23107202,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["golang","gorm","migrations","room","version-control"],"created_at":"2024-11-22T19:17:36.612Z","updated_at":"2025-06-21T07:33:44.866Z","avatar_url":"https://github.com/adonmo.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# goroom\n\n### Blog\n* For a primer on Go-Room, refer to the blog on [Basic Usage](https://medium.com/adonmo-tech/go-room-5c1d4f46a77e)\n* For a peek into the architecture, refer to the blog on [Internals](https://medium.com/adonmo-tech/go-room-internals-5b3475266fbb?sk=5ee4ae78890bfa73abab3184739efeef)\n* For a guide to advanced usage, refer to the blog for [Ninja Users](https://medium.com/adonmo-tech/go-room-ninja-79be873f7cbf?source=friends_link\u0026sk=1124bce19212beceba7d3845608ea904)\n\n### Brief\nThe primary function of Room is to ease version management and migration of databases that are created by apps on the edge devices and are tightly coupled with the version of app that creates and manages them.\n\n### Features\n* Using Room a developer can ensure that as they deliver updates to App and underlying associated Data Store they can\nhave a smooth transition of Data Store on the edge device without risk of data loss.  \n* A typical way to handle upgrades would be to create the data store from scratch again. This is not desirable if the\ndata stored on the edge device is things like valuable insights/events recorded by the device and pending sync/upload to the\nserver. Since data collection is a major use case of edge devices I think a version manager like Room is necessary.\n\n### Android Room\nRoom is inspired by its [namesake](https://developer.android.com/training/data-storage/room) in Android World which does the same thing but at a deeper level by even providing the ORM.\nThe Room presented here is agnostic to data stores and provides flexibility to the developer on how they [signal](https://github.com/gamble09/groom/blob/master/orm/orm.go#L31) and [handle schema changes](https://github.com/gamble09/groom/blob/master/orm/orm.go#L36).\n\n### Gotchas\n* It is purely a utility that serves the minimal purpose of carrying out migrations and verifying that DB is upto the version expected by the app currently.  \n* A lot of power is still in the developers hands as they have the freedom to execute any operations on the DB themselves.\n* Doing stuff like deleting/updating Room's metadata tables is a big No-No :). Plz...\n\n### Sample\nFor understanding on how the migration and versioning works check [examples](https://github.com/gamble09/groom/tree/master/example).  \n\n### How to Run Sample\nTo run the example which also serves as an integration test with GORM go to the examples folder and run\n```sh\ngo test -v ./...\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadonmo%2Fgoroom","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fadonmo%2Fgoroom","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadonmo%2Fgoroom/lists"}