{"id":49807153,"url":"https://github.com/jimlyas/bifrost","last_synced_at":"2026-05-12T23:03:55.018Z","repository":{"id":322605793,"uuid":"1090013546","full_name":"jimlyas/bifrost","owner":"jimlyas","description":"Gradle Plugin to bridge between prebuilt artifact and local module dependency","archived":false,"fork":false,"pushed_at":"2025-12-03T02:36:06.000Z","size":93,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-06T03:32:41.527Z","etag":null,"topics":["dependencies","gradle","gradle-plugin","kotlin","multi-project"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","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/jimlyas.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-05T05:31:45.000Z","updated_at":"2025-12-03T02:36:10.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/jimlyas/bifrost","commit_stats":null,"previous_names":["jimlyas/bifrost"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/jimlyas/bifrost","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jimlyas%2Fbifrost","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jimlyas%2Fbifrost/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jimlyas%2Fbifrost/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jimlyas%2Fbifrost/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jimlyas","download_url":"https://codeload.github.com/jimlyas/bifrost/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jimlyas%2Fbifrost/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32960295,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-12T09:19:52.626Z","status":"ssl_error","status_checked_at":"2026-05-12T09:17:33.438Z","response_time":102,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["dependencies","gradle","gradle-plugin","kotlin","multi-project"],"created_at":"2026-05-12T23:03:54.190Z","updated_at":"2026-05-12T23:03:55.009Z","avatar_url":"https://github.com/jimlyas.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Motivation\n\n`bifrost` is a Gradle plugin to help manage multi-project switching between pre-built artifacts and local module\ndependencies.\n\nMulti-project enables developers by separating the code into modules or projects to improve code ownership, scalability,\nand so on.\nBut the more modules you have, the fewer modules you'll use for developing.\n\nFor example, developing a new feature or bug fixing usually needs no more than 4 modules.\nIf your project has more than 100 modules, that's like less than 5% of your whole codebase.\n\nBut the thing is, when your project depends on a local project, even though you don't really make changes there, Gradle\nwill still use that module during builds.\n\nThis plugin will help you switch between prebuilt artifacts _(that you published)_ and local module dependency\nseamlessly.\n\nSo you can only load the modules that you'll use, be it for developing, bug fixing, or debugging,\nand tell Gradle to include the other modules you don't use in their prebuilt artifact.\n\nThis also improve build times because Gradle can skip any tasks for unused modules because they're just prebuilt\nartifact now and will be treated just like any dependency.\n\n## Prerequisites\n\nBefore using any `bifrost` plugin, the project need to implement publishing mechanism.\nEither to an instance of remove maven repository or maven local.\n\nYou can follow this documentation for setting up a publishing:\n\n- [Android Library](https://developer.android.com/build/publish-library)\n- [Java or Kotlin Library](https://docs.gradle.org/current/userguide/publishing_maven.html)\n\nAfter setting it up and publishing your artifact, then you can use `bifrost`.\n`bifrost` will use artifact from those maven repository and substitute it with local project when needed.\n\n\u003e [!IMPORTANT]\n\u003e Make sure to name your artifact the same as your project name, `bifrost` relies on those\n\n## Quick Start\n\n### Gradle Properties\n\nAdd **open.bifrost.gate** to your `gradle.properties` file:\n\n```properties\n# ...\n# Other properties\nopen.bifrost.gate=false\n```\n\nIt is recommended to set the default value to `false` so the Plugin doesn't do anything initially.\n\n### Creating Version Catalog\n\n`bifrost` is a bridge between realms. These realms need to be registered to a version catalog.\nCreate a new TOML file in `gradle/realm.versions.toml` to look like this:\n\n```toml\n[versions]\nmodule = \"0.1.0-SNAPSHOT\" # You can customize version based on your prebuilt artifact\n\n# List all your projects here\n[libraries]\nmodule-a = { group = \"your.group.name\", name = \"module-a\", version.ref = \"module\" }\nmodule-b = { group = \"your.group.name\", name = \"module-b\", version.ref = \"module\" }\nmodule-c = { group = \"your.group.name\", name = \"module-c\", version.ref = \"module\" }\n\n[bundles]\nactive = [] # Leave it empty for now\n```\n\nMake sure the entry name inside `libraries` have the same name as the library name.\n\n### Setting up `settings.gradle.kts`\n\nYou can use `bifrost` plugin from Gradle Plugin Portal, Add the `io.github.jimlyas.bifrost`\nplugin to the setting script\n\n```kotlin\npluginManagement {\n    repositories {\n        gradlePluginPortal()\n        mavenCentral()\n    }\n}\n\nplugin {\n    id(\"io.github.jimlyas.bifrost\") version \"\u003cLATEST VERSION\u003e\" // Add this \n}\n\ninclude(\":always-on-module\") // Module that you will always open\n\n// Add this too\nconfigure\u003cBifrostSettingExtension\u003e {\n    // Add module that you'll change as prebuilt artifact later\n    includeModule(\":module-a\", \":module-b\", \":module-c\")\n}\n```\n\n### Setting up `build.gradle.kts`\n\nYou don't need to apply the plugin at the root's `build.gradle.kts`, just for the build script that actually use any\ndependencies from the `realm.versions.toml`.\n\nAdd the `io.github.jimlyas.bifrost.project` plugin and replace all the module dependencies with dependency declared\nfrom realm version catalog.\n\n```kotlin\nplugin {\n    // ...\n    // Other plugins\n    id(\"io.github.jimlyas.bifrost.project\") // Add this\n}\n\ndependencies {\n    // Before\n    // implementation(project(\":module-b\"))\n    // implementation(project(\":module-c\"))\n\n    // After\n    implementation(realm.module.b)\n    implementation(realm.module.c)\n}\n```\n\n## Usage\n\nTo enable `bifrost`, change the **open.bifrost.gate** properties to `true`:\n\n```properties\n# ...\n# Other properties\nopen.bifrost.gate=true\n```\n\nThen you can update the `active` entries inside `realm.versions.toml` to include module you want to load locally:\n\n```toml\n\n# Update this\n[bundles]\nactive = [\"module-a\", \"module-b\"]\n```\n\nFor example, configuration above will make sure Gradle will load project `module-a` and `module-b` but will load\n`module-c` as dependency.\n\nFinally, sync your Gradle project.\n\n\u003e [!WARNING]\n\u003e Do not commit any changes to `gradle.properties` and `realm.versions.toml` file,\n\u003e move them to different change list so you don't accidentally commit them.\n\n## Disclaimer\n\nBifrost currently does not support nested Gradle project and Kotlin multi-platform.\n\n## License\n\n```\nMIT License\n\nCopyright © 2025 Jimly Asshiddiqy\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this \nsoftware andassociated documentation files (the \"Software\"), to deal in the Software \nwithout restriction,including without limitation the rights to use, copy, modify, \nmerge, publish, distribute,sublicense, and/or sell copies of the Software, and \nto permit persons to whom the Software is furnished to do so, subject to \nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\nIN THE SOFTWARE.\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjimlyas%2Fbifrost","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjimlyas%2Fbifrost","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjimlyas%2Fbifrost/lists"}