13 — Reference
Complete configuration
Defaults, properties, scopes, application and valid global/project configuration examples.
On this page
Files and precedence
Global configuration is a complete document. Project configuration is a partial schemaVersion 3 override recursively merged over global. Open either from the palette and save with Ctrl+S to validate.
| Scope | Path |
|---|---|
| Windows global | %APPDATA%\openeditorcode\config.json |
| Linux global | ${XDG_CONFIG_HOME:-~/.config}/openeditorcode/config.json |
| Location override | OEC_CONFIG_DIR/config.json |
| Project | <root>/.oec/config.json |
Settings screen
Open settings shows wrap, line numbers, syntax, format on save and profile. ↑/↓ selects, ← global, → project, Enter toggles/saves, E opens JSON and Esc closes. JSON exposes more options than this screen.
Saving from the screen at project scope may serialize nearly the whole effective configuration, pinning previously inherited values. For a minimal override, edit JSON.
Minimal project example
{
"schemaVersion": 3,
"editor": { "wrap": "word", "lineNumbers": true },
"preview": { "markdownDefault": "source" }
}Customize keys
Edit keyboard.bindings inside the complete global document. Keys are catalog configurable IDs; each array replaces the fallback. [] disables the shortcut. The parser accepts strings but does not check that an ID exists or detect collisions.
Modifiers match exactly. Use names such as ctrl, shift, alt and left. Enter/return are normalized. F2, F10, both duplication keys and history H/D have configurable IDs; tree Enter/Shift+Enter remain contextual without IDs.
"keyboard": {
"profile": "default",
"bindings": {
"file.save": ["ctrl+s"],
"editor.formatDocument": ["alt+shift+f"]
}
}Application, migration and recovery
Changes saved within OEC update reactive preferences; other values are captured when capabilities are constructed and require restart. The reference below distinguishes live, restart and startup settings. There is no external configuration watcher.
Global migrates v1 → v2 → v3 in memory. Incompatible JSON may produce config.bkp.json and defaults. The binary supervises the first frame and retries once for certain early failures. It does not recover sessions or buffers.
A global file over 256 KiB fails before that recovery; an invalid project configuration is ignored at startup. The distributed JSON Schema does not replace the parser: this reference is checked against schema.ts and defaults.ts.
Property reference
Every factory global field, syntax token and external formatter field. Dynamic objects are described by their structure.
↓ Download factory JSON44 properties
No properties match those filters.
schemaVersion
ValidationRequired version. Global supports migration from 1/2; project overrides require 3.
- Default
3- Accepts
3- Scope
- Global and project
appearance.theme
On save in OECThe only application chrome theme. Syntax tokens are customized separately.
- Default
"oec-dark"- Accepts
"oec-dark"- Scope
- Global and project
appearance.language
On save in OECUI and message language; some Explorer labels remain Spanish. CLI help and launcher messages use automatic detection.
- Default
"auto"- Accepts
"auto" | "es" | "en"- Scope
- Global and project
layout.explorerWidth
On save in OECExplorer width in terminal columns.
- Default
40- Accepts
24–80- Scope
- Global and project
layout.changesWidth
On save in OECGit pane width in columns.
- Default
44- Accepts
32–80- Scope
- Global and project
layout.minEditorWidth
On save in OECMinimum used to decide whether both side panes fit.
- Default
60- Accepts
32–160- Scope
- Global and project
layout.explorerStartup
At startupInitial Explorer visibility.
- Default
"visible"- Accepts
"visible" | "hidden"- Scope
- Global and project
layout.changesStartup
At startupInitial Git visibility; auto considers availability and width.
- Default
"auto"- Accepts
"auto" | "visible" | "hidden"- Scope
- Global and project
layout.narrowSidePanels
On save in OECKeep a single side pane in a narrow terminal.
- Default
"single"- Accepts
"single"- Scope
- Global and project
layout.findPanelMaxWidth
On save in OECMaximum local find panel width in columns.
- Default
48- Accepts
24–80- Scope
- Global and project
layout.diffOrientation
On save in OECDiff sides next to each other or stacked.
- Default
"auto"- Accepts
"auto" | "horizontal" | "vertical"- Scope
- Global and project
layout.diffStackBelow
On save in OECAuto stacks below this total renderer width, not the central pane width.
- Default
120- Accepts
60–240- Scope
- Global and project
editor.wrap
On save in OECPersistent line wrapping. Ctrl+L toggles session state.
- Default
"none"- Accepts
"none" | "word"- Scope
- Global and project
editor.lineNumbers
On save in OECShow logical line numbers; wrapped continuations do not repeat the number.
- Default
true- Accepts
boolean- Scope
- Global and project
editor.syntax.enabled
On save in OECRegex highlighting limited to supported extensions and 200,000 characters.
- Default
true- Accepts
boolean- Scope
- Global and project
editor.syntax.styles.default
On save in OECforeground requires #RRGGBB. bold/italic/dim are optional booleans. Projects only accept keys already present in the factory token.
- Default
{"foreground":"#d6e5dc"}- Accepts
{ foreground, bold?, italic?, dim? }- Scope
- Restricted project overrides
editor.syntax.styles.keyword
On save in OECforeground requires #RRGGBB. bold/italic/dim are optional booleans. Projects only accept keys already present in the factory token.
- Default
{"foreground":"#79c0ff","bold":true}- Accepts
{ foreground, bold?, italic?, dim? }- Scope
- Restricted project overrides
editor.syntax.styles.string
On save in OECforeground requires #RRGGBB. bold/italic/dim are optional booleans. Projects only accept keys already present in the factory token.
- Default
{"foreground":"#a5d6a7"}- Accepts
{ foreground, bold?, italic?, dim? }- Scope
- Restricted project overrides
editor.syntax.styles.comment
On save in OECforeground requires #RRGGBB. bold/italic/dim are optional booleans. Projects only accept keys already present in the factory token.
- Default
{"foreground":"#7d8590","italic":true,"dim":true}- Accepts
{ foreground, bold?, italic?, dim? }- Scope
- Restricted project overrides
editor.syntax.styles.number
On save in OECforeground requires #RRGGBB. bold/italic/dim are optional booleans. Projects only accept keys already present in the factory token.
- Default
{"foreground":"#e3b341"}- Accepts
{ foreground, bold?, italic?, dim? }- Scope
- Restricted project overrides
editor.syntax.styles.tag
On save in OECforeground requires #RRGGBB. bold/italic/dim are optional booleans. Projects only accept keys already present in the factory token.
- Default
{"foreground":"#ffab70","bold":true}- Accepts
{ foreground, bold?, italic?, dim? }- Scope
- Restricted project overrides
editor.syntax.styles.property
On save in OECforeground requires #RRGGBB. bold/italic/dim are optional booleans. Projects only accept keys already present in the factory token.
- Default
{"foreground":"#d2a8ff"}- Accepts
{ foreground, bold?, italic?, dim? }- Scope
- Restricted project overrides
editor.formatting.formatOnSave
On save in OECFormat before normal save; close/quit confirmations use another path and skip this step.
- Default
false- Accepts
boolean- Scope
- Global and project
editor.formatting.defaultFormatter
On save in OECFallback when an extension has no specific mapping.
- Default
"prettier"- Accepts
"prettier" | "none"- Scope
- Global and project
editor.formatting.byExtension
On save in OECMap an extension to prettier, none or a global external formatter name. Projects cannot add extensions outside the factory map.
- Default
{".js":"prettier",".jsx":"prettier",".ts":"prettier",".tsx":"prettier",".json":"prettier",".css":"prettier",".html":"prettier",".svg":"prettier",".md":"prettier",".yml":"prettier",".yaml":"prettier"}- Accepts
Record<.extension, formatter>- Scope
- Restricted project overrides
editor.formatting.prettier.printWidth
On save in OECPreferred formatter line width.
- Default
100- Accepts
40–240- Scope
- Global and project
editor.formatting.prettier.tabWidth
On save in OECSpaces per indentation level.
- Default
2- Accepts
1–16- Scope
- Global and project
editor.formatting.prettier.useTabs
On save in OECUse tabs for indentation.
- Default
false- Accepts
boolean- Scope
- Global and project
editor.formatting.prettier.semi
On save in OECPrettier semicolon preference.
- Default
true- Accepts
boolean- Scope
- Global and project
editor.formatting.prettier.singleQuote
On save in OECPrettier single-quote preference.
- Default
false- Accepts
boolean- Scope
- Global and project
keyboard.profile
On save in OECEnable the Vim subset. Starts in insert mode.
- Default
"default"- Accepts
"default" | "vim"- Scope
- Global and project
keyboard.bindings
On save in OECReplace bindings for the catalog’s 28 configurable IDs, including editor.selectAll. An empty array disables a shortcut. The project parser rejects adding IDs to the empty factory map: configure bindings globally.
- Default
{}- Accepts
Record<commandId, string[]>- Scope
- Restricted project overrides
formatters.external
On save in OECGlobal executable registry. Projects can select a global name but cannot declare formatters.
- Default
{}- Accepts
Record<name, ExternalFormatter>- Scope
- Global only
formatters.external.<name>.command
On save in OECExecutable without a shell; inherits process environment and directory. Not a sandbox.
- Default
—- Accepts
string ≠ empty- Scope
- Global only
formatters.external.<name>.args
On save in OECSeparate arguments. Content arrives on stdin; file names are not automatically interpolated.
- Default
—- Accepts
string[]- Scope
- Global only
formatters.external.<name>.extensions
On save in OECExtensions supported by the executable; each must start with a dot.
- Default
—- Accepts
string[] (.extension)- Scope
- Global only
formatters.external.<name>.timeoutMs
On save in OECMaximum time before terminating the formatter. All four external fields are required.
- Default
—- Accepts
100–120000- Scope
- Global only
search.respectGitignore
Restart OECApply root .gitignore rules to the index and line count. Does not read nested .gitignore files.
- Default
true- Accepts
boolean- Scope
- Global and project
git.autoRefresh
Restart OECInstall a recursive watcher over the open folder with a 400 ms debounce, including while discovering nested repositories. Ignores .git events; not periodic fetch.
- Default
true- Accepts
boolean- Scope
- Global and project
git.fetchOnRefresh
Restart OECF5 and the palette entry fetch before reading status. Local status is read even if fetch fails.
- Default
true- Accepts
boolean- Scope
- Global and project
updates.checkOnStartup
Restart OECWith the npm launcher only: after one second query latest and verify launcher/platform metadata and archives, with a 15-second total timeout. Incomplete releases are not offered.
- Default
true- Accepts
boolean- Scope
- Global and project
preview.markdownDefault
Restart OECView used when opening a new Markdown file; F4 toggles during the session.
- Default
"preview"- Accepts
"preview" | "source"- Scope
- Global and project
preview.images
Restart OECEnable raster and SVG previews. SVG allows toggling XML with F4; when disabled, SVG opens as source and binary images may be rejected during text reading.
- Default
true- Accepts
boolean- Scope
- Global and project
preview.imageProtocol
On save in OECProtocol passed to the image renderer. Actual support depends on the terminal.
- Default
"auto"- Accepts
"auto" | "kitty" | "sixel" | "blocks"- Scope
- Global and project
Chapter sources
Links pinned to the reviewed commit; they do not follow main.