# nnn: The Minimal Terminal File Manager for Power Users

> nnn is a terminal file manager written in C that stays under 150 KiB and typically uses less than 3.5 MB of resident memory. It runs on Linux, macOS, BSD, Haiku, Cygwin, WSL, and Android via Termux, and extends through a language-agnostic plugin system and a user-submitted patch framework.

**jarun/nnn** — n The unorthodox terminal file manager. Runs on the Pi, Termux (Android), Linux, macOS, BSD, Haiku, Cygwin, WSL, across DEs or a strictly CLI env.

- Repository: https://github.com/jarun/nnn
- Stars: 22,010 · Forks: 821
- Language: C
- License: BSD-2-Clause
- Published: 2026-08-08 · Updated: 2026-08-18 · Language: en
- Canonical page: https://hysenlabs.com/projects/jarun-nnn

## What nnn Solves and Who It Is For

nnn targets users who work primarily in the terminal and find graphical file managers too heavy or slow. The binary is described in the README as tiny, approximately 150 KiB, with resident memory usage typically below 3.5 MB. It runs without a configuration file and makes no unconfirmed user data collection, which the README flags explicitly as a privacy-aware design choice.

The intended users include developers on remote servers where a graphical environment is unavailable, users of tiling window managers who want file navigation that integrates with their terminal workflow, and anyone running on constrained hardware. The README lists the Raspberry Pi and Termux on Android as supported environments alongside Linux, macOS, BSD, Haiku, Cygwin, and WSL. The project follows Linux kernel coding style and uses all-integer arithmetic, including for file size calculations, which avoids requiring an FPU.

The Makefile includes a compile-time flag `O_NOFIFO` to disable the FIFO-based previewer, `O_PCRE2` to link with the PCRE2 library for regular expression filters, and `O_ICONS` and `O_NERD` for icon support. Features can be compiled in or out to fit the target environment.

## Navigation Model: Contexts, Bookmarks, and Type-to-Nav

nnn organizes navigation around contexts, which function as independent workspaces or tabs. Each context can show a different directory and can be assigned a custom color. Bookmarks and session management let you jump directly to named directories. The mark-and-visit feature saves a directory as a reference point to return to during navigation.

The type-to-nav mode changes the behavior of keystrokes from issuing commands to filtering the current directory listing as you type. This is distinct from the default search-as-you-type filter, which narrows visible entries without navigating. With type-to-nav enabled, typing enough characters to reduce the listing to a single match navigates into that entry automatically. This is the mode described in the README as turbo navigation.

The shell integration feature, described as cd on quit, writes the current directory path when nnn exits so the parent shell can change into it. This requires a shell function wrapper, which the quickstart script generates automatically. Syncing the subshell's working directory to nnn is a separate feature for cases where a shell is spawned from inside the file manager.

Fuzzy, regex (POSIX or PCRE2 if compiled in), and plain string filters are all available. Entries can also be jumped to by entering a visible relative offset number.

## Installing nnn and Running It for the First Time

The README recommends installing via a package manager for most users. The quickstart script generates a shell function with the configuration options you select:

```sh
sh -c "$(curl -Ls https://raw.githubusercontent.com/jarun/nnn/master/misc/quickstart.sh)"
```

This script prompts for preferences and optionally appends the function to your shell's configuration file. After setup, invoke nnn using the function name you chose.

For users who want to compile from source, the Makefile defines compile-time flags as variables: `O_PCRE2` (off by default) to link with the PCRE2 library, `O_NORL` (enabled by default) to omit readline, `O_ICONS` and `O_NERD` for icon support, and `O_EMOJI` for emoji support. The `PREFIX` variable defaults to `/usr/local`, so the binary installs to `$(PREFIX)/bin` and the man page to `$(MANPREFIX)/share/man`. Plugins are not installed by default; they live in the `plugins/` directory of the repository and must be copied separately to the path nnn reads at runtime.

## The Plugin System and What It Provides

Plugins are shell scripts or executables placed in a directory that nnn reads at startup. They are language-agnostic: a plugin can be a bash script, a Python script, or a compiled binary. The README lists the following plugin capabilities among others: live file previews, mounting and unmounting disks, finding and listing files, file and directory diffs, and uploading files. A subtree search plugin can open or edit files from a search result.

Plugins for image, video, and audio thumbnails are included in the `plugins/` directory of the repository. Archive management (create, list, extract, and FUSE-based mounting) is also available through plugins rather than being built into the binary.

nnn supports neovim and Vim integration through three independent plugins: nnn.vim, vim-floaterm nnn wrapper, and nnn.nvim for neovim. These are maintained separately from the nnn repository and allow using nnn as a file picker inside the editor.

The patch framework at `patches/` in the repository hosts user-submitted patches that are intentionally excluded from the default binary because they are subjective. Examples from the Makefile include a Colemak key binding layout (`O_COLEMAK`), a git status column in the detail view (`O_GITSTATUS`), and a preview pipe restore patch (`O_RESTOREPREVIEW`). These require recompiling with the patch applied.

## File Operations, Selection, and Batch Rename

nnn supports cross-directory selection: files can be selected from multiple directories within a single session. The selection can then be copied, moved, deleted, archived, or linked as a batch. The batch renamer handles either the current directory or the selection and runs inside the terminal.

The `-x` flag enables clipboard synchronization: file paths copied to the selection are written to the system clipboard, and nnn posts desktop notifications on completion of cp, mv, and rm operations. This requires xterm or a compatible terminal.

The README also lists the ability to create files and directories, including full directory trees (with parents), duplicate existing files or directories, and rename individual entries. Files can be opened with the desktop opener, a custom opener via the `NNN_OPENER` environment variable, or always in the terminal editor with the `-e` flag.

Remote file system mounts via sshfs or rclone are accessible from within nnn when the corresponding tools are installed. The file manager itself does not implement mounting; it invokes the external tools.

## Limitations and Cases Where nnn Is the Wrong Choice

nnn has no graphical interface. It runs only in a terminal emulator or a console. Users who need to browse files on a system without a terminal or who work in environments where only a web interface is available cannot use nnn.

The built-in previewer supports directories and text files. For image, video, and audio previews, users must install and configure a previewer plugin and an external viewer. The README describes this as FIFO-based preview with extensive mime support, but the operative word is external: nnn delegates to tools like less, feh, or mpv through the plugin mechanism. Configuring this pipeline requires some effort, particularly on systems without a compositor.

The compile-time flag system means that enabling or disabling features requires recompiling the binary. A distribution-packaged nnn may not include PCRE2, icons, or FIFO previewer support. The Makefile has sensible defaults (readline is disabled by default, PCRE2 is opt-in), but users who want a specific feature combination must build from source. The patch framework patches also require recompilation, so git status in the detail view is not available in stock binaries.

## Maintenance History and License

nnn follows a named release scheme: v5.3 (Mai Tai) was released on 2026-08-15, v5.2 (Blue Hawaii) on 2026-02-14, and v5.1 (Moscow Mule) on 2025-03-23. The last push to the repository was on 2026-09-21, indicating active maintenance. The project is not archived.

The license is BSD-2-Clause. This is a permissive license with minimal restrictions: redistribution requires preserving the copyright notice and the disclaimer of warranties, but there are no copyleft requirements and no restriction on commercial or proprietary use. The POSIX-compliant codebase and minimal library dependencies make it straightforward to port to new platforms.

## Conclusion

nnn is the right tool for developers and system administrators who spend most of their time in a terminal and want a file manager that stays out of the way, starts instantly, and runs on everything from a Raspberry Pi to a macOS laptop. It is the wrong choice for users who need a graphical interface, need a file manager that works without a terminal emulator, or expect rich built-in file previews without configuring an external plugin. Before adopting it, verify that your distribution packages a recent version (v5.3 was released on 2026-08-15) or be prepared to compile from source. The BSD-2-Clause license permits use in commercial and proprietary contexts without restriction.

## FAQ

### How do I install nnn on Linux or macOS?

The README recommends installing via a package manager, which is available on most Linux distributions and on macOS through Homebrew or similar. You can also compile from source by cloning the repository and running make, then sudo make install. The quickstart script at misc/quickstart.sh generates a shell function with your preferred settings.

### Does nnn support a plugin system, and how are plugins installed?

Yes. Plugins are language-agnostic scripts or executables that extend nnn with capabilities like live previews, disk mounting, file diffs, and thumbnail generation. The repository includes a plugins/ directory. Installation is a manual copy step; the plugins/ directory README documents the installation path.

### Can nnn run on Android or Windows Subsystem for Linux?

Yes. The README explicitly lists Termux on Android, WSL, Cygwin, and Haiku among the supported environments alongside Linux, macOS, and BSD. A static binary is available from the project releases, which requires no installation and can be used in environments where compiling from source is not practical.

## Sources

- [Official README](https://github.com/jarun/nnn#readme)
- [Project repository](https://github.com/jarun/nnn)
- [Release notes](https://github.com/jarun/nnn/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/jarun-nnn
