A mod manager for Cyberpunk 2077 that lives inside REDcode and VS Code. One list of mods, four verbs, no jargon. It keeps a library of mods outside the game folder, deploys the ones you turn on, and shows you the conflicts Vortex cannot see because it can read inside the archives.
Simplicity with a friendly and obvious UI. Vortex works, but it is built for two hundred games and it shows: profiles, activators, purge, phases, rules, dialogs that ask the user to decide things the tool could decide. REDdeck supports one game and can be as plain as that allows.
Read on 2026-10-11 from a reference machine whose game folder Vortex manages (361 deployed files from 16 mods). A Cyberpunk mod is a set of files dropped into known places under the game folder. There is no plugin list like Bethesda games have; the folder is the registry.
| Place | What goes there | Loaded by | Order |
|---|---|---|---|
archive/pc/mod/ | .archive files, plus .archive.xl manifests for ArchiveXL | The game, ArchiveXL | Alphabetical; an archive loaded earlier wins over later ones, which is why modders prefix names with # or 00_. modlist.txt in the same folder names archives to load first, in order. |
mods/ | REDmod packages: a folder per mod with info.json, archives/, scripts/, tweaks/, customSounds/ | REDmod (CDPR's own system), after redMod.exe deploy and launching with -modded | Set at deploy time by the order passed to redMod.exe. Deploy compiles scripts into r6/cache/modded. |
r6/scripts/ | redscript .reds files, usually in a folder per mod | redscript (scc.exe) at game start | None; all compiled together |
r6/tweaks/ | TweakXL .yaml and .tweak files | TweakXL | Alphabetical within a folder |
r6/audioware/, r6/input/, r6/config/ | Audioware sound packs, input_loader bindings, settings overrides | Audioware, input_loader, the game | None |
red4ext/plugins/ | Native plugins: a folder per plugin with a .dll (ArchiveXL, TweakXL, Codeware, mod_settings, input_loader, REDnode) | RED4ext | None; plugins declare dependencies |
bin/x64/plugins/cyber_engine_tweaks/mods/ | CET Lua mods: a folder per mod with init.lua | Cyber Engine Tweaks | None |
bin/x64/, bin/x64/plugins/ | The frameworks themselves: winmm.dll (RED4ext loader), version.dll (ASI loader), .asi files, red4ext/RED4ext.dll, engine/tools/scc.exe for redscript | Windows, at process start | None |
RED4ext, CET, redscript, ArchiveXL, TweakXL, Codeware, Audioware, input_loader and mod_settings are all installed from Nexus like any mod, and most other mods depend on one or more of them. REDdeck treats them as mods in a pinned "Frameworks" group at the top of the list, and checks their versions against the game version, because a game patch is the usual reason a modded game stops starting.
REDdeck: a deck of mods, a nod to the cyberdeck every player knows, and the mods waiting "on deck" in the library before they are deployed. Chosen 2026-10-11 after REDmods (one letter from CDPR's REDmod) and REDpack ("pack" is the verb WolvenKit and REDcode use for building an archive). CDPR's official modding system is called REDmod. It owns the mods/ folder, redMod.exe and the -modded launch flag, and the Vortex extension talks about "REDmod deploy" and "REDmod load order". REDdeck will still say "REDmod" in its UI when it prepares those packages; the two words are far enough apart to read.
Vortex is an Electron app (React, Redux, TypeScript, GPL-3.0) with one extension per game. The Cyberpunk extension (version 0.12.1, by KellieAtTheLab) is 64 source files and defines 34 installer types, one per mod layout it knows how to recognise and fix up. Vortex itself keeps mods in a staging folder under AppData, hardlinks them into the game folder, and records what it did in vortex.deployment.json. The user is right that some of its complexity is unavoidable: the problems below exist whether or not the UI shows them.
archive/pc/mod, some are a bare .archive, some ship a readme and a choice of options. Vortex has 34 installers for this. REDdeck has one classifier and one "where should this go?" picker, section 06.modlist.txt and runs redMod.exe deploy with a mod list.nxm:// link. Someone must handle it.One view in the REDcode activity bar, or its own activity bar icon when REDcode is not installed. The main part is a list. Selecting a mod opens its detail panel in the editor area, a webview in the HUD style. The status bar shows one thing: whether what is deployed matches the list.
.zip, .7z or .rar, a folder, a bare .archive, or a Nexus link pasted in. Drag and drop onto the view does the same.| Vortex says | REDdeck says | Why |
|---|---|---|
| Enable / Disable, Activate | On / Off | It is a switch. |
| Deploy, Purge | Deploy, Undo deploy | Deploy is the one term worth teaching. Its opposite should sound like its opposite. |
| Staging folder | Library | Where your mods are kept. |
| Mod type, Installer | Kind | What is inside. |
| File override rules, Load after | Conflicts, Wins | Shows the result, not the mechanism. |
| Profile | Loadout (later) | A saved list, not a mode you are in. |
| External changes dialog | "This file changed in the game folder. Keep the changed file, or put the mod's file back?" | One question, two answers. |
| REDmod deploy, REDmod load order | "Prepare REDmod mods" (automatic on Deploy) | The user should not need to know REDmod has its own compiler step. |
The extension lives in its own repository, REDdeck, under MIT, and is packaged and published on its own. It activates on its own events (its view, its commands, an nxm URI). REDcode's extension pack lists it, so installing REDcode installs it. When redcode-core is present, it does two things: it contributes "Install into REDdeck" to the project's packed output, and it hands its bridge client to reddeck through the exported API, which turns on archive-level conflict detection. When it is absent, REDdeck still manages the game; conflicts are then detected by file path only, and the detail panel says so.
// %USERPROFILE%\REDdeck (default; user can move it, ideally onto the game's drive) library.json // game path, game version, order, settings library/ trauma-team-subscription/ // one folder per mod, files laid out exactly as they deploy mod.json // name, version, kind(s), nexus {modId, fileId, md5}, enabled, added, files[] archive/pc/mod/TraumaTeamSubscription.archive archive/pc/mod/TraumaTeamSubscription.archive.xl r6/scripts/TraumaTeamSubscription/... testmod/ // installed from a REDcode project: mod.json says source: project, path downloads/ // original archives kept for reinstall; md5 named deployed.json // mirror of <game>\reddeck.deployment.json
Because each mod folder is laid out exactly as it deploys, "what will this do to my game folder" is answered by listing the folder, and a person or an assistant can inspect or fix a mod with a file explorer. The classifier's job is only to produce that layout once, at add time.
modlist.txt from the archive order, runs redMod.exe deploy if any enabled mod is a REDmod package, and writes the manifest. Progress in the status bar, details in the Output channel.Instead of 34 installers, one classifier with a short rule list. It walks the extracted archive, finds the deepest folder that contains a known top-level name, and maps every file to a target under the game folder. Files it cannot place are shown to the user in a tree with a guess, not rejected.
| Rule | Kind | Files go to |
|---|---|---|
Contains archive/pc/mod/, or a bare .archive at any depth | archive (+ xl if .archive.xl) | archive/pc/mod/, flattened |
Contains mods/<name>/info.json, or info.json with archives/, scripts/ or tweaks/ beside it | redmod | mods/<name>/ |
Contains r6/scripts/ or .reds files | reds | r6/scripts/<ModName>/ |
Contains r6/tweaks/ or .yaml with TweakXL keys | tweak | r6/tweaks/<ModName>/ |
Contains init.lua or cyber_engine_tweaks/mods/ | cet | bin/x64/plugins/cyber_engine_tweaks/mods/<ModName>/ |
Contains red4ext/plugins/ or a .dll beside no exe | red4ext | red4ext/plugins/<ModName>/ |
Contains r6/audioware/, r6/input/, r6/config/, engine/config/, bin/x64/*.asi | audioware, input, config, asi | Same relative path |
Known framework files: RED4ext.dll, cyber_engine_tweaks.asi, scc.exe, ArchiveXL, TweakXL, Codeware, Audioware, input_loader, mod_settings | framework | Same relative path; shown in the Frameworks group |
Contains a REDnode package (package.json with a rednode field) | rednode | REDnode's mods folder; the REDnode runtime is itself a red4ext framework |
| Nothing matched, or several candidates (an archive with "Option A" and "Option B" folders) | ask | The picker: folder tree, a guess per folder, and "this is a choice between folders" when sibling folders contain the same kinds |
A mod can be several kinds at once; Drive an Aerial Vehicle on the reference machine is archive, reds, cet, tweak and audioware together. Kinds are chips, not categories, and a mod is never split into several entries.
Two enabled mods deploy the same relative path. Detected from the library alone. The list shows "1 conflict" on both, the detail panel shows the files and the winner, and up or down in the list changes the winner.
Two .archive files with different names that both contain base\characters\...\t0_000_pma_base__full.mesh conflict inside the game, and no file-level manager sees it. With REDbridge, REDdeck opens every enabled mod archive, lists its resource hashes, and intersects. It shows the overlapping resources, which archive wins under the current order, and whether the mods' .archive.xl files change that. This is the same check WolvenKit's conflicts CLI command does, surfaced where the user decides the order. It needs one new bridge method: archive.openMod(path), returning the file list of an archive outside the game folder.
Conflicts are information, not errors. Most are intentional (a texture replacer over a body mod). The UI marks them, explains the winner in one sentence, and offers reorder. It never blocks Deploy.
api.nexusmods.com/v1 with a personal API key from the user's Nexus account page, sent as a header. Rate limited to 2,500 requests a day, then 100 an hour. REDdeck caches mod and file metadata and checks updates once a day or on demand.games/cyberpunk2077/mods/{id}.json, /files.json. Identify a file the user already has by hash: mods/md5_search/{md5}.json. Updates: compare the newest file for the user's installed file's category.files/{fileId}/download_link.json works directly for Premium members. Free members get links only with the key and expires parameters that the website puts into an nxm:// link when they press "Mod manager download". So the nxm handler is what makes downloads work for everyone.Format: nxm://cyberpunk2077/mods/{modId}/files/{fileId}?key=...&expires=...&user_id=.... VS Code cannot register a custom protocol for an extension, but it does handle vscode://publisher.extension/... links. REDdeck installs a tiny forwarder (reddeck-nxm.cmd) under HKCU\Software\Classes\nxm that opens vscode://cyberbuilds.reddeck/nxm?url=..., and the extension's URI handler downloads and adds the mod. Registration is a button in settings, "Handle Nexus download links", which also says if Vortex currently has them, and a matching button to give them back. Pasting a link into Add mod always works regardless.
vortex.deployment.json is in the game folder, REDdeck opens read-only: it lists what Vortex deployed, explains that two managers cannot deploy into one folder, and offers "Import from Vortex". The user runs Vortex's purge, then REDdeck deploys.%APPDATA%\Vortex\cyberpunk2077\mods) holds one folder per mod already in deployable layout, with the Nexus mod id, version and timestamp in the folder name for mods that came from Nexus. Import copies them into the library, keeps the Nexus ids, and marks them on or off by reading which ones appear in the deployment manifest. Collection folders (collection.json only) are skipped.REDcode's pack step produces packed/archive/pc/mod/<Mod>.archive. With REDdeck present, the project gets an "Install into REDdeck" command and a "Test in game" command that installs, deploys only that mod's changes and launches the game. The library entry remembers its source project, so a rebuild shows "rebuilt, not deployed" in the list and Deploy picks it up. The same path serves REDnode mods: a REDnode package is a kind, and the REDnode runtime plugin is a framework.
All state is JSON files in the library, so an assistant can read what is installed, enabled and conflicting without the UI. The exported commands (reddeck.add, reddeck.setEnabled, reddeck.deploy, reddeck.list) are callable by other extensions and by Claude through VS Code. Later, the same core ships as a reddeck npm CLI and as MCP tools next to REDbridge's, so "install these three mods and tell me if anything conflicts" is one request.
| Risk | Impact | Mitigation |
|---|---|---|
| "Deck" overlaps with cyberdeck | In-game, a cyberdeck is hacking hardware; a mod might even be named after one. | Accepted. The association is the point of the name, and the activity bar says "Mods". |
| Data loss on undo | Deleting a user's own file in the game folder. | Only manifest entries are ever removed, and hardlinks are verified by identity before unlinking. Copies are compared by size and mtime. |
| Steam verify and game patches | Verify can rewrite files REDdeck linked; a patch changes the executable and breaks frameworks. | Change detection on refresh. Version check against Nexus for frameworks. Clear status text. |
| Hardlinks on another drive | Not possible across volumes. | Detect at setup, offer to move the library or use copies. One sentence, one choice. |
| nxm handler fights with Vortex | Whoever registered last gets the links. | Explicit take and give-back buttons; pasting links always works. |
| Long tail of mod layouts | Classifier guesses wrong. | The picker shows the tree and the guess; the user corrects it once and the layout is stored in the library, not re-guessed. |
| REDmod deploy is slow and chatty | Deploy takes a minute when REDmod packages are enabled. | Only run when a REDmod package changed. Show its progress in the Output channel. |
| Nexus terms and rate limits | API key revoked, app blocked. | Register the application, send a proper user agent, cache, no scraping. |
| Antivirus | Blocks hardlink creation or deletes DLLs. | Detect failures per file and report them by name with the usual advice. |
This is a draft. M0 is done: the name, the repository and the extension scaffold with the Mods view over an empty library. Everything from M1 on is intent, and the docs index keeps the current phase status.
Name settled: REDdeck, with its own repository (renamed from REDpack). Default library folder. Agree the plain-words table and the four verbs. Scaffold the repository in the house style with the view and an empty library.
Add from zip, 7z, rar and folder with the classifier and picker. The library layout and mod.json. Hardlink and copy deployment with the manifest, undo, change detection, modlist.txt. Status bar and Output channel. Vortex detection and import. REDdeck manages the reference machine's game end to end.
Frameworks group with game version check. REDmod packages and redMod.exe deploy with order. File conflicts with winner and reorder. Archive conflicts through REDbridge (archive.openMod). Detail panel webview.
API key setting, mod pages and metadata, md5 identification of existing files, update check, nxm forwarder and URI handler, downloads for Premium and free members. Application registration with Nexus.
"Install into REDdeck" and "Test in game" from a REDcode project. REDnode packages as a kind. Rebuild detection. Exported API used by redcode-core.
Save and load a list as a loadout file. reddeck CLI on npm over the same core. MCP tools beside REDbridge's. Publish to Open VSX and the Marketplace.
-modded when REDmod packages are on is obvious and friendly. Steam launches it through REDlauncher, which complicates this. Worth a small investigation.