stiff is a keyboard-first file manager aimed at fast, feature-rich file exploration.
The current application direction is a GPUI shell with one browser pane by default, optional splits, and file previews presented in their own pane.
The application UI is under active development with GPUI, the UI framework
developed by Zed. The single application binary is stiff.
- Single-pane browsing by default, with an optional second browser pane.
- Vim-style navigation and file operations, including numeric movement counts.
- A preview pane opened with
gp, sharing the window with the active browser. - Background preview preloading after selection settles, with a loading skeleton while work is in progress.
- Bounded text reads and incremental extension when scrolling, so previewing a text file does not require loading the complete file.
- Pluggable preview handling for text, archive listings, and binary content.
- Dot-hidden entries and
.gitignorematches hidden independently by default. - Parent navigation with
h, without a synthetic..entry in the listing.
| Key | Action |
|---|---|
j / k |
Move down / up |
J / K |
Move down / up by a page step |
gg / G |
Jump to top / bottom |
0 |
Select the first row |
h / l |
Open parent / open selected entry |
s |
Toggle a second browser pane |
w, Tab, Ctrl+I |
Switch browser pane |
r / R |
Reload |
gh |
Toggle dot-hidden entries |
gH |
Toggle gitignored entries |
Ctrl+G |
Quick jump |
? |
Open the key map |
Counts apply to movement and jumps, for example 5j and 12G.
| Key | Action |
|---|---|
v |
Toggle mark on selected entry |
V |
Toggle all marks |
uv / uV |
Clear marks |
yy |
Copy selection |
yp / yn |
Copy path / name |
yf / yc |
Copy files / file contents |
dd |
Mark selection for move |
pp |
Paste |
dD / x |
Delete |
cw / C |
Rename |
nd |
Create directory |
gp |
Toggle preview pane |
| Key | Action |
|---|---|
gp |
Open or close preview for the selected entry |
Ctrl+W, then j or l |
Focus preview pane |
Ctrl+W, then h or k |
Focus browser pane |
Ctrl+W, then w |
Toggle pane focus |
j / l, k / h |
Scroll down / up while preview is focused |
Ctrl+D / Ctrl+U |
Scroll preview by a half page |
Moving the browser selection dismisses the displayed preview while retaining cached preview data within the current directory. Changing directory clears that cached state.
The GPUI code separates browsing state, input interpretation, presentation, and background work:
| Path | Responsibility |
|---|---|
src/main.rs |
GPUI application entry point |
src/shell/ |
App state, rendering, pane focus, and asynchronous operation execution |
src/features/file_browser/ |
Directory state, command effects, components, visibility policy, and preview handlers |
src/features/keybind/ |
Vim-style command registry and dispatch |
src/features/clipboard/ |
Clipboard state and copy/move behavior |
src/features/layout/ |
Single and dual browser pane layout policy |
src/core/ |
Filesystem models and shared low-level helpers |
Directory reads and preview preparation run away from rendering. Preview content is modeled independently of its renderer, allowing format-specific handlers and future loading policies without coupling them to pane UI code.
stiff is moving toward a general pane and tab workspace, rather than treating two browser panels as the permanent default. The current preview system provides the first split-pane workflow and the foundation for:
- additional file-format preview handlers;
- navigable archive previews;
- viewport-aware caching and preloading policies;
- explicit memory offloading strategies for large content; and
- tabs and more flexible pane arrangements.
Run the GPUI application:
cargo run --bin stiff -- /path/to/dirRun the checks used for the current GPUI work:
cargo fmt --check
cargo test --lib
cargo clippy --lib --bin stiff -- -D warnings
cargo check --bin stiffSee CONTRIBUTING.md for repository layout, testing, and code style.