A look at the problem, and an open-source solution: TotalControl
Hey everyone 👋
I’m Dominic, a passionate gamer and fan of open-source projects. Like many of you, I’ve spent countless hours modding games — and just as many hours fighting the tools we’re forced to use. From clunky Windows-only apps to platforms that ignore gamepads entirely, I kept wondering...
Why isn’t there a good, open-source, cross-platform mod manager in 2025?
So, I built one.
🚨 This post is an ad for my open-source application called TotalControl — but it’s also a breakdown of the modding ecosystem’s current pain points and how we can start fixing them.
💥 Why Is Mod Management Still So Painful?
If you’ve ever modded games like Skyrim or Stardew Valley, you know the routine:
- Hunt down the mod files
- Manually unpack or install them
- Edit text configs
- Hope it doesn’t crash
- Repeat for updates
Even popular tools like Vortex or Mod Organizer have major flaws:
🔒 Windows-only, 💸 ads or subscriptions, 🧷 locked into an eco-system, 🧍♂️ no controller support.
That’s a huge problem in 2025, especially with Steam Deck and couch-gaming on the rise.
❓ Why Isn’t There a Cross-Platform, Multi-Game Mod Manager?
Here’s why this problem persists:
- Most tools are Windows-first
- They rely on .NET, WinForms, or native Windows APIs — making porting to Linux/macOS non-trivial.
- Hard-coded support
- Most managers are tailored to specific games (Skyrim, Fallout, Satisfactory), and adding others means trying to change their foundation.
- Lack of modularity
- Very few are designed to be plugin-first or sandboxed for safety.
- Controller unawareness
- Despite the popularity of Steam Deck and other handheld PCs, gamepad navigation is an afterthought (if considered at all).
🤷♂️ Why Is NexusMods Still the Only Multi-Game Mod Manager?
Vortex from NexusMods is technically a multi-game mod manager — but it’s built entirely around their own platform.
Let’s be honest: Vortex is not the answer for everyone.
- ✅ It supports many games
- ❌ It’s Windows-only, written in .NET
- ❌ It’s user-extendable but honestly it’s a pain.
- ❌ It’s heavily tied into the NexusMods website (which means mod downloads are platform-locked and account-gated)
- ❌ It has no gamepad support
- ❌ It's bloated with ads unless you pay
If you want to install mods outside of windows — or want something lighter, faster, and more transparent — you're on your own.
🎮 Introducing: TotalControl
TotalControl is (hopefully) my answer to all of this.
🛠️ A cross-platform, controller-first, plugin-based mod manager — 100% open source under the AGPL-v3 license.
You can think of it as the Visual Studio Code of mod managers: the core does nothing by default — everything is built with plugins.
🌟 Features at a Glance
- ✅ Cross-platform — Windows, Linux, macOS
- 🎮 Full controller support — navigate with a gamepad
- 🧩 Modular & extensible — Lua plugins for game support
- 🖼️ Modern UI — built with Vue.js + TypeScript
- 🔐 Safe & sandboxed — plugins declare capabilities
- 💻 No ads, no tracking, no subscriptions
- 💬 Built in public — solo-developed, early alpha, contributions welcome!
⚙️ Why I Chose The Technologies Used
Business Logic:
I chose Go (Golang) for the core logic due to its:
- Excellent cross-compilation support
- Strong performance and concurrency model
- Clean and readable structure for large applications
Frontend:
I’m using Vue.js with TypeScript, powered by the Wails framework.
Why Wails?
- Native performance without Electron bloat
- Small binary size
- Seamless Go + JS interop
Plugin System: Lua
I picked Lua because it's:
- Lightweight and embeddable
- Already popular in game development (e.g., Factorio, WoW, Garry’s Mod)
- Easy to learn and script with, even for non-devs
- Doesn’t require compilation or external dependencies
Each plugin lives in a sandbox and explicitly declares what it can access — like mod directories or web APIs — making the system safe by design.
🔌 Example: The Factorio Testing Plugin
Here’s an example game plugin. This one could add support for Factorio — managing installed mods, downloading new ones, and even reading mod-list.json.
plugin.json
{
"id": "com.github.subtixx.factorio",
"name": "Factorio",
"description": "Enables managing Factorio mods and saves.",
"entry": "plugin.lua",
"capabilities": {
"filesystem": {
"path_whitelist": ["$HOME/.factorio/*"]
},
"network": {
"url_whitelist": [
"https://mods.factorio.com/*",
"https://api.mod.io/*"
]
}
},
"functionality": [
"mod_management",
"save_game_management"
]
}
plugin.lua (snippet)
function readModListFile(plugin)
local mod_list_file = io.getFileContent(plugin:GetGameModDirectory() .. "mod-list.json")
if mod_list_file == nil or mod_list_file == "" then return {} end
local mod_list = json.decode(mod_list_file)
local mod_ids = {}
for _, mod in ipairs(mod_list.mods or {}) do
mod_ids[mod.name] = mod.enabled or false
end
return mod_ids
end
function loadModsFromApi()
local response = http.get("https://mods.factorio.com/api/mods")
if response and response.status_code == 200 then
local data = json.decode(response.body)
cache.set("factorio_mods", data)
return data
end
return {}
end
return {
mods = loadModsFromApi(),
GetInstalledMods = function(self)
local mod_list = readModListFile(self)
local mod_files = io.getFilesInDirectory(self:GetGameModDirectory(), { "*.zip" })
local mods = {}
for _, file in ipairs(mod_files) do
local info = json.decode(io.readFileFromZip(file, ".*?/info\\.json"))
mods[#mods + 1] = {
id = info.name,
name = info.title or info.name,
version = info.version,
description = info.description or "",
author = info.author or "Unknown",
file_path = file,
enabled = mod_list[info.name] or false,
game_id = "factorio"
}
end
return mods
end,
GetGameModDirectory = function()
if os.is_windows then
return io.pathJoin(os.getenv("APPDATA"), "Factorio", "mods")
elseif os.is_linux then
return io.pathJoin(os.getenv("HOME"), ".factorio", "mods")
elseif os.is_macos then
return io.pathJoin(os.getenv("HOME"), "Library", "Application Support", "factorio", "mods")
end
end
}
🧪 Current Status: Alpha Phase
As of writing, TotalControl is still early-stage — here’s what works:
- ✅ Plugin system
- ✅ Mock frontend
- ✅ plugin to test scripting functionality
- 🚫 No real UI ↔ backend integration yet
- 🚫 No mod install/update workflows yet
- 🚫 No plugin sandbox
- 🚫 No capability system
But it’s a solid foundation. And yes — I’m doing this solo, just a gamer and developer with a dream and a keyboard.
🙋♂️ A Personal Note
I’ll be honest — putting this out there makes me nervous as hell. I often look at my own code and ideas and think they’re garbage, or that no one will care. Imposter syndrome is real, and it’s loud. But despite that, I care deeply about making good tools and sharing them, even if they’re not perfect. TotalControl is my way of trying anyway — and if you find it useful, that already means the world to me.
👐 Want to Help?
Check out the repo:
👉 github.com/subtixx/total-control
- 💬 File issues, request features
- 🧩 Write plugins for your favorite games
- 🧪 Test it on your setup
- ⭐ Star the repo to support it!
This isn’t just about one project — it’s about modernizing how we mod games. Together, we can make it platform-agnostic, user-friendly, and open.
Thanks for reading — and happy modding! 🎮
— Dominic
Top comments (0)