Repository navigation
Windows Bugs We Fixed
The bugs the Windows CI job found, why they happened and how we fixed them. How Windows support works is on Windows Support.
Local History refused every file on Windows. check_file_path wanted the path to start with /, so a C:/... path was "invalid" and no snapshot was ever written. The Windows CI run showed it. Now paths::after_root accepts / or, on Windows, a drive root, and the rest of the check is unchanged, so . and .. parts are still refused.
A rooted path could leave the work tree on Windows. safe_join and the submodule path check refused absolute paths with is_absolute(). On Windows \etc\passwd has a root but no drive, so it is not "absolute", and joining it onto the repository gives a path at the drive root. Both checks now also refuse Component::RootDir, like the MCP path check already did.
The installer check hung for hours. The first windows-installer.yml run built the installer, then sat in "Install it and run the command line program" until it was cancelled. The step runs in Git Bash, which rewrites arguments that look like Unix paths: /S became S:/, so the installer did not run silently and waited for a click on a screen nobody sees. The step now sets MSYS_NO_PATHCONV=1, which passes arguments through unchanged, and has a 10 minute limit (60 for the job), so any other hang fails fast instead of running until GitHub's 6 hour limit.
A repository made in an admin terminal was "Not a git repository". Found in the manual test on a Windows 11 PC. A repository cloned or created in an elevated terminal belongs to the Administrators group. Git accepts it when the user is in that group, even without elevation, but libgit2, which the app uses for reads, only accepts it from an elevated program. The app runs without elevation, so every read failed while git status worked. git::repo::configure_libgit2 turns off libgit2's ownership check on Windows at start (the test sandbox does the same). We chose this over a "take ownership" message because the check guards against running programs a repository's config names, and libgit2 runs none here; every write goes through git, which keeps its own check with the right Windows rules.
Shortcut labels said Cmd on Windows. Found in the first Windows screenshot: the empty editor area showed "Shift+Cmd+G" and "Cmd+P", and about 40 tooltips, buttons and Settings hints did the same. They were typed as text, so neither the platform nor custom shortcuts changed them. Now they ask the registry (commandKeys, withCommandKeys, localKeys), which knows the real keys on each platform, Alt+Home for the Navigation Bar included. Writing words on macOS too (formatKeyWords) kept the macOS labels exactly as they were.
Terminal paths printed with backslashes did not link, and other letter case missed the workspace. Windows tools print C:\Users\me\repo\src\app.ts:12, and some print the drive or folders in lower case. The link finder only knew / paths, and the path helpers compared case exactly, so neither became a link. Printed paths now go through fromNativePath, the path helpers ignore case on Windows, and real_files returns each file's real path, so the link opens the existing tab instead of a second one in other case.
Keep computer awake did not build on Windows. The Windows CI job stopped with "variant Process is never constructed". keep_awake.rs holds the computer awake with a child process on macOS (caffeinate) and Linux (systemd-inhibit), but with a thread on Windows, so the Guard::Process variant was never made there and clippy's -D warnings turned that into an error. The variant and its match arms are now built only off Windows (#[cfg(not(windows))]), like the Thread variant is built only on Windows, so each system compiles just the guard it uses.
The memory log test failed on the Windows runner and stopped a beta. The beta.12 release's CI failed in memory_log::tests::logs_changes_and_events_then_stops: the log ended with readings but no "memory log stopped" line. The test turned the log off and read the file after a fixed 250 ms, but the logger thread writes its last line only after the memory reading it is taking, and on a busy Windows runner that reading took longer. The app was fine; the wait was too short. The test now reads the log until it ends with the stop line (at most 10 seconds) instead of sleeping a fixed time, so a slow machine only makes it wait longer.
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