M-Commander
v6.0.4 · based on GNU mc 4.8.33

M-Commander

Based on GNU Midnight Commander

The package is called mc6. It grows outside the core: panel contents come from loadable plugins, scripts talk to mc through a versioned host ABI, and the shell runs in an embedded terminal.

Debian · Ubuntu · Fedora · Arch · macOS Commands stay mc, mcedit, mcview, mcdiff
Two panels in the gruvbox256 skin with the Plugin panel list open
Two panels in the gruvbox256 skin and the Plugin panel list.

What the fork is about

Five directions

The core stays GNU Midnight Commander. Everything below is added around it, most of it as plugins that can be enabled, replaced or written by the user.

Panel plugins

A panel can show anything: Git history, containers, pods, buckets, an archive on a remote host. Plugins pass streams to each other.

Lua scripting

Lua is itself a plugin over the core ABI. Scripts extend the editor, panels, viewer and UI without touching the core.

Viewer

Tree mode for JSON, YAML, XML and HTML, images, ELF and Java classes, live logs with a filter, ANSI and terminal replay.

Editor

Editor plugins, box drawing, line filter, code folding, undo history, macro explorer, saving through sudo.

Embedded terminal

mcterm replaces the old subshell: real prompt, scrollback, selection, line filter, sixel graphics.

Installing

Packages for every release

Packages for Debian, Ubuntu, Fedora, Arch and macOS are attached to every GitHub release. The package is called mc6 and replaces the distribution's mc.

Ubuntu (PPA)

sudo add-apt-repository ppa:il-smind/mc6
sudo apt update
sudo apt install mc6 mc6-plugins

macOS (Homebrew)

brew install blue-panels/tap/mc6

A .dmg and a .pkg for Apple silicon are attached to the release as well.

Debian, Fedora, Arch

Take the file for your system from the latest release:

  • .deb for Debian 13 and Ubuntu 26.04, amd64 and arm64
  • .rpm for Fedora, x86_64 and aarch64
  • .pkg.tar.zst for Arch, x86_64

Install mc6 together with mc6-plugins.

From source

git clone https://github.com/blue-panels/mc6.git
cd mc6
./autogen.sh
./configure
make
sudo make install

See INSTALL for dependencies and Local build check to run the CI build locally.

The commands keep their names: mc, mcedit, mcview, mcdiff. What mc6 does not share with mc are its directories: ~/.config/mc6, ~/.local/share/mc6 and ~/.cache/mc6. On first start the matching mc directory is copied into each new one, and the original is left untouched.

Panel plugins

A panel that shows more than files

A plugin panel works like a regular file panel: navigation, viewing, and the standard operations through F4, F5 and F6. Plugins add their own data sources, menu entries, settings and help, and keep a navigation history of their own. One plugin can hand another an open seekable stream, and magic.ini routes a file to the plugin that understands it. That is what lets an archive on a remote host open without downloading it whole.

PluginWhat it does
arcmcArchives in a panel, on libarchive. Browse nested archives, add and delete files, create ZIP, 7z, TAR and CPIO, set compression, passwords and encryption, extract in bulk with progress, speed and remaining time. Paths are checked on extraction so an archive cannot escape the target directory. Guide
mcstructStructured binary viewer and editor. A text def-file (STL5, compatible with the DOS Struct Look) turns a firmware image, a header or a table file into a tree of named fields synced with a hex dump. Ships def-files for ELF, PE, ZIP, DBF, MBR, FAT, uImage, DTB, PNG, BMP and WAV. Guide
GitCommits, branches and changed files with the built-in diff viewer. Repositories can be saved as favourites. Selecting a changed file moves the other panel to it in the working directory.
DockerContainers, their files, images, volumes, networks, mounts, command execution and logs. Local and SSH profiles. Log fetch parameters and a formatting pipe are set right in the viewer; a formatter for .NET and Serilog logs is included.
KubernetesPods, nodes, services and workloads through kubectl. Contexts, namespaces, describe, YAML, exec, resource deletion and log viewing.
MongoDBConnections, databases, collections and documents. Filtering, projection, sorting, limits, paged reading of large collections and document editing.
S3Upload, download and delete objects, create buckets, view metadata, stream objects into the viewer. Works with MinIO, Ceph and Cloudflare R2.
SQLiteA database as a panel of tables, columns and rows. Read only.
FTP / SFTPFTP and FTPS with active and passive mode, proxies, keepalive and IP version settings. SFTP with password and key authentication, compression, progress and streaming. These replace the old ftpfs and sftpfs.
SambaSMB servers and their shares.
systemd, shell, External PanelizeUnits, shell connections, and a panel filled by a command's output.

Creating an archive from tagged files

Tag files, open the pack dialog, pick the format and compression, watch the progress. The built-in tar and cpio filesystems are gone; arcmc does that job now.

Creating a 7z archive from tagged files in the arcmc panel

Git panel with a file diff

Browse the status, open a file's diff in the built-in viewer, jump to a hunk.

The Git panel plugin showing changed files and a diff

mcstruct on a DBF file

Header fields with the hex dump and the def-file in sync, and the records as a grid. Start it with mcstruct FILE, Shift-F4 in the viewer, or F3 on a file that magic.ini hands to it.

mcstruct showing a DBF file as a tree of fields next to a hex dump

User plugins are loaded from ~/.local/lib/mc6/panel-plugins. The plugins are tried in a Docker sandbox described on the QA testing page.

Scripting

Lua as a plugin, not a core feature

Lua support is a plugin that speaks the core ABI, so the language is not built into mc. A script can read and change editor documents in transactions, provide panels and file operations, supply the viewer with generated content, build native dialogs and full screens of widgets, run processes and answer events.

Scripts are managed in the Manage Plugins dialog. Several of the viewers on this page, the image renderer among them, are Lua scripts themselves.

Lua plugins · Lua API reference · Domain model

Drawing a table with box-drawing characters in mcedit
The draw-table editor script: Shift+arrows draw lines, corners and crossings are computed on their own.

Viewer

mcview reads structure, images, logs and terminals

Tree mode

JSON, YAML, XML, HTML, and the metadata of PNG and JPEG open as a tree, in the fullscreen viewer and in Quick View. Expand and collapse nodes, set the depth, search the whole structure, and copy the path of the selected element in a jq-like form.

The mcview_structured_auto option makes supported files open in tree mode by default.

A JSON file shown as a collapsible tree in mcview

Live logs with a filter

The viewer works with commands that never finish, such as docker logs -f or journalctl -f. Data is read without blocking the interface and shown as it arrives.

The filter offers plain search, regular expressions, case sensitivity, whole words and charset selection, and applies to the current source: only matching lines are shown, with no second file or process.

For Docker and Kubernetes logs, the number of records, the time range, the previous instance and continuous refresh are set in the viewer, and the stream can be piped through an external formatter.

Filtering a log file live in mcview

Images and generated views

PNG, JPEG and other raster images are rendered by Chafa into terminal characters and redrawn on resize. Where the terminal draws sixel graphics, the real picture is shown instead.

The same mechanism gives other files a readable form: ELF binaries through readelf, Java classes decompiled by Procyon, dBase, FoxPro and Clipper tables as pageable grids. F8 switches between the generated view and the bytes.

A PNG image rendered as terminal characters in mcview

ANSI colours

Standard and bright colours, the 256-colour palette, True Color, bold, underline, italics and reverse video. Shift-F9 toggles rendering.

Terminal replay

Positioning, screen erasing and scrolling regions are handled, so script(1) recordings and saved output of fullscreen programs can be viewed. F9 switches None, SGR and Term.

Runtime file handlers

A Lua handler can intercept a file in Viewer or Quick View and show a generated representation. The rules live in magic.ini and can be changed by the user.

Editor

mcedit with plugins, folding and history

Code folding

Multi-line blocks fold by their {}, [] and () brackets, through the gutter indicator, the Command menu or Alt+Shift+F. The command uses the selection or the nearest enclosing block.

Folding and unfolding a block in mcedit

Editor plugins

A plugin can register actions, add menu entries and handle keys. Three ship with the editor: the spell checker, etags support, and a new ctags navigator with jumps to definitions, references, symbol search, completion and a jump history. User plugins load from ~/.local/lib/mc6/editor-plugins.

Line filter

The Search dialog (F7) has a Filter action that hides non-matching lines while keeping the original numbers. Alt+S lifts or restores the filter, Alt+Shift+S filters by the selection or the word under the cursor.

Undo history

Alt+Shift+U lists undo and redo groups with the line, the operation, the size and a fragment of the change. Jump to any point of the history.

Macro explorer

Alt+Shift+M lists recorded macros. Inspect the action sequence, run, delete, or open the definition in mc.macros.

Saving through sudo

When a file cannot be saved for lack of permissions, the editor offers to repeat through sudo -S tee. A failed attempt keeps the buffer and the editor open.

Long lines

Character positions inside long lines are cached, so logs, CSV and minified data scroll and redraw without delays.

Embedded terminal

mcterm in place of the subshell

The shell runs inside the file manager. A command typed on the command line goes to the shell already running there, and the command line shows that shell's own prompt, colours and cursor. Ctrl+O toggles the terminal; it starts in the directory of the active panel and follows it, tracking the prompt, the running command, the exit status and the directory through OSC 133 and OSC 7.

  • Bounded scrollback: PgUp/PgDn, Shift+arrows, Home, End and the wheel. Typing returns to the live output.
  • Selection with the mouse or Shift+arrows, copy with Ctrl+Insert.
  • Alt+Shift+S keeps only the rows with the selected text, Alt+S lifts the filter.
  • Long lines wrap and the history is laid out again when the width changes.
  • Sixel graphics in the terminal and in the viewer.

Terminal emulation is done by the viewer's own engine, without an external library.

The embedded terminal in mc6
Toggle the terminal with Ctrl+O, run commands, come back to the panels.

Panels, keys and skins

Configuration that used to need a text editor

Key Bindings

Changes the bindings and finds conflicts between them, grouped by area into tabs.

Learn Keys

Recognises modifiers, so Ctrl, Alt and Shift are captured together with the base key. Settings are stored per $TERM in ~/.config/mc6/term/.

Key Sniffer

Shows the escape sequence a terminal sends for a key, with the shortcut, the mapped action and the keycode.

Panel view modes

Users define their own display modes and choose the set and width of the columns. permission_colors colours each permission bit by what it is, the way eza does.

Quick filter

Alt+Shift+S filters the panel as you type, Ctrl+G removes the filter. Alt+C asks for a directory in the mini status, with completion above the input.

49 skins

Every shipped skin has colours for all screens, including mcterm, the tree view and mcstruct. -thin, -defbg and root variants. Skins

Skin editor

Changes the colours and the frame characters of a skin from inside mc and shows the result as it goes. The left half lists every key of the skin by the part of the screen it paints, the right half is a sample drawn with the colours as they are now.

The Color dialog has the 16 named colours, the 256-colour picker and RGB input, plus bold, italic, underline, reverse and blink. Every change goes to the screen at once. Saving writes a copy to your skins directory and makes it the running skin. Opened from Command, Plugin panel or Manage Plugins.

The skin editor: picking colours for the file under the cursor and for marked files, then saving the skin
The Key Bindings dialog with bindings grouped into tabs
The Key Bindings dialog.

Releases

Own version line, from v6.0.1

Version numbers are independent of upstream. MINOR is bumped for feature releases, PATCH for fix-only ones. Every release page lists each change with its pull request, and apt changelog mc6 says the same.

v6.0.4 2026-09-01 mc grows outside its core: Lua, mcstruct and plugin streams; mcterm for the subshell
v6.0.3 2026-08-02 Packaging and plugins (spell engine and panel Quick View)
v6.0.2 2026-07-31 Packaging and CI; panel plugins
v6.0.1 2026-07-19 First tagged release: panel plugin framework and 12 plugins, mcview filter/terminal/tree modes, mcedit undo history and column blocks, FAR-style panel view modes

All notes: Releases · CHANGELOG.md

Contributing

Building, testing, coding style

Coding style

How the code is written and formatted, and what a pull request is expected to look like.

QA testing

A Docker sandbox that builds mc from the working tree and runs it against sftp, ssh, ftp and samba servers, by hand or from a script.

Local build check

Runs the CI build locally before a push.

Demo recordings

The GIFs on this page are rendered from VHS tapes against a pinned mc revision.