CLASSIC analyzes crash logs and game/mod setups for Bethesda titles (currently Fallout 4, with Skyrim support in progress). It provides detailed diagnostics and remediation guidance across hundreds of automated checks.
As of the current codebase, CLASSIC is a native C++ + Rust application:
- GUI:
classic-gui/(Qt 6, C++) - CLI:
classic-cli/(C++) - Rust workspace shell: repository root (
Cargo.toml,Cargo.lock,.cargo/config.toml) - Shared/runtime crates:
foundation/ - Business logic crates:
business-logic/ - C++ ↔ Rust bridge:
cpp-bindings/classic-cpp-bridge/ - Node bindings:
node-bindings/classic-node/ - Python bindings:
python-bindings/ - Rust TUI app:
ui-applications/classic-tui/
See the Workspace Migration Matrix for old-to-new command, path, and artifact translations.
For older historical context, see CLASSIC - Readme.pdf.
Nexus Mods: https://www.nexusmods.com/fallout4/mods/56255
Detailed Buffout 4 installation instructions
- Fallout 4 Script Extender
- Address Library for F4SE Plugins
- Buffout 4 NG (OG/NG/VR), Buffout 4 (OG), or Addictol (OG/NG/AE)
- BSArch (required for some file scan workflows)
- Open the latest release
- Download the
.7zarchive from Assets - Extract with 7-Zip
- Run:
CLASSIC.exefor GUIclassic-cli.exefor CLI
Release bundles include CLASSIC Data/ and required runtime files.
- Visual Studio with C++ Desktop workload (MSVC toolchain; optional LLVM clang-cl/lld-link components for clang-cl builds)
- vcpkg
VCPKG_ROOTenvironment variable configured (example:C:\vcpkg)- Rust toolchain (
cargo) - CMake 3.25+
- Ninja
- Qt 6 (for GUI, installed with vcpkg)
pwsh -ExecutionPolicy Bypass -File classic-cli/build_cli.ps1
pwsh -ExecutionPolicy Bypass -File classic-cli/build_cli.ps1 -Compiler clang-clThe clang-cl option keeps the MSVC ABI target but also directs Cargo cc-rs/cxx_build bridge glue compilation to use clang-cl instead of the default cl.exe.
pwsh -ExecutionPolicy Bypass -File classic-gui/build_gui.ps1
pwsh -ExecutionPolicy Bypass -File classic-gui/build_gui.ps1 -Compiler clang-clpwsh -ExecutionPolicy Bypass -File classic-cli/build_cli.ps1 -Test
pwsh -ExecutionPolicy Bypass -File classic-gui/build_gui.ps1 -Test
pwsh -ExecutionPolicy Bypass -File classic-cli/build_cli.ps1 -Test -Compiler clang-cl
pwsh -ExecutionPolicy Bypass -File classic-gui/build_gui.ps1 -Test -Compiler clang-cl
# Selected C++ tests through the wrappers
pwsh -ExecutionPolicy Bypass -File classic-cli/build_cli.ps1 -Test -CTestName "ThreadPool executes all enqueued tasks"
pwsh -ExecutionPolicy Bypass -File classic-cli/build_cli.ps1 -Test -IntegrationTestName help,version
pwsh -ExecutionPolicy Bypass -File classic-gui/build_gui.ps1 -Test -CTestName classic-gui-test-scan-settings-wiringCLI integration tests use crash-log fixtures from sample_logs/FO4 (git submodule). Initialize submodules before running tests:
git submodule update --init --recursivecargo build --workspace
cargo test --workspace
cargo fmt --all -- --check
cargo clippy --workspace --all-targets --all-features -- -D warnings# From node-bindings/classic-node
bun run parity:gate
# From repo root
python tools/python_api_parity/check_parity_gate.py --repo-root .
python tools/cxx_api_parity/check_parity_gate.py --repo-root .
python validate_stubs.py --rust-dir .Need the full old-to-new mapping? Start with the Workspace Migration Matrix.
# CLI
pwsh -ExecutionPolicy Bypass -File classic-cli/build_cli.ps1
pwsh -ExecutionPolicy Bypass -File classic-cli/build_cli.ps1 -Compiler clang-cl
# GUI
pwsh -ExecutionPolicy Bypass -File classic-gui/build_gui.ps1
pwsh -ExecutionPolicy Bypass -File classic-gui/build_gui.ps1 -Compiler clang-clUse the build scripts instead of raw CMake commands, raw ctest, or direct test executable launches so VS Dev Shell and C++ test environment setup stay correct.
When -Compiler clang-cl is selected, the scripts also pass clang-cl to Cargo cc-rs build scripts for the CXX bridge glue.
GitHub Actions workflows:
ci-cpp.yml- C++ CLI/GUI build and test pipeline onwindows-latestfor MSVC and clang-clci-rust.yml- Rust format/lint/build/testci-typescript.yml- Node bindings parity gates + Bun/Node runtime testsci-python-bindings.yml- Python bindings parity gates + smoke testsbenchmarks.yml- benchmark/performance pipeline
classic-cli/— C++ command-line scannerclassic-gui/— C++ Qt 6 desktop GUIfoundation/— shared runtime and support cratesbusiness-logic/— Rust business logic cratescpp-bindings/classic-cpp-bridge/— C++ bridge into Rustnode-bindings/classic-node/— Node/Bun bindingspython-bindings/— Python bindings and parity artifactsui-applications/classic-tui/— Rust TUI appCLASSIC Data/— runtime data, databases, help, graphics
- Keep C++ changes in
classic-cli/orclassic-gui/focused and testable. - Keep core logic in Rust crates under
business-logic/. - Run relevant C++/Rust checks before opening a PR.
- Keep docs aligned with architecture changes (especially this README and
AGENTS.md).
Migration note: older docs may still mention
ClassicLib-rs/...; treat those as historical only and use the Workspace Migration Matrix for the live repo-root contract.