{"id":19911609,"url":"https://github.com/zalexanninev15/gru","last_synced_at":"2026-04-09T08:54:48.425Z","repository":{"id":60032423,"uuid":"527011804","full_name":"Zalexanninev15/GRU","owner":"Zalexanninev15","description":"Updater for applications from GitHub.","archived":false,"fork":false,"pushed_at":"2024-05-07T12:57:03.000Z","size":1032,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-05-07T13:39:50.525Z","etag":null,"topics":["curl","downloader","github-release","latest-version","portable","releases","rust","rust-lang","scripting","updater","wget","windows"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/Zalexanninev15.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-08-20T18:44:13.000Z","updated_at":"2024-05-07T13:39:55.690Z","dependencies_parsed_at":"2024-03-20T18:46:28.336Z","dependency_job_id":null,"html_url":"https://github.com/Zalexanninev15/GRU","commit_stats":null,"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zalexanninev15%2FGRU","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zalexanninev15%2FGRU/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zalexanninev15%2FGRU/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zalexanninev15%2FGRU/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Zalexanninev15","download_url":"https://codeload.github.com/Zalexanninev15/GRU/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241341710,"owners_count":19947104,"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":["curl","downloader","github-release","latest-version","portable","releases","rust","rust-lang","scripting","updater","wget","windows"],"created_at":"2024-11-12T21:25:59.008Z","updated_at":"2026-04-09T08:54:48.420Z","avatar_url":"https://github.com/Zalexanninev15.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Github Release Updater\n\n[![](https://img.shields.io/badge/platform-Windows-informational)](https://github.com/Zalexanninev15/GRU)\n[![](https://img.shields.io/badge/written_on-Rust-000000.svg?logo=rust)](https://github.com/Zalexanninev15/GRU)\n[![](https://img.shields.io/github/v/release/Zalexanninev15/GRU)](https://github.com/Zalexanninev15/GRU/releases/latest)\n[![](https://img.shields.io/github/downloads/Zalexanninev15/GRU/total.svg)](https://github.com/Zalexanninev15/GRU/releases)\n[![](https://img.shields.io/github/last-commit/Zalexanninev15/GRU/main.svg)](https://github.com/Zalexanninev15/GRU/commits/main)\n[![](https://img.shields.io/github/stars/Zalexanninev15/GRU.svg)](https://github.com/Zalexanninev15/GRU/stargazers)\n[![](https://img.shields.io/github/forks/Zalexanninev15/GRU.svg)](https://github.com/Zalexanninev15/GRU/network/members)\n[![](https://img.shields.io/github/issues/Zalexanninev15/GRU.svg)](https://github.com/Zalexanninev15/GRU/issues?q=is%3Aopen+is%3Aissue)\n[![](https://img.shields.io/github/issues-closed/Zalexanninev15/GRU.svg)](https://github.com/Zalexanninev15/GRU/issues?q=is%3Aissue+is%3Aclosed)\n[![](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n[![](https://img.shields.io/badge/Donate-FFDD00.svg?logo=buymeacoffee\u0026logoColor=black)](https://z15.neocities.org/donate)\n\n## Description\n\nUpdater for applications from GitHub. It has a huge number of convenient settings and supports multiple rockers, and can download files not only from GitHub, but also based only on the release, supports pre-releases and a fairly deep asset search among releases.\n\n## Features\n\n\u003e Here is only a very short list of possibilities. For a more complete understanding of the program, you should study the arguments, because there is much more functionality in the program.\n\n- **Fine-Grained Update Customization**: Highly customizable asset download process with numerous arguments to adjust the update flow, making it flexible for a wide range of use cases.\n- **Support for Releases Without Assets**: In cases where no assets are found, the application can directly download the EXE or files from an external URL ([example](https://github.com/Zalexanninev15/GRU#example-visual-studio-code)).\n- **Multiple Downloader Options**: Choose between **curl**, **wget**, the built-in **gru** (**gru-classic**) or **tcpud** downloader for maximum flexibility in downloading assets.\n- **Seamless Archive Extraction**: Leverage **7-Zip** via the command line to handle nearly all types of archive files during the extraction process.\n- **Automatic Process Termination**: Automatically terminates the running application during updates to avoid issues with in-use applications, ensuring smooth updates.\n- **Pre-Update Script Support**: Optionally execute a custom `prepare.bat` file before the update to perform additional tasks.\n- **Post-Update Script Support**: Optionally execute a custom `script.bat` file after the update to perform additional tasks.\n- **Comprehensive and Self-Sufficient Documentation**: View detailed documentation by running `gru.exe` without any arguments to understand every option and its usage.\n- **Version Control for Precise Updates**: Fine-tune the update process by determining the current version and ensuring that the right release is applied based on your setup.\n- **Automatic Cleanup**: Automatically remove temporary files post-update to keep your system clean. Most cases work without issues, but a few may require manual intervention.\n- **Pre-release Support**: Optionally select pre-releases for updates if a stable release is not available or if the latest unstable release is preferred.\n- **Asset Search Across Multiple Releases**: Search for assets across multiple recent releases (not just the latest), ensuring you always get the right version of the file.\n\n## Available arguments\n\n\u003e To better understand this, the developer recommends reading the information about arguments in the utility itself, as it contains more details.\n\n- `--app \u003capplication.exe\u003e` — Set the EXE of the launcher/main application.\n- `--main \u003cpath\u003e` — Set the path to the main application located one level above the EXE.\n- `--extract` / `--no-extract` — Decide whether to extract archive files or simply move the downloaded EXE.\n- `--leave` / `--no-leave` — Control whether to keep or remove unnecessary folders.\n- `--before` / `--no-before` — Run a `prepare.bat` script before downloading (optional).\n- `--script` / `--no-script` — Optionally run `script.bat` after the download and extraction.\n- `--silent` / `--no-silent` — Hide the console window during execution for a quieter experience.\n- `--details` / `--no-details` — Show detailed download information using curl/wget.\n- `--nupkg` / `--no-nupkg` —  Enabling the correct operation mode with nuget packages (.nupkg), which include the release of the downloaded application itself.\n- `--tool \u003ctype\u003e` — Choose between download tools like `curl`, `wget`, `gru`, `gru-classic`, or `tcpud` (curl-only).\n- `--link \u003curl\u003e` — Use a direct download link when assets are unavailable in the release. Sometimes releases may not contain assets to download, but just be a place for a list of changes (What's new?). Supports version substitution in the link to the version from GitHub, if such a rule is implied by the developer of the downloaded application. To do this, enter the text `\u003cversion\u003e` in the appropriate place, and it will be replaced with the version from GitHub.\n- `--ua \u003cuser-agent\u003e` — Customize the user-agent string for optimized download speeds.\n- `--regex` / `--no-regex` — Use `--with` to search using a regular expression instead of a regular match.\n- `--gh \u003cpersonal access token\u003e` — Use a GitHub personal access token for improved access if there are restrictions.\n- `--wgetrc` / `--no-wgetrc` — Use the wget configuration file (.wgetrc).\n- `--pre` / `--no-pre` — Use pre-releases if stable versions are unavailable.\n- `--ghost` / `--no-ghost` — Search for assets across multiple recent releases, not just the latest. If a developer publishes different applications in the same repository in different releases.\n\nThis program offers total control over your application updates and downloads, ensuring a smooth, customizable, and clean update process every time.\n\n\u003e A simplified description is provided here, and a more detailed one is provided in the utility itself.\n\n## System requirements\n\n**OS:** Windows 10 build 1809+ (x64)/11. [Final version for x32](https://github.com/Zalexanninev15/GRU/releases/tag/1.4.0.1)\n\n\u003e Support for early OS versions is possible when using the built-in downloader (\"gru\" or \"gru-classic\"), as well as when specifying the path to the executable files for \"curl\" or \"wget\".\n\u003e Support for Windows 7/8/8.1 (x64) and old builds of Windows 10 (x64) is possible, but not guaranteed and not tested, it may be necessary to recompile the project for outdated systems.\n\n## Usage\n\n1. Copy the `UpdateTools` folder from the archive to the application folder.\n2. Run the `gru.exe` file with the arguments (the full list of arguments can be obtained by running `gru.exe`, even without console, just launching it).\n3. The file/archive will be downloaded. If it is an archive, then it will be unzipped to a folder a level higher than the current one (i.e. you need to remove `UpdateTools` from the path). If it is a single file, then it will simply be moved (also to a higher level). The archive will be deleted automatically after unpacking. The actions depend on the user-selected GRU launch arguments.\n\n## Examples\n\n### [GitHub Desktop Portable by gek64](https://github.com/gek64/GitHubDesktopPortable)\n\n```batch\ngru.exe --repo gek64/GitHubDesktopPortable --app GitHubDesktopPortable.exe --with \"paf\" --main App\\GitHubDesktop\\GitHubDesktop.exe --tool wget\n```\n\n### [Flameshot Portable](https://github.com/flameshot-org/flameshot)\n\n```batch\ngru.exe --repo flameshot-org/flameshot --app flameshot.exe --with \"win64.zip\" --script\n```\n\n📜 **Script:** [View](https://github.com/Zalexanninev15/GRU/blob/main/script.bat)\n\n### [draw.io Desktop](https://github.com/jgraph/drawio-desktop)\n\n```batch\ngru.exe --repo jgraph/drawio-desktop --app app.exe --with \"-windows.zip\"\n```\n\nOld, only download:\n\n```batch\ngru.exe --repo jgraph/drawio-desktop --app app.exe --with \"-windows-no-installer.exe\" --no-extract\n```\n\n### [ScreenToGif](https://github.com/NickeManarin/ScreenToGif)\n\n```batch\ngru.exe --repo NickeManarin/ScreenToGif --app ScreenToGif.exe --with \".Portable.x64.zip\" --tool curl\n```\n\n### [Visual Studio Code](https://github.com/microsoft/vscode)\n\n```batch\ngru.exe --repo microsoft/vscode --app Code.exe --with \"null\" --link \"https://code.visualstudio.com/sha/download?build=stable\u0026os=win32-x64-archive\"\n```\n\n### [Insomnia](https://github.com/Kong/insomnia)\n\n```batch\ngru.exe --repo Kong/insomnia --app insomnia.exe --with \"-full.nupkg\" --nupkg\n```\n\n### [OBS Studio](https://github.com/obsproject/obs-studio)\n\n```batch\ngru.exe --repo obsproject/obs-studio --app obs64.exe --with \"^OBS-Studio-(\\d+\\.\\d+\\.\\d+)-Windows(-(?:x64|amd64|Portable|Portable-x64|x64-Portable))?\\.zip$\" --regex --main bin\\64bit\\obs64.exe\n```\n\n### [FreeTube](https://github.com/FreeTubeApp/FreeTube)\n\n```batch\ngru.exe --repo FreeTubeApp/FreeTube --app FreeTube.exe --with \"-win-x64-portable.7z\" --pre\n```\n\n## Build\n\n1. Install all dependencies with Administrator rights (it is recommended to use packages from the [Scoop package manager](https://scoop.sh/))\n\n```powershell\nSet-ExecutionPolicy -Scope CurrentUser  -ExecutionPolicy Bypass -Force\nInvoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression\n```\n\nThen:\n\n```batch\nscoop install git rust-gnu gcc\nscoop bucket add extras\nscoop install extras/resource-hacker rustup-gnu\n```\n\n2. Download the repository\n\n```batch\ngit clone https://github.com/Zalexanninev15/GRU\ncd .\\GRU\\\n```\n\n3. Compile the GRU with my script in CMD!\n\n```batch\nbuild.bat\n```\n\n4. The resulting file `gru.exe` will be in the project folder, not the release folder.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzalexanninev15%2Fgru","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzalexanninev15%2Fgru","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzalexanninev15%2Fgru/lists"}