发行版二进制未启用插件支持,插件功能仅在源码构建版本中可用;跨应用拖放仅支持 kitty 终端;Linux 控制台(TTY)下使用鼠标需先运行 gpm;打开文件、缩略图、USB 管理等功能依赖 xdg-open、ffmpeg、udisksctl 等可选外部命令
tfm-tui
clarkarchMIT活跃维护一款以鼠标操作为主的现代终端文件管理器,基于 Bun 和 OpenTUI 构建,让习惯图形界面的用户也能在终端里高效管理文件。
🖱️ Modern mouse-first terminal file manager
curl -fsSL https://raw.githubusercontent.com/clarkarch/tfm-tui/main/install.sh | bashREADME 未说明具体硬件要求;仅支持 Linux,任意终端均可运行,但完整体验需要终端支持图片显示
Linux 终端文件管理器,以鼠标操作为核心,在终端里实现图形化文件管理体验
一款以鼠标操作为主的现代终端文件管理器,基于 Bun 和 OpenTUI 构建,让习惯图形界面的用户也能在终端里高效管理文件。
核心能力
- 支持点击、框选、右键菜单和拖拽等鼠标操作
- 提供网格与列表两种浏览视图及侧边栏书签
- 边输入边搜索,可搜索子文件夹内容
- 支持标签页、双窗格和窗格间拖放
- 内置终端、文件预览和压缩包内浏览
容易踩的坑
- v1.2.0最新正式版2026-10-28 · 2026-10-28 12:07 UTC
tfm v1.2.0
arch build plugins first paint x86_64-linux aot off 296 ms (JIT baseline 472 ms) aarch64-linux aot off 297 ms (JIT baseline 448 ms) The ahead-of-time binaries start about 1.6× faster than the JIT build they replace — measured on this runner, median of three boots each. They cannot load plugins —
tfm pluginssays so. A build from source still has plugins. - v1.1.02026-10-19 · 2026-10-19 04:31 UTC
查看更新说明
tfm v1.1.0 🎉
New stable release, version
1.1.0.curl -fsSL https://raw.githubusercontent.com/clarkarch/tfm-tui/main/install.sh | bashNew stuff
- tfm update → checks GitHub for the newest release, shows what it found, asks before changing anything (
--tagpins,--forcereinstalls) - Update notices → off by default, one cached check a day; About row checks on demand
- Command palette → ctrl+p searches and runs any action, and every action is a remappable keybind
- Archive browsing → open a tar/tar.gz/zip/7z (even a read-only rar) as a folder you can walk and preview
- USB eject → unmounts every partition on the disk, then powers it off, with an honest safe-to-unplug message
- Hotplug → plug/unplug detected live via lsblk polling, no restart
- Default file manager → opt-in first-boot prompt + advanced row, desktop icon and DBus FileManager1 wired
- Smooth scrolling → grid keyboard jumps and the wheel glide instead of stepping a cell
- Lazy startup → opt-in, defers boot work past the first paint (
[ui] lazy-startup) - New scrim → modal backdrop fill/dim/none with a dim-strength knob, icons shaded instead of translucent
- Animation grammar → sidebar/topbar/directory-bar/files intros share one set of knobs, plus hover nudges
- Kitty DnD → self-drop answers the offer, and dragging across machines is implemented (thanks @jmote)
- System ffmpeg → video thumbnails use your own
ffmpegnow, the bundled sidecar is gone (install.sh probes for it) - Preview gutter → line numbers run to the bottom of the code viewport
Faster
- Lazy boot → skips the boot pixel wait and the default-manager probe off the hot path
- Bun subprocesses → node:child_process gone, spawns ~2× faster (node:fs stays, it won the bench)
- Painted by id → settings/menus repaint in place instead of rebuilding native nodes
- Wheel drain → glides within its budget instead of a fixed beat
Stability
- No orphans → closing the terminal (SIGHUP/SIGTERM) reaps tfm instead of leaving it running (thanks @skiv4)
- Arrow keys → no longer double-scroll the grid
- Archive URIs → no longer path-resolved in the path bar or labels
- 0.6.0 gaps → rename no-op, toolbar reseed, and a quit hang fixed
- Clean installs →
debugdeclared directly (usocket's transitive dep broke frozen installs)
- tfm update → checks GitHub for the newest release, shows what it found, asks before changing anything (
- v1.0.02026-10-09 · 2026-10-09 14:02 UTC
查看更新说明
tfm v1.0.0 🎉
First stable release, version
1.0.0.curl -fsSL https://raw.githubusercontent.com/clarkarch/tfm-tui/main/install.sh | bashPerformance
- Icons rasterize 13–23× faster → in-process resvg (~0.4ms vs ~7ms CLI spawn, ~60× vs rsvg-convert), CLI fallbacks dropped
- Thumbnails without spawns → Bun.Image in-process, ICO/TIFF/HEIC decoded in-process too
- Theme switches stay warm → raster caches carry over, no full re-render
New since beta
- Video thumbnails → bundled static ffmpeg sidecar, no system ffmpeg needed
- System theme → derives from your terminal's own colors via OSC query
- Transparent-bg force → terminal background shows through regardless of preset
- Outline icons → icon-style toggle with a full outline set
- Settings upgrade → dependent rows hide behind master toggles, needs-restart badges, keybind conflicts offer an inline swap, yazi preset, more remappable nav
- New default keys → F3 preview, ctrl+` terminal, alt+up/alt+home (all remappable)
- Run prompt → executables launch from an in-app prompt instead of xdg-open
- Open in New Pane → context-menu rows open into the other pane
- F1 help → scrollable cheat sheet with live shortcuts
- Pointer shapes → context pointer across the UI (text over inputs, grabs on drag)
- Brand + About → tfm logo, about view with links and credits
- Archives without tools → in-process tar/tar.gz/zip fallback, live progress for zip/7z
- TTY support → gpm mouse on the Linux console, 16-color theme, force-glyph mode for buggy graphics
- Installer rebuild → guided steps, source-build path (
source.sh),terminal-file-managersecond command, sidebar section titles - Sudo escalation → read/open/rename/copy/delete privileged files with one password gate
Stability
- Quit refuses while file ops are in flight, no more stranded files with no undo
- Plugin veto now covers extract + compress, not just copy/move/trash
- Archive extraction is staged + contained,
../escapes land in trash, recoverable - Bulk rename re-checks targets at apply time, never silently overwrites
- Per-mount trash no longer falls back to home trash on missing sidecars
- Undo journal trash steps are idempotent, no more FAILED on already-gone targets
- Folder totals count link-own sizes with shared inodes deduped
- Copy landings are race-protected; undo identity uses birth time (ext4 reuses inodes)
- Spawn paths hardened, missing binaries and wedged children degrade instead of hanging
- v0.1.0-beta.02026-09-15 · 2026-09-15 15:13 UTC
查看更新说明
tfm v0.1.0-beta.0 🥳
New stuff
- Dual pane → two file panes, own top bar + tabs each
- Tab → switch focused pane · F5/F6 → copy/move to other pane
- ctrl+shift+d → toggle dual pane (second pane follows your cwd)
- Network locations → sftp/smb/WebDAV/FTP via gvfs
- ctrl+shift+s → connect to server, credentials prompted in-app
- Extract Here → staged, conflict prompt, undoable
- Compress to… → picker, 13 formats (tar.gz/zip/7z/tar/xz/bz2/zst/lzma/lz4/br/lz/lzo/Z)
- Bulk rename → F2 on multi-select, one stem + numbering, live preview
- ctrl+d → duplicate next to source, even across directories
- Recursive search → opt-in, walks subtrees (fd or built-in)
- Delete progress → trash-empty/delete-forever with bar + cancel
- ctrl+alt+r → restart without breaking the terminal
- Plugins → TS files, hot reload, menus, previews, events, veto hooks, UI slots
- tfm plugins → search/add/remove/update/new from CLI or esc → Plugins
- Open ▸ flyout + Open With… → gio handler picker
- Auto-hide panes → sidebar/preview/terminal slide back on mouse-near
- File animations → fade/slide/stagger + easing/dir knobs (off by default)
- Sidebar/topbar boot intros → fade/slide/stagger per item
- Directory-bar animation → new crumbs cascade on navigate
- Hover nudges → tiles + sidebar rows lift one cell
- outline / outline-partial → border chrome styles
- Transparent icons → opaque/transparent/transparent-partial
- Leveled toasts → info/success/error, status bar is selection-only now
- Remappable keys 17 → 35 → history, props, new file/folder, path edit, preview, terminal, view, zoom, pane + server actions
- TFM_CONFIG → override config path · --debug → log file
- tfm [PATH] → file path selects it on launch
- Website → landing page yey
- Plugin docs → docs/plugins.md + samples
Faster
- Windowed grid → renders visible rows only while scrolling
- Listings cache → repaints skip the disk, stats cached for sorts
- Shared collator → big-folder sorts stop rebuilding locale data
- Visible-first thumbs → on-screen rasterizes before backlog
- LRU icon rasters → capped memory
- Counting pre-scan toast → big/slow transfers show progress early
Safer
- No self-copy → folder-into-itself refused
- Anchored temp sweeps → no more deleting real
.tfm-part*names - Failed rm keeps copy → partial cross-device cleanup fixed
- Stash-fail aborts → never overwrites without undo
- Rename-undo restores → no silent clobber
- Durable copies → tmp → fsync → atomic rename
- Serial op queue → trash/transfer/restore can't interleave
- Undo journal → opt-in, survives restarts (7-day expiry)
- spawnSafe → missing binary can't kill the TUI
First beta. Usable daily, but back up anything irreplaceable first.
curl -fsSL https://raw.githubusercontent.com/clarkarch/tfm-tui/main/install.sh | bashIve been making this project solo so if you found any issue i haven't encountered or just have feature requests, feel free to open an issue
- v0.1.0-alpha.11tfm v0.1.0-alpha.112026-08-29 · 2026-08-29 07:08 UTC
查看更新说明
New alpha test build. :partying_face:
New in this build
-
Tabs. You can now open several folders side by side. Each tab keeps its own history. Ctrl+T opens a tab, Ctrl+W closes it, and Ctrl+Tab switches between them. You can also drag a folder onto a tab, and it opens there.
-
List view. The file view can now be a list instead of a grid. Each row shows the icon, name, size, and date. You can switch between grid and list at any time. Images and videos show thumbnails in both views.
-
Video support. Video files now show a thumbnail and a preview picture. This needs ffmpeg on your system. Without it, videos show a plain icon.
-
Settings/Config Overhaul. There is a real settings screen now. Press Esc and choose Settings. You can change the theme, the view, and other options there EASILY. The keyboard shortcuts can also be remapped, in the settings screen or in the config file at
~/.config/tfm/config.toml. -
Terminal pane. You can drop files onto the embedded terminal to paste their paths. And some terminal UX fixes.
-
Word wrap. Long file names can wrap onto a second line instead of being cut off (on grid). This is off by default. You can turn it on in the settings or with
word-wrap = truein the config file.
Fixes
- Menus and dialogs can no longer get stuck on top of each other.
- Copying or moving files to another disk now shows a progress bar instead of sitting silent.
- SVG thumbnails are faster and sharper.
- Long sessions no longer slowly run out of memory.
- MASSIVE index.ts rewrite. 5200 lines -> 1100 💀
Install (
curl -fsSL https://raw.githubusercontent.com/clarkarch/tfm-tui/main/install.sh | bash) — or grab the .gz for your arch and gunzip into ~/.local/bin.Vibecoded alpha — expect rough edges. Don't test on files you can't afford to lose.
-
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。

Showcase
https://github.com/user-attachments/assets/843f0cf4-36ef-4732-a27a-7ebcb36bde03
Embedded terminal
https://github.com/user-attachments/assets/06b395db-8a91-4402-9ad7-158a5f77ccfe
Preview pane
https://github.com/user-attachments/assets/b8dc3ea8-93e1-4593-9516-a3108f613d10
Animations
https://github.com/user-attachments/assets/b47c7136-642c-4c85-8b2a-dcab1bd0b37b
Features
- Mouse: click, rubber-band select, right-click menus, drag and drop.
- Browse files in grid or list view.
- Sidebar with places, bookmarks, drives, trash, recent, starred.
- Search as you type, including inside subfolders.
- Sort by name, size, date.
- Copy, move, paste, duplicate, rename.
- Bulk rename multiple files at once.
- New file / new folder inline.
- Drag and drop between panes and from other apps.
- Trash, restore, delete forever, empty trash.
- Undo / redo file operations.
- Notifications that grow with the message — click a cut one to read the rest.
- Preview text, code, images, videos, folders.
- Open files + Open With app picker.
- Properties dialog with permissions editing.
- Tabs + dual pane.
- Connect to network servers.
- Extract and compress archives.
- Browse inside archives (tar, zip, 7z, rar) as folders.
- Eject USB drives safely; plug and unplug detected live.
- Set tfm as your default file manager.
- Embedded terminal.
- Clipboard copy/paste with other apps.
- Open privileged files with sudo prompt.
- Command palette to search and run any action.
- Customizable themes, settings GUI, keybinds.
- Plugin support with hot reload (source builds only — see Plugins).
- …and many more.
Requirements
- Linux.
- Any terminal (need image support for the full experience).
- Everything below is optional.
xdg-open(opening files)magick(extra photo thumbnails)gio(starred files and servers)udisksctl(USB drives)ffmpeg(video thumbnails)wl-clipboard/xclip(copy and paste with other apps)tar/unzip/zip/7z(zip files and archives)
Install
curl -fsSL https://raw.githubusercontent.com/clarkarch/tfm-tui/main/install.sh | bash
build from source
The main branch, built on your machine — needs git and Bun 1.4 or newer:
curl -fsSL https://raw.githubusercontent.com/clarkarch/tfm-tui/main/source.sh | bash
Or manually build from source:
git clone https://github.com/clarkarch/tfm-tui.git
cd tfm-tui
bun install --frozen-lockfile
bun run check && bun test
bun run compile && cp dist/tfm ~/.local/bin/
tfm runs a patched OpenTUI fork. It is
published to npm as @clarkarch/opentui-fork
and pulled in as a normal dependency — there is nothing extra to clone or build.
Update
esc → About or:
tfm update
Uninstall
tfm uninstall
Keys
enteropen ·f2rename ·backspace/alt+upup ·alt+homehome ·escapemenu ·f1help ·ctrl+pcommand palettectrl+c/x/v/dcopy/cut/paste/duplicate ·ctrl+z/yundo/redotabswitch focused pane ·f5/f6copy/move to the other pane (dual pane)ctrl+t/wnew/close tab ·ctrl+tabswitch tab (per pane)deletetrash ·alt+enterproperties ·ctrl+qquitctrl+aselect all ·spacetoggle ·shift+arrowsextend selectionalt+left/righthistory back/forward ·ctrl+shift+n/ctrl+alt+nnew folder/filectrl+shift+ddual pane ·ctrl+=/-zoom ·ctrl+rreload places ·ctrl+alt+rrestarttfm updateinstalls the newest release (esc→ About → Update checks on demand)ctrl+hhidden ·ctrl+lpath bar ·ctrl+ggrid/list ·f3preview ·ctrl+\``/f4terminal ·ctrl+shift+s` connect to serverarrowsmove ·pageup/pagedownpage ·home/endfirst/last
Everything is remappable: esc → Settings → keys.
Config
esc → Settings or:
TFM_CONFIG=/custom/path/config.toml tfm
See config.example.toml.
Plugins
esc → Plugins or:
tfm plugins search
tfm plugins add <url|id>
tfm plugins new my-plugin
See docs/plugins.md.
The release binaries are compiled ahead of time without
--aot-allow-code-from-disk, so tfm does not offer plugins there:tfm pluginssays so and the plugin commands are off. A build from source (below) still has plugins. The reason is a policy, not a limit of the binary — see docs/aot-evaluation.md.
Notes
- Cross-app drag & drop is kitty-only.
- Mouse on the Linux console (TTY) needs
gpmrunning. - Custom kitty themes can misbehave.