A complete GTA V and LSPDFR command center — install and manage mods, run diagnostics, switch profiles, analyze crashes, and launch safely. Built with .NET 8 WPF + a React/TypeScript frontend.
See the GitHub Releases page for the latest release notes.
| Tab | What it does |
|---|---|
| Home | Dashboard with launch readiness, component status, and quick-action links |
| Library | Browse, search, filter, enable/disable, and uninstall all installed mods |
| Install | Drag-and-drop or browse for mod archives — smart plan with conflict detection and rollback |
| Browse | Embedded lcpdfr.com browser with one-click install queuing |
| Diagnostics | Plugin health scanner, dependency checker, crash log analyzer |
| Profiles | Launch profiles — switch full mod loadouts with a single click |
| Backups | Scheduled and on-demand backups of library and config state |
| History | Full change log of every install, uninstall, enable, and disable action |
| Logs | Real-time LSPDFR/GTA V log viewer |
| OIV Tools | Build OIV packages with a creator wizard, or install existing .oiv files |
| Mod Config | Per-plugin config file editor with raw and parsed views |
| Settings | GTA V path, backup location, behavior toggles, update checker |
Automatically identifies mod type from archive contents:
| Mod Type | Detection signal |
|---|---|
| LSPDFR Plugin | plugins/lspdfr/*.dll |
| ASI Mod | *.asi at root |
| Vehicle Add-On DLC | dlcpacks/*/dlc.rpf |
| Vehicle Replace | x64/levels/gta5/vehicles.rpf |
| Script | scripts/*.cs or scripts/*.dll |
| EUP | x64e.rpf or eup/ paths |
| Map | *.ymap or maps/ |
| Sound | x64/audio/**/*.awc |
Each detection produces a confidence score (Low / Medium / High). Low-confidence results warn before installing.
Before any file is written, the planner builds a full install plan:
- Detects conflicts against enabled mods, disabled mods, and
.disabledfiles on disk - Surfaces overwrite risks and blocking issues in the review UI
- Orders files by dependency priority (RPH, ELS, shared DLLs)
- The reviewed plan is what actually executes — no double-build at install time
- Atomic installs — any failure triggers a full rollback; no partial installs reach disk
- Path traversal protection — archive entries validated through
PathSafetybefore extraction - Enable/Disable — renames files with
.disabledsuffix; GTA V ignores them without deletion - Conflict detection — warns when incoming mod files overlap with installed mods (including disabled ones)
- OIV path validation — install paths in OIV packages are checked for traversal and rooted-path injection before packaging or install
| Layer | Technology |
|---|---|
| Desktop shell | .NET 8 WPF (net8.0-windows) |
| Local API | ASP.NET Core Minimal API, hosted in-process |
| Frontend | React 19, TypeScript, Vite 8, Tailwind CSS 4 |
| Data fetching | TanStack Query v5 |
| Routing | React Router v7 |
| Test suite | xUnit (1 000+ tests) |
The React SPA is built by Vite and served from wwwroot/ by the in-process ASP.NET Core host. The WPF MainWindow embeds a WebView2 that points to the local API port.
- Windows 10 / 11 (x64)
- .NET 8 Desktop Runtime
- WebView2 Runtime — required for Browse tab (pre-installed on Windows 11)
- Grand Theft Auto V
Download the ZIP from the latest release, extract, and run LSPDFRManager.exe. No installer needed.
See INSTALL.txt in the ZIP for full first-run instructions.
The first run will prompt you to set your GTA V path if it is not auto-detected.
git clone https://github.com/rolling-codes/LSPDFRManager.git
cd LSPDFRManager
dotnet restore LSPDFRManager.sln
dotnet build LSPDFRManager.sln
dotnet test LSPDFRManager.Tests/LSPDFRManager.Tests.csprojFrontend:
cd frontend
npm install
npm run build # outputs to LSPDFRManager.LocalApi/wwwroot/Self-contained release build:
dotnet publish LSPDFRManager.csproj -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -o publishLSPDFRManager/
├── Domain/ # Data models (InstalledMod, ModInfo, AppConfig, InstallPlan…)
├── Services/ # Business logic (ModDetector, FileInstaller, SmartInstallPlanner,
│ # BackupService, OivService, DiagnosticsOrchestrator…)
├── ViewModels/ # MVVM view models; MainViewModel orchestrates tab navigation
├── Views/ # WPF UserControls, one per tab
│ └── Components/ # Shared sub-controls (ModCard…)
├── Core/ # AppLogger, InstallQueue, UiDispatcher, PathSafety
│ └── Commands/ # IAppCommand, AsyncAppCommand
├── Features/ # Feature slices (Install, Library, OivCreatorTemplates, Updates…)
├── LSPDFRManager.LocalApi/
│ ├── Endpoints/ # Minimal API route handlers (one file per domain area)
│ ├── Dtos/ # Request/response DTOs mirroring frontend TypeScript types
│ └── wwwroot/ # Vite build output (React SPA)
├── LSPDFRManager.Shared/
│ └── Services/ # Domain logic with no WPF dependency (InstalledModFileService…)
├── frontend/ # React + TypeScript SPA (Vite, Tailwind, TanStack Query)
│ └── src/
│ ├── lib/api/ # Thin API client wrappers (one file per domain area)
│ ├── types/ # TypeScript types mirroring C# DTOs
│ └── pages/ # One page component per tab
└── LSPDFRManager.Tests/ # xUnit test suite (1 000+ tests)
Key singletons: ModLibraryService, AppConfig, InstallQueue, LspdfrStatusService
All persistent data lives in %APPDATA%\LSPDFRManager\:
library.json— installed mod registryconfig.json— app settingsconfigs.json— captured mod config snapshotsBackups/— ZIP backup archivesapp.log— runtime log
- Electron + Node.js migration — The next major milestone will move the application shell from WPF/WebView2 to a full Electron + Node.js architecture, removing the Windows .NET runtime dependency and enabling cross-platform distribution.
| Problem | Fix |
|---|---|
| Buttons invisible / blank UI | Reinstall .NET 8 Desktop Runtime |
| Browse tab blank | Install/repair WebView2 Runtime |
| GTA V not detected | Settings → set path manually |
| SmartScreen warning | "More info" → "Run anyway" |
| File blocked after extract | Right-click → Properties → Unblock |
| Errors after update | Delete %APPDATA%\LSPDFRManager\library.json to reset the library |
| Other | Check %APPDATA%\LSPDFRManager\app.log |
Contributions welcome — see CONTRIBUTING.md. Licensed MIT.
Not affiliated with Rockstar Games or the LCPDFR/LSPDFR team.