Repository navigation
Settings Reference
Every key in ~/.nibtree/settings.json and state.json, with its default, what parsePreferences or parseState accepts (in src/lib/stores/settingsData.ts), and where it is used. How loading and saving work is in How Settings Work; the user side is in Settings and Settings Files.
Validators: pickBoolean (a boolean, else the default), pickNumber (a finite number, clamped), pickInteger (rounded, then clamped), pickTenths (rounded to 0.1, then clamped), pickOneOf (one of a list), pickThemeId (a known theme of the right mode).
| Key | Default | Accepted | Used by |
|---|---|---|---|
theme |
"system" |
system, light, dark
|
applyAppearance, colorMode
|
roundedPanels |
true | boolean | data-rounded-panels |
projectColorHeader |
true | boolean |
views/Header.svelte: AppHeader's tint
|
fileToolbar |
"top" |
top, bottom, none
|
FileView, EmptyMain, navBar/
|
fileToolbarBreadcrumbs, fileToolbarBadges, fileToolbarChanges, fileToolbarBlame, fileToolbarCopyPath, fileToolbarMarkdownView, fileToolbarMarkdownFormat
|
true | boolean | views/files/fileToolbar.ts |
uiFontSize |
13 | 11 to 16 | --ui-size |
fileIcons |
"off" |
off, minimal, material
|
fileIcons/fileIcons.svelte.ts, View > File Icons |
| Key | Default | Accepted | Used by |
|---|---|---|---|
lightColorTheme |
"gm-light" |
a light theme id | themes/apply.ts |
darkColorTheme |
"gm-dark" |
a dark theme id | themes/apply.ts |
editorFontFamily |
DEFAULT_EDITOR_FONT ('JetBrains Mono', Menlo, Monaco, 'Cascadia Mono', Consolas, 'Courier New', monospace) |
normalizeFontFamily (drops repeats); the earlier default without the Windows fonts loads as this one |
--font-mono |
editorFontSize |
13 | 10 to 20 |
--code-size, View > Zoom |
editorFontWeight |
400 | 100 to 900, rounded to 100 | --code-weight |
editorLineHeight |
1.25 | 1 to 2.5, rounded to 0.05 | --code-line-height |
mouseWheelZoom |
false | boolean |
App.svelte, editor/wheelZoom.ts
|
fontLigatures |
false | boolean | data-ligatures |
syntaxHighlighting |
true | boolean |
App.svelte, editor/languages.ts, MarkdownPreview.svelte
|
tabSize |
4 | 2, 4, 8 (TAB_SIZES) |
App.svelte, editor/indentation.ts
|
detectIndentation |
true | boolean |
App.svelte, editor/indentation.ts, View > Detect Indentation |
renderWhitespace |
"selection" |
RENDER_WHITESPACE_CHOICES |
App.svelte, editor/whitespace.ts
|
unloadHiddenTabs |
true | boolean |
App.svelte, repoStore.sleepHiddenTabs
|
unloadHiddenTabsMinutes |
15 | 5, 15, 30, 60 (UNLOAD_TAB_MINUTES) |
stores/tabSleep.ts |
editorCursorStyle |
"line" |
EDITOR_CURSOR_STYLE_CHOICES |
App.svelte, editor/cursor.ts
|
editorCursorWidth |
2 |
pickInteger, 1 to 6 (EDITOR_CURSOR_WIDTH_RANGE) |
editor/cursor.ts |
editorCursorBlinking |
"blink" |
EDITOR_CURSOR_BLINKING_CHOICES |
editor/cursor.ts |
editorCursorSmoothCaret |
false | pickBoolean |
editor/cursor.ts |
editorCaretExtraTop, editorCaretExtraBottom
|
0 |
pickInteger, 0 to 10 (CARET_EXTRA_RANGE) |
editor/cursor.ts |
editorAutoCloseBrackets |
true | pickBoolean |
editor/features.ts (file editor) |
editorCompletion |
true | pickBoolean |
editor/features.ts (file editor) |
editorCompletionOnTyping |
true | pickBoolean |
editor/features.ts; off, only Ctrl+Space opens the list |
editorFoldGutter |
true | pickBoolean |
editor/features.ts (file editor) |
editorIndentGuides |
true | pickBoolean |
editor/indentGuides.ts (all panes) |
editorHighlightWord |
true | pickBoolean |
editor/features.ts (all panes) |
editorScrollPastEnd |
true | pickBoolean |
editor/features.ts (file editor) |
editorColumnSelection |
true | pickBoolean |
editor/features.ts (all panes) |
editorRulerColumn |
0 (off) |
pickRulerColumn: whole, 1 to 500 (EDITOR_RULER_RANGE), else 0 |
editor/ruler.ts (all panes) |
wordWrap |
false | boolean |
FileView.svelte, App.svelte, editor/wordWrap.ts, View > Word Wrap |
markdownViewMode |
"split" |
editor, split, preview
|
FileView.svelte (sessionViewMode) |
currentLineBlame |
true | boolean |
FileView.svelte, DiffView.svelte
|
blameGutter |
false | boolean |
editor/blame.ts, Blame buttons |
| Key | Default | Accepted | Used by |
|---|---|---|---|
diffLayout |
"sideBySide" |
"sideBySide" or "inline"
|
diff/DiffView.svelte |
commitBoxLayout |
"single" |
"single" or "perRepo"
|
ChangesView.svelte, changes/RepoSection.svelte, git/ChangesTab.svelte
|
ignoreWhitespace |
false | boolean | merge/MergeEditor.svelte |
logAllRefs |
true | boolean | views/LogView.svelte |
commitSignOff |
false | boolean | views/changes/commitOptions.svelte.ts |
commitGpgSign |
"default" |
default, sign, noSign
|
views/changes/commitOptions.svelte.ts |
gitConsole |
false | boolean |
App.svelte (gitConsoleSetEnabled), terminal panel |
updateMethod |
"merge" |
merge, rebase
|
views/git/UpdateProjectDialog.svelte, gitMenuActions.ts
|
updateMethod has no row in the dialog: Update Project saves its last choice.
| Key | Default | Accepted | Used by |
|---|---|---|---|
terminalShell |
null | a trimmed path up to 1024 characters, else null | terminalStore.svelte.ts |
terminalFontFamily |
"" |
normalizeTerminalFontFamily (empty means the editor font) |
terminal/options.ts, fonts.ts
|
terminalFontSize |
13 | 9 to 24 | terminal/options.ts |
terminalLineHeight |
1.2 | 1 to 2, tenths | terminal/options.ts |
terminalLetterSpacing |
0 | 0 to 5, whole | terminal/options.ts |
terminalFontWeight |
"normal" |
normal, medium, bold
|
terminal/options.ts |
terminalFontWeightBold |
"bold" |
same | terminal/options.ts |
terminalLigatures |
false | boolean |
TerminalView.svelte, terminalAddonPlan (no WebGL with ligatures) |
terminalNerdFontIcons |
true | boolean | terminal/options.ts |
terminalCursorStyle |
"block" |
block, bar, underline
|
terminal/options.ts |
terminalCursorBlink |
true | boolean | terminal/options.ts |
terminalScrollback |
5000 | 1000 to 100000, whole (clampTerminalScrollback) |
terminal/options.ts |
terminalCopyOnSelect |
false | boolean |
terminalActions.ts (CopyOnSelect) |
terminalFind |
true | boolean |
terminalAddonPlan, keys.ts (Cmd+F) |
terminalFileLinks |
true | boolean |
terminalAddonPlan, TerminalView.svelte
|
terminalGpuAcceleration |
true | boolean |
terminalAddonPlan, addons.ts
|
terminalUnicode11 |
true | boolean |
terminalAddonPlan, addons.ts
|
terminalOptionAsMeta |
false | boolean |
terminal/options.ts (macOptionIsMeta) |
terminalVisualBell |
true | boolean | terminalController.svelte.ts |
terminalSmoothScrolling |
false | boolean |
terminal/options.ts (smoothScrollDuration 125 ms) |
terminalDropPaths |
true | boolean | TerminalHost.svelte |
The two defaults changed from 12.5 and 1 to 13 and 1.2. Saved values are read as they are, so only people who never saved settings see the new ones. What each switch loads is in How terminal features work.
| Key | Default | Accepted | Used by |
|---|---|---|---|
mcpEnabled |
false | boolean |
App.svelte, mcpStore.configure
|
cliEnabled |
false | boolean | same |
mcpPort |
48731 | a whole number 1024 to 65535 (parseMcpPort) |
same |
mcpTools |
{} |
tool names (^[a-z][a-z0-9_]{0,63}$) to booleans, at most 300 (pickToolStates) |
same |
memoryLogEnabled |
false | boolean |
App.svelte, memoryLog.configure
|
memoryLogIntervalMs |
500 | 100 to 10000, whole | same |
memoryLogThresholdMb |
5 | 0 to 500 | same |
The MCP server and the memory log are driven only by the main window, never by a git mergetool window, which would compete for the port.
| Key | Default | Accepted | Used by |
|---|---|---|---|
confirmDragAndDrop |
true | boolean |
views/files/explorerOps.ts (move) |
The other Layout choices are in state.json, below.
| Key | Default | Accepted | Used by |
|---|---|---|---|
checkForUpdates |
true | boolean | update/updates.svelte.ts |
updateChannel |
"auto" |
auto, stable, beta
|
update/updates.svelte.ts |
| Key | Default | Accepted | Used by |
|---|---|---|---|
recentFolders |
[] |
strings, at most 12 (older files: recentRepos) |
welcome screen, File > Open Recent |
recentWorkspaces |
[] |
lists of two or more folders, at most 12 | same |
recentWorkspaceFiles |
[] |
strings, at most 12 | same |
lastSession, lastSessionFile
|
[], null |
strings | sessionSteps |
lastRunVersion, skippedVersion
|
null | strings | What's New, update check |
activeRepos |
{} |
folder to repository root | stores/repo.svelte.ts |
activeRepoAuto |
true | boolean | Status bar repository picker (views/repoSelection.svelte.ts) |
scriptNodeVersions |
{} |
package.json path to a bin folder or "default", the newest 200 |
Scripts panel |
explorerOpen |
true | boolean | Files panel |
leftBarVisible, rightBarVisible
|
true | boolean |
Workspace.svelte, Header.svelte, View menu |
leftPanel |
"changes" |
changes, branches, scripts or null |
left sidebar |
sidebarWidth, explorerWidth
|
260 | 120 to 2000 | side panels |
commitInfoHeight |
260 | 80 to 2000 |
log/CommitDetails.svelte: the message and details above the changed files |
terminalHeight |
260 | 80 to 2000 | terminal panel |
terminalListWidth |
180 | 120 to 1200 | terminal list |
changesListWidth |
320 | 160 to 2000 | Changes tab file list |
changesListVisible |
true | true or false | Changes tab file list shown |
diffSplitRatio |
0.5 | 0.15 to 0.85 | diff/DiffView.svelte |
threePaneSplit |
[1/3, 2/3] | each pane 0.15 or more |
diff/ThreePaneDiff.svelte, merge/MergeEditor.svelte
|
markdownPreviewRatio |
0.5 | 0.15 to 0.85 | FileView.svelte |
stateToJson writes these keys and keeps any others it found. Unknown keys of either file are kept, so a newer version's keys survive an older app.
- A new preference goes in
Preferences,defaultPreferences,parsePreferences, the store's field andpreferences(), then in this page, Settings and Settings Files. Its row in the dialog needs an entry inSETTINGS_SEARCH_INDEX(How search in Settings works). - A new state key goes in
UiState,STATE_KEYS,parseState,stateToJsonand the store'suiState(). -
settingsData.test.tsshould cover its validation.
These pages are generated from docs/wiki. To correct something, open a pull request against the source file; edits made here are overwritten.
Using Nibtree
- Getting Started
- Welcome Screen
- Workspaces
- Files Panel
- File Operations
- File Icons
- Rounded Panels
- Editor and Tabs
- Pin Reorder and Wrap Tabs
- Single Tab Title
- Split Editor
- New File and Unsaved Changes
- Unload Hidden Tabs
- Editing Code
- Code Appearance
- Markdown Editor
- Image and PDF Preview
- Search Everywhere
- Recent Files
- Navigation Bar
- Find and Replace
- Changes and Commits
- Sign In Prompts
- Commit Box Layout
- Repository Actions
- Commit Options
- Ignoring Files
- Diffs
- Inline Diffs
- Staging View
- Revert a Change
- Resolving Conflicts
- Merge Tool
- Blame
- History and Log
- Merge Commits
- Branches and Tags
- Branches Popup
- Remotes
- Stashes
- Shelf
- Git Menu
- Git Dialogs
- Interactive Rebase
- Worktrees
- AI Agents
- AI Tasks
- AI Usage
- Keep Computer Awake
- Submodules
- Git LFS
- GitHub
- Git Console
- Terminal
- Terminal Features
- Scripts
- Navigation
- Menus
- Settings
- Settings Search
- Color Themes
- Settings Terminal and Automation
- Settings Files
- Updates
- Status Bar and Help
- Notifications
- Memory Use
- Clear Cache
- MCP and CLI
- Git Mergetool
- Keyboard Shortcuts
- Keyboard Shortcuts Editor
- Troubleshooting
- Troubleshooting Git
Developers
- Developer Guide
- Architecture
- Project Layout
- Backend
- How Folder Watching Works
- Folder Watching Bugs We Fixed
- How Workspace Files Work
- How the Preview Scheme Works
- Backend Services
- How Terminal Features Work
- Terminal Bugs We Fixed
- Frontend
- How the Rich Markdown Editor Works
- Rich Markdown Bugs We Fixed
- Git Menu Links
- Menu Keys and Routing
- Frontend Modules
- Blame Bugs We Fixed
- Project Color And Title Bar
- One Diff View
- Diff Bugs We Fixed
- Merge Tool Layouts
- Merge Tool Bugs We Fixed
- Color Theme Bugs We Fixed
- How the Connected Diff Works
- Rounded Panels Bugs We Fixed
- Update Bugs We Fixed
- Status Bar Bugs We Fixed
- MCP and CLI Bugs We Fixed
- Repository Actions Bugs We Fixed
- How the Changes Tab Works
- CodeMirror Patterns
- How the Cursor Works
- How Editor Features Work
- How the Path Bar Works
- Commands and Events
- Settings Reference
- Commands Workspace and Changes
- Commands Branches and Remotes
- Commands History and Extras
- Commands App and Tools
- Testing
- Test Suites
- Debugging
- Debugging with MCP
- Measuring Setting Memory
- How Terminal Memory Is Measured
- How Markdown Diagrams Work
- Releases and CI
- Publishing the Wiki
- Versioning and Changelog
- Browser Version Packages
- Browser Release Checks
- Docker Image
- Platforms and Signing
- Windows Support
- Windows Bugs We Fixed
- Windows MCP and CLI
- Docs and Screenshots
- UI Library
- UI Library MCP
- UI Library Bugs
- UI Library Migration
- Contributing
How features work
- Welcome screen
- Workspaces and folders
- Files panel
- File operations
- File icons
- Editor and tabs
- Pin, reorder and wrap tabs
- Single tab title
- Split editor
- New File and unsaved changes
- Unload hidden tabs
- Editing code
- Code appearance
- Markdown editor
- Image and PDF preview
- Search Everywhere
- Recent Files
- Navigation Bar
- Find and replace
- Changes and commits
- Sign-in prompts
- Commit box layout
- Repository actions
- Commit options
- Ignoring files
- Diffs
- Inline diffs
- Staging view
- Revert a change
- Resolving conflicts
- Merge tool
- Blame
- History and log
- Merge commits
- Commit tabs
- Branches and tags
- Branches popup
- Remotes
- Stashes
- Shelf
- Git menu
- Git dialogs
- Interactive rebase
- Worktrees
- AI agents
- AI usage
- Keep computer awake
- AI tasks
- Submodules
- Git LFS
- GitHub account
- Git Console
- Back and Forward
- Integrated terminal
- Scripts tool window
- Menu bar
- Settings
- Search in Settings
- Color themes
- Rounded panels
- Updates and release channels
- Status bar and help links
- Notifications
- Memory readout and memory log
- Clear Cache
- MCP server and command line tool
- git mergetool mode