Skip to content

Configuration

Joël Deffner edited this page Aug 11, 2026 · 2 revisions

Configuration

Settings are grouped in the VS Code Settings UI under Setup, Mods, Validation and Editor, all under the px. prefix. The default answer to "what do I need to configure?" is: nothing. Open your mod folder(s), run Paradox: Run Setup & Health Check once (see Getting Started), and everything below is optional.

Coming from the old ck3.* settings? Every one of them moved to px.* in 0.3.0. See Upgrading.

Setup

px.gameId picks the game. The three paths describe whichever game is active, are honored whenever you set them, and are auto-detected per game when left empty. They are machine-scoped, so Settings Sync does not copy one computer's paths onto another.

Setting Default Meaning
px.gameId auto auto, ck3, vic3 or eu5. auto reads the mod's descriptor shape and is right for almost everyone; set it explicitly when detection guesses wrong. See Supported Games.
px.gamePath (empty) The active game's data folder, e.g. .../steamapps/common/Crusader Kings III/game. Empty means auto-detected via Setup (Steam), or a game folder opened in the workspace.
px.logsPath (empty) Folder holding the script_docs dump files (triggers.log, effects.log, event_targets.log, modifiers.log). Empty means auto-detect per game: Documents/Paradox Interactive/<game>/logs for CK3, <game>/docs for Victoria 3 and EU5.
px.tigerPath (empty) Your own tiger binary (ck3-tiger or vic3-tiger, matching the active game). Empty means the copy installed by Paradox Tiger: Download or Update Binary.

Mods

Setting Default Meaning
px.modPath (empty) A mod folder that is not part of the workspace. Usually leave empty: every workspace folder that is a mod of the active game is detected and fully indexed automatically.
px.parentMods [] Read-only dependency mods (absolute paths, load order, base first) for submods and compatibility patches. Never list mods you edit; open those as workspace folders instead.
px.excludedMods [] Workspace mod folders to skip entirely (absolute paths): no indexing, completion, hover, navigation, diagnostics or views. Easiest via the per-mod switches in the Project view, or Paradox: Exclude Workspace Mods from Indexing.
px.locLanguage english Localization language to index and display (matches l_<language> yml files), e.g. english, french, german.

Validation

Setting Default Meaning
px.tigerRunOn manual manual (run via the command or the status-bar item) or save (debounced, on every save of a mod script file).
px.diagnostics.ignore [] Diagnostic codes to suppress everywhere. Applies to the toolkit's own structural and localization codes (e.g. missing-bom, unknown-event) and to tiger report keys (e.g. unknown-field).
px.diagnostics.ignorePatterns [] Globs matched against workspace-relative paths; all diagnostics (ours and tiger's) in matching files are suppressed. Supports * within a path segment and ** across segments, e.g. common/**/vendor/*.txt or *.generated.txt. A pattern with no slash also matches the basename, gitignore-style.
px.diagnostics.vanilla false Diagnose files under px.gamePath (vanilla game content). Off by default: the toolkit only ever diagnoses your mod's files.

Editor

Setting Default Meaning
px.scopeInlayHints false Show the inferred scope (e.g. character) after scope-changing block openers like every_vassal = {. Best-effort inference, display only.
px.enableForWorkspace true Escape hatch: set to false to stop this workspace's txt/yml files from being switched to the Paradox language modes.
px.trace.server off off / messages / verbose. Traces the LSP conversation for bug reports.
px.trace.perf false Log how long the server spends on each request, file rescan, index change and indexing phase to the Paradox Modding Toolkit output channel. Turn it on when reporting a slow save or slow completion, then paste the perf … lines into the report.

Default keybindings

Only five commands bind a key by default. Ctrl+Alt+<letter> is AltGr on many European layouts (AltGr+L types ł, AltGr+O types ó), so the set is deliberately small; everything else keeps its button and palette entry and is rebindable as usual.

Key Command When
Ctrl+Alt+T Edit Key at Cursor (localization) in a script or loc file
Ctrl+Alt+J Go to Script Usage in a loc file
Ctrl+Alt+V Run Validation (tiger) in a script, loc or .gui file
Ctrl+Alt+P Open GUI Editor in a .gui file
Ctrl+Alt+H GUI Tree: Toggle Ancestors / Subtree Focus in the GUI widget tree

Inline diagnostic suppression

To silence a diagnostic on a single line without changing any setting, use a comment:

  • # px:ignore <code...> on the offending line, or
  • # px:ignore-next-line <code...> on the line above it.

A bare # px:ignore (no code) suppresses every diagnostic on the line, and you can list several codes after the keyword. A trailing -- <reason> is allowed and ignored, so # px:ignore unknown-event -- fired by the base mod documents itself:

trigger_event = agot_dragon.0031   # px:ignore unknown-event -- defined by the base mod

This works for both the toolkit's own structural checks and tiger's forwarded reports. A code is either one of the codes below or a tiger report key.

The marker changed in 0.3.0. # ck3m:ignore comments no longer suppress anything; the codes themselves are unchanged, so a find-and-replace of the marker is the whole migration. See Upgrading.

Diagnostic codes

The toolkit's own structural diagnostics carry a stable code. They target the silent-failure class: mistakes that make the game quietly ignore your content with no error output anywhere. The source label is per game (ck3-script, vic3-script, eu5-script).

Code Severity What breaks in game
unclosed-brace Error Everything after the { is ignored
stray-close Error The engine misreads the rest of the file
unterminated-string Warning Following tokens get absorbed into the string
missing-value Warning Assignment has no value; the setting is lost
missing-bom Error The whole loc file is ignored (no UTF-8 BOM)
loc-header-mismatch Error Loc entries do not load (header language ≠ filename language)
loc-no-header Error No l_<lang>: header, so no entries load
loc-bad-entry Warning Malformed line skipped; the key shows raw
loc-tab-indent Error Tab-indented entries are rejected
loc-unterminated-value Warning Loc value with no closing quote
loc-content-before-header Warning Entries above the header are dropped
loc-bad-filename Error A file without the _l_<lang>.yml marker is ignored
wrong-on-action-folder Error common/on_actions (plural) is ignored on CK3
wrong-localization-folder Error localisation/ (British spelling) is ignored
unknown-event Warning trigger_event to a non-existent mod event does nothing
missing-required-loc Warning The definition shows raw loc keys in game

Mod descriptors get their own checks under the source px-descriptor:

Code Severity What breaks
descriptor-missing Error The mod folder has no descriptor.mod; the launcher, Workshop and tiger cannot use it
descriptor-missing-field Error / Warning The launcher cannot list the mod (name, version) or check compatibility (supported_version)
descriptor-unknown-key Warning The key is silently ignored by the launcher
descriptor-duplicate-key Warning Only the last of the duplicate values counts
descriptor-path-ignored Warning A path= inside descriptor.mod is dead weight and leaks machine paths

Most of these codes have a page of their own, with the in-game consequence, why it happens and how to fix it, in docs/diagnostics/ in the repository.

Anything deeper than structure is tiger's job, by design. Its reports carry tiger's own keys (unknown-field and friends) and suppress the same way.

Diagnostics from the running game

While the error.log watcher is on, the game's own script errors appear as Problems with the source ck3-game / vic3-game / eu5-game. Those deliberately survive stopping the watcher, so you can work through them with the game closed; Paradox: Clear Game Problems (error.log) removes them, and there is a "Clear Game Problems (N)" row in the Project view while there is something to clear.

Clone this wiki locally