BeamNG.Earth
A 1:1 scale streamed Earth for BeamNG.drive: real elevation and satellite imagery, floating origin, LOD streaming from a companion server
Free desktop app for Dota 2 mods: install skins, terrains, announcers and music from the community catalog, unlock cosmetics, share a setup as a link.
GamesTypeScript · JavaScriptGitHub @dota2modmanagerOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
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.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
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, a weather effect
or a courier your account never bought drawn on your own screen, a setup you send as one link,
and a game that still works after a Dota patch.Read the full README ↗[!WARNING] Copies of this app are going around. Renamed builds of Dota 2 Mod Manager are handed out and sold as other people's launchers, with no source code and no credit. The real one is free, has no paid version and never asks for your Steam login. Do not trust a launcher that shows no source code, names nobody it is built on, wants a subscription or a payment, or makes you sign in. Get it only from dota2modmanager.com or this repository's releases. How to tell the real one.
[!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, a weather effect or a courier your account never bought drawn on your own screen, a setup you send as one link, and a game that still works after a Dota patch.
The repository carries a skill for AI coding assistants: everything an assistant needs to build a Dota 2 mod from a description. Send this to Claude Code, Codex, Cursor or any agent that can run commands on your computer:
Set up Dota 2 modding for me: https://dota2modmanager.com/ai/setup.md
It clones this repository, installs the skill, checks which tools you have and asks before installing the rest. Then ask for what you want: "make Necrophos' spells blood red", "give me Terrorblade's arcana", "a Ghostface mask and a hooded cloak", "he should pull a knife on spawn". The assistant reads the game's files, compiles with Valve's Workshop Tools, checks the result with the mod doctor and hands you a VPK to drag into the app.
In Claude Code it also installs as a plugin:
/plugin marketplace add dota2modmanager/dota2-mod-manager
/plugin install dota2-modding@dota2modmanager
The skill lives in skills/dota2-modding: SKILL.md, references for each
kind of mod, helper scripts for Blender and Python, and the npm run modkit commands it drives.
We wrote it down while building a full custom Necrophos set this way. The guide for people:
Make Dota 2 mods with AI.
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.
Every file on a release is listed with its SHA-256 in SHA256SUMS, and the release workflow signs
that list through Sigstore. To check that a download came out of that workflow, with the GitHub CLI:
gh attestation verify Dota-2-Mod-Manager-Setup.exe --repo dota2modmanager/dota2-mod-manager
Or against the list alone, in a folder holding both files:
sha256sum --check --ignore-missing SHA256SUMS
On Windows without the GitHub CLI, Get-FileHash Dota-2-Mod-Manager-Setup.exe in PowerShell prints
the hash to compare with its line in SHA256SUMS. Releases published before this check existed
have no SHA256SUMS.
Nothing is injected into Dota's process, and no file of the game is opened while it runs.
pakNN_dir.vpk. Trees, river, shaders, hero effects and the other categories
that must load first get pak02 to pak29; everything else starts at pak30. pak64 is the
app's own notice text, and pak65 to pak67 are left to Minify.
Slots and load order.off. The game skips it, the file staysgameinfo_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 costsDownloads 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.
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.
| 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 |
| Make mods with AI · skills/dota2-modding · docs/item-mods.md | The skill an assistant builds mods with, and how an item mod is built from the game's files |
| Every fact, checkable | Version, platforms, counts, and how to verify each one |
| ARCHITECTURE.md · docs/API.md |
| 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 Mod Manager post under #utilities on the D2PFX catalog's server, and new versions in #mod-manager. The maintainer is there as Fleece, with the Dota 2 Mod Manager Dev role and this GitHub account linked on the profile. The server's widget lists who is online, no account needed |
| Security | Vulnerabilities, privately — never a public issue |
| [email protected] | Anything that does not fit a public tracker: press, licensing, a company asking questions |
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.
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 |
| Linux | Builds the AppImage, starts the app against the sandbox, photographs the first window and reads the log for code that could not run |
| Window | On Linux and on Windows: installs a mod, switches it off and on and removes it by clicking in the window, checking the game folder on disk after each launch. Offline, with a fixture catalog |
| Release | On a tag only: builds the Windows installer, the portable build and the Linux AppImage from that commit into a draft release, installs the installer and the AppImage from the draft and clicks a mod through each, and publishes the release with its changelog section only when both pass |
| Site | Rebuilds the documentation site so its counts, its version and this card stay true. On a pull request it only builds the site and checks the output |
| Mirror | Pushes the same history to , 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, or, for the weekly report, at the end of its own comment, because
a bot commit per run is how a log stops being readable.
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
npm run dota:diff # what changed between two Dota builds (6944 6952, or the last two)
Node 24, Electron 45. The main process is TypeScript that Node runs without a build, and the
window is TypeScript and React, built by Vite. 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.
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.
Everything third-party the app ships or fetches, and the one outside source this repository's checks read, with the licence each 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 |
| React | The window's screens, compiled into its page | MIT |
| Motion | How the window's screens move, compiled into its page | 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 |
| GameTracking-Dota2 | Every Dota build as text, read by this repository's checks to report what an update changed. Not the app | None stated. Read over the network; nothing from it is copied here |
package.json lists 16: adm-zip, electron-updater and undici ship inside the app, motion, react and react-dom are built into its window, @types/react, @types/react-dom, @vitejs/plugin-react, axe-core, electron, electron-builder, eslint, fast-check, typescript and vite only build or check it.
The tests use no dependencies at all, and tools/ uses one, vite, to build the window. 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.ts exists.
Every other page that links here, from the catalog's README to the projects built from this code, is listed with dates in MENTIONS.md. The few the maintainer wrote are in a list of their own.
Sponsored by VGTopup, a game top-up store. Paid placement.
GPL-3.0. Copyright (C) 2026 TheFleece.
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.
| 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 |
| docs/assurance-case.md | What could go wrong, what stops it, and the test that proves each answer |
| docs/evidence.md | Every claim above with the CI job that runs it and the command that runs it on your machine |
| TRADEMARK.md · Code signing policy | What the licence gives you and what it does not, and what is signed today |
| Status | Whether the update feed, the mirror, the catalog and the site are answering right now |
| 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 |
| GOVERNANCE.md | Who decides what, how a change is accepted, and what happens to the project without its maintainer |
| docs/second-maintainer.md | The second pair of hands: what the role is, and what to do on the day it matters |
| ROADMAP.md | What is coming next, what comes later, and what this project will not do |
| CHANGELOG.md · CHANGELOG.ru.md | What changed in each release |
| Search report | Weekly, not per push: downloads, update checks, and visits from Google, Bing and Yandex, posted to one public issue with every earlier week above it |
| Radar | Daily, not per push: rewrites the pinned "Project status" issue with what waits on a decision, what is red and what is about to expire, and messages the maintainer about anything overdue |
| Pull request rules | On every pull request: a change that fixes something changes a test too, or says in a No-Test-Because: line why it cannot |
| Labels | Keeps the repository's labels equal to .github/labels.json |
| Dependency updates | On Dependabot's pull requests: a minor or patch update queues itself to merge, and goes in once every required check passes; anything bigger gets a label and waits for the maintainer |
| Scorecard | Weekly and on every change to main: OpenSSF Scorecard grades how the repository is kept (pinned actions, token permissions, branch protection, signed releases) and publishes the score behind the badge above |