WilliamVenner/gmpublisher: a Workshop publishing tool that drops the gmad.exe dependency
⚙️ Workshop Publishing Utility for Garry's Mod, written in Rust & Svelte and powered by Tauri
At a glance
- What is it?
- gmpublisher is a Rust and Svelte desktop application built on Tauri that publishes, extracts and inspects Garry's Mod Workshop items without relying on the Steam gmad.exe and gmpublish.exe tools. It suits addon authors who want a GUI, a CLI, and offline handling of GMA files.
- Who is it for?
- Adopt gmpublisher if you publish Garry's Mod Workshop items and want a single cross-platform desktop application that replaces gmad.exe and gmpublish.exe, handles GMA files without a network connection, and exposes a CLI for scripted work. Do not adopt it if you need an officially endorsed Valve tool, a headless Linux server workflow on distributions where the AUR package does not apply, or a project with an active upstream roadmap beyond the last push on 2026-07-29.
- Can I use it commercially?
- Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository last received commits 86 days ago.
- What is it written in?
- Mainly Rust, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The problem gmpublisher removes from the Workshop workflow
Publishing a Garry's Mod Workshop item normally runs through Valve's own command line tools, `gmad.exe` and `gmpublish.exe`. The first feature the project lists is that gmpublisher does not depend on them. That is the whole pitch in one line, and the rest of the feature list is the fallout of replacing that toolchain with a self-contained application.
The audience is addon authors rather than players. Anyone who has uploaded a legacy SteamPipe addon, kept a `.GMA` file around, or wanted to see what a Workshop collection actually contains before downloading it is the user. The project also targets the crowded disk of a modder's machine: the addon size analyzer treemap exists to show which addons take the most space, which is a question no upload tool answers but every long-time player eventually asks.
Two supporting claims shape the whole design. The program works without an Internet connection, so browsing and extraction are local operations rather than calls to a Workshop endpoint. And it supports legacy SteamPipe addons and old GMA versions, so files that predate the current format are not dead weight. Everything else, the animated GIF icon upload, the bulk downloads, the Windows `.GMA` file type association, sits on top of those two capabilities.
Rust, Svelte and Tauri instead of an Electron bundle
The project is explicit about its stack. The backend is Rust, the frontend is Svelte, and the application shell is Tauri, with the author making a point of noting that this is not an Electron app. That choice has a measurable consequence in the distribution: the program is only about 10 MB. For a tool that a user downloads to publish an addon, that size difference between a Tauri bundle and an Electron one is the difference between an install you forget and one you think about.
The repository layout matches the stack. `src-tauri/` holds the Rust side, `app/` and `public/` hold the frontend assets, `svelte.config.js` and `vite.config.js` configure the Svelte build through Vite, and `package.json` lists `svelte`, `vite`, `@tauri-apps/api` and `@tauri-apps/cli` as the main pieces, with `luxon` and `svelte-i18n` for date handling and translations. The npm scripts are the standard Vite and Tauri set: `dev`, `build`, `preview` and `tauri`.
The Steam side is handled by the `steamworks-rs` library, which interfaces with the Steamworks SDK, and the frontend can also use the `steamid` package to work with identifiers. The project also states that the program makes heavy use of multithreading and works best on processors with a decent number of cores, which matters for the bulk download and extraction work where many items are processed at once.
The Tauri approach also has a cost. Shipping a native application means the project publishes per-platform binaries and asks Linux users to sort out extra dependencies themselves, and it means the Rust toolchain is needed for anyone who wants to build from source rather than download a release.
Extracting and browsing GMA files without a network round trip
The extraction features are the practical reason many users try the tool. gmpublisher can extract, search and browse GMA files and installed addons, and it can bulk download and extract Workshop items and collections. The distinction between browsing a local file and browsing an installed addon matters in practice, because a downloaded `.GMA` and an addon already unpacked into the game's addons folder are two different states that a user often has both of.
Offline operation is what makes this class of work fast and predictable. Because extraction and search run against local data, a user does not need a live Steam session or a Workshop page to look inside an archive. The project pairs that with support for legacy SteamPipe addons and older GMA versions, which is what lets old files be inspected rather than discarded.
On Windows there is a file association for the `.GMA` type, so an archive can be opened straight from Explorer. That is a small detail with a large effect on how often the extraction path is used at all. The GUI is translated into a long list of languages: English, French, German, Russian, Polish, Turkish, Portuguese (Brazil), Spanish, Chinese, Dutch, Korean and Ukrainian, with the translation files kept in the `i18n/` directory of the repository. A CLI interface is also listed among the features, which is the part that matters for batch work.
The treemap that answers the disk space question
Most Workshop tools answer a publishing question: what am I uploading, and with which title and description. gmpublisher adds an answering tool for the other end of the pipeline, the addon size analyzer treemap, which shows which addons are taking up the most disk space. The choice of a treemap is deliberate, since a treemap makes a single dominant addon visually obvious in a way a sorted table does not, and on a machine with hundreds of Workshop items one oversized entry is usually the reason a drive fills up.
The feature list is arranged around the same practical picture. Bulk download and extraction of Workshop items and collections covers the case where a user wants an entire collection on disk, and upload of animated GIFs as the item icon covers creators who want something more expressive than a static image. The publishing side itself is stated plainly as publish and update your Workshop items, so updating an existing upload and creating a new one are both covered.
What the project does not spell out is the measurement method behind the treemap, or whether the sizes reflect the installed files or the compressed download. The description of the feature is one line, and no sizing, hashing or accuracy note accompanies it. Treat the numbers as a relative ranking tool rather than as an accounting record.
Installing gmpublisher on Windows, macOS and Linux
Installation means taking a build from the project releases. On Windows and macOS the project calls downloading from the releases page the easiest way to install, and on Linux it says you can usually use the provided ZIP file from the same page. The releases are the distribution channel for all three platforms, and the project links to them from the download link in its header.
Arch Linux users have a distribution channel of their own: the AUR package `gmpublisher-bin`, which is the binary variant rather than a source build. The project adds a note that other Linux users may need to install additional dependencies, and repeats it in the requirements section, which otherwise lists Windows, macOS or Linux. That dependency note is the one part of installation with real friction, and it is not enumerated, so a user on Debian, Fedora or Arch without the AUR package will be discovering the requirement themselves.
The application is also documented through community tutorial videos, one covering the fastest route for uploading an addon and one covering the tool in Russian, which suggests the intended audience includes people who do not read English documentation. A related project by the same author, a VS Code GLua Enhanced extension, is pointed at developers who work on the Lua side of the game.
The version numbering gives a sense of the release rhythm. Recent releases include 2.12.2 dated 2026-07-04, 2.12.1 dated 2026-05-30 and 2.12.0 dated 2026-05-10, and the frontend package.json already sits at version 2.12.2. The last push to the repository was on 2026-07-29.
Where gmpublisher is the wrong tool, and what the licence means
The clearest limit is that this is a desktop application for a desktop platform. The requirements name Windows, macOS or Linux and nothing else, and the architecture is a local GUI with a CLI, not a service. A build server that wants to publish an addon from a headless Linux runner will find that the project offers a Linux build and a CLI, but no container image, no service mode and no documented unattended configuration, and publishing from that environment is exactly the case where a logged-in Steam account is hard to arrange.
The second limit is trust. gmpublisher replaces Valve's own publishing executables with its own implementation of the same job, and it does so by talking to the Steamworks SDK through `steamworks-rs`. That is a legitimate approach and the project is transparent about it, but an author publishing commercially needs to know that the tool is a third-party reimplementation rather than the official one, and needs to check the behaviour of the update path on an item that already has subscribers before switching their whole process.
The licence is GPL-3.0. That matters for anyone who intends to modify the tool or to redistribute a build of it, and it is the reason the source and build inputs are present in the repository: the Rust and Svelte build configuration sits in the repository, along with `PKGBUILD` for packaging on Arch-based systems. Whether a particular distribution of the application obliges you to do anything is a question for whoever handles compliance, and this article does not give legal advice.
Nothing in the project promises long term support for older GMA formats, and the project does not define a support window for a specific version line. With releases 2.12.0 through 2.12.2 dated between May and July 2026 and a last push on 2026-07-29, the practical assumption to make is that a current release is the one to install.
Editorial conclusion
Adopt gmpublisher if you publish Garry's Mod Workshop items and want a single cross-platform desktop application that replaces gmad.exe and gmpublish.exe, handles GMA files without a network connection, and exposes a CLI for scripted work. Do not adopt it if you need an officially endorsed Valve tool, a headless Linux server workflow on distributions where the AUR package does not apply, or a project with an active upstream roadmap beyond the last push on 2026-07-29. Before the first upload, verify the release you downloaded, your Steam session, and the disk space reported by the addon size analyzer.
Frequently asked questions
What is gmpublisher used for?
It is a desktop application for publishing and updating Garry's Mod Workshop items, and for extracting, searching and browsing GMA files and installed addons. It also does bulk downloads and collections, and an addon size analyzer treemap.
Does gmpublisher need gmad.exe or gmpublish.exe?
No. The first listed feature is that it does not depend on gmad.exe or gmpublish.exe, and it talks to Steam through the Steamworks SDK using the steamworks-rs library.
How do I install gmpublisher on Linux?
You can usually use the ZIP file provided on the releases page. Arch Linux users can install `gmpublisher-bin` from the AUR. The project notes that other Linux users may need to install additional dependencies.
Can gmpublisher work without an Internet connection?
Yes. Working without a network connection is one of the listed features, so extracting and searching local GMA files does not depend on a live connection.
What technology is gmpublisher built with?
The backend is Rust, the frontend is Svelte, and the shell is Tauri rather than Electron, which is why the program is only about 10 MB.
What licence does gmpublisher use?
The project is published under the GPL-3.0 licence.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/williamvenner-gmpublisher)Was this useful?