Repository navigation
New File and Unsaved Changes
Sometimes you just want to jot something down: a note, a command to try, a piece of text to compare. File > New File (Cmd+N) opens an empty tab for that. You decide later whether it becomes a file.
Nibtree also keeps your unsaved work when you close the window or quit. The text of new tabs and the unsaved edits in your files come back the next time you open the folder, until you save them.

File > New File: the new tab takes its name from the first line you type.
- Open a folder (New File needs one, since the tab lives in the folder's window).
- Press Cmd+N, or choose File > New File. An empty tab called Untitled opens next to the tab on screen, with the cursor in it.
- Type. The tab takes its name from the first line with text in it, and a dot shows it has unsaved changes.
The new tab is plain text. It has find and replace, multiple cursors and the Code menu, but no Git features, since it is not a file yet.
Press Cmd+S (or File > Save) in the Untitled tab. A save dialog opens in the active repository's folder, with a name made from the first line (untitled.txt when there is no text).
- Saved inside your folder: the tab turns into the file's tab in the same place. From then on it is a normal file tab with Git markers, blame and everything else.
- Saved somewhere else: the file is written and the tab closes, since tabs only show files of the open folder. A message tells you where it went.
Save All (Option+Cmd+S) also covers Untitled tabs: it saves your edited files first, then asks where to save each Untitled tab, one at a time.
With Remember unsaved changes on (it is on by default), closing the window, quitting with Cmd+Q, closing the folder or opening another one never asks about unsaved changes. Instead:
- The text of every Untitled tab with text in it is kept.
- The unsaved edits of every file tab are kept, without touching the file itself.
- Next time you open the same folder or workspace, those tabs come back with their text and the unsaved dot. The file on disk is still the old version until you press Cmd+S.
The text is written to disk half a second after you stop typing, so even a crash loses at most the last moment of typing.

Settings, Editor, Saving: Remember unsaved changes.
A few details:
- Closing a tab yourself still asks. If you close a tab with unsaved changes, you are asked before they are thrown away, as before. Choosing Discard forgets the kept text too.
- An empty Untitled tab is not kept. Delete all its text, or close it, and it is gone.
- Works without Reopen tabs on start. If Reopen tabs on start is off, only the tabs with unsaved changes come back.
- A file that was deleted meanwhile: if a file with kept edits no longer exists when you open the folder again, its text comes back in a new Untitled tab, so nothing is lost.
- Revert File drops the unsaved edits and the kept copy. In an Untitled tab it clears the text, after asking.
- Clear Cache keeps your unsaved changes too, instead of asking you to save first. See Clear Cache.
Turn off Settings > Editor > Saving > Remember unsaved changes to get the old behavior: closing the window or the folder asks before unsaved changes are lost. New File still works; an Untitled tab then counts as unsaved while it has text.
get_app_state lists an Untitled tab with "kind": "untitled" and its untitled: path. get_editor_text and get_editor_selection take that path, and save_file on it opens the save dialog for you to choose where it goes. See MCP and CLI.
Each kept text is one file in ~/.nibtree/unsaved/. See Settings Files. Saving, reverting or discarding a tab removes its file. Text bigger than 16 MB is not kept, and you see a warning once.
- Editor and Tabs: saving, reverting and the unsaved dot.
- Keyboard Shortcuts: Cmd+N and the other keys.
- Developers: How New File and unsaved changes work.
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