A fast, interactive file tree viewer with real-time git tracking, file creation, and dual-terminal preview.
- Real-time git change tracking - See exactly which files have uncommitted changes (+N indicator)
- File & directory creation - Create files (
a) and directories (A) directly from the tree - Dual-terminal preview - Separate viewer with syntax highlighting and markdown rendering
- Session isolation - Run multiple instances in different directories simultaneously
- 8 color themes - Synchronized between tree and viewer
- Directory nesting toggle - Toggle full tree nesting on/off (
n) - Smart directory expansion - Expand/collapse individual directories with
←/→arrow keys - Hidden files toggle - Show/hide dotfiles and hidden folders (
h) - Gitignore support - Respect or ignore
.gitignorepatterns (i) - Vim-style navigation -
j/kkeys for tree navigation - Mouse toggle - Switch between scrolling and text selection modes (viewer only)
- Fast performance - Optimized tree caching for large repositories
- GitHub integration - Automatic repository creation and management
- Smart file selection - Space or Enter to select files for viewing
brew install willyv3/tap/vinwmake installgo build -o vinw
cd viewer && go build -o vinw-viewer- Go 1.21+
- Git
- Skate -
go install github.com/charmbracelet/skate@latest - GitHub CLI (optional, for repo creation)
Start vinw in one terminal:
vinw # Current directory
vinw /path/to/dir # Specific directoryvinw will display a session ID. Use it to start the viewer in another terminal:
vinw-viewer <session-id>j/kor↑/↓- Navigate files and directories←- Collapse selected directory→- Expand selected directorySpaceorEnter- Select file for viewing
a- Create new file in current/selected directoryA- Create new directory in current/selected directoryd- Delete file or directory with confirmation
h- Toggle hidden files and foldersi- Toggle gitignore filtern- Toggle directory nesting (full tree vs. collapsible)t/T- Cycle themes forward/backward
v- Show viewer command?- Help menuq- Quit
↑/↓or mouse - Scroll contente- Edit file in preferred editor (nvim, vim, nano, etc.)m- Toggle mouse mode (scroll/select for copying)r- Manual refreshq- Quit
Each vinw instance generates a unique session ID based on the directory path. This allows you to:
- Run multiple vinw instances in different directories
- Connect the correct viewer to each instance
- Keep sessions completely isolated
vinw automatically:
- Detects git repositories
- Tracks uncommitted changes (shows +N next to modified files)
- Creates GitHub repositories if they don't exist (with
ghCLI) - Respects
.gitignorepatterns (toggleable)
When you press a or A:
- A prompt appears asking for the file/directory name
- The new item is created in the currently selected directory (or parent if a file is selected)
- The tree automatically refreshes to show the new item
- Existing files/directories are protected (won't overwrite)
When you press d:
- A confirmation prompt appears showing the file/directory to delete
- Non-empty directories display a warning with item count
- Press
yto confirm deletion orn/escto cancel - The tree automatically refreshes after deletion
- This action cannot be undone - use with caution
Run the test suite:
make testmake build # Build both binaries
make clean # Remove binaries
make run # Run vinw
make run-viewer # Run viewervinw is built with:
- Bubble Tea - Terminal UI framework
- Lipgloss - Styling and layout
- Glamour - Markdown rendering
- Chroma - Syntax highlighting
- Skate - Session state management
I worked hard on vinw and the vinw-workspace companion. If you end up trying it and want to leave feedback, I'd appreciate it. I want to make it better so more people use it. This is the hard product part. Bear with me.
Main Application (filetree and detached viewer/editor)
brew install willyv3/tap/vinwhttps://github.com/WillyV3/vinw
Companion app (tmux workspace launcher)
brew install willyv3/tap/vinw-workspacehttps://github.com/WillyV3/vinw-workspace
Feedback Form: https://forms.gle/fNhsLD5tSJxL2Fu4A
-WillyV3
MIT