Skip to content

JeremyDong22/Jermi

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1,099 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Jermi

A terminal file manager that doesn't lose your project root.

A fork of Yazi with anchored navigation and dynamic panes — built for developers who want VSCode‑style file browsing in the terminal.

Installation · Quick Start · Keybindings · How It Works


Why Jermi?

As a developer in tmux + terminal land, I tried every file manager and they all had the same problem:

Tool The pain
Ranger / lf Sliding window — go three folders deep and you forget where you started
broot Tree view is powerful but expanding/collapsing nodes feels clunky
Yazi Fast, gorgeous, async… but still scrolls your project root off‑screen

I wanted VSCode's file explorer in the terminal: the project root pinned on the left, and the view grows as you go deeper instead of sliding.

So I forked Yazi. That's Jermi.

Traditional sliding window           Jermi anchored view
──────────────────────────────       ──────────────────────────────────────
src/  components/  Button.tsx        project/  src/  components/  Button.tsx
  ↑                                      ↑
  project root scrolled away             anchor stays pinned

The Core Idea: Anchor

Every other terminal file manager treats your view as a sliding window over the filesystem — go three folders deep, and your project root has scrolled off the left edge. You lose context. You forget where you started.

Jermi's one big insight: pin the starting directory.

The directory you launched in becomes the anchor — a fixed left boundary that never moves. Pressing h at the anchor is a no‑op (you can't go above your project root). Every navigation rebuilds the visible chain as [anchor → … → current], so the root is always on screen, and so is the path that got you here.

This single decision is what makes Jermi feel like VSCode's file explorer instead of like ranger:

Sliding window (ranger / lf / Yazi) Anchored (Jermi)
Three columns, always the same Columns grow as you go deeper
Root scrolls off when you dive deep Root stays pinned on the left, forever
"Where am I?" requires the title bar The breadcrumb is the layout
Project boundary is implicit Project boundary is a first‑class object

Two features fall out of this directly:

Dynamic panes — instead of a fixed 2 or 3‑pane slot count, the view grows with depth.

Where you are Panes shown
At anchor 2 panes (current + preview)
1 level deep 3 panes (anchor + current + preview)
2 levels deep 4 panes (anchor + parent + current + …)
N levels deep N + 2 panes

Anchor isn't immutable — Shift+Left expands the anchor up to its parent, Shift+Right shrinks it down to wherever you are now. Treat your "project root" as a dial you can turn at runtime, not a CLI flag you set on launch.


Installation

There are two ways to install. Pick one.

If you don't know which to pick: choose Method 1. It's faster and doesn't require Rust.

Method 1 — Prebuilt Binary (Recommended)

Step 1 · Download

Go to Releases → nightly and download the file matching your system:

Your system File to download
macOS — Apple Silicon (M1/M2/M3/M4) yazi-aarch64-apple-darwin.zip
macOS — Intel yazi-x86_64-apple-darwin.zip
Linux — x86_64 yazi-x86_64-unknown-linux-gnu.zip
Linux — ARM64 yazi-aarch64-unknown-linux-gnu.zip
Linux — musl (Alpine, etc.) yazi-x86_64-unknown-linux-musl.zip
Windows — x86_64 yazi-x86_64-pc-windows-msvc.zip

Step 2 · Install

Open a terminal in the folder where you downloaded the zip, then copy‑paste the block for your platform:

macOS — Apple Silicon (click to expand)
unzip yazi-aarch64-apple-darwin.zip
mkdir -p ~/.local/bin
cp yazi-aarch64-apple-darwin/yazi ~/.local/bin/jermi
chmod +x ~/.local/bin/jermi

# Required on Apple Silicon — clears the quarantine xattr and ad-hoc signs
# the binary so macOS (AMFI) doesn't kill it on launch.
xattr -c ~/.local/bin/jermi
codesign --force --sign - ~/.local/bin/jermi
macOS — Intel
unzip yazi-x86_64-apple-darwin.zip
mkdir -p ~/.local/bin
cp yazi-x86_64-apple-darwin/yazi ~/.local/bin/jermi
chmod +x ~/.local/bin/jermi
xattr -c ~/.local/bin/jermi
codesign --force --sign - ~/.local/bin/jermi
Linux (x86_64 / ARM64 / musl)

Replace <file> with the zip you downloaded.

unzip <file>.zip
mkdir -p ~/.local/bin
cp <file>/yazi ~/.local/bin/jermi
chmod +x ~/.local/bin/jermi
Windows
Expand-Archive yazi-x86_64-pc-windows-msvc.zip -DestinationPath .
Copy-Item yazi-x86_64-pc-windows-msvc\yazi.exe $HOME\bin\jermi.exe

Make sure $HOME\bin is in your PATH.

Step 3 · Add to PATH and run

# zsh (default on macOS)
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

# bash
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

Then launch:

jermi

If you see file panes — you're done.


Method 2 — Build from Source

Requires the Rust toolchain.

git clone https://github.com/JeremyDong22/Jermi.git
cd Jermi
./install.sh

install.sh will:

  1. Build the release binary with cargo build --release
  2. Copy it to ~/.local/bin/jermi
  3. On macOS, automatically run the xattr + codesign step

Then add ~/.local/bin to your PATH (see Step 3 above) and run jermi.


Troubleshooting

zsh: killed jermi on Apple Silicon

macOS killed the binary because of a quarantine attribute. Re‑run:

xattr -c ~/.local/bin/jermi
codesign --force --sign - ~/.local/bin/jermi
jermi: command not found

~/.local/bin isn't in your PATH. Run Step 3 above, then open a new terminal window.

Build fails with "empty directory" errors

If your repo lives in ~/Desktop or ~/Documents (iCloud‑synced), iCloud may create empty yazi-* 2/ shadow directories that break the build:

rm -rf *" 2"*

Long term: move the repo out of iCloud‑synced paths.


Quick Start

cd ~/your-project
jermi

That directory becomes the anchor. Navigate with j/k/h/l (or arrow keys). The root pane stays pinned no matter how deep you go.


Keybindings

Key Action
h / Left Go to parent directory
l / Right / Enter Enter directory / open file
j / Down Move cursor down
k / Up Move cursor up
Shift+Left Expand anchor (move to parent)
Shift+Right Shrink anchor (move to current)
q Quit

All other Yazi keybindings still work — see the Yazi docs.


How It Works

  1. Anchor — the startup directory is saved as the "anchor" and defines the leftmost visible boundary.
  2. Leave blocked at anchor — pressing h/Left at the anchor does nothing. You can't go above your project root.
  3. pane_urls is auto‑derived — every cd rebuilds the chain [anchor, …, target] automatically; nothing is pushed/popped manually.
  4. Shift+Arrow adjusts the anchor — move the boundary up or down without restarting.

Built on Yazi

Jermi inherits everything that makes Yazi great:

  • Async I/O — instant directory loads
  • Built‑in image preview (Kitty, iTerm2, Sixel, …)
  • Lua plugin system
  • Syntax highlighting
  • And much more

License

MIT — same as Yazi.

Credits

  • Yazi — the incredible terminal file manager this is forked from
  • @sxyazi — creator of Yazi

About

💥 Blazing fast terminal file manager written in Rust, based on async I/O.

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Rust 91.4%
  • Lua 7.1%
  • Other 1.5%