{"id":13543523,"url":"https://github.com/modrinth/minotaur","last_synced_at":"2026-03-08T02:01:17.080Z","repository":{"id":37646821,"uuid":"317952091","full_name":"modrinth/minotaur","owner":"modrinth","description":"Gradle plugin for deploying build artifacts to Modrinth.","archived":false,"fork":false,"pushed_at":"2025-12-24T05:33:09.000Z","size":587,"stargazers_count":104,"open_issues_count":7,"forks_count":17,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-12-25T18:50:53.745Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/modrinth.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":"2020-12-02T18:16:53.000Z","updated_at":"2025-12-17T02:32:01.000Z","dependencies_parsed_at":"2023-11-15T00:27:39.975Z","dependency_job_id":"5bde7204-55bc-478a-9dd8-a94a0b5762d0","html_url":"https://github.com/modrinth/minotaur","commit_stats":null,"previous_names":[],"tags_count":43,"template":false,"template_full_name":null,"purl":"pkg:github/modrinth/minotaur","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/modrinth%2Fminotaur","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/modrinth%2Fminotaur/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/modrinth%2Fminotaur/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/modrinth%2Fminotaur/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/modrinth","download_url":"https://codeload.github.com/modrinth/minotaur/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/modrinth%2Fminotaur/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30242403,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-08T00:58:18.660Z","status":"online","status_checked_at":"2026-03-08T02:00:06.215Z","response_time":56,"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":"2024-08-01T11:00:32.586Z","updated_at":"2026-03-08T02:01:17.025Z","avatar_url":"https://github.com/modrinth.png","language":"Java","funding_links":[],"categories":["Java","Project/version management tools"],"sub_categories":["In-game"],"readme":"# [Minotaur](https://plugins.gradle.org/plugin/com.modrinth.minotaur)\n\nA Gradle plugin for interfacing directly with Modrinth, through uploading build artifacts and syncing project bodies.\n\nWant to use a GitHub Action instead of a Gradle plugin? Check out [Kir-Antipov/mc-publish](https://github.com/Kir-Antipov/mc-publish), but note that Modrinth does not give support for `mc-publish` where we do for Minotaur.\n\n## Usage Guide\n\nTo use this plugin you must add it to your Gradle build script. After that, you can use the `modrinth` task to upload the version to Modrinth.\n\nMinotaur requires a personal access token with the following scopes:\n- `CREATE_VERSION` (if running the `modrinth` task)\n- `PROJECT_WRITE` (if running the `modrinthSyncBody` task)\n\nYou can generate a token on [the account settings page](https://modrinth.com/settings/account). If your provided token does not have all required scopes, you will get an error saying `Invalid Authentication Credentials`.\n\n### Groovy\n\n\u003cdetails open=\"open\"\u003e\u003csummary\u003eGroovy DSL\u003c/summary\u003e\n\n```groovy\n// build.gradle\nplugins {\n    id \"com.modrinth.minotaur\" version \"2.+\"\n    // It's safest to have this on 2.+ to get the latest features and\n    // bug fixes without having to worry about breaking changes.\n}\n\n// settings.gradle\n// This is probably already present.\npluginManagement {\n    repositories {\n        gradlePluginPortal()\n    }\n}\n```\n\nThe next step is to configure the task for uploading to Modrinth. This allows you to configure the upload and control when and how versions are uploaded.\n\n```groovy\n// build.gradle\nmodrinth {\n    token = System.getenv(\"MODRINTH_TOKEN\") // Remember to have the MODRINTH_TOKEN environment variable set or else this will fail - just make sure it stays private!\n    projectId = \"my-project\" // This can be the project ID or the slug. Either will work!\n    versionNumber = \"1.0.0\" // You don't need to set this manually. Will fail if Modrinth has this version already\n    versionType = \"release\" // This is the default -- can also be `beta` or `alpha`\n    uploadFile = jar // With Loom, this MUST be set to `remapJar` instead of `jar`!\n    gameVersions = [\"1.18\", \"1.18.1\"] // Must be an array, even with only one version\n    loaders = [\"fabric\"] // Must also be an array - no need to specify this if you're using Loom or ForgeGradle\n    dependencies { // A special DSL for creating dependencies\n        // scope.type\n        // The scope can be `required`, `optional`, `incompatible`, or `embedded`\n        // The type can either be `project` or `version`\n        required.project \"fabric-api\" // Creates a new required dependency on Fabric API\n        optional.version \"sodium\", \"mc1.19.3-0.4.8\" // Creates a new optional dependency on this specific version of Sodium\n    }\n}\n```\n\n\u003c/details\u003e\n\n### Kotlin\n\n\u003cdetails\u003e\u003csummary\u003eKotlin DSL\u003c/summary\u003e\n\n```kotlin\n// build.gradle.kts\nplugins {\n    id(\"com.modrinth.minotaur\") version \"2.+\"\n    // It's safest to have this on 2.+ to get the latest features and\n    // bug fixes without having to worry about breaking changes.\n}\n\n\n// settings.gradle.kts\n// This is probably already present.\npluginManagement {\n    repositories {\n        gradlePluginPortal()\n    }\n}\n```\n\nThe next step is to configure the task for uploading to Modrinth. This allows you to configure the upload and control when and how versions are uploaded.\n\n```kotlin\n// build.gradle.kts\nmodrinth {\n    token.set(System.getenv(\"MODRINTH_TOKEN\")) // Remember to have the MODRINTH_TOKEN environment variable set or else this will fail - just make sure it stays private!\n    projectId.set(\"my-project\") // This can be the project ID or the slug. Either will work!\n    versionNumber.set(\"1.0.0\") // You don't need to set this manually. Will fail if Modrinth has this version already\n    versionType.set(\"release\") // This is the default -- can also be `beta` or `alpha`\n    uploadFile.set(tasks.jar) // With Loom, this MUST be set to `remapJar` instead of `jar`!\n    gameVersions.addAll(\"1.18\", \"1.18.1\") // Must be an array, even with only one version\n    loaders.add(\"fabric\") // Must also be an array - no need to specify this if you're using Loom or ForgeGradle\n    dependencies { // A special DSL for creating dependencies\n        // scope.type\n        // The scope can be `required`, `optional`, `incompatible`, or `embedded`\n        // The type can either be `project` or `version`\n        required.project(\"fabric-api\") // Creates a new required dependency on Fabric API\n        optional.version(\"sodium\", \"mc1.19.3-0.4.8\") // Creates a new optional dependency on this specific version of Sodium\n    }\n}\n```\n\n\u003c/details\u003e\n\n### Syncing Project Body\n\nIn tandem with the `syncBodyFrom` property in your `modrinth {...}` block, you may set up syncing between, for example, your project's `README.md` and your project's body on Modrinth.\n\nFor example:\n```groovy\n// build.gradle\nmodrinth {\n    // ...\n    syncBodyFrom = rootProject.file(\"README.md\").text\n}\n```\n\nThis will sync the contents of the `README.md` file in your project's root to your project.\n\nIf you have some things you want in your `README.md` but not in your Modrinth project body, you may also add comments to the file. Anything between `\u003c!-- modrinth_exclude.start --\u003e` and `\u003c!-- modrinth_exclude.end --\u003e` will be excluded.\n\nThis does not occur with the `modrinth` task; you must use the `modrinthSyncBody` task separately to accomplish this. You can make sure the project body gets synced with every publish by making the `modrinthSyncBody` task depend on `modrinth`:\n\n```groovy\ntasks.modrinth.dependsOn(tasks.modrinthSyncBody)\n```\n\nBe careful with this task! Once a body is changed, you **cannot** get it back. You can use `debugMode` to make sure that what's to be uploaded is what you want.\n\n### Available Properties\n\nThe following properties can be set within the `modrinth {...}` block.\n\n| Property         | Required | Description                                                               | Default                                      |\n|------------------|----------|---------------------------------------------------------------------------|----------------------------------------------|\n| apiURL           | false    | The API endpoint URL to use for uploading files.                          | `https://api.modrinth.com/v2`                |\n| token            | false    | A valid API token for the Modrinth API.                                   | `MODRINTH_TOKEN` environment variable        |\n| projectId        | true     | The ID of the project to upload to.                                       |                                              |\n| versionNumber    | false    | The version number of the version.                                        | `version` declaration                        |\n| versionName      | false    | The name of the version.                                                  | `versionNumber`                              |\n| changelog        | false    | The changelog for the file. Allows Markdown formatting.                   | `No changelog was specified.`                |\n| uploadFile       | true     | The file to upload. Can be an actual file or a file task.                 |                                              |\n| additionalFiles  | false    | An array of additional files to be uploaded to a version.                 |                                              |\n| versionType      | false    | The stability level of the version. Can be `release`, `beta`, or `alpha`. | `release`                                    |\n| gameVersions     | true     | An array of game versions that this version supports.                     | Detected based on the Gradle plugins you use |\n| loaders          | false    | An array of mod loaders that this version supports.                       | Detected based on the Gradle plugins you use |\n| dependencies     | false    | Dependencies of the uploaded version.                                     |                                              |\n| failSilently     | false    | When true an upload failure will not fail your build.                     | `false`                                      |\n| detectLoaders    | false    | Whether mod loaders will be automatically detected.                       | `true`                                       |\n| autoAddDependsOn | false    | Whether to automatically add task dependencies from upload files.         | `true`                                       |\n| debugMode        | false    | Doesn't actually upload the version, and prints the data to be uploaded.  | `false`                                      |\n| syncBodyFrom     | false    | The text to sync the body from in the `modrinthSyncBody` task.            |                                              |\n\n**Note:** In most scenarios the `gameVersions` and `loaders` properties can be detected automatically. This is done in environments using ForgeGradle and Fabric Loom.\n\n### Additional Properties\n\nThe following properties can only be accessed through `tasks.modrinth.\u003cproperty\u003e`.\n\n| Name                  | Description                                                                                         |\n|-----------------------|-----------------------------------------------------------------------------------------------------|\n| uploadInfo            | The response from the API server. Only present after upload is completed successfully.              |\n| errorInfo             | The response from the API server. Only present after an upload fails.                               |\n| wasUploadSuccessful() | Checks if the upload was successful or not. Should be used before accessing uploadInfo or errorInfo |\n\n#### Upload Info\n\n| Property      | Type        | Description                                                            |\n|---------------|-------------|------------------------------------------------------------------------|\n| id            | String      | The ID for the uploaded version.                                       |\n| projectId     | String      | The ID of the mod this version is for.                                 |\n| authorId      | String      | The ID of the author who published this version                        |\n| featured      | Boolean     | Whether the version is featured or not                                 |\n| name          | String      | The name of this version                                               |\n| versionNumber | String      | The version number. Ideally will follow semantic versioning            |\n| changelog     | String      | The changelog for this version of the mod.                             |\n| datePublished | Date        | The date that this version was published.                              |\n| downloads     | Integer     | The number of downloads this specific version has had.                 |\n| versionType   | VersionType | The type of the release - `alpha`, `beta`, or `release`.               |\n| files         | List        | A list of files available for download for this version.               |\n| gameVersions  | List        | A list of versions of Minecraft that this version of the mod supports. |\n| loaders       | List        | The loaders that this version works on                                 |\n| dependency    | Dependency  | A list of mods that this version depends on.                           |\n\n#### Error Info\n\n| Property    | Type   | Description                                                          |\n|-------------|--------|----------------------------------------------------------------------|\n| error       | String | The type of error that occurred, for example an authorization error. |\n| description | String | The error message from the API.                                      |\n\n## Development Information\n\nFor contributing information, please see the Minotaur section of the [Modrinth contributing guide](https://docs.modrinth.com/docs/details/contributing/#minotaur-gradle-plugin).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmodrinth%2Fminotaur","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmodrinth%2Fminotaur","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmodrinth%2Fminotaur/lists"}