Hey everyone!
For the last few month's, I've been using NerdTree as the file browser in my VEX setup. It got the job done, but something always felt a bit... heavy. So recently, I updated VEX and decided to strip it out, going back to Vim's built-in Netrw for a while. It was fine—familiar, minimal—but after a while, it started to feel a bit too barebones. I missed having a clear, structured tree, and more importantly, I really, really missed seeing my Git status at a glance.
A few nights ago, I found myself down a rabbit hole, reading through the source code of various file explorers: NERDTree, fern.vim, ranger.vim. The source for ranger.vim caught my eye. It was strikingly simple—a clean, single-file implementation. You can see it here:
https://github.com/francoiscabrol/ranger.vim/blob/master/plugin/ranger.vim
That was the spark. I thought, "I could build my own. Something tailored exactly to my workflow." I chatted with GPT to bounce around ideas and figure out a sensible architecture. The decision was made: I was going to build it.
Why Build Another File Explorer?
Netrw had become a bit too boring for my needs. My workflow is deeply intertwined with Git. I need to know, at a glance, what's changed, what's staged, and what state my branch is in—even outside of a Git command. I'm pretty particular about this; even my Bash prompt is heavily configured to show Git info (you can see that setup here: https://github.com/m-mdy-m/dotfiles/blob/main/bash/modules/prompt.sh).
I needed that same level of awareness inside my Vim file tree. No more switching to a terminal to run git status. I wanted the story of my repository told right there in the directory listing.
So, I built FTX - File Tree eXplorer.
What is FTX?
FTX is a fast, asynchronous file browser for Vim with first-class Git integration. It's not trying to be a monolithic project manager. It's a focused tool: a clean tree view that shows you your files and exactly what Git thinks about them.
The core philosophy is speed and clarity. Like fern.vim, it's designed from the ground up with async operations, so nothing blocks your editor. It's lightweight, has zero dependencies besides Vim 8.0+ (with +job and +timers), and aims to feel like a natural, unobtrusive part of the environment.
The project is fully open-source:
https://github.com/m-mdy-m/ftx.vim
What Makes It Different?
It's All About Git
This is the heart of FTX. Every file can show a Git status symbol right before its name:
-
+ staged.js- Staged for commit -
* modified.js- Modified, not staged -
? untracked.js- Not tracked by git -
- deleted.js- Deleted -
! conflict.js- Merge conflict
The status line shows your branch and repository status: [main] ↑2 ↓1 $ tells you you're on main, 2 commits ahead, 1 behind, and have a stash. It's the context I always wanted.
Async By Design
File operations and Git status parsing happen asynchronously. Opening a deep directory or refreshing status won't freeze Vim. It just works in the background.
Minimal & Understandable
Inspired by the simplicity of ranger.vim's code, FTX is built to be lean and maintainable. No complex plugin frameworks, no mysterious abstractions. It's a Vim plugin that does one thing well. You can see the entire philosophy in the key mappings—familiar and intuitive:
| Key | Action |
|---|---|
o, Enter | Open file / Toggle directory |
t | Open in new tab |
s / v | Open in split |
r / R | Refresh tree / Git status |
I | Toggle hidden files |
- / ~ | Go up / Go home |
q | Close |
Truly Vim-Centric
It doesn't try to reinvent navigation. It uses buffers and windows the Vim way. It feels like a part of Vim, not a separate application bolted on top.
The Quick Start
Getting started is straightforward:
" Using vim-plug
Plug 'm-mdy-m/ftx.vim'
:PlugInstall
Or, for a manual install:
git clone https://github.com/m-mdy-m/ftx.vim
cd ftx.vim
make install
Then, in Vim:
:FTX " Open the tree
:FTXToggle " Toggle it open/closed
The full documentation and an example config are in the repo:
- Docs: docs/FILE_TREE.md
- Example Config: examples/examples.config.vim
Built for a Specific Need, Shared for Everyone
FTX was born from my personal itch: the need for a fast, Git-integrated file tree that stays out of the way. It's opinionated in its focus. It won't preview images, manage remote files, or replace a full project drawer. It will show you your files and their Git state, quickly and reliably.
It stands on the shoulders of great explorers that came before—netrw, NERDTree, fern.vim, ranger.vim—and tries to carve out its own simple niche.
Let's Talk About It!
This is just the beginning. FTX works great for my daily use, but I'm sure there are edges to smooth and ideas I haven't considered.
Like with VEX, I don't want this to evolve in a vacuum. Tools are best shaped by the people who use them.
If a fast, git-aware, no-nonsense file tree sounds useful to you, I'd love for you to check it out, break it, and tell me about it.
- Star the repo: https://github.com/m-mdy-m/ftx.vim
- Read the docs: They're short, I promise.
- Open an issue or PR: Found a bug? Have a neat idea? Let me know.
What's your take on file explorers in Vim?
SOCIAL SHARE CARD GENERATOR