{"id":15059779,"url":"https://github.com/shotah/forgecli","last_synced_at":"2025-09-14T15:38:44.799Z","repository":{"id":38411776,"uuid":"463642295","full_name":"shotah/forgecli","owner":"shotah","description":"Forge CLI implemented in Go.","archived":false,"fork":false,"pushed_at":"2024-07-17T02:17:44.000Z","size":415,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-24T06:54:38.495Z","etag":null,"topics":["forge","golang","minecraft","minecraft-mod"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/shotah.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":"2022-02-25T18:49:05.000Z","updated_at":"2024-08-08T10:57:47.000Z","dependencies_parsed_at":"2023-12-11T16:30:35.916Z","dependency_job_id":"5a3d80cb-3c0d-4dc8-b0bf-b16988726fad","html_url":"https://github.com/shotah/forgecli","commit_stats":null,"previous_names":[],"tags_count":49,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shotah%2Fforgecli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shotah%2Fforgecli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shotah%2Fforgecli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shotah%2Fforgecli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/shotah","download_url":"https://codeload.github.com/shotah/forgecli/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248166302,"owners_count":21058475,"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":["forge","golang","minecraft","minecraft-mod"],"created_at":"2024-09-24T22:47:40.352Z","updated_at":"2025-04-10T05:41:50.720Z","avatar_url":"https://github.com/shotah.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Coverage](https://img.shields.io/badge/Coverage-80.9%25-brightgreen)\n[![CI](https://github.com/shotah/forgecli/workflows/ContinuousIntegration/badge.svg)](https://github.com/shotah/forgecli/actions?query=workflow:ContinuousIntegration)\n[![Update release version.](https://github.com/shotah/forgecli/workflows/PublishRelease/badge.svg)](https://github.com/shotah/forgecli/actions?query=workflow:PublishRelease)\n\n[![Windows](https://img.shields.io/badge/Windows-0078D6?logo=windows\u0026logoColor=white)](https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idruns-on)\n[![Ubuntu](https://img.shields.io/badge/Ubuntu-E95420?logo=ubuntu\u0026logoColor=white)](https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idruns-on)\n[![Mac OS](https://img.shields.io/badge/mac%20os-000000?logo=macos\u0026logoColor=F0F0F0)](https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idruns-on)\n\n# ForgeCLI\n\nPackage was created with the express intent to remove the guess work out of Mod acquiring and updating.\n\n\u003c!-- TOC --\u003e\n\n- [ForgeCLI](#forgecli)\n  - [Parameters](#parameters)\n  - [Installation](#installation)\n    - [Windows](#windows)\n      - [Chocolatey](#chocolatey)\n      - [Scoop](#scoop)\n    - [Mac](#mac)\n      - [Homebrew](#homebrew)\n  - [Forge API Key](#forge-api-key)\n  - [Basic Usage](#basic-usage)\n    - [Example Outputs](#example-outputs)\n      - [Example Success](#example-success)\n      - [Example Fail](#example-fail)\n  - [Run with Client Install](#run-with-client-install)\n  - [Json File](#json-file)\n    - [Usage](#usage)\n    - [Field Descriptions](#field-descriptions)\n    - [Json Example](#json-example)\n  - [Building and Testing](#building-and-testing)\n\n\u003c!-- /TOC --\u003e\n\n## Parameters\n\n**NOTE:** Due to the lack of Version pinning this can lead to unexpected behavior if the publisher updates mod unexpectedly.\n\nTo get started make sure you have a [CursedForge API Key](https://docs.curseforge.com/#getting-started).\n\n**Default Folder Locations**\n\n- `Windows:` \"%AppData%/Roaming/.minecraft/mods\"\n- `Mac:` \"~/Library/Application Support/minecraft/mods\"\n- `Linux:` \"~/Library/Application Support/minecraft/mods\"\n\n**Mod Basics**\n\n- `Mod Release types:` Release, Beta, and Alpha.\n- `Mod dependencies:` Required and Optional\n- `Mod family:` Fabric, Forge, and Bukkit.\n- `Mod MC Version:` 1.12.2, 1.18.2, etc.\n\n**CLI Parameters**:\n\n- `forgekey:` Required as a parameter, or as an ENV var of FORGEKEY and MODS_FORGEAPI_KEY\n- `file:` Specially formatted json to manager larger sets of mods.\n- `projects:` Project ids that can be easily obtained from the Forge itself.\n- `destination:` Default is OS Client Mod folder, Target folder for the downloaded mods.\n- `family:` Used to filter mods based on server type. Options are Forge, Fabric, and Bukkit\n- `release:` Default is Release, Used to allow for Beta and Alpha mod downloads.\n- `version:` Default is LATEST, but this is Minecraft VERSION. e.g. 1.18.2,\n  - PARTIAL matching is enabled, e.g. use 1.18 to pull back 1.18.2, 1.18.1, 1.18 mods\n- `clear:` Default is false, allows CLI to remove all mods before downloading new Mods.\n- `client:` Default is false, if family is defined and client is defined, it will attempt to install the latest client.\n- `dependencies:` Default is True, this uses the mods required dependencies to download missing mods.\n- `debug:` Enable extra logging.\n\n## Installation\n\n### Windows\n\n#### Chocolatey\n\nChocolatey based install\nHow do I install these tools?\n\n[Install chocolatey url](https://docs.chocolatey.org/en-us/choco/setup)\n\nNote: Currently waiting on **approval** by Chocolatey Admins\n\n```bash\nchoco install forgecli --version=0.0.3 -Y\n```\n\n#### Scoop\n\nScoop Manifests\nHow do I install these tools?\n\n[Install scoop url](https://scoop.sh/)\n\nAdd this bucket to scoop:\n\n```bash\nscoop bucket add shotah https://github.com/shotah/scoop-bucket.git\n```\n\nInstall tools via scoop install:\n\n```bash\nscoop install forgecli\n```\n\n### Mac\n\n#### Homebrew\n\nHomebrew Manifests\nHow do I install these tools?\n\n[Install Homebrew](https://docs.brew.sh/Installation)\n\nAdd this tap to brew:\n\n```bash\nbrew tap shotah/tap\n```\n\nInstall tools via brew install:\n\n```bash\nbrew install forgecli\n```\n\n## Forge API Key\n\nThis is more complicated because you will be pulling/using the latest mod for the release of your game. To get started make sure you have a [CursedForge API Key](https://docs.curseforge.com/#getting-started). Then use it as a parameter for your build\n\n## Basic Usage\n\nSimple command to download latest fabric modules:\n\n```bash\nforgecli -forgekey '$2a$10...' -projects \"416089,391366\" -family \"fabric\" -debug\n```\n\n### Example Outputs\n\n#### Example Success\n\n```bash\ntime=\"2022-02-28T09:37:51-08:00\" level=info msg=\"Starting Forge Mod lookup\"\ntime=\"2022-02-28T09:37:51-08:00\" level=info msg=\"Found Lastest FileID: 3667363 for Mod: 416089\"\ntime=\"2022-02-28T09:37:51-08:00\" level=info msg=\"Downloading: https://edge.forgecdn.net/files/3667/363/voicechat-fabric-1.18.2-2.2.24.jar\"\ntime=\"2022-02-28T09:37:52-08:00\" level=info msg=\"Files in Destination Folder:\"\ntime=\"2022-02-28T09:37:52-08:00\" level=info msg=\"  voicechat-fabric-1.18.2-2.2.24.jar  \"\ntime=\"2022-02-28T09:37:52-08:00\" level=info msg=\"Download Complete.\"\n```\n\n#### Example Fail\n\n```bash\ntime=\"2022-02-28T09:52:14-08:00\" level=info msg=\"Starting Forge Mod Lookup\"\ntime=\"2022-02-28T09:52:14-08:00\" level=error msg=\"could not find 391366 for minecraft version: 1.18.2 or family: fabric\"\ntime=\"2022-02-28T09:52:14-08:00\" level=error msg=Exiting...\n```\n\n## Run with Client Install\n\nIncludes `-client`, this tells the CLI to look at the `-family` parameter and find the version that corresponds to `-version` and download and install it for you.\n\nNote: Currently only works with Fabric. I am not aware of Forge's version XML to query. If someone has more information I'd be happy for the help.\n\n```bash\nforgecli -forgekey '$2a$10...' -projects \"416089,391366\" -family \"fabric\" -client -debug\n```\n\n## Json File\n\n### Usage\n\n```bash\nforgecli -forgekey '$2a$10...' -file \"forgeMods.json\" -family \"fabric\" -client -dependencies\n```\n\n### Field Descriptions\n\n- `name:` is currently unused, but can be used to document each entry.\n- `projectID:` is the id found on the CurseForge website for a particular mod\n- `releaseType:` Type corresponds to forge's R, B, A icon for each file. Default Release, options are (release|beta|alpha).\n- `fileName:` is used for version pinning if latest file will not work for you.\n- `version:` used to override when Mojang releases minor updates and mods have not updated.\n  - Does not currently apply to dependencies of Mod. e.g. Error if dependency does not support the main MC version.\n\n### Json Example\n\n```json\n[\n  {\n    \"name\": \"fabric api\",\n    \"projectID\": \"306612\",\n    \"releaseType\": \"release\"\n  },\n  {\n    \"name\": \"fabric voice mod\",\n    \"projectID\": \"416089\",\n    \"releaseType\": \"beta\",\n    \"version\": \"1.18.1\"\n  }\n]\n```\n\n## Building and Testing\n\nMake a `./.env` file in the root folder and add your forge key.\n\n```text\nFORGEKEY='$2a$10...'\n```\n\nMost common used commands can all be found in the [makefile](makefile).\n\nTest command:\n\n```bash\nmake test\n```\n\nBuild command:\n\n```bash\nmake build\n# . ./forgecli should now be available to be used.\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshotah%2Fforgecli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshotah%2Fforgecli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshotah%2Fforgecli/lists"}