Best Terminal File Managers

Compare terminal file managers: yazi, nnn, ranger, lf, broot and more. Differences in previews, plugins, footprint and keybindings.

Updated

short verdict

Pick yazi if you want previews, bulk operations and Lua plugins out of the box. Pick nnn for the smallest footprint, lf for a single binary you script with shell, and ranger if you want the three-column layout with vi keys. Choose broot when you think in trees and fuzzy search, and superfile if you prefer a dual-pane layout.

A terminal file manager lets you browse directories, preview files and run copy, move, rename and delete operations from the keyboard. The tools here differ in layout (three columns, dual pane or tree), in how much ships built in versus what you script yourself, and in footprint, from a roughly 100KB C binary to a Rust application with async I/O and a package manager.

this page is for

  • Developers who live in the terminal and want keyboard-only file browsing
  • Users replacing a GUI file explorer on remote or minimal machines
  • Vim users who want hjkl navigation in a file manager
  • Scripters who want to wire file selection into shell workflows
#1

yazi

★ 43.1kRust
details

The best default if you want previews, bulk operations and plugins without assembling them yourself.

best for

  • Users who want image, PDF and archive previews
  • Users who want Lua plugins and a built-in package manager

strengths

  • Async I/O with CPU work spread across threads, so large operations do not block the UI
  • Previews for images, video, PDFs, archives and directories, plus code syntax highlighting
  • Lua plugin system for UI, previewers and Git integration, with a package manager for themes and plugins
  • Bulk rename, archive extraction, visual mode, tabs and cross-directory operations

weaknesses

  • Image preview depends on terminal protocol support, with external helpers needed for some terminals
  • Larger feature surface and Rust build than minimal tools like nnn
#2

nnn

★ 22.1kC
details

The lightest option: a C binary of about 100KB using under 3.5MB of memory, with plugins for previews and disk mounting.

best for

  • Low-resource machines, BSD and Termux users
  • Users who want disk usage analysis inside the file manager

strengths

  • Disk usage analysis, batch rename, fuzzy search, regex filtering and natural sort
  • Plugins for live previews, mounting disks, file diff and cloud uploads
  • Contexts act as tabs, with sessions and bookmarks
  • Runs on Linux, macOS, BSD and Termux, and can sync the shell directory on quit

weaknesses

  • Previews and many extras come from plugins you configure, not from the default install
  • Minimal interface has a steeper learning curve than column-based tools
#3

ranger

★ 17.4kPython
details

The established three-column manager with vi keys and a rifle launcher that picks programs by file type.

best for

  • Vim users who like the parent/current/preview column layout
  • Users who want extensive config files and rifle-based openers

strengths

  • Three-column layout navigated with h/j/k/l, with tabs, bookmarks and mouse support
  • Batch rename and file operations including create, copy, delete and chmod
  • Previews for code, archives, PDFs and HTML through optional dependencies
  • Can change the shell's working directory after exit

weaknesses

  • Written in Python and installed via pip or pipx, so it needs a Python environment
  • Good previews depend on extra packages; image previews may fall back to ASCII art
#4

lf

★ 9.6kGo
details

A single Go binary with no runtime dependencies, vi and readline keys, and shell commands for everything else.

best for

  • Users who want ranger-style navigation without Python
  • Users who prefer scripting operations with existing shell commands

strengths

  • Single binary with no runtime dependencies on Linux, macOS, BSDs and Windows
  • Asynchronous I/O and a server/client architecture that lets remote commands manage multiple instances
  • Custom keybindings with vi and readline defaults
  • Extends through shell commands like mkdir, touch and chmod

weaknesses

  • Deliberately has no built-in pager, editor or file operation commands, so you configure those yourself
  • No plugin system or package manager is documented; extension is through shell commands
#5

broot

★ 13.1kRust
details

A tree view with fuzzy search that stands in for ls and tree and respects .gitignore.

best for

  • Navigating large repositories by searching instead of descending
  • Users who want git status inside the directory view

strengths

  • Fuzzy search, regex with /pattern and content search with c/pattern
  • Git commands: :gf shows file statuses and :gs shows only changes
  • Sorting with --sort-by-size and --sort-by-date, plus a staging area for batch operations
  • Multiple panels for side-by-side directory work, and file preview including images in compatible terminals

weaknesses

  • Verb and command-based interaction differs from the hjkl model of ranger and lf
  • Image preview is limited to compatible terminals
#6

superfile

★ 24.0kGo
details

A dual-pane Go TUI with configurable hotkeys and a vim keybinding option, distributed as the spf binary.

best for

  • Users who want two panes for copying between directories
  • Windows, macOS and Linux users wanting a single binary

strengths

  • Dual-pane interface with copy, move, delete and rename on keyboard shortcuts
  • Custom themes and a plugin system
  • Dedicated vim keybinding configuration
  • Installs by shell script, Winget or Scoop

weaknesses

  • Windows support is noted as not fully complete
  • Checks for updates every 24 hours by default; you must disable it in the configuration
#7

xplr

★ 4.8kRust
details

A scriptable explorer where Lua configures keybindings, layouts and plugins, acting as a front end for other command-line tools.

best for

  • Users who want to build a custom file workflow in Lua
  • Developers integrating file selection with existing CLI tools

strengths

  • Lua scripting for key bindings, custom layouts and automation
  • Plugin system and integration with other command-line utilities
  • Gives real-time visual feedback while orchestrating other tools

weaknesses

  • You assemble much of the experience yourself, so it needs more setup than yazi or ranger
  • Documentation lists no built-in preview features comparable to yazi or ranger
#8

fm

★ 637
details

A small Go TUI with file icons, syntax highlighting, markdown rendering and themes, suited to casual browsing.

best for

  • Users who want themed output with nerd font icons
  • Users who want to pass a selected path to another tool

strengths

  • Syntax highlighting with Chroma styles, markdown rendering, and default, gruvbox and nord themes
  • Renders PNG and JPG images as ASCII strings, and PDFs
  • Opens files in $EDITOR, copies paths to the clipboard and writes selected paths to a file
  • Mouse support and adapts to terminal resizing

weaknesses

  • File icons require a nerd font
  • Smaller project with no plugin system documented, and no license or language metadata listed
#9

bt

★ 167
details

A tree-based file manager that keeps your place in deeply nested directories, using vim-style keys.

best for

  • Users who find column layouts disorienting in deep directory trees

strengths

  • Renders the file system as an indented vertical tree instead of columns
  • Side-panel async preview, with basic image support
  • Mark files with tab and shift+tab for batch copy, move and delete
  • YAML configuration and $EDITOR integration

weaknesses

  • Runs on Linux and macOS only, with Windows support planned
  • Smaller feature set than yazi, nnn or ranger, with no plugin system documented

How to choose

Match the tool to the constraint that matters most on your machines.

  • Previews out of the box: yazi handles images, video, PDFs and archives without extra configuration.
  • Smallest footprint: nnn, a C binary of about 100KB using under 3.5MB of memory.
  • No runtime dependencies: lf ships as a single Go binary on Linux, macOS, BSDs and Windows.
  • Tree view with search: broot gives fuzzy, regex and content search with git status commands.
  • Scripting depth: xplr configures keybindings and layouts in Lua, while yazi offers Lua plugins.

When not to use these

  • You only need to list files once in a script; use the plain ls command or a shell glob instead.
  • You work mostly in a graphical desktop and need drag-and-drop or rich thumbnails; a GUI file manager fits better.
  • You need to transfer files over a network with sync or resume; none of these is documented as a transfer tool.

FAQ

Which terminal file manager is fastest?
yazi does all I/O asynchronously and spreads CPU work across threads, and lf also uses asynchronous I/O. nnn has the smallest footprint, using under 3.5MB of memory. The projects do not publish directly comparable benchmarks.
Which file manager works like ranger but without Python?
lf is inspired by ranger, uses vi-style keys, and is a single Go binary with no runtime dependencies. It leaves pagers, editors and file operations to your shell commands.
Which file managers run on Windows?
lf lists Windows support, and superfile does too, though its Windows support is noted as incomplete. nnn targets Unix-like systems including Linux, macOS, BSD and Termux.
Can these change my shell's directory when I quit?
ranger can change the shell's working directory after exit, and nnn supports shell configuration for directory synchronization on quit. Check each project's documentation for setup.