# GNU Midnight Commander: a two-panel file manager for the terminal

> GNU Midnight Commander is a C program that presents a full-screen text-mode shell with two file panels, a built-in virtual file system for FTP, SFTP, tar and zip archives, editors, a viewer and a subshell, and it is simple enough to run over a telnet or ssh session. It suits someone who works on remote machines, and it is the wrong tool if you want a graphical file manager.

**MidnightCommander/mc** — Midnight Commander's repository

- Repository: https://github.com/MidnightCommander/mc
- Website: https://midnight-commander.org
- Stars: 1,025 · Forks: 122
- Language: C
- License: NOASSERTION
- Published: 2026-10-19 · Updated: 2026-10-19 · Language: en
- Canonical page: https://hysenlabs.com/projects/midnightcommander-mc

## Two panels and a function key bar are the whole interface

GNU Midnight Commander is described as a user shell with a text-mode full-screen interface, and it can be run on the OS console, in xterm and other terminal emulators. The premise is that you manage files while making the most of your screen and get a clear representation of the filesystem, yet it is simple enough to be run over a telnet or ssh session. That last clause is the design constraint that explains everything else. The mini-documentation section says to use the F-keys for invoking the commands in the function key bar, and that if the terminal does not support F-keys you can use the ESC digit sequence instead, Tab changes the current panel, the panels accept C-n and C-p for browsing in the Emacs style, M-Enter copies the selected file name to the input line, and M-Tab completes the current word. Every key binding assumes a terminal that may be missing features.

## The virtual file system is the feature that justifies the program

The built-in virtual file system is listed first among the features, and it is what separates Midnight Commander from a two-pane directory lister. You can manipulate remote file systems through FTP and SFTP or over secure shell, and you can browse the contents of tar, ar, rpm, zip, cpio, lha and rar archives as if they were local directories. The README then notes the consequence, that almost all operations work with the virtual file system, which enables complex tasks such as viewing files in archives on an FTP server. That is the capability that makes the tool useful in practice. A user on a remote host can enter an archive, copy a file out, and inspect its contents without a second terminal, without a mount, and without tar syntax. Background operations extend the same idea, letting you copy or move files from any virtual file system while you do other tasks, including background FTP copies.

## Editors, a viewer and external commands cover the daily work

The rest of the feature list is the set of tools that make a file manager useful rather than decorative. There is a text editor and a hex editor, with the hex editor described as part of the viewer. The built-in file viewer combined with the context dependent actions of open, view and edit is used to format man pages on the fly, colouring mail messages and more, and the built-in editor supports syntax highlighting plus external actions such as spell checking and formatting. Emacs-like key bindings are used in all widgets. The hotlist lets you keep a list of common visited locations, including remote sites and directories inside archives, and a find file command can search for file contents. Command completion is built in, with Alt-Tab completing a filename or executable and a second Alt-Tab opening a list box of all possible completions.

## The subshell means your shell is still your shell

Subshell support is listed as running your commands by a real shell interpreter, and the README says Midnight Commander interacts with bash, tcsh and zsh to provide all the facilities available in your preferred shell. That is a meaningful design decision for a file manager, because the alternative is to reimplement a shell badly. Here, the F-key bar can launch a command line that behaves exactly as the shell you already use, with the same aliases, functions and history, and the panels are still there when the command finishes. The related feature is external panelization, where you can run any arbitrary external command and Midnight Commander displays the output it generates as a file listing that can be manipulated as a regular directory. In effect, the output of a script becomes a navigable panel.

## Learn Keys is what keeps it usable on odd terminals

The Learn Keys feature is described as allowing GNU Midnight Commander to be configured at run time to support any kind of input keys for a given terminal, making its operation possible even on most weird terminals. This is the answer to the problem the F-key fallback only half-solves. Rather than a fixed set of bindings, you tell the program what sequences your terminal actually sends, so a terminal that sends something other than a conventional function key sequence can still be mapped. Paired with the fact that the whole program is designed to be run over a telnet or ssh session, it means the tool is usable in environments where a modern GUI file manager is not available at all, which is the case that separates it from a nicer ls.

## Licence, provenance and a project that started as a clone

GNU Midnight Commander was conceived as a free clone of John Socha's Norton Commander, and the README says it also takes the best from more recent software with similar interfaces. The licence is stated as the GNU General Public License version 3 or any later version, with a copy of the file included with the distribution package, and the repository carries a COPYING file as well as an AUTHORS file, a ChangeLog, a NEWS file and an INSTALL file. Note the discrepancy with the repository metadata, which classifies the licence as a custom one that GitHub cannot map, so the COPYING file is the text to rely on. The default branch is master, the last push was on 2026-10-19, and the repository publishes no GitHub releases, with downloads instead served from the mirror at ftp.osuosl.org under the midnightcommander directory.

## Building it is autotools, and the source tree is old-school in a good way

The repository root is a classic autotools project rather than a modern build system. There is configure.ac, acinclude.m4, Makefile.am, m4.include/, autogen.sh, version.sh and a build-glib2.sh helper, plus src/, lib/, po/ for translations, doc/, misc/, contrib/, maint/ and tests/ directories. A.clang-format file at the root tells you the code is formatted with clang-format, and the presence of a po/ directory with the localisation infrastructure is a sign of a project that expects to be translated, The README also notes mouse support on xterm and optionally on the Linux console. The INSTALL file in the repository is the documented place for installation instructions and the full dependency list, and the README points there rather than duplicating it.

## Reporting a crash means giving the maintainers a stack trace

The README gives unusually concrete reporting instructions, which tells you the project is still actively triaged. Bugs go on the GitHub issue tracker, and there are two mailing lists, mc and mc-devel, with the rule that mc-devel is for people prepared for a more technical discussion with the developers and mc is for everything else. A report should include the output of mc --version, the operating system and distribution, the compiler and the configure flags used to build the program if known. If the program crashed and produced a core dump, a stack trace should be attached, and the README gives the exact gdb invocation to produce one.

```
gdb mc core
(gdb) where
```

The project also has a website at midnight-commander.org, which the README says carries current information about the mailing lists and advice on how to report bugs.

## Conclusion

GNU Midnight Commander is worth installing on any machine you administer over ssh, because the same binary handles local files, remote FTP and SFTP hosts and the inside of tar, zip and cpio archives through one interface, which removes a whole category of awkward shell quoting. It is a poor fit for a desktop user who wants thumbnails, a searchable tree or drag and drop, and a poor fit for a huge mount where the panel listing is the bottleneck. Verify first that the terminal you use supports the function keys, since the README says the F-key bar is the primary way to invoke commands and that ESC followed by a digit is the fallback, and read the INSTALL file in the repository for the dependency list.

## FAQ

### What is GNU Midnight Commander?

It is a user shell with a text-mode full-screen interface for managing files, written in C, that runs on the OS console, in xterm and other terminal emulators. The README says it is simple enough to be run over a telnet or ssh session.

### What can the virtual file system browse?

Remote file systems through FTP and SFTP or over secure shell, and the contents of tar, ar, rpm, zip, cpio, lha and rar archives as if they were local files. Almost all operations work through the virtual file system, including viewing files in archives on an FTP server.

### Which key bindings does Midnight Commander use?

The README says emacs-like key bindings are used in all widgets, with Tab changing the current panel, C-n and C-p browsing the panel, M-Enter copying the selected file name to the input line, and M-Tab completing the current word. Commands are invoked from the F-key bar, with the ESC digit sequence as the fallback for terminals without function keys.

### How do I report a crash in GNU Midnight Commander?

Open an issue on the GitHub issue tracker or use the mc or mc-devel mailing lists, and include the output of mc --version, the operating system, the distribution, the compiler and the configure flags. If there is a core dump, attach a stack trace produced with gdb.

## Sources

- [Issues](https://github.com/MidnightCommander/mc/issues)
- [MidnightCommander/mc on GitHub](https://github.com/MidnightCommander/mc)
- [Project website](https://midnight-commander.org)
- [README](https://github.com/MidnightCommander/mc/blob/master/README.md)

---

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