One desktop app to manage, activate, and validate Marvel Rivals mods with conflict detection, NexusMods integration, and blazing-fast local database.
Features β’ Installation β’ Development Guide β’ Contributing
π― Core Functionality
- Smart Mod Management - Activate, deactivate, and organize mods with per-mod and bulk actions
- Conflict Detection - Automatic detection and resolution of mod conflicts with tag rebuilding
- Game Update Auto-Detection - Automatically detects game updates on startup to dynamically rebuild character and skin data
- Automated Mod Recovery - Uses MD5 hashing and background daemons to automatically recover and link broken or misnamed mod files
- Crash Detection - Persistent crash log parsing utility to quickly identify faulty mods causing game crashes
- Backup & Restore - Comprehensive backup system allowing safe save and recovery of mod configurations
- Custom Tagging - Intelligent tag engine with custom tag support, advanced filtering, and search indexing
- Outdated Mod Cleanup - Automated scanning and deep cleanup for outdated versions of downloaded mods
- Hierarchical File Tree - Nested file tree renderer for granular pak activation in complex mod folder structures
- Quick Start - Direct "Start Game" button integrated into the main header for faster game launches
- Auto-Detection - Automatically detects Marvel Rivals installation path via Steam/Epic Games registry and archive tools (WinRAR)
- One-Click Downloads - Click "Download with Mod Manager" on NexusMods to instantly download and install mods
- Background Processing - Automatic download processing via NXM protocol without manual intervention
π§ Technical Highlights
- Local-First Database - Portable SQLite with health checks, robust conflict checks, and inspection utilities
- Rust-Powered Core - Native Rust
rust-ue-toolslibrary with PyO3 bindings via Maturin - Modern Tech Stack - Tauri 2 desktop shell + React/Vite frontend + FastAPI/Python backend
- AI Knowledge Graph - Built-in cross-language AST knowledge graph generation tool (
graphify) for AI agent assistance - CI/CD Automation - GitHub Actions workflow for automated builds and releases
- One-Click Build - Complete build script for easy local development setup
π NexusMods Integration
- Collections Support - Full support for Nexus Collections and mass downloads with duplicate handling
- Browser Integration - "Download with Mod Manager" button on NexusMods automatically opens RivalNxt
- NXM Protocol - Persistent handoff system and background downloading via Windows registry integration
- Background Processing - Automatic download processing via
NxmBackgroundListenercomponent - Image Uploads - Native drag-and-drop custom image uploading directly in the mod interface
- Dynamic Meta Resolution - Intelligent fallback resolution using Fandom Wiki to identify character skins accurately
- API Integration - Metadata fetching, automated ingestion, and update notifications
- Test Functionality - Built-in protocol validation tools
β‘ Rust UE Tools Library
- PyO3 Integration - Python bindings built with Maturin for seamless interop
- Native Performance - Rust library replaces slow Python/external tool processing
- PAK/UTOC Support - Direct unpacking and listing without external CLI dependencies
- AES Encryption - Built-in support for encrypted mod files
- Batch Processing - Parallel processing for multiple mod files
- Archive Support - Handles ZIP and RAR archives containing mod files
- Go to the Releases page.
- Download the latest setup file, for example:
RivalNxt_0.8.0_x64-setup.exe(or any newer version).
- Run the installer.
- Launch the application after installation completes.
RivalNxt can automatically detect your Marvel Rivals installation if installed via Steam or Epic Games Store.
In Settings:
- Local downloads directory β Select the folder where your Marvel Rivals mods are downloaded/saved (create anywhere or use existing folder)
- Nexus Personal API Key β Get your API key (scroll all the way down) and paste it into RivalNxt
π‘ Tip: The app also auto-detects archive tools (WinRAR) for extracting mod files.
Every mod inside your marvel_rivals_local_downloads_root directory must follow this format:
<name>-<modid>-<version>
Example: CoolSkin-12345-1.0.0
This helps the app detect and track mods accurately.
No Node.js, Rust, or Python is needed for normal usage.
See the Development Guide below.
%%{init: {
"flowchart": {
"nodeSpacing": 40,
"rankSpacing": 40
}
}}%%
flowchart LR
FE["π¨ React + Vite"]
Tauri["π₯οΈ Tauri 2.0"]
API["βοΈ FastAPI"]
DB[("πΎ SQLite")]
RustUE["π¦ Rust UE Tools"]
FE <-->|HTTP/IPC| Tauri
Tauri <-->|HTTP| API
API <-->|ORM| DB
API <-->|PyO3| RustUE
Tauri <-->|Rust API| RustUE
classDef frontend fill:#61dafb,stroke:#333,stroke-width:2px,color:#000
classDef desktop fill:#ffc131,stroke:#333,stroke-width:2px,color:#000
classDef backend fill:#009688,stroke:#333,stroke-width:2px,color:#fff
classDef shared fill:#dea584,stroke:#333,stroke-width:2px,color:#000
classDef data fill:#4caf50,stroke:#333,stroke-width:2px,color:#fff
class FE frontend
class Tauri desktop
class API backend
class RustUE shared
class DB data
Tech Stack
- Frontend: React 18, TypeScript, Vite 6, Radix UI, Tailwind CSS
- Backend: Python 3.10+, FastAPI, Uvicorn, SQLAlchemy
- Desktop: Tauri 2.0 (Rust), Windows native
- Rust UE Tools: Native Rust library with dual interfaces (Rust API + PyO3 bindings via Maturin)
- Database: SQLite with optimized materialized views
RivalNxt includes a high-performance native Rust library (rust-ue-tools) that provides programmatic access to Unreal Engine PAK and UTOC file operations, replacing external command-line tools like repak and retoc_cli.
- β PAK File Support: Unpack .pak files without external tools
- β UTOC File Support: List contents of .utoc files (UE5 IoStore format)
- β AES Encryption: Handle encrypted mod files with proper key management
- β Compression Support: Full support for Oodle, Zstd, Zlib, LZ4 compression
- β Archive Processing: Extract ZIP and RAR archives containing mod files
- β Parallel Processing: Leverage Rayon for concurrent file operations
- β Python Bindings: PyO3 integration for seamless Python usage
use rust_ue_tools::Unpacker;
let unpacker = Unpacker::new();
let zip_path = "mod_file.zip";
let aes_key = Some("0C263D8C22DCB085894899C3A3796383E9BF9DE0CBFB08C9BF2DEF2E84F29D74");
match unpacker.extract_asset_paths_from_zip(zip_path, aes_key, false) {
Ok(asset_paths) => {
for asset in asset_paths {
println!("Asset: {}", asset);
}
}
Err(e) => {
println!("Error: {}", e);
}
}use rust_ue_tools::{Unpacker, PakUnpackOptions};
let unpacker = Unpacker::new();
let options = PakUnpackOptions::new()
.with_aes_key(aes_key.unwrap_or_default())
.with_strip_prefix("../../../")
.with_force(true)
.with_quiet(false);
match unpacker.unpack_pak("mod.pak", "output_dir", &options) {
Ok(asset_paths) => {
println!("Unpacked {} files", asset_paths.len());
}
Err(e) => {
println!("Error unpacking: {}", e);
}
}use rust_ue_tools::{Unpacker, UtocListOptions};
let unpacker = Unpacker::new();
let options = UtocListOptions::new()
.with_aes_key(aes_key.unwrap_or_default())
.with_json_format(false);
match unpacker.list_utoc("mod.utoc", &options) {
Ok(asset_paths) => {
for asset in asset_paths {
println!("Asset: {}", asset);
}
}
Err(e) => {
println!("Error listing: {}", e);
}
}The Rust library replaces the original Python zip_to_asset_paths.py script:
Before (Python)
from core.assets.zip_to_asset_paths import extract_uasset_paths_from_zip
asset_paths = extract_uasset_paths_from_zip(
"mod.zip",
repak_bin="path/to/repak",
aes_key="your-key"
)After (Rust)
use rust_ue_tools::Unpacker;
let unpacker = Unpacker::new();
let asset_paths = unpacker.extract_asset_paths_from_zip(
"mod.zip",
Some("your-key"),
false
)?;# Build with Maturin (recommended for PyO3 bindings)
cd src-tauri/src/rust-ue-tools
maturin build --release --features pyo3
# Install the built wheel
pip install target/wheels/*.whl
# Manual Rust build (library only)
cargo build --release --features pyo3
# Run tests
cargo test
# Build documentation
cargo doc --open- π 10-50x Faster: Native Rust vs Python subprocess calls
- π¦ No External Dependencies: Eliminates repak.exe/retoc_cli.exe requirements
- πΎ Memory Efficient: Streams data instead of loading entire files
- π Parallel Processing: Rayon-powered concurrent operations
- π Progress Tracking: Built-in progress reporting for long operations
- π Python Integration: Maturin-based PyO3 bindings for seamless Python usage
- Windows 10/11 (for desktop builds)
- Node.js 18+ and npm
- Rust toolchain via rustup
- Python 3.10+
- Maturin for PyO3 builds:
pip install maturin - Git
For new users, use the automated build script that handles everything:
# Clone repository with submodules
git clone --recurse-submodules https://github.com/Rounak77382/Project_ModManager_Rivals.git
cd Project_ModManager_Rivals
# Run one-click build (Windows)
.\build_local.bat
# This will:
# 1. Install npm dependencies
# 2. Build Rust UE Tools with PyO3 bindings
# 3. Create Python wrapper module
# 4. Build Python backend with PyInstaller
# 5. Build Tauri application
# 6. Generate NSIS installer# 1. Clone repository with submodules
git clone --recurse-submodules https://github.com/Rounak77382/Project_ModManager_Rivals.git
cd Project_ModManager_Rivals
# If you already cloned without submodules:
git submodule update --init --recursive
# 2. Install frontend dependencies
npm install
# 3. Setup Python environment
python -m venv .venv
.venv\Scripts\Activate.ps1
pip install -r requirements.txt
pip install maturin # For PyO3 builds
# 4. Build Rust UE Tools with Maturin
cd src-tauri/src/rust-ue-tools
maturin build --release --features pyo3
pip install target/wheels/*.whl
cd ../../..
# 5. Start development servers
# Terminal 1: Backend
python src-python/run_server.py
# Terminal 2: Frontend
npm run dev
# OR run full desktop app
npm run tauri:dev# One-click build (recommended)
.\build_local.bat
# Manual builds
npm run build # Production web build
npm run tauri:build # Full desktop application
# Rust UE Tools with Maturin
cd src-tauri/src/rust-ue-tools
maturin build --release --features pyo3
maturin develop # Install in development modeπ¦ RivalNxt
βββ π core/ # Python backend modules
β βββ api/ # FastAPI endpoints (50+)
β βββ db/ # SQLite + migrations
β βββ ingestion/ # File scanning & discovery
β βββ nexus/ # NexusMods API client
β βββ utils/ # Shared utilities
βββ π scripts/ # CLI automation (25+ tools)
βββ π src/ # React frontend
β βββ components/ # UI components
β βββ lib/ # API client & utils
β βββ styles/ # Tailwind CSS
βββ π src-tauri/ # Rust desktop shell
β βββ src/rust-ue-tools/ # Native Rust library (Git submodule)
β β βββ repak-rivals/ # Workspace with PAK/UTOC/Oodle
β β βββ pyproject.toml # Maturin build config
β β βββ Cargo.toml # Rust workspace config
β βββ src/main.rs # Tauri main entry
βββ π build_local.bat # One-click build script
βββ π .github/workflows/ # CI/CD automation
βββ π src-python/ # Backend entry point
Code Standards
- Python: PEP 8 with type hints
- TypeScript: Strict mode, React hooks patterns
- Rust: Standard conventions with
tauri-plugin-*
When working on the Rust components, ensure you have the latest Rust toolchain:
# Update Rust toolchain
rustup update stable
# Check toolchain version
rustc --version
# Run Rust-specific tests
cd src-tauri/src/rust-ue-tools
cargo test
cargo clippy # Linting
cargo fmt --check # Code formatting checkRust Development Tools:
- rust-analyzer (VS Code extension) - IDE support
- cargo-watch - Auto-recompile on changes:
cargo install cargo-watch - cargo-audit - Security vulnerability checking:
cargo install cargo-audit
Useful Commands
# Database inspection
python -X utf8 -m scripts.inspect_db
# Database rebuild
python -X utf8 -m scripts.rebuild_sqlite
# Check missing metadata
python -X utf8 -m scripts.report_missing_tags
# Generate or update Graphify Knowledge Graph
graphify update .RivalNxt uses graphify to generate a cross-language Abstract Syntax Tree (AST) knowledge graph. This allows AI assistants to instantly understand the complex React + Python + Rust architecture without manually scanning every file.
Setup Instructions:
- Run the update command in the project root:
graphify update . - A
graphify-out/folder will be generated containing the knowledge graph (graph.json) and a readable Wiki. - AI agents configured in this project (via
.agents/rules) will automatically query this graph to answer architecture questions accurately.
Note: Always run
graphify update .after making significant structural changes to keep the AI context fresh!
VS Code Extensions (Recommended)
- Python (ms-python.python)
- Rust Analyzer (rust-lang.rust-analyzer)
- TypeScript (ms-vscode.vscode-typescript-next)
- Tailwind CSS (bradlc.vscode-tailwindcss)
RivalNxt uses GitHub Actions for automated builds and releases.
When a new GitHub Release is published, the workflow automatically:
- Builds PyO3 Module - Uses Maturin to build Python wheel with Rust bindings
- Packages Backend - Creates standalone executable with PyInstaller
- Builds Tauri App - Compiles desktop application with embedded backend
- Uploads Assets - Attaches installer to the GitHub Release
See .github/workflows/release.yml for the complete CI/CD configuration.
- Submodule Support - Automatically initializes Git submodules
- Multi-stage Caching - Caches Rust, Node, and Python dependencies
- Size Validation - Ensures backend executable includes all dependencies
- Artifact Upload - Uploads build artifacts for debugging
- Automated Release - No manual build steps required for releases
# 1. Tag your commit
git tag v0.8.0
git push origin v0.8.0
# 2. Create GitHub Release from tag
# The workflow will automatically build and attach the installerConfiguration is stored at: %APPDATA%/com.rivalnxt.modmanager/settings.json
Environment Variables
| Variable | Description | Default |
|---|---|---|
MM_DATA_DIR |
Data directory override | Platform-specific |
MM_BACKEND_HOST |
Backend bind address | 127.0.0.1 |
MM_BACKEND_PORT |
Backend port | 8000 |
NEXUS_API_KEY |
NexusMods API key | None |
MARVEL_RIVALS_ROOT |
Game installation path | Required |
MARVEL_RIVALS_LOCAL_DOWNLOADS_ROOT |
Mod downloads folder | Required |
See Configuration Guide for detailed setup instructions.
We welcome contributions! Please see our Contributing Guidelines for details.
Getting Started
- Check open issues
- Look for
good first issuelabels - Open an issue for major changes before starting work
Pull Request Process
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit changes (
git commit -m 'Add AmazingFeature') - Push to branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Code Quality Standards
- Add tests for new features
- Update documentation
- Follow existing code style
- Validate all inputs and API parameters
See the issue tracker for known bugs and feature requests.
No license file is currently present. This project is "all rights reserved" by default. Please open an issue to discuss licensing before contributing or reusing code.
Consider adding an SPDX-compatible LICENSE file (MIT, Apache 2.0, GPL, etc.).
Built with amazing open-source tools:
- Rust UE Tools - Native Rust implementation replacing external CLI tools
- Based on natimerry/repak-rivals and retoc libraries
- Provides PAK/UTOC operations without external dependencies
- Tauri - Lightweight desktop runtime
- FastAPI - Modern Python web framework
- React + Vite - Fast frontend tooling
- Radix UI - Accessible component primitives
- NexusMods - Modding community platform
Made with β€οΈ for the Marvel Rivals modding community