diff --git a/.babelrc b/.babelrc
index dedae0686..5fdf6b68b 100644
--- a/.babelrc
+++ b/.babelrc
@@ -16,6 +16,13 @@
"presets": ["react-optimize"],
"plugins": [
]
+ },
+ "test": {
+ "presets": ["@babel/react", "@babel/env", "@babel/preset-typescript"],
+ "plugins": [
+ "@babel/proposal-class-properties",
+ "@babel/proposal-object-rest-spread"
+ ]
}
}
}
diff --git a/.eslintignore b/.eslintignore
index 191ae4cc9..637fe231f 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -1 +1,2 @@
-*.d.ts
\ No newline at end of file
+*.d.ts
+src/validationCode/*.validate.js
\ No newline at end of file
diff --git a/.eslintrc.js b/.eslintrc.js
index 93e6aa022..2bc98a535 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -1,3 +1,5 @@
+const isCI = process.env.CI === 'true';
+
module.exports = {
"env": {
"browser": true,
@@ -21,6 +23,11 @@ module.exports = {
"react",
"@typescript-eslint"
],
+ "settings": {
+ "react": {
+ "version": "detect"
+ }
+ },
"rules": {
// If you are reading this your are probably wondering why we got so many warnings
// To put it simple, we used TSLint, and when we moved to ESLint we did not want to to auto fix all the errors
@@ -140,6 +147,14 @@ module.exports = {
"ignoreComments": true,
}
],
+ // Flag TODO/FIXME comments (error in CI, warn locally)
+ "no-warning-comments": [
+ isCI ? "error" : "warn",
+ {
+ "terms": ["todo", "fixme"],
+ "location": "anywhere"
+ }
+ ],
},
"overrides": [
{
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index b8d7ec4af..67088cac0 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -27,7 +27,7 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v4
with:
- node-version: '18.17.1'
+ node-version: '22.x'
cache: "yarn"
- name: Install dependencies
diff --git a/.github/workflows/package-macos.yml b/.github/workflows/package-macos.yml
new file mode 100644
index 000000000..2392eae85
--- /dev/null
+++ b/.github/workflows/package-macos.yml
@@ -0,0 +1,232 @@
+name: Package macOS
+
+on:
+ workflow_dispatch:
+ inputs:
+ version:
+ description: "The version to release (eg: 'v1.0.0')"
+ required: true
+ type: string
+ create-artifacts:
+ description: "Create artifacts?"
+ required: true
+ type: boolean
+ default: true
+ codesign:
+ description: "Codesign?"
+ required: false
+ type: boolean
+ default: false
+ notarize:
+ description: "Notarize?"
+ required: false
+ type: boolean
+ default: false
+ release:
+ description: "Create a draft release?"
+ required: false
+ type: boolean
+ default: true
+ staging-release:
+ description: "Create a draft staging release?"
+ required: false
+ type: boolean
+ default: true
+
+env:
+ APPLE_ID: ${{ secrets.APPLE_ID }}
+ APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
+ APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
+
+jobs:
+ build:
+ runs-on: macos-latest
+ env:
+ ACTIONS_ALLOW_UNSECURE_COMMANDS: true # Allows AddPAth and SetEnv commands
+ DEBUG: electron-builder # gives electron more verbose logs
+
+ strategy:
+ matrix:
+ node-version: [22.x]
+ architecture: [x64, arm64]
+
+ steps:
+ - name: Show Inputs
+ run: echo "${{ toJSON(github.event.inputs) }}"
+
+ - name: Set Outputs
+ id: setOutputs
+ shell: bash
+ env:
+ InputVersion: ${{ inputs.version }}
+ GITHUB_RUN_NUMBER: ${{ github.run_number }}
+ ARCHITECTURE: ${{ matrix.architecture }}
+ run: |
+ semverRegex='^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(?:-((?:0|[1-9][0-9]*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9][0-9]*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$'
+ tagVersion=$(echo "$InputVersion" | sed 's/^v//')
+ rawVersion=$(echo "$InputVersion" | sed 's/^v//')
+ # validation
+ if ! echo "$rawVersion" | grep -qE "$semverRegex"; then
+ echo "Invalid version format. Must be semver."
+ exit 1
+ fi
+ echo "tagVersion=v$tagVersion" >> $GITHUB_OUTPUT
+ echo "rawVersion=$rawVersion" >> $GITHUB_OUTPUT
+ echo "artifactNameDMG=vortex-$rawVersion-mac-$ARCHITECTURE.dmg" >> $GITHUB_OUTPUT
+ echo "artifactNameZIP=vortex-$rawVersion-mac-$ARCHITECTURE.zip" >> $GITHUB_OUTPUT
+ echo "epicBuildString=$rawVersion+$GITHUB_RUN_NUMBER" >> $GITHUB_OUTPUT
+
+ - name: Get current time
+ uses: josStorer/get-current-time@v2
+ id: current-time
+ with:
+ format: 'YYYY-MM-DD HHmm'
+
+ - name: Use current time
+ env:
+ TIME: "${{ steps.current-time.outputs.time }}"
+ R_TIME: "${{ steps.current-time.outputs.readableTime }}"
+ F_TIME: "${{ steps.current-time.outputs.formattedTime }}"
+ YEAR: "${{ steps.current-time.outputs.year }}"
+ DAY: "${{ steps.current-time.outputs.day }}"
+ run: echo $TIME $R_TIME $F_TIME $YEAR $DAY
+
+ - uses: actions/checkout@v4
+ with:
+ submodules: "recursive"
+
+ - name: Use Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: ${{ matrix.node-version }}
+ cache: "yarn"
+ architecture: ${{ matrix.architecture }}
+
+ - name: Install dependencies
+ run: yarn --frozen-lockfile --network-timeout 600000 install
+
+ - name: Install Xcode command line tools
+ run: |
+ sudo xcode-select --install || true
+ sudo xcodebuild -runFirstLaunch
+
+ - name: Build API
+ run: yarn --non-interactive build_api
+
+ - name: Build Install
+ run: yarn --non-interactive _install_app
+
+ - name: Build Subprojects
+ run: yarn --non-interactive subprojects_app
+
+ - name: Build Assets
+ run: yarn --non-interactive _assets_app
+
+ - name: Webpack
+ run: yarn build_dist
+
+ - name: Package (without codesigning)
+ if: ${{ inputs.codesign != true }}
+ run: yarn package
+
+ - name: Package (with codesigning)
+ if: ${{ inputs.codesign == true }}
+ run: yarn package
+ env:
+ CSC_LINK: ${{ secrets.CSC_LINK }}
+ CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
+ APPLE_ID: ${{ secrets.APPLE_ID }}
+ APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
+ APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
+
+ - name: Notarize
+ if: ${{ inputs.notarize == true }}
+ run: |
+ # Create ZIP for notarization
+ ditto -c -k --keepParent dist/mac/Vortex.app dist/mac/Vortex.zip
+
+ # Submit for notarization
+ xcrun notarytool submit dist/mac/Vortex.zip \
+ --apple-id "$APPLE_ID" \
+ --password "$APPLE_ID_PASSWORD" \
+ --team-id "$APPLE_TEAM_ID" \
+ --wait
+
+ # Staple the notarization ticket
+ xcrun stapler staple dist/mac/Vortex.app
+ env:
+ APPLE_ID: ${{ secrets.APPLE_ID }}
+ APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
+ APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
+
+ - name: Extract Sourcemaps
+ run: yarn extract_sourcemaps
+
+ - name: Test
+ run: yarn test
+
+ - name: Verify Code Signing
+ run: |
+ codesign --verify --deep --strict --verbose=2 dist/mac/Vortex.app
+
+ - name: Verify Notarization
+ if: ${{ inputs.notarize == true }}
+ run: |
+ spctl --assess --type exec --verbose dist/mac/Vortex.app
+
+ - name: Create SHA256 Checksums
+ run: |
+ shasum -a 256 dist/mac/*.dmg > dist/mac/checksums.txt
+ shasum -a 256 dist/mac/*.zip >> dist/mac/checksums.txt
+
+ - name: Release
+ uses: softprops/action-gh-release@v2.2.2
+ if: ${{ inputs.release == true }}
+ with:
+ files: |
+ ./dist/mac/*.dmg
+ ./dist/mac/*.zip
+ ./dist/mac/checksums.txt
+ prerelease: true
+ draft: true
+ name: ${{ steps.setOutputs.outputs.rawVersion }}-macOS-${{ matrix.architecture }}
+ tag_name: ${{ steps.setOutputs.outputs.tagVersion }}-macOS-${{ matrix.architecture }}
+
+ - name: Staging Release
+ uses: softprops/action-gh-release@v2.2.2
+ if: ${{ inputs.staging-release == true }}
+ with:
+ files: |
+ ./dist/mac/*.dmg
+ ./dist/mac/*.zip
+ ./dist/mac/checksums.txt
+ prerelease: true
+ draft: true
+ name: ${{ steps.setOutputs.outputs.rawVersion }}-macOS-${{ matrix.architecture }}
+ tag_name: ${{ steps.setOutputs.outputs.tagVersion }}-macOS-${{ matrix.architecture }}
+ token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
+ repository: "Nexus-Mods/Vortex-Staging"
+
+ - name: Create DMG Artifact
+ uses: actions/upload-artifact@v4
+ if: ${{ inputs.create-artifacts == true }}
+ with:
+ name: ${{ steps.setOutputs.outputs.artifactNameDMG }}
+ path: ./dist/mac/*.dmg
+ if-no-files-found: error
+
+ - name: Create ZIP Artifact
+ uses: actions/upload-artifact@v4
+ if: ${{ inputs.create-artifacts == true }}
+ with:
+ name: ${{ steps.setOutputs.outputs.artifactNameZIP }}
+ path: ./dist/mac/*.zip
+ if-no-files-found: error
+
+ - name: Create Checksums Artifact
+ uses: actions/upload-artifact@v4
+ if: ${{ inputs.create-artifacts == true }}
+ with:
+ name: vortex-${{ steps.setOutputs.outputs.rawVersion }}-mac-${{ matrix.architecture }}-checksums
+ path: ./dist/mac/checksums.txt
+ if-no-files-found: error
\ No newline at end of file
diff --git a/.github/workflows/package.yml b/.github/workflows/package.yml
index 6d7e7440d..86da30143 100644
--- a/.github/workflows/package.yml
+++ b/.github/workflows/package.yml
@@ -117,7 +117,7 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v4
with:
- node-version: '18.17.1'
+ node-version: '22.x'
cache: "yarn"
- name: Install dependencies
@@ -261,4 +261,4 @@ jobs:
path: |
./dist/vortex-setup-*.*.*.exe
./dist/latest.yml
- if-no-files-found: error
+ if-no-files-found: error
diff --git a/.gitignore b/.gitignore
index c32fffa76..c6d1d2352 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,6 +5,7 @@ dist_custom
dist_portable
dist_web
out
+force
doc
coverage
.vscode/.BROWSE.VC.DB*
@@ -17,6 +18,12 @@ CodeSignTool*
BuildPatchTool*
assets/modules.json
+# Ensure scripts/ is tracked
+!scripts/
+
+# Archive legacy helpers (ignored)
+tools/legacy/
+
# User-specific files
*.suo
@@ -27,6 +34,9 @@ npm-debug.log*
.DS_Store
yarn-error.log
+# temporary files
+tmp.*
+
# temporary fonts directory used during font-svg generation
/fonts/
@@ -36,7 +46,7 @@ yarn-error.log
[Rr]elease/
[Rr]eleases/
api/lib/
-# we need to include the installer image
+# we need to include the installer image
build/
bld/
[Oo]bj/
@@ -56,3 +66,110 @@ tools/stackmap/*.vsix
changelog_*.txt
eslint.log
log.txt
+{BUILD_DIR}/
+
+# Exclude local IDE/project folders
+.qoder/
+
+# Exclude generic build directories
+{BUILD_DIR}/
+
+# IDE folders
+.idea/
+.vs/
+.fleet/
+
+# Environment files
+.env
+.env.*
+
+# Tool caches
+.eslintcache
+.nyc_output/
+.cache/
+.tmp/
+tmp/
+
+# OS/editor junk files
+Thumbs.db
+ehthumbs.db
+*~
+*.swp
+*.swo
+*.tmp
+# macOS system files
+.DS_Store
+.AppleDouble
+.LSOverride
+# Icon must end with two carriage returns
+Icon
+
+._*
+.Spotlight-V100
+.Trashes
+.DocumentRevisions-V100
+.fseventsd
+.TemporaryItems
+.VolumeIcon.icns
+.com.apple.timemachine.donotpresent
+
+# VS Code user-specific artifacts (keep tracked project config files)
+.vscode/.history/
+.vscode/*.log
+.vscode/*.db
+.history/
+
+# Package manager debug logs and local stores
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+.pnpm-store/
+
+# Optional Yarn Plug'n'Play files (if enabled locally)
+.pnp.*
+
+# Temporary test files and logs
+test_*.log
+test_*.json
+test_*.report
+debug_*.log
+final_*.log
+check_*.log
+*_test_*.log
+*_debug_*.log
+*_report.json
+*_summary.json
+
+# Temporary test directories
+test_*/
+debug_*/
+temp_*/
+tmp_*/
+
+# macOS specific temporary files
+MACOS_*.md
+MAC_*.md
+FINAL_*.md
+*_MACOS_*.md
+*_MAC_*.md
+
+# Build and extraction temporary files
+7z_*.log
+7z_*.json
+extracted/
+temp_extracted/
+
+Balatro Vortex Extension-1315-0-1-2-1748486275/0.1.2.txt
+
+Balatro Vortex Extension-1315-0-1-2-1748486275/balatro.jpg
+
+Balatro Vortex Extension-1315-0-1-2-1748486275/CHANGELOG.md
+
+Balatro Vortex Extension-1315-0-1-2-1748486275/downloader.js
+
+Balatro Vortex Extension-1315-0-1-2-1748486275/downloader.js.map
+
+Balatro Vortex Extension-1315-0-1-2-1748486275/index.js
+
+Balatro Vortex Extension-1315-0-1-2-1748486275/info.json
diff --git a/.gitmodules b/.gitmodules
index bee0c95fb..2fb22d6ea 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -2,94 +2,117 @@
path = extensions/games
url = https://github.com/Nexus-Mods/vortex-games.git
branch = master
+ ignore = all
[submodule "extensions/gamebryo-plugin-management"]
path = extensions/gamebryo-plugin-management
url = https://github.com/Nexus-Mods/extension-plugin-management.git
branch = master
+ ignore = all
[submodule "extensions/feedback"]
path = extensions/feedback
url = https://github.com/Nexus-Mods/extension-feedback.git
branch = master
+ ignore = all
[submodule "extensions/gamebryo-archive-invalidation"]
path = extensions/gamebryo-archive-invalidation
url = https://github.com/Nexus-Mods/extension-archive-invalidation.git
branch = master
+ ignore = all
[submodule "extensions/gamebryo-ba2-support"]
path = extensions/gamebryo-ba2-support
url = https://github.com/Nexus-Mods/extension-ba2-support.git
branch = master
+ ignore = all
[submodule "extensions/gamebryo-bsa-support"]
path = extensions/gamebryo-bsa-support
url = https://github.com/Nexus-Mods/extension-bsa-support.git
branch = master
+ ignore = all
[submodule "extensions/gamebryo-plugin-indexlock"]
path = extensions/gamebryo-plugin-indexlock
url = https://github.com/Nexus-Mods/extension-plugin-indexlock.git
branch = master
+ ignore = all
[submodule "extensions/gamebryo-savegame-management"]
path = extensions/gamebryo-savegame-management
url = https://github.com/Nexus-Mods/extension-gamebryo-savegames.git
branch = master
+ ignore = all
[submodule "extensions/gamebryo-test-settings"]
path = extensions/gamebryo-test-settings
url = https://github.com/Nexus-Mods/extension-gamebryo-testsettings.git
branch = master
+ ignore = all
[submodule "extensions/gameinfo-steam"]
path = extensions/gameinfo-steam
url = https://github.com/Nexus-Mods/extension-gameinfo-steam.git
branch = master
+ ignore = all
[submodule "extensions/local-gamesettings"]
path = extensions/local-gamesettings
url = https://github.com/Nexus-Mods/extension-local-gamesettings.git
branch = master
+ ignore = all
[submodule "extensions/meta-editor"]
path = extensions/meta-editor
url = https://github.com/Nexus-Mods/extension-metaeditor.git
branch = master
+ ignore = all
[submodule "extensions/mo-import"]
path = extensions/mo-import
url = https://github.com/Nexus-Mods/extension-mo-import.git
branch = master
+ ignore = all
[submodule "extensions/mod-dependencies"]
path = extensions/mod-dependency-manager
url = https://github.com/Nexus-Mods/extension-mod-dependencies.git
branch = master
+ ignore = all
[submodule "extensions/mod-highlights"]
path = extensions/mod-highlight
url = https://github.com/Nexus-Mods/extension-mod-highlights.git
branch = master
+ ignore = all
[submodule "extensions/modtype-dinput"]
path = extensions/modtype-dinput
url = https://github.com/Nexus-Mods/extension-modtype-dinput.git
branch = master
+ ignore = all
[submodule "extensions/modtype-dazip"]
path = extensions/modtype-dazip
url = https://github.com/Nexus-Mods/extension-modtype-dazip.git
branch = master
+ ignore = all
[submodule "extensions/modtype-enb"]
path = extensions/modtype-enb
url = https://github.com/Nexus-Mods/extension-modtype-enb.git
branch = master
+ ignore = all
[submodule "extensions/modtype-gedosato"]
path = extensions/modtype-gedosato
url = https://github.com/Nexus-Mods/extension-modtype-gedosato.git
branch = master
+ ignore = all
[submodule "extensions/mtframework-arc-support"]
path = extensions/mtframework-arc-support
url = https://github.com/Nexus-Mods/extension-arc-support.git
branch = master
+ ignore = all
[submodule "extensions/nmm-import"]
path = extensions/nmm-import-tool
url = https://github.com/Nexus-Mods/extension-nmm-import.git
branch = master
+ ignore = all
[submodule "extensions/open-directory"]
path = extensions/open-directory
url = https://github.com/Nexus-Mods/extension-open-directory.git
branch = master
+ ignore = all
[submodule "extensions/theme-switcher"]
path = extensions/theme-switcher
url = https://github.com/Nexus-Mods/extension-theme-switcher.git
- branch = master
+ branch = macos-tahoe-theme
+ ignore = all
[submodule "api"]
path = api
url = https://github.com/Nexus-Mods/vortex-api.git
@@ -98,103 +121,129 @@
path = extensions/common-interpreters
url = https://github.com/Nexus-Mods/extension-common-interpreters.git
branch = master
+ ignore = all
[submodule "extensions/issue-tracker"]
path = extensions/issue-tracker
url = https://github.com/Nexus-Mods/extension-issue-tracker.git
branch = master
+ ignore = all
[submodule "extensions/changelog-dashlet"]
path = extensions/changelog-dashlet
url = https://github.com/Nexus-Mods/extension-changelog-dashlet.git
branch = master
+ ignore = all
[submodule "extensions/fnis-integration"]
path = extensions/fnis-integration
url = https://github.com/Nexus-Mods/fnis-integration.git
branch = master
+ ignore = all
[submodule "extensions/game-pillarsofeternity2"]
path = extensions/game-pillarsofeternity2
url = https://github.com/Nexus-Mods/game-pillarsofeternity2.git
branch = master
+ ignore = all
[submodule "extensions/test-gameversion"]
path = extensions/test-gameversion
url = https://github.com/Nexus-Mods/test-gameversion.git
branch = master
+ ignore = all
[submodule "extensions/documentation"]
path = extensions/documentation
url = https://github.com/Nexus-Mods/extension-documentation.git
branch = master
+ ignore = all
[submodule "extensions/modtype-umm"]
path = extensions/modtype-umm
url = https://github.com/nexus-mods/extension-modtype-umm.git
branch = master
+ ignore = all
[submodule "extensions/mod-content"]
path = extensions/mod-content
url = https://github.com/Nexus-Mods/extension-mod-content.git
branch = master
+ ignore = all
[submodule "extensions/quickbms-support"]
path = extensions/quickbms-support
url = https://github.com/nexus-mods/extension-quickbms-support.git
branch = master
+ ignore = all
[submodule "extensions/morrowind-plugin-management"]
path = extensions/morrowind-plugin-management
url = https://github.com/Nexus-Mods/extension-morrowind-plugin-management.git
branch = master
+ ignore = all
[submodule "extensions/script-extender-error-check"]
path = extensions/script-extender-error-check
url = https://github.com/Nexus-Mods/extension-script-extender-error-check.git
branch = master
+ ignore = all
[submodule "extensions/gamestore-gog"]
path = extensions/gamestore-gog
url = https://github.com/nexus-mods/extension-gamestore-gog.git
branch = master
+ ignore = all
[submodule "extensions/gamestore-origin"]
path = extensions/gamestore-origin
url = https://github.com/nexus-mods/extension-gamestore-origin.git
branch = master
+ ignore = all
[submodule "extensions/gamestore-uplay"]
path = extensions/gamestore-uplay
url = https://github.com/nexus-mods/extension-gamestore-uplay.git
branch = master
+ ignore = all
[submodule "extensions/gamestore-xbox"]
path = extensions/gamestore-xbox
url = https://github.com/nexus-mods/extension-gamestore-xbox.git
branch = master
+ ignore = all
[submodule "extensions/new-file-monitor"]
path = extensions/new-file-monitor
url = https://github.com/Nexus-Mods/extension-new-file-monitor.git
branch = master
+ ignore = all
[submodule "extensions/extension-dashlet"]
path = extensions/extension-dashlet
url = https://github.com/Nexus-Mods/extension-extension-dashlet.git
branch = master
+ ignore = all
[submodule "extensions/test-setup"]
path = extensions/test-setup
url = https://github.com/Nexus-Mods/extension-test-setup.git
branch = master
+ ignore = all
[submodule "extensions/mod-report"]
path = extensions/mod-report
url = https://github.com/Nexus-Mods/extension-mod-report.git
branch = master
+ ignore = all
[submodule "extensions/script-extender-installer"]
path = extensions/script-extender-installer
url = https://github.com/Nexus-Mods/script-extender-installer.git
branch = master
+ ignore = all
[submodule "extensions/gamebryo-archive-check"]
path = extensions/gamebryo-archive-check
url = https://github.com/Nexus-Mods/bethesda-archive-check.git
branch = master
+ ignore = all
[submodule "extensions/modtype-bepinex"]
path = extensions/modtype-bepinex
url = https://github.com/Nexus-Mods/extension-modtype-bepinex.git
branch = main
+ ignore = all
[submodule "extensions/collections"]
path = extensions/collections
url = https://github.com/Nexus-Mods/extension-collections.git
branch = master
+ ignore = all
[submodule "extensions/gameversion-hash"]
path = extensions/gameversion-hash
url = https://github.com/nexus-mods/extension-gameversion-hash.git
branch = main
+ ignore = all
[submodule "extensions/titlebar-launcher"]
path = extensions/titlebar-launcher
url = https://github.com/Nexus-Mods/extension-titlebar-launcher.git
branch = master
+ ignore = all
diff --git a/.gitmodules.backup b/.gitmodules.backup
new file mode 100644
index 000000000..acc248f5c
--- /dev/null
+++ b/.gitmodules.backup
@@ -0,0 +1,249 @@
+[submodule "extensions/games"]
+ path = extensions/games
+ url = https://github.com/Nexus-Mods/vortex-games.git
+ branch = master
+ ignore = all
+[submodule "extensions/gamebryo-plugin-management"]
+ path = extensions/gamebryo-plugin-management
+ url = https://github.com/Nexus-Mods/extension-plugin-management.git
+ branch = master
+ ignore = all
+[submodule "extensions/feedback"]
+ path = extensions/feedback
+ url = https://github.com/Nexus-Mods/extension-feedback.git
+ branch = master
+ ignore = all
+[submodule "extensions/gamebryo-archive-invalidation"]
+ path = extensions/gamebryo-archive-invalidation
+ url = https://github.com/Nexus-Mods/extension-archive-invalidation.git
+ branch = master
+ ignore = all
+[submodule "extensions/gamebryo-ba2-support"]
+ path = extensions/gamebryo-ba2-support
+ url = https://github.com/Nexus-Mods/extension-ba2-support.git
+ branch = master
+ ignore = all
+[submodule "extensions/gamebryo-bsa-support"]
+ path = extensions/gamebryo-bsa-support
+ url = https://github.com/Nexus-Mods/extension-bsa-support.git
+ branch = master
+ ignore = all
+[submodule "extensions/gamebryo-plugin-indexlock"]
+ path = extensions/gamebryo-plugin-indexlock
+ url = https://github.com/Nexus-Mods/extension-plugin-indexlock.git
+ branch = master
+ ignore = all
+[submodule "extensions/gamebryo-savegame-management"]
+ path = extensions/gamebryo-savegame-management
+ url = https://github.com/Nexus-Mods/extension-gamebryo-savegames.git
+ branch = master
+ ignore = all
+[submodule "extensions/gamebryo-test-settings"]
+ path = extensions/gamebryo-test-settings
+ url = https://github.com/Nexus-Mods/extension-gamebryo-testsettings.git
+ branch = master
+ ignore = all
+[submodule "extensions/gameinfo-steam"]
+ path = extensions/gameinfo-steam
+ url = https://github.com/Nexus-Mods/extension-gameinfo-steam.git
+ branch = master
+ ignore = all
+[submodule "extensions/local-gamesettings"]
+ path = extensions/local-gamesettings
+ url = https://github.com/Nexus-Mods/extension-local-gamesettings.git
+ branch = master
+ ignore = all
+[submodule "extensions/meta-editor"]
+ path = extensions/meta-editor
+ url = https://github.com/Nexus-Mods/extension-metaeditor.git
+ branch = master
+ ignore = all
+[submodule "extensions/mo-import"]
+ path = extensions/mo-import
+ url = https://github.com/Nexus-Mods/extension-mo-import.git
+ branch = master
+ ignore = all
+[submodule "extensions/mod-dependencies"]
+ path = extensions/mod-dependency-manager
+ url = https://github.com/Nexus-Mods/extension-mod-dependencies.git
+ branch = master
+ ignore = all
+[submodule "extensions/mod-highlights"]
+ path = extensions/mod-highlight
+ url = https://github.com/Nexus-Mods/extension-mod-highlights.git
+ branch = master
+ ignore = all
+[submodule "extensions/modtype-dinput"]
+ path = extensions/modtype-dinput
+ url = https://github.com/Nexus-Mods/extension-modtype-dinput.git
+ branch = master
+ ignore = all
+[submodule "extensions/modtype-dazip"]
+ path = extensions/modtype-dazip
+ url = https://github.com/Nexus-Mods/extension-modtype-dazip.git
+ branch = master
+ ignore = all
+[submodule "extensions/modtype-enb"]
+ path = extensions/modtype-enb
+ url = https://github.com/Nexus-Mods/extension-modtype-enb.git
+ branch = master
+ ignore = all
+[submodule "extensions/modtype-gedosato"]
+ path = extensions/modtype-gedosato
+ url = https://github.com/Nexus-Mods/extension-modtype-gedosato.git
+ branch = master
+ ignore = all
+[submodule "extensions/mtframework-arc-support"]
+ path = extensions/mtframework-arc-support
+ url = https://github.com/Nexus-Mods/extension-arc-support.git
+ branch = master
+ ignore = all
+[submodule "extensions/nmm-import"]
+ path = extensions/nmm-import-tool
+ url = https://github.com/Nexus-Mods/extension-nmm-import.git
+ branch = master
+ ignore = all
+[submodule "extensions/open-directory"]
+ path = extensions/open-directory
+ url = https://github.com/Nexus-Mods/extension-open-directory.git
+ branch = master
+ ignore = all
+[submodule "extensions/theme-switcher"]
+ path = extensions/theme-switcher
+ url = https://github.com/Nexus-Mods/extension-theme-switcher.git
+ branch = master
+ ignore = all
+[submodule "api"]
+ path = api
+ url = https://github.com/Nexus-Mods/vortex-api.git
+ branch = master
+[submodule "extensions/common-interpreters"]
+ path = extensions/common-interpreters
+ url = https://github.com/Nexus-Mods/extension-common-interpreters.git
+ branch = master
+ ignore = all
+[submodule "extensions/issue-tracker"]
+ path = extensions/issue-tracker
+ url = https://github.com/Nexus-Mods/extension-issue-tracker.git
+ branch = master
+ ignore = all
+[submodule "extensions/changelog-dashlet"]
+ path = extensions/changelog-dashlet
+ url = https://github.com/Nexus-Mods/extension-changelog-dashlet.git
+ branch = master
+ ignore = all
+[submodule "extensions/fnis-integration"]
+ path = extensions/fnis-integration
+ url = https://github.com/Nexus-Mods/fnis-integration.git
+ branch = master
+ ignore = all
+[submodule "extensions/game-pillarsofeternity2"]
+ path = extensions/game-pillarsofeternity2
+ url = https://github.com/Nexus-Mods/game-pillarsofeternity2.git
+ branch = master
+ ignore = all
+[submodule "extensions/test-gameversion"]
+ path = extensions/test-gameversion
+ url = https://github.com/Nexus-Mods/test-gameversion.git
+ branch = master
+ ignore = all
+[submodule "extensions/documentation"]
+ path = extensions/documentation
+ url = https://github.com/Nexus-Mods/extension-documentation.git
+ branch = master
+ ignore = all
+[submodule "extensions/modtype-umm"]
+ path = extensions/modtype-umm
+ url = https://github.com/nexus-mods/extension-modtype-umm.git
+ branch = master
+ ignore = all
+[submodule "extensions/mod-content"]
+ path = extensions/mod-content
+ url = https://github.com/Nexus-Mods/extension-mod-content.git
+ branch = master
+ ignore = all
+[submodule "extensions/quickbms-support"]
+ path = extensions/quickbms-support
+ url = https://github.com/nexus-mods/extension-quickbms-support.git
+ branch = master
+ ignore = all
+[submodule "extensions/morrowind-plugin-management"]
+ path = extensions/morrowind-plugin-management
+ url = https://github.com/Nexus-Mods/extension-morrowind-plugin-management.git
+ branch = master
+ ignore = all
+[submodule "extensions/script-extender-error-check"]
+ path = extensions/script-extender-error-check
+ url = https://github.com/Nexus-Mods/extension-script-extender-error-check.git
+ branch = master
+ ignore = all
+[submodule "extensions/gamestore-gog"]
+ path = extensions/gamestore-gog
+ url = https://github.com/nexus-mods/extension-gamestore-gog.git
+ branch = master
+ ignore = all
+[submodule "extensions/gamestore-origin"]
+ path = extensions/gamestore-origin
+ url = https://github.com/nexus-mods/extension-gamestore-origin.git
+ branch = master
+ ignore = all
+[submodule "extensions/gamestore-uplay"]
+ path = extensions/gamestore-uplay
+ url = https://github.com/nexus-mods/extension-gamestore-uplay.git
+ branch = master
+ ignore = all
+[submodule "extensions/gamestore-xbox"]
+ path = extensions/gamestore-xbox
+ url = https://github.com/nexus-mods/extension-gamestore-xbox.git
+ branch = master
+ ignore = all
+[submodule "extensions/new-file-monitor"]
+ path = extensions/new-file-monitor
+ url = https://github.com/Nexus-Mods/extension-new-file-monitor.git
+ branch = master
+ ignore = all
+[submodule "extensions/extension-dashlet"]
+ path = extensions/extension-dashlet
+ url = https://github.com/Nexus-Mods/extension-extension-dashlet.git
+ branch = master
+ ignore = all
+[submodule "extensions/test-setup"]
+ path = extensions/test-setup
+ url = https://github.com/Nexus-Mods/extension-test-setup.git
+ branch = master
+ ignore = all
+[submodule "extensions/mod-report"]
+ path = extensions/mod-report
+ url = https://github.com/Nexus-Mods/extension-mod-report.git
+ branch = master
+ ignore = all
+[submodule "extensions/script-extender-installer"]
+ path = extensions/script-extender-installer
+ url = https://github.com/Nexus-Mods/script-extender-installer.git
+ branch = master
+ ignore = all
+[submodule "extensions/gamebryo-archive-check"]
+ path = extensions/gamebryo-archive-check
+ url = https://github.com/Nexus-Mods/bethesda-archive-check.git
+ branch = master
+ ignore = all
+[submodule "extensions/modtype-bepinex"]
+ path = extensions/modtype-bepinex
+ url = https://github.com/Nexus-Mods/extension-modtype-bepinex.git
+ branch = main
+ ignore = all
+[submodule "extensions/collections"]
+ path = extensions/collections
+ url = https://github.com/Nexus-Mods/extension-collections.git
+ branch = master
+ ignore = all
+[submodule "extensions/gameversion-hash"]
+ path = extensions/gameversion-hash
+ url = https://github.com/nexus-mods/extension-gameversion-hash.git
+ branch = main
+ ignore = all
+[submodule "extensions/titlebar-launcher"]
+ path = extensions/titlebar-launcher
+ url = https://github.com/Nexus-Mods/extension-titlebar-launcher.git
+ branch = master
+ ignore = all
diff --git a/.npmrc b/.npmrc
index 24990b8e2..e72e49bef 100644
--- a/.npmrc
+++ b/.npmrc
@@ -4,3 +4,10 @@ runtime=electron
arch=x64
target_arch=x64
msvs_version=2022
+
+# Skip drivelist building on macOS to reduce build errors
+# Prevent prebuild-install from building native modules
+npm_config_build_from_source=false
+npm_config_force_rebuild=false
+# Skip optional dependencies that fail to install
+npm_config_optional=true
diff --git a/.nvmrc b/.nvmrc
new file mode 100644
index 000000000..8fdd954df
--- /dev/null
+++ b/.nvmrc
@@ -0,0 +1 @@
+22
\ No newline at end of file
diff --git a/.qoder/quests/add-untracked-files.md b/.qoder/quests/add-untracked-files.md
new file mode 100644
index 000000000..9dd25a7f8
--- /dev/null
+++ b/.qoder/quests/add-untracked-files.md
@@ -0,0 +1,100 @@
+# Add Untracked Files Across Project and macOS Branches
+
+## Overview
+
+This document outlines the process for identifying, committing, and pushing all untracked files across the Vortex project and its macOS-specific branches. The process involves scanning the main repository and all submodules for untracked files, committing them with appropriate messages, and pushing changes to origin repositories where permissions allow.
+
+## Architecture
+
+The solution involves a multi-step process that works with the existing Git submodule structure of the Vortex project:
+
+1. **Repository Analysis** - Scan main repository and all submodules for untracked files
+2. **Branch Management** - Ensure submodules are on correct macOS-specific branches
+3. **Change Committing** - Commit untracked files with descriptive messages
+4. **Change Pushing** - Push commits to origin repositories where possible
+
+## Process Flow
+
+The process follows this workflow:
+
+1. Start with main repository analysis
+2. Check for untracked files in main repository
+3. Commit untracked files with descriptive messages
+4. Push changes to origin if permissions allow
+5. Process each submodule:
+ - Check current branch status
+ - Switch to appropriate macOS branch if needed
+ - Identify untracked files
+ - Commit with descriptive messages
+ - Push changes to origin if permitted
+6. Complete process after all repositories are processed
+
+## Implementation Details
+
+### Branch Management
+
+Submodules should be on the correct branches based on the configuration:
+
+- `extensions/changelog-dashlet`: `macos-experimental`
+- `extensions/issue-tracker`: `macos-experimental`
+- `extensions/collections`: `macos-experimental`
+- `extensions/theme-switcher`: `macos-tahoe-theme`
+
+Other submodules will remain on their default branches unless specific macOS branches are required.
+
+### Git Commands
+
+The process will use the following Git commands:
+
+1. `git status --porcelain` - Identify untracked files
+2. `git add .` - Stage all untracked files
+3. `git commit -m "message"` - Commit staged files with descriptive message
+4. `git push origin branch-name` - Push commits to origin repository
+5. `git checkout branch-name` - Switch to correct branch
+6. `git fetch origin` - Update remote references
+
+## Commit Message Standards
+
+Commit messages should follow these standards:
+
+1. **Descriptive but Concise** - Clearly describe what changes are being committed
+2. **Consistent Format** - Use consistent format across all commits
+3. **Reference Context** - Include references to macOS development where relevant
+
+Example commit messages:
+- "Add macOS compatibility updates for theme switching"
+- "Fix file path handling for macOS platform"
+- "Update build configuration for macOS development"
+
+## Error Handling
+
+The process should handle common error scenarios:
+
+1. **Permission Denied** - Log when push permissions are not available
+2. **Network Issues** - Handle network connectivity problems during push operations
+3. **Merge Conflicts** - Address any merge conflicts that arise during branch switching
+4. **File Locks** - Handle file locking issues on Windows platforms
+
+## Testing
+
+The implementation should be tested with the following scenarios:
+
+1. **Clean Repository** - Verify behavior when no untracked files exist
+2. **Multiple Untracked Files** - Test with various types of untracked files
+3. **Submodule Branch Switching** - Verify correct branch switching behavior
+4. **Permission Scenarios** - Test behavior with and without push permissions
+
+## Security Considerations
+
+1. **File Filtering** - Ensure sensitive files are not accidentally committed
+2. **Gitignore Compliance** - Respect existing `.gitignore` configurations
+3. **Credential Handling** - Use secure credential management for Git operations
+
+## Dependencies
+
+This process depends on the following existing tools and configurations:
+
+1. **Git** - Version control system for repository operations
+2. **fix_submodules.sh** - Existing script for submodule management
+3. **update_gitmodules_for_macos.sh** - Script for updating macOS branch configurations
+4. **submodule-branch-check.js** - Script for checking and fixing submodule branches
diff --git a/.qoder/quests/branch-variable-tracking.md b/.qoder/quests/branch-variable-tracking.md
new file mode 100644
index 000000000..44ebb9a87
--- /dev/null
+++ b/.qoder/quests/branch-variable-tracking.md
@@ -0,0 +1,183 @@
+# Branch Variable Tracking and Theme Injection Validation
+
+## Overview
+
+This document outlines the process of tracking branch variables, specifically the `half-gutter` variable, and validating that the macOS Tahoe theme is properly built and injected into the Vortex application with the correct style ID.
+
+## Repository Type
+
+Full-Stack Application with Extension-based Architecture
+
+## Architecture
+
+### Variable Management System
+- Core SCSS variables are defined in `src/stylesheets/variables.scss`
+- Theme-specific variables override core variables in `extensions/theme-switcher/themes/{theme-name}/variables.scss`
+- Build process compiles SCSS to CSS and bundles with extensions
+
+### Theme Architecture
+1. **Theme Definition**: Themes are defined in `extensions/theme-switcher/themes/` directory
+2. **Build Process**: Extensions are built via `BuildSubprojects.js` using configuration in `BuildSubprojects.json`
+3. **Bundling**: Built extensions are copied to `{BUILD_DIR}/bundledPlugins/`
+4. **Runtime Loading**: Theme-switcher extension loads themes at runtime via StyleManager
+
+### Style Injection Flow
+1. Theme-switcher extension calls `api.setStylesheet()` for each theme component
+2. StyleManager receives stylesheet paths and compiles SCSS to CSS
+3. Compiled CSS is injected into DOM as `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Get Started
Watch these videos to guide you on how to start modding your favorite games.
Learn how to add games for Vortex to manage. Learn how to download mods to your games. Learn how to use Vortex profiles.
Mods Spotlight
Here are some mods we think you should try out!
◄ Previous
Announcements
No Announcements
No news is good news!
Community
Community
Community
Ace Combat 7: Skies Unknown
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Assassin's Creed III Remastered
Community
Assassin's Creed IV: Black Flag
Community
Community
Community
Community
Community
Assassin's Creed Syndicate
Community
Community
Assassin's Creed Valhalla
Community
Assassin's Creed: Brotherhood
Community
Assassin's Creed: Revelations
Community
Community
Community
Community
Community
Community
Community
Battlefleet Gothic: Armada 2
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Call of Cthulhu: Dark Corners of the Earth
Community
Card Survival: Tropical Island
Community
Community
Community
Community
Community
Community
Clair Obscur: Expedition 33
Community
Community
Command & Conquer Remastered
Community
Community
Community
Community
Community
Community
Crisis Core -Final Fantasy VII- Reunion
Community
Community
Community
Community
Daemon X Machina: Titanic Scion
Community
Dark Messiah of Might and Magic
Community
Community
Community
Community
Community
Dead Rising Deluxe Remaster
Community
Deep Rock Galactic: Survivor
Community
Community
Destroy All Humans 2 - Reprobed
Community
Community
Community
Community
Diplomacy is Not an Option
Community
Community
Community
Community
Community
Community
Community
Community
Community
Door Kickers 2: Task Force North
Community
Community
Dragon Age: The Veilguard
Community
Community
Dragon Ball: Sparking ZERO
Community
Dragon Quest III HD-2D Remake
Community
Dragon Quest XI S: Echoes of an Elusive Age - Definitive Edition
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Fell Seal: Arbiter's Mark
Community
Community
Community
Final Fantasy VII Rebirth
Community
Community
Community
Community
Ghost of Tsushima Director's Cut
Community
Community
Community
Community
Community
Community
Community
Community
Community
Grand Theft Auto: The Trilogy
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Horizon Zero Dawn Remastered
Community
Community
Community
Indiana Jones and the Great Circle
Community
Community
Community
Community
Community
Community
JoJo's Bizarre Adventure: All-Star Battle R
Community
Community
Jurassic World Evolution 2
Community
Community
Community
Kingdom Come: Deliverance II
Community
Kingdom Hearts 0.2 Birth By Sleep -A Fragmentary Passage-
Community
Community
Community
Community
Legacy of Kain: Soul Reaver 1 & 2 Remastered
Community
Community
Community
Community
Like a Dragon: Infinite Wealth
Community
Like a Dragon: Pirate Yakuza in Hawaii
Community
Community
Lords of the Fallen (2023)
Community
Community
Community
Made in Abyss: Binary Star Falling into Darkness
Community
Mandragora: Whispers of the Witch Tree
Community
Community
Community
Community
Community
Marvel's Spider-Man Remastered and Miles Morales
Community
Community
Community
MechWarrior 5: Mercenaries
Community
Community
Community
Metal Gear & Metal Gear 2: Solid Snake - Master Collection
Community
Metal Gear Solid - Master Collection
Community
Metal Gear Solid 2: Sons of Liberty - Master Collection
Community
Metal Gear Solid 3: Snake Eater - Master Collection
Community
Metal Gear Solid Delta: Snake Eater
Community
Community
Community
Middle-earth: Shadow of War
Community
Community
Community
Community
Community
Community
Community
Mount & Blade II: Bannerlord
Community
Community
Community
Community
Need for Speed: Underground 2
Community
Community
Community
Community
Ninja Gaiden: Master Collection
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Plants vs. Zombies: Game of the Year Edition
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Community
Red Faction Guerrilla Re-Mars-tered
Community
Community
Community
Community
Community
Resident Evil 5 Gold Edition
Community
Community
Community
Return to Castle Wolfenstein
Community
Community
Community
Community
Rocksmith 2014 Edition REMASTERED
Community
Rooftops & Alleys: The Parkour Game
Community
Community
Rune Factory: Guardians of Azuma
Community
Community
S.T.A.L.K.E.R. 2: Heart of Chornobyl
Community
Community
S.T.A.L.K.E.R. Call of Chernobyl
Community
S.T.A.L.K.E.R. Call of Pripyat
Community
Community
S.T.A.L.K.E.R.: Shadow of Chernobyl
Community
Community
Community
Senua's Saga: Hellblade II
Community
Shadow of the Tomb Raider
Community
Community
Community
Sid Meier's Civilization VI
Community
Sid Meier's Civilization VII
Community
Siege Survival: Gloria Victis
Community
Community
Community
Community
Community
Community
Snowbreak: Containment Zone
Community
Community
Community
Community
Community
Space Rangers HD: A War Apart
Community
SpongeBob SquarePants: Battle for Bikini Bottom - Rehydrated
Community
Community
Star Wars Jedi: Fallen Order
Community
Community
Community
Star Wars: Battlefront II (2017)
Community
Community
Community
Community
Community
STORY OF SEASONS Pioneers of Olive Town
Community
Community
Community
Community
Community
Community
Community
Community
Super Hero Squad Online Forever
Community
Community
Community
Community
System Shock 2: 25th Anniversary Remaster
Community
Tainted Grail: The Fall of Avalon
Community
Community
Community
Community
Community
Community
Community
Community
The Binding of Isaac: Rebirth
Community
Community
The Dark Pictures Anthology: House of Ashes
Community
The Dark Pictures Anthology: Little Hope
Community
The Dark Pictures Anthology: Man of Medan
Community
The Dark Pictures Anthology: The Devil In Me
Community
Community
Community
Community
The Last of Us Part II Remastered
Community
The Legend of Heroes: Trails through Daybreak
Community
Community
Community
Community
Community
Community
Community
theHunter: Call of the Wild
Community
Community
Community
Community
Tomb Raider I-III Remastered
Community
Tomb Raider IV-VI Remastered
Community
Community
Community
Community
Community
Community
Uncharted: Legacy of Thieves Collection
Community
Community
Community
Community
Community
Community
Community
Community
Community
Warhammer 40,000: Boltgun
Community
Warhammer 40,000: Darktide
Community
Warhammer 40,000: Space Marine
Community
Warhammer 40,000: Space Marine 2
Community
Warhammer 40000 Gladius - Relics of War
Community
Community
Community
Community
Community
Community
Community
Community
+
+
+
+
+
+
Diagnostics & Usage Data
Find out more about how we use diagnostic and usage data
More
Invalid Extension
/Users/veland/Library/Application Support/vortex_devel/downloads/site/Vortex Extension Update - Balatro Vortex Extension v0.1.2.7z
More