Skip to content

Latest commit

 

History

524 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Note

Not affiliated with Valve. Every mod here is client-side: nobody else sees them, and no other player's game is touched. Safe mode is on by default and keeps the app out of Dota's own files entirely; the one feature that changes them asks first and reverts byte for byte.

Why not just copy the files yourself? You can, and people do. What the app adds is everything after that: switching a mod off before a match without deleting it, free cosmetics read from the game's own item table, a setup you send as one link, and a game that still works after a Dota patch.


What it does

The whole catalog1000+ mods in 41 categories, read live from the D2PFX repository, so a mod added today installs today
One click in, one click outThe app downloads it, picks a free pak slot and cleans up after itself. Categories that must load early get low slots by themselves
Switch off, don't deleteTurn a mod off before a match and back on after. Your library stays, the game folder stays clean
Free cosmeticsWeather, couriers, wards, loading screens, announcers, mega-kills, read from the game's own item table, so anything Valve adds appears by itself
It says when mods collideTwo mods carrying the same file cannot both win. The app names the file, says which mod the game loads it from, and lets you reorder
Setups by linkSave what you run as a preset and send it in one message. The other side opens it and gets the same look
It survives Dota patchesThe app notices a game update when it lands and puts back what the patch wiped, without ever writing while Dota is running
And the rest
An install listPut mods aside while you browse and install them all at once. The list has its own search, because people were installing eighty mods one at a time
Filters and searchChips for what a mod changes, a dropdown for the item slot, a list of heroes, and one search across the whole catalog
Fonts and cursorsInstalled into the game files with a backup of the originals; removing them restores vanilla
Combined packsMerge several mods into one pak slot, and take them apart again
Your own filesImport a .vpk, or adopt what somebody else's tool left in the folder. The app fingerprints it against the catalog and tells you what it is
Auto-updatesThe app checks GitHub Releases and installs new versions itself
Windows and LinuxBoth ship with every release: an installer and a portable build for Windows, an AppImage for Linux. Steam is found wherever your distribution keeps it, flatpak included
No account, no telemetryNothing is collected and nothing is sent. Signing in with Discord is optional and only puts your name on a setup you share
Mods grouped hero by hero Installed mods, with the load order

Install

  1. Download Dota 2 Mod Manager Setup — direct link, always the latest version
  2. Run it. The app installs, creates a shortcut and starts
  3. It finds Dota on its own. No launch options, no Steam properties to edit

On Linux the same app ships as an AppImage: chmod +x it and run it.

Important

Windows will call the publisher unknown, because the installer carries no paid signature. Click More info, then Run anyway. Every release is built from this source by a public workflow rather than uploaded from anybody's desktop, and the build log for the exact file you downloaded is open to read.


How it works

Nothing is injected into Dota's process, and no file of the game is opened while it runs.

  • Dota mounts one folder, named after its voice language. The app sets that language in the game's own settings and installs there — no launch option involved, which is the part worth reading twice. Why that works
  • VPK mods go in as pakNN_dir.vpk, slots 10 to 99. Categories that must load first get pak02 to pak09. Slots and load order
  • Switching a mod off renames its file to .off. The game skips it, the file stays
  • Fonts and cursors go into the game's own folders, with the originals backed up first
  • Everything that writes to the game folder is one transaction: if a step fails, the whole change rolls back, displaced files included
  • Safe mode, on by default, means the app never touches Dota's own files. Turning it off adds one line to gameinfo_branchspecific.gi and a signature to dota.signatures — both backed up before the first edit, both restored byte for byte when it goes back on. What that buys and costs

Downloads live in %APPDATA%/dota2-mod-manager/downloads, the install manifest beside them. The full picture is in ARCHITECTURE.md, and every module is listed in docs/API.md, which is generated from the source rather than written.


Alongside Dota2 Minify

Dota2 Minify is a different kind of tool by a different author: it builds mods by patching the game where this installs finished ones from a catalog. Run both. This app installs into whichever folder the game will really mount — including the one Minify picked — never hands out the pak slots Minify writes, and leaves its files alone. Minify since v1.14rc7 checks ownership before clearing the map folder, so a terrain installed here survives its uninstall.

What Minify is, and how the two share a game.


Documentation

Installing mods The whole route, by hand and with the app
The language folder Why -language is not needed, and what it does when it is there
VPK and load order Pak slots, which mod wins, and gameinfo.gi
Safe mode What the app writes into the game, and what it does not
Free cosmetics The item table, and what it can and cannot give you
After a Dota patch What breaks, and what the app puts back
Every fact, checkable Version, platforms, counts, and how to verify each one
ARCHITECTURE.md · docs/API.md Which file owns which decision, and every module's exports
CONTRIBUTING.md · AGENTS.md · SECURITY.md How to work on it, with or without an assistant, and how to report a hole
PRIVACY.md What is collected (nothing), and every address the app can contact
DECISIONS.md What was decided on purpose, what is genuinely missing, and the command that checks each one
CHANGELOG.md · CHANGELOG.ru.md What changed in each release

Report a problem

Bug report Something is broken. Settings → Diagnostics → Export report puts everything needed in one file
Feature request An idea for how the app should work
Discussions Questions, setups worth showing, and anything that is not yet a bug
Discord Quick help, in the catalog's own community
Security Vulnerabilities, privately — never a public issue

Two things first: make sure you are on the latest version, and if Dota updated recently, open the app and let it put the patch back.


Project activity

Commits per day over the last 60, split between work done by hand and work done by CI, with release days marked

Drawn from this repository's own git log when the site rebuilds, which it does daily and after every release. No third-party widget, so nobody reading this page is loading a tracker, and nothing has to be committed for the picture to move.

What runs on every push:

Tests eslint first, then the full suite with a coverage floor, on Linux and on Windows. Several of the tests hold the project against itself rather than testing a module: every IPC channel has a handler and every handler runs, every renderer import resolves, every Russian string has an English twin, the version and both changelogs agree, docs/API.md still matches the source, and DECISIONS.md still matches the repository
CodeQL Security and quality analysis, plus a weekly scheduled run
Release On a tag only: builds the Windows installer, the portable build and the Linux AppImage from that commit, and publishes them with the changelog section for that version
Site Rebuilds the documentation site so its counts, its version and this card stay true
Mirror Pushes the same history to GitLab, so the code outlives this repository

Nothing here commits back to main. Workflows that need to remember something between runs keep it in the Actions cache, because a bot commit per run is how a log stops being readable.


Development

npm install
npm start                 # run the app
npm test                  # the whole suite, no framework, no mocks library
npm run test:coverage     # the same with the floor CI enforces
npm run docs              # regenerate docs/API.md from src/
npm run sandbox:seed      # a throwaway game tree with real mods in it
npm run start:sandbox     # the app against it, never your own game

Node 24, Electron 43, no bundler — the renderer is plain HTML, CSS and JavaScript. Every release is produced by release.yml from the commit its tag names.

Open an issue before building anything larger than a fix. It costs one message and saves the case where two people solve the same thing twice, or where the answer was "that is deliberate, and here is why". CONTRIBUTING.md has the rest; AGENTS.md is the same ground for anyone working with a coding assistant.


Written with Claude Code

This project has been written with Claude Code since its first commit on 20 July 2026, and still is. Commits carry a Co-Authored-By trailer saying so.

It says so here because guessing is worse. Everything that would tell you whether the code is any good is already in the open: every commit, more than forty test files, a linter and a coverage floor that CI enforces on two operating systems, and DECISIONS.md, which answers the questions reviewers keep asking with a command you can run yourself.

Send a change written with an assistant and keep the trailer on it. AGENTS.md is what the project asks for in return.


What it is built on

Everything third-party the app ships or fetches, with the licence it comes under. The NOTICE file has the full text and the two additional terms this project adds under section 7 of the GPL.

What for Licence
Electron The window and the process behind it MIT
electron-updater Update checks and installing them MIT
adm-zip Reading mod archives, behind our own size and path guards MIT
Source 2 Viewer Decoding Dota's own textures for item icons. Downloaded on demand, never bundled MIT
Inter, Exo 2, Material Symbols The typefaces and icons, shipped inside the app rather than fetched OFL-1.1, Apache-2.0
Astro The documentation site, not the app MIT

package.json lists exactly four: adm-zip and electron-updater ship inside the app, electron and electron-builder only build it. The tests and everything under tools/ use no dependencies at all. The VPK reader and writer, the KeyValues parser, the zip guards and the update logic are written here, because every dependency is a stranger with write access to a game folder on tens of thousands of machines.

Valve's own vpk.exe is deliberately not here and must not be added: it is proprietary, and a project that bundles it is not open source in the sense SignPath's terms mean. Reading and writing VPK archives is done by this repository's own code, which is why src/vpk.js exists.


Credits

  • All mods, previews, guides and catalog data come from the open-source D2PFX repository by h6rd and the Dota 2 modding community. This app is a desktop client for their catalog, and every mod card in it credits its author.
  • Community tools (VPKMerge, Background Changer, Compiler, ItemsFix) belong to their authors.
  • hanta filmed a walkthrough in Russian, which answers more questions than this page does for anyone who would rather watch than read.

License

GPL-3.0. Copyright (C) 2026 Mykhailo Lynnyk.

Fork it, change it, ship your own. GPL-3.0 asks you to keep the copyright line, to say that you changed the code and when, and to open your version under the same license. Section 7 lets an author add two more, and this repository does: keep the credit the app shows, and pick your own name for your version. NOTICE puts all of it in plain words.

Catalog content belongs to h6rd and the mod authors, under the license in their repository.

Not affiliated with Valve Corporation. You modify game files at your own risk.

About

Desktop mod manager for Dota 2 — browse, install, toggle and share 1000+ cosmetic mods from the open D2PFX catalog. Windows and Linux, no account, no telemetry.

Topics

Resources

Contributing

Security policy

Stars

30 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages