Repository navigation
Project Color And Title Bar
Nibtree tints each window in its project's color, the same color as the project's tile on the Welcome screen. On macOS the window buttons sit in the app's own top bar, so the color can start at the window's top left corner.
With several windows open, a color tells them apart at a glance. The system title strip on macOS sat above our top bar, so the glow had a hard edge there and the window wasted a row.
flowchart LR
Id["workspace.id"] --> Tint["projectTintFor (badgeColor)"]
Tint --> Chrome["windowChrome.tint"]
Chrome --> Shell["AppShell tint: glow on the frame"]
Chrome --> Header["AppHeader tint: flat look only"]
Mac["macOS, not full screen"] --> Controls["windowChrome.controlsInBar"]
Controls --> Bar["AppHeader windowControls: room and drag area"]
- The open workspace's
idis the key the Welcome list colors an entry by (the workspace file, or the folder roots joined), soprojectTintFor(stores/projectTint.ts) returns that entry'sbadgeColor, ornonewhen Project color in the top bar (projectColorHeader) is off. - In the rounded look, the library's
AppShellpaints the window frame itself with a radial glow from the top left corner,--app-shell-tint-widthby--app-shell-tint-height, fading to nothing. The rounded header, the activity bars and the gaps between panels are transparent, so the glow runs under all of them, and the panels sit on top. - In the flat look,
AppHeaderdraws a glow on the bar's middle line instead, fully faded at its top and bottom edges. - The color is a terminal color (
--term-blueand so on), so it follows the color theme, and CSSlight-dark()makes it much fainter in light themes.
The windows use titleBarStyle: Overlay with a hidden title: in tauri.conf.json for the first window, and mac_title_bar in commands/window.rs for New Window. The buttons are placed by trafficLightPosition (TRAFFIC_LIGHTS), on the same line as the back arrow. windowChrome.controlsInBar is true on macOS outside full screen; it gives AppHeader windowControls, which leaves --app-header-controls-inset for the buttons and marks the bar's empty space with data-tauri-drag-region (the start-dragging and internal-toggle-maximize permissions). The Welcome screen, the git mergetool window and the merge tool over the main window show the same bar at their top: anything that covers the top bar must, or the buttons land on its content.
| File | What it does |
|---|---|
src/lib/stores/projectTint.ts |
The open project's color |
src/lib/stores/windowChrome.svelte.ts |
tint, controlsInBar and full screen |
ui/web/src/lib/components/AppShell.svelte, AppHeader.svelte
|
The glow, the room for the buttons, the drag area |
src-tauri/tauri.conf.json, src-tauri/src/commands/window.rs
|
The macOS title bar |
-
stores/projectTint.test.ts: the Welcome tile's color, and none when off or with nothing open. -
settingsData.test.ts: theprojectColorHeaderpreference. - The look, the buttons' place and dragging need a check in the app, in a light and a dark theme.
The project glow hid the activity bar icons in light themes.
- The issue: with a light theme, the left strip's icons almost vanished under the project color.
- Why it happened: the glow used the same strength (30%) on light frames as on dark ones, and dim icons on a pale tint lose their contrast.
-
The fix and why we chose it: the glow picks its strength with CSS
light-dark(), so light themes get under half of it. It follows each theme'scolor-schemewith no new color tokens.
Update this page when the glow's size or strength, the window buttons' place, or the Welcome tile colors change.
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