Library / SDK
GiorgosXou/TUIFIManager avatar
GiorgosXou/TUIFIManager

TUIFI Manager is a vim driven file manager that also works as a Uni-Curses widget

A cross-platform terminal-based termux-oriented file manager (and component), meant to be used with a Uni-Curses project or as is.

828 stars24 forksPythonGPL-3.0

At a glance

What is it?
TUIFI Manager is a Python terminal file manager built on Uni-Curses with vim motion bindings, a configurable command file and mouse support, and the author is explicit that part of its purpose is to draw attention to the Uni-Curses project it is built on.
Who is it for?
TUIFI Manager fits a keyboard-first user on a terminal or on Termux who wants vim motions and a component friendly API rather than a graphical file manager, and it does not fit anyone who needs tabs, undo, or a stable file management API, since those appear only in the desired list; before installing it, check the licence metadata, which names GPL version 3 in the license field while the classifier says MIT, and decide whether the Uni-Curses dependency fits your platforms.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 115 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

A file manager written to showcase a TUI binding library

TUIFI Manager is described as a cross-platform, terminal-based, Termux-oriented file manager and component, meant to be used with a Uni-Curses project or on its own. The second half of that sentence is the one that gets skipped, and it is the interesting part: the README states plainly that the project is mainly an attempt to get more attention to the Uni-Curses project.

That reframes what you are looking at. This is not a general purpose file manager that happens to use a library, it is a working, opinionated application built to exercise Uni-Curses, which is a NCurses and PDCurses wrapper. The dependency list in pyproject.toml confirms the shape of the thing: uni-curses 3.1.2 or newer and Send2Trash 1.8.0 or newer. Two runtime dependencies, and one of them is the reason deletion is recoverable.

The audience is a developer or power user who lives in a terminal. The topic list for the repository mentions terminal, tui, ncurses, pdcurses, unicurses, vim and vi-motion, and the keybinding table is written in vim terms, with a normal mode column and a vim_mode column side by side so that both styles of muscle memory work.

The Python packaging metadata names the distribution TUIFIManager, version 5.2.6, requires Python 3.8 or newer, and registers a console script named tuifi pointing at TUIFIManager.__main__:main. The author is George Chousos.

The UI itself is drawn with a specific font in the demo image, and the README notes that the font used in the screenshot is Cartograph CF, which is a hint about how much fidelity a terminal file manager can have at all.

Two install commands, and the Termux case where sudo makes no sense

Installation is two pip commands, and the README offers both with a shrug about which one you need:

bash
sudo pip3 install tuifimanager --upgrade
bash
pip3 install tuifimanager --upgrade

The second is the one to use on Termux, and the README says so directly, because a Termux installation has no use for sudo and a system wide install into the Python prefix would be the wrong move on a phone.

Once installed, you run tuifi in a terminal to use it as is. If you want to embed it in your own Uni-Curses project, the import is a single line:

python
from TUIFIManager import *

and the README points you at __main__.py for the details.

The repository also carries a flake.nix and flake.lock, so a Nix based setup has a path to the package, and there is a noxfile.py alongside the setup.py and setup.cfg files, which is the usual arrangement for a project that tests against several Python versions.

One packaging detail is worth checking before you install. The project metadata sets the license field to General Public License v3.0 and the README points to the LICENSE file at the repository root, but the classifier list includes License :: OSI Approved :: MIT License. The two do not agree, and the license field plus the LICENSE file are the documents that matter, so read the LICENSE file directly before you vendor this into anything.

Keybindings are two-column and both normal and vim shortcuts work

The keybinding table is the most complete part of the documentation and it is designed for two audiences at once. The header says that in vim_mode both normal and vim shortcuts work, and the table lists a Normal column and a vim_mode column for each action.

The mapping is sensible if you already know vi. Arrow keys navigate files, and in vim_mode the letters l, k, j and h do the same. KEY_ENTER opens files, and in vim_mode that is K. KEY_HOME navigates to the $HOME directory, with H in vim mode. DEL deletes the selected files, while in vim_mode that becomes CTRL+d. CTRL + C copies the selected files, and yy is the vim equivalent, CTRL + X cuts and c cuts, CTRL + V pastes and p pastes. CTRL + R renames the selected file, CTRL + N creates a new folder, CTRL + W creates a new file, CTRL + A selects all files in the current folder, CTRL + T toggles hidden files, and CTRL + P shows properties.

There is a navigation history too. CTRL + O navigates backward in the jumplist and CTRL + I forward. KEY_F5 reloads or refreshes the current directory, and KEY_F3 and KEY_F1 switch the order type, with KEY_F3 described as descending and KEY_F1 as ascending. SHIFT + TAB moves the selected file to the previous directory, KEY_BACKSPACE opens or goes to the previous directory, and ALT + DOWN opens and closes the right-click menu. ALT + O opens the whole directory in an editor, and CTRL + E exits with cd, so the shell ends up in the directory you were browsing. ESCAPE exits.

Mouse support is listed as a current feature, with a tip that ALT + CLICK works for multiple selection when SHIFT is not working, and that the properties window can copy individual properties with the letters s, i, m, a and c.

Command mode reads from cmds.conf and the configuration directory

Beyond the keybindings, the manager has a command layer. To run a command in normal mode you press the space-bar and then type it. There is also a vim_mode path to the same commands, and an environment variable called tuifi_auto_command_on_typing that runs commands as you type, with the caveat in the README that enabling it disables tuifi_auto_find_on_typing.

Commands live in a configuration file at ~/.config/tuifi/cmds.conf, where you can add your own. The default table shows the shape of an entry: a command name, a type keyword, attributes and a label. The available type keywords are open, copy, cut and find, and the attributes depend on the type.

The shipped examples make the format concrete. The command gt opens the directory ~/.config/tuifi and is labelled tuifi. The command gh opens the home directory, labelled Home. The command owv opens with the attribute _with set to vim and is labelled Opened With Vim, which is how you wire opening a file in a specific editor. The command yat copies with a pattern of .+\.txt, and yy copies with no pattern.

There is also a set of hardcoded commands that are not in the file. The m prefix plus a character marks the current directory under that character, and you can jump back to it with a backtick or with semicolon followed by that character. yp and yd copy either the file path or the directory path to the clipboard. F and f jump to the first filename occurrence of the next letter you type, forwards and backwards, and gg and G scroll to the first or last file.

One conflict is called out: o is also used for ordering in vim_mode, so you have to press space-bar first for owv or any other command that starts with a reserved letter, or change the binding.

Deletion goes through the trash, except where it does not

Send2Trash being a required dependency is the detail that tells you how the project treats destructive actions. Deleted files are normally sent to the operating system trash rather than unlinked, which is the difference between recoverable and gone.

The Termux shortcuts are where the exception appears. CTRL + DOWN enters and leaves select mode while automatically copying the selected files, CTRL + LEFT leaves select mode while cutting them, and CTRL + END leaves select mode while deleting them. And END deletes the selected files permanently, which the README marks with an exclamation point and the word Permanently. On a phone, where a trash directory is not always available, the project gives you an explicit permanent delete instead of a silent failure.

There are other environment variables worth knowing about. tuifi_synth_dnd turns on X11 drag and drop support, which the customization note says needs requests, pynput, PySide6 and python-xlib installed, and it is optional rather than part of the default dependency set. That is also where the memory figure changes: the README puts the RAM use at about 35MB, and roughly 80MB with synthetic XDND and Python included.

The mouse support covers most common mouse events, and the project lists X11 drag and drop from terminals as a current feature with the synthetic drag and drop environment variable as the switch.

The desired list tells you what this file manager is not yet

The README keeps a two column structure with Current and Desired, and the Desired column is more informative about the project's direction than the Current one.

On the wanted list: macros, a treeview through a WindowPad, undo and redo, an improved UI, multiple tabs, image and Sixel support, an effect on cut files, and multithread performance. The current feature list covers X11 drag and drop, most common mouse events, use as a component, the memory footprint, the strong C TUI backend through Uni-Curses, speed, Termux support and cross platform operation.

Read together, the two lists describe a single window file manager with vi style navigation and a component API, without tabs, without undo and without a tree view. The absence of undo matters more than the absence of macros, because combined with permanent delete on Termux, it defines the risk profile of the tool.

Documentation is also marked as work in progress, and the customization section points to a separate themes repository and a how-to for making your own theme. The repository carries a CHANGELOG.md and a.scrutinizer.yml, so the project has some tooling history, and the top level includes an etc/ directory that the exit with cd keybinding points at.

Where TUIFI is the wrong tool, and what the releases look like

This is a terminal file manager, so the wrong cases are obvious once stated plainly. If you need a graphical file manager, a file browser with thumbnails, cloud integration or a conventional desktop experience, this is not it. If your workflow depends on multiple tabs, undo after a mistake, or a tree view, those are on the Desired list rather than shipped, and waiting is the only option.

The dependency chain is the other constraint. Uni-Curses wraps NCurses and PDCurses, so the platform support follows those libraries rather than Python, and the pyproject classifiers list MacOS X, Windows and POSIX with Python 3.8 through 3.10. A Python 3.8 floor is old enough that a modern distribution may not want to carry it.

On maintenance, the repository is not archived and the last push was on 2026-06-30. The tagged releases are v.5.2.6 on 2026-02-08, v.5.2.5 on 2025-12-30 and v.5.1.5 on 2025-01-19. The version in the package metadata matches the newest tag, 5.2.6, and the build backend uses setuptools with setuptools-scm, so the version is also derived from the repository tags rather than only from the static field.

The licence is GPL-3.0 in the metadata and in the README, and the root LICENSE file is the document to read, given that the classifier line says MIT. If you plan to bundle the manager inside a larger application, resolve that discrepancy first, because the obligations differ substantially between the two.

Editorial conclusion

TUIFI Manager fits a keyboard-first user on a terminal or on Termux who wants vim motions and a component friendly API rather than a graphical file manager, and it does not fit anyone who needs tabs, undo, or a stable file management API, since those appear only in the desired list; before installing it, check the licence metadata, which names GPL version 3 in the license field while the classifier says MIT, and decide whether the Uni-Curses dependency fits your platforms.

Frequently asked questions

How do I install TUIFI Manager?

Run sudo pip3 install tuifimanager --upgrade for a system wide install, or plain pip3 install tuifimanager --upgrade, which is the one to use on Termux. The package is named TUIFIManager on PyPI and requires Python 3.8 or newer.

Can TUIFI Manager be used as a component in another project?

Yes. It is meant to be used with a Uni-Curses project or on its own, and the README shows the import as from TUIFIManager import *, pointing at __main__.py for details. The runtime dependencies are uni-curses and Send2Trash.

How do the vim keybindings work in TUIFI Manager?

In vim_mode both normal and vim shortcuts work, and the README lists them side by side, for example J and KEY_BACKSPACE open the previous directory, CTRL + C copies and yy copies, CTRL + X cuts and c cuts, and the arrow keys or h, j, k and l navigate files.

Where are TUIFI Manager commands and settings stored?

Default and custom commands live in ~/.config/tuifi/cmds.conf, where the command types are open, copy, cut and find. Settings are also driven by environment variables such as tuifi_auto_command_on_typing, tuifi_auto_find_on_typing and tuifi_synth_dnd for synthetic X11 drag and drop.

Does deleting a file in TUIFI Manager send it to the trash?

Send2Trash is a required dependency, so deletions normally go to the operating system trash. The exception is the Termux shortcut set, where CTRL + END deletes the selected files and END deletes them permanently.

Official sources

  1. GiorgosXou/TUIFIManager on GitHub
  2. Issues
  3. License: GPL-3.0
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/giorgosxou-tuifimanager.svg)](https://hysenlabs.com/projects/giorgosxou-tuifimanager)

Was this useful?