CurseBreaker pulls World of Warcraft addons from the command line
TUI/CLI addon updater for World of Warcraft.
At a glance
- What is it?
- CurseBreaker is a Python CLI and TUI that updates World of Warcraft addons from Wago Addons, WoWInterface and GitHub releases, while backing up the WTF directory and handling bulk updates. It suits players who install many addons, and it does nothing for clients it cannot find.
- Who is it for?
- CurseBreaker earns a place on a machine where a single user juggles dozens of addons across Retail or Classic clients and wants update runs scripted or unattended. It is the wrong tool for a single-addon setup, and it cannot be used for Wago Addons without a paid personal API key.
- 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 53 days ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.
Editorial analysis
An updater that has to live next to the game client
CurseBreaker does not connect to a running World of Warcraft session and it does not talk to the game client API. Its model is closer to a package manager: you drop the binary into the directory that holds Wow.exe, WowClassic.exe or World of Warcraft.app, and it operates on the addons folder from there. The README is explicit that this placement is required, and it also tells you to read the instructions shown at the top of the screen once the program starts.
That filesystem-first design explains the audience. The person who benefits is a player with a large addon set who wants one command to refresh everything, or a technical user who wants the same thing done on a schedule without opening the game. A single-addon player with a curated, manually managed Interface folder has little to gain here.
The project also serves a second audience: anyone running the update inside an existing deployment pipeline. A non-interactive mode accepts commands directly as a parameter, and a headless parameter runs the whole addon and Wago upgrade pass plus the WTF backup in the background.
Two boundaries are worth knowing before anything else. The Linux and macOS builds are described in the README as not thoroughly tested, even though Ubuntu 22.04+, Debian 12+ and macOS 15+ are listed as supported alongside Windows 10+.
Source selection runs through short URL prefixes
The mechanism at the centre of the tool is a compact address syntax rather than a menu tree of providers. An addon is named by its source, and the source is expressed as a prefix. Wago Addons uses https://addons.wago.io/addons/[addon_name] or the shorthand wa:[addon_name]. WoWInterface uses https://www.wowinterface.com/downloads/[addon_name] or wowi:[addon_id]. GitHub releases use https://github.com/[username]/[repository_name] or gh:[username]/[repository_name].
Tukui is handled by name rather than by URL, with ElvUI and Tukui listed directly. GitHub development builds are addressed by the same repository form with a :Dev suffix on the slug, which is how a user reaches an unreleased commit of an addon instead of its tagged release.
Wago is also used for something other than addons. CurseBreaker can update auras and Plater profiles and scripts, the same category of content that WeakAuras Companion handles, and the default behaviour is to try to update every detected WeakAuras and Plater profile or script. Because most commands accept a space-separated list of addons, the same syntax that names one addon also names twenty.
The prefix design has a cost. Typing a full URL works, but the shortcuts have to be remembered, and the GitHub forms need a username and repository name rather than an addon identifier.
The WTF directory backup runs by default on every update
Data safety is handled by copying the whole WTF directory before changes are made. The README states that CurseBreaker creates backups of the entire WTF directory by default, which is where the game keeps its per-character and per-account interface settings, including saved WeakAuras and Plater profiles. The headless mode description repeats this, listing the addon and Wago upgrade process together with the WTF backup as the sequence that runs in the background.
That ordering matters for the WeakAuras and Plater workflow. CurseBreaker fetches updated profiles and scripts, but the README is careful about what that means in practice: all updates still need to be applied in game from the WeakAuras or Plater options menu. The tool prepares the files; the client commits them. So a headless run leaves the profile change pending until the user next opens the game.
There is a narrower control for that case. The command toggle wago sets a single author name that will be ignored during the update, which is the escape hatch for an author whose profile you want to keep pinned at a known version.
Backups are described as default behaviour rather than an explicit flag, and the README does not document a command for changing the backup location or pruning older copies.
Installing means downloading a release and moving one file
There is no pip install path in the documentation. The latest release is fetched from the GitHub releases page, and the resulting binary is placed inside the directory that contains Wow.exe, WowClassic.exe or World of Warcraft.app. After that, starting the program shows instructions at the top of the screen, and the client version is detected automatically. Retail, Mists of Pandaria Classic, Classic and Anniversary clients are all supported.
The project is written in Python and its packaging metadata states the runtime it expects, along with the libraries it pulls in:
requires-python = ">=3.14"
dependencies = [
"httpx[brotli,http2]>=0.28.1",
"prompt-toolkit>=3.0.53",
"rich>=15.0.0",
]Two extras are worth knowing before the first run. The TUI looks considerably better in a modern terminal emulator than in the default Windows command prompt, and Windows Terminal is the one the README recommends. Many of the fields in the interface are clickable links when the emulator supports them.
One behaviour surprises newcomers. Addons already installed on the client are not recognised by CurseBreaker and have to be reinstalled. The import command can automate part of that process rather than leaving it entirely manual.
API keys and tokens decide how much of the update path is open
Two of the richer features are gated behind credentials, and the documentation is specific about what each one buys.
Using Wago Addons as an addon source requires a personal API key, and the README describes it as a paid feature obtainable from the Wago Patreon page. The key is entered with the set wago_addons_api command, which stores it in the application configuration. Without it, Wago-hosted addons are simply not available as a source. A second key, set with the set wa_api command, extends Wago coverage further by making non-public WeakAuras entries upgradeable as well.
GitHub access is cheaper. A personal access token added with the set gh_api command greatly increases the speed of bulk version checks and works around rate limiting problems. Both classic tokens and fine-grained tokens are supported, and no additional permissions are required.
On Windows there is a third lever, the uri_integration command, which enables integration with the Wago Addons page and the Wago site. The install command also accepts an optional -i flag that disables the client version check, which matters when the installed build lags behind what a publisher has released.
WoWInterface API gaps cap what can be installed
The README lists three known issues, and all three point at the same root cause: the tool is limited by what the upstream API exposes.
A WoWInterface project that publishes multiple addon releases will always install the retail version, and the README says this cannot be fixed because the WoWInterface API does not support that type of project. Certain WoWInterface addon categories, with Compilations and Optional given as examples, are not handled by the API at all, so addons in those categories cannot be installed. A third constraint covers projects that need to write files outside the Interface\AddOns directory, which are not supported.
These are not bugs waiting to be patched in the Python code, and that distinction matters when choosing the tool. The same shape of limit appears on the GitHub side, where a :Dev slug reaches unreleased builds but the release form still requires the user to know the repository owner and name.
The practical consequence is that CurseBreaker can centralise the bulk of an addon collection without owning the whole of it. The gaps that remain are the ones an API provider decides to keep.
Bulk command line updates against in-game companion addons
The closest alternative named in the README is WeakAuras Companion, which is described as working the same way for auras and Plater profiles. The trade-off is scope and control.
CurseBreaker works with the game closed, covers the whole addon directory rather than one category, and can run unattended, but it stages the profile changes and leaves them pending until the user opens the WeakAuras or Plater menu.
For Wago Addons itself, the difference is starker. Wago Addons is a source with its own paid key and its own web page integration, and CurseBreaker's uri_integration command exists precisely to bridge to it on Windows.
The two approaches are complementary in practice rather than exclusive. A user who wants the full addon set refreshed on a schedule has to go through an external binary, because no in-client addon can do that job once the game is closed.
A monthly-ish release line under GPL-3.0
CurseBreaker is distributed under the GNU General Public License v3, and the licence text sits in LICENSE.txt at the repository root, with pyproject.toml pointing its licence field at that file. The icon is credited separately under a CC 3.0 BY licence, which is worth noting if you plan to reuse the artwork separately from the program.
The release history is easy to read. Version 4.9.0 was published on 2026-08-31, version 4.8.4 on 2026-01-13, and version 4.8.3 on 2025-08-13. The repository is not archived, and the last push was on 2026-08-31.
Building from source has its own prerequisites. The pyproject.toml requires Python 3.14 or newer and pins a dependency set built on httpx with brotli and http2 support, rich and prompt-toolkit for the terminal interface, and packaging and dateutil for version handling. Development extras add pyinstaller, which is what produces the standalone binaries, and ruff for linting, with a ruff.toml at the repository root. A uv.lock is present, so a reproducible dependency set is pinned in the tree.
Upgrade cost for users is low. Replacing the binary and rerunning the same commands is the whole procedure, and the WTF backup means a failed upgrade is recoverable from the copy.
Editorial conclusion
CurseBreaker earns a place on a machine where a single user juggles dozens of addons across Retail or Classic clients and wants update runs scripted or unattended. It is the wrong tool for a single-addon setup, and it cannot be used for Wago Addons without a paid personal API key. Before adopting it, confirm that the client directory holds Wow.exe, WowClassic.exe or World of Warcraft.app, and check that your WoWInterface addons sit in categories the API exposes. The last push was on 2026-08-31, with release v4.9.0 published the same day.
Frequently asked questions
Where do I put the CurseBreaker binary?
Inside the directory that contains Wow.exe, WowClassic.exe or World of Warcraft.app. CurseBreaker then reads the client version automatically and shows instructions at the top of the screen when it starts.
Does CurseBreaker recognize addons I already have installed?
No. The README states that already installed addons are not recognized and need to be reinstalled. The import command can automate part of that reinstall process.
How do I update WeakAuras and Plater profiles with CurseBreaker?
By default CurseBreaker tries to update every detected WeakAuras and Plater profile and script, and the changes still have to be applied in game from the WeakAuras or Plater options menu. The toggle wago command ignores a single author, and the set wa_api command adds a Wago API key so non-public entries can be upgraded too.
Why does CurseBreaker need a GitHub token?
A personal access token, added with the set gh_api command, greatly increases the speed of bulk version checks and solves possible rate limiting issues. Both classic and fine-grained tokens are supported and no additional permissions are required.
Can CurseBreaker install any WoWInterface addon?
No. The README lists three limits: projects with multiple addon releases always install the retail version because the API does not support that type of project, categories such as Compilations and Optional are not handled by the API, and projects that install files outside the Interface\AddOns directory are not supported.
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/acidweb-cursebreaker)Was this useful?