# FileView (fv)
[](https://crates.io/crates/fileview)
[](https://opensource.org/licenses/MIT)
A minimal, VSCode-style file tree TUI for modern terminal emulators.
## Features
- Fast file tree navigation with vim-like keybindings
- **Git integration** - color-coded file status and branch display
- Multi-select support for batch operations
- **Preview panel** with support for:
- Text files (syntax highlighting by extension)
- Images (Kitty/iTerm2/Sixel protocols with auto-detection)
- Directories (file count, size statistics)
- Binary files (hex dump view)
- Copy/cut/paste with internal clipboard
- System clipboard integration (path/filename copy)
- Pick mode for external tool integration
- Callback execution on file selection
- Hidden files toggle
- Mouse support (click, double-click, scroll, drag-and-drop)
- **Nerd Fonts icons** (optional, enable with `--icons`)
## Git Status Colors
When inside a git repository, files are color-coded by their status:
| Yellow | Modified |
| Green | Added / Untracked |
| Red | Deleted |
| Cyan | Renamed |
| Gray | Ignored |
| Magenta | Conflict |
The current branch name is displayed in the status bar.
## Image Preview
FileView automatically detects your terminal and selects the optimal image protocol:
| Kitty | Kitty Graphics | Highest |
| Ghostty | Kitty Graphics | Highest |
| Konsole | Kitty Graphics | Highest |
| iTerm2 | iTerm2 Inline | Highest |
| WezTerm | iTerm2 Inline | Highest |
| Warp | iTerm2 Inline | Highest |
| Foot | Sixel | Good |
| Windows Terminal | Sixel | Good |
| VS Code | Halfblocks | Basic |
| Alacritty | Halfblocks | Basic |
| Other | Auto-detect | Varies |
Override with `FILEVIEW_IMAGE_PROTOCOL` environment variable (see below).
## Installation
### From crates.io (Recommended)
```bash
cargo install fileview
```
### With Chafa support (optional)
For better image quality on terminals without native image protocol support:
```bash
# Install libchafa first
# macOS:
brew install chafa
# Ubuntu/Debian:
sudo apt install libchafa-dev
# Then install with chafa feature
cargo install fileview --features chafa
```
### From source
```bash
git clone https://github.com/Hiro-Chiba/fileview.git
cd fileview
cargo install --path .
# Or with chafa:
cargo install --path . --features chafa
```
### Requirements
- Rust 1.70+
- A terminal with true color support (recommended: Ghostty, iTerm2, Alacritty)
## Usage
```bash
# Open current directory
fv
# Open specific directory
fv /path/to/directory
# Pick mode (output selected path to stdout)
fv --pick
# Pick mode with JSON output
fv --pick --format json
# Execute command on selection
fv --on-select "code {path}"
```
## Keybindings
### Navigation
| `j` / `↓` | Move down |
| `k` / `↑` | Move up |
| `g` | Go to top |
| `G` | Go to bottom |
### Tree Operations
| `l` / `→` / `Tab` | Expand directory |
| `h` / `←` / `Backspace` | Collapse directory |
| `Enter` | Toggle expand/collapse |
| `H` | Collapse all |
| `L` | Expand all (depth limit: 5) |
### Selection
| `Space` | Toggle mark |
| `Esc` | Clear all marks |
### File Operations
| `a` | Create new file |
| `A` | Create new directory |
| `r` | Rename |
| `D` / `Delete` | Delete (with confirmation) |
| `y` | Copy to clipboard |
| `d` | Cut to clipboard |
| `p` | Paste |
### Search
| `/` | Start search |
| `n` | Next search result |
### Preview
| `P` | Toggle side preview panel |
| `o` | Open fullscreen preview |
| `Tab` | Toggle focus between tree and preview (when preview visible) |
#### Side Preview Focus Mode
When the side preview panel is open, press `Tab` to switch focus:
| Tree | Navigate files | Top/Bottom of list | - |
| Preview | Scroll content | Top/Bottom of preview | Page scroll |
- Click on a panel to switch focus
- Scroll wheel works on the focused panel
- `Esc` returns focus to tree
- Focused panel has cyan border highlight
### Other
| `.` | Toggle hidden files |
| `R` / `F5` | Refresh |
| `c` | Copy path to system clipboard |
| `C` | Copy filename to system clipboard |
| `?` | Show help |
| `q` | Quit |
## CLI Options
| `-p`, `--pick` | Pick mode: output selected path(s) to stdout |
| `-f`, `--format FMT` | Output format: `lines` (default), `null`, `json` |
| `--on-select CMD` | Run command when file is selected |
| `-i`, `--icons` | Enable Nerd Fonts icons (default) |
| `--no-icons` | Disable icons |
| `-h`, `--help` | Show help |
| `-V`, `--version` | Show version |
### Environment Variables
| `FILEVIEW_ICONS=0` | Disable icons by default |
| `FILEVIEW_IMAGE_PROTOCOL` | Force image protocol: `auto`, `halfblocks`, `chafa`, `sixel`, `kitty`, `iterm2` |
### Placeholders for `--on-select`
| `{path}` | Full path |
| `{dir}` | Parent directory |
| `{name}` | Filename with extension |
| `{stem}` | Filename without extension |
| `{ext}` | Extension only |
### Examples
```bash
# Use as file picker for another tool
selected=$(fv --pick)
echo "Selected: $selected"
# Open selected file in editor
fv --on-select "vim {path}"
# Copy selected file path to clipboard (macOS)
# Multiple file selection with JSON output
fv --pick --format json
```
## License
MIT