需要 Python 3.13 环境;项目处于 0.x 公开测试阶段,小版本升级可能带来大量破坏性变更;开发调试需另行启动 Textual console 才能看到日志
rovr
NSPC911MIT活跃维护一款颜值高、开箱即用的终端文件管理器,基于 Python 和 Textual 构建,支持 Linux、macOS 和 Windows,让你在命令行里也能高效浏览和管理文件。
a stylish, batteries-included terminal file manager.
uvx rovr
uv tool install rovrREADME 未说明,仅要求 Python 3.13 可运行的环境,另提供预编译二进制
基于 Textual 的 Python 终端文件管理器,主打完整鼠标操作和开箱即用的预览能力
一款颜值高、开箱即用的终端文件管理器,基于 Python 和 Textual 构建,支持 Linux、macOS 和 Windows,让你在命令行里也能高效浏览和管理文件。
核心能力
- 用 Textual 构建现代化 TUI 界面
- 完整鼠标支持导航、选择与操作
- 内置文件、图片预览和压缩包处理
- 主题、边框、图标等配置几乎全部可调
- 兼容流行外部工具的开箱集成
容易踩的坑
- nightlyNightly Buildpre-release2026-10-28 · 2026-10-28 04:51 UTC
查看更新说明
- 8428579 fix(preview): error on unset preview
- f71d977 fix(preview): check for previewers
- ef437de Revert "ci: make pytest run every pre-commit hook"
- cbaaf9c fix(pyproject): make schema compiler a public task
- a6c9248 ci: bump multiarchive to 0.2.0
- 0caff2d ci: make pytest run every pre-commit hook
- 5daf78e fix: handle deadlocks
- ceb4661 ci(nuitka):
needsnotdepends - 288b70b feat: custom previewers (#374)
- v0.10.3最新正式版2026-10-01 · 2026-10-01 11:00 UTC
Hello everyone, surprisingly this isn't a bump in minor version, there weren't any breaking changes this time round, but 0.11.0 will take quite a bit more time
rovr is a stylish, batteries-included terminal file manager that aims to be easy to switch to.
This will be rovr's latest release for the next 2 months. No new commits will be made for the next 1.5 months as I want to focus on my studies. As such, rovr is not participating in Hacktober 2026.
Now that that is out of the way, let's get started!
Notable changes
Add configurable extra mouse keys
This feature only exists on a small number of Terminal Emulators
This is a new part of rovr's new keybind system that lets you configure what each mouse key (aside from left click, middle click and right click) does. You can do so by targeting it in the same way as a keybind
[filelist] "mouse4" = "hist_previous" "mouse5" = "hist_next"Keep in mind, this does allow chording to exist, so you could define an action like
[filelist] "mouse4".p = "toggle_pin" 5."mouse5" = "cursor(-5)"But I would advise against it, as it would just be very awkward for you.
Simple video of me showcasing it (trust me that I'm using the mouse buttons and not keys)
https://github.com/user-attachments/assets/da60872d-82f0-4506-8ef8-ef62ecfc7b5d
IPC Control
This opt-in feature lets you control rovr via an IPC bridge.
Under the hood, it is a WebSocket that listens to events and takes actions on it. For now, there is a limited set of actions that you can run, with its documentation available at https://nspc911.github.io/rovr/features/ipc
rovr now comes with two new flags
rovr --ipc <action> # sends action to rovr based on the active shell's ROVR_IPC_PID rovr --ipc-to <PID> <action> # sends action to specified pidFor now, the supported actions are
cd <path> clipboard copy/cut <path1> ... [--selection {keep,add,replace}] clipboard list clipboard paste tab list tab new <path> [--focus] tab focus <id> tab close <id> tab history [<id>] quit [--no-cd] suspend list-instances ask <message> input <message> notify <message> [--title TITLE] [--severity {information,warning,error}] [--markup] [--timeout TIMEOUT]You can see what the output of each command is in the documentation above.
https://github.com/user-attachments/assets/71ea2110-8d18-45b0-89bf-de51005fbb7a
Handle circular bulk renames nicely
I was quite surprised when I found out yazi doesn't handle this as well.
A circular bulk rename is when a 'deadlock' like this happens
file1 -> file2 file2 -> file1without renaming file1 to file2, file2 cannot be renamed to file1, its a sort of a deadlock, which is immediately caught by most programs. Not rovr now! It can smartly handle such deadlocks only when necessary to save time fixing the issues.
https://github.com/user-attachments/assets/6c171183-ab69-4d18-8e5f-4227712ebf09
Use imagemagick for unsupported images
I found out that Pillow doesn't support
.jxlfiles, and my day was ruined, so here is compensation for that.[plugins.magick] enabled = true # on certain os-es, `convert` is still a thing, use # that if `magick` is unavailable executable = "magick"https://github.com/user-attachments/assets/730951b8-e56d-4107-95f4-407beb30ac70
magick is automatically used if PIL raises any errors, so don't worry on needing to update your
[settings.preview_rules]Narrow preview types using extensions
Certain files like
.svgz(the main reason for this) is considered a gzipped file, not a svg-type file. This lets you narrow preview types using a file extensionFor example
[settings.preview_rules."application/(x-)?gzip"] default = "archive" extensions = { svgz = "resvg" }In this case, a typical
gzipfile will o - v0.10.2.post12026-09-16 · 2026-09-16 11:08 UTC
查看更新说明
Small improvement release, not any new features
Changelog
Fixed
buttons: more consistent colors #363filelist: deselect only if exiting select mode b833a1bcwd: return last known cwd if cwd is nuked 8b4a36f- improve user facing errors 42b1c1b
Performance
screens: defer import of screens 74cc95c 2a3e3c4themes: defer registering all themes except selected 775317d
Installation
uv
uv tool install rovr'native' executables
Windows systems:
Invoke-Expression (Invoke-WebRequest "https://nspc911.github.io/rovr/install.ps1")Non-Windows systems:
curl -fsSL https://nspc911.github.io/rovr/install.sh | bash- The executables are from action run 35086050558
SHA256
Binary Hash rovr-linux-arm64-nuitka.zip sha256:89E1C0954F372F2A0336317D6D95BA6C58BEF3BD5B99BFCB8DD63F514CEECF10rovr-linux-x64-nuitka.zip sha256:C799A6AFB9F668DD7F759F77F4CD1C54546900793D947B30AE2FC71651208BB9rovr-macos-arm64-nuitka.zip sha256:7C40552D34368259F26BD6FADDBA293356B5864055E1668917C8DE13AB4B1C8Crovr-macos-x64-nuitka.zip sha256:30B758D89A8C7BE4F7CAF7FDC16CEA757C4E0F88096B1C73C0FFC34E59EDD657rovr-windows-arm-nuitka.zip sha256:51B68729DB936DE79B8581DFCCAF80EC73818474BEAF6C7A865936E1EF93CE67rovr-windows-x64-nuitka.zip sha256:8B0282EAAC63B3A3E379A68C0D3396F9FD706CBF2D736B47E4AF9799F205A49D - v0.10.22026-09-10 · 2026-09-10 13:43 UTC
查看更新说明
What a lovely day it is to release v0.10.2
rovr is a stylish, batteries-included terminal file manager. There have been some improvements from the previous release (1 breaking change lie before), so let's get started!
Notable changes
New keybind system
This is the highlight of 0.10.2. Previously, configs followed the
action = [<keys>]syntax, which made it much harder to expand on it for key chords and custom actions with descriptions.For example, in the previous config
[keybinds] "quit" = ["q", "ctrl+q"]but now, with the new system, it would look like
[global] "q" = { action = "quit", desc = "Quit" } "ctrl+q" = "quit"This system also takes advantage of Textual's action syntax, so certain actions can take in extra arguments. For example,
quitcan take an optional boolean to denote whether to write to--cwd-fileused forcd-on-quit[global] "q" = { action = "quit", desc = "Quit" } "Q" = { action = "quit(False)", desc = "Quit without cding" }This new system will not be forced, but new configs generated will follow this system. Backwards compatibility will only exist for this version until v0.11.0 is released, so please migrate asap! For more info, check out https://nspc911.github.io/rovr/reference/keybindings
Key chords
Key chords are defined in a similar way
[global] q.u.i.t = "quit"in the above example, pressing q -> u -> i -> t would then quit the app. You can also set custom descriptions for each chord
[global] q.u.i.t = "quit" q.desc = "press u + i + t" q.u.desc = "press i + t" q.u.i.desc = "just press t!"you can also define them as a table
key chords are now the default method for pseudo chords like the extra copy menu and sort order popup. if you want them back, they are still available as actions
[file_list] "Y" = { action = "copy.open_popup", desc = "Open the copy menu" } "," = { action = "sort_order.open_popup", desc = "Open the sort menu" }key chords are defined under the
#key_chordselector if you want to theme itPreviews
Previews have gotten a major improvement!
Cached Previews
Previews are now cached! This means SVG previews and PDF previews load much faster after the first load. Eager loading is still not done; it is cached only when explicitly previewed.
Previews are stored in a temporary directory being wiped after a restart, or explicitly using
rovr --clear-cachehttps://github.com/user-attachments/assets/7963ec46-fee1-4da8-8ca1-7afcf4b8d813
Scrollable Text Previews
For those without bat(1), now is the best time to consider so!
Without bat, rovr displays up to 256kb (default), which can be scrolled through. With bat, you can scroll through the entire document, though it takes a bit of time to render, especially large files.
- Under the hood, rovr splits a file into 256 line chunks and hands it of to bat to render, before using a custom parser to convert it into a renderable format. The chunking will take some time, especially on, say, a 1GB text file
https://github.com/user-attachments/assets/a6b2038a-1808-4d3c-b821-56fe49197f22
Scrollbars
rovr's scrollbars are now on the border! This will free up a bit of space, though the original scrollbar's space cant be properly used up for now
Configurable app titles
As promised in the previous release, the app title is now configurable! The default is
rovr @ %ncwd, you can take a look at supported expansions at https://nspc911.github.io/rovr/features/context-menu/#command-expansionsBreaking Changes
settings.allow_tab_navis removed; the new keybind handler lets you rebind the key to something else of your choiceAdded
preview: add scrollable text previews [#344](https://github.com/NSPC911/
- v0.10.1.post12026-08-20 · 2026-08-20 13:21 UTC
查看更新说明
Very quick release, this fixes a regression with the first launch app that doesn't let you finish setup
Full Changelog
Fixed
preview: catch EOF error when reading archives f5b836ffirstlaunch: use assets, not config when reading config df111f6
Refactor
app: print tree without alternate terminal buffer ee612ff
Installation
uv
uv tool install rovr'native' executables
Windows systems:
Invoke-Expression (Invoke-WebRequest "https://nspc911.github.io/rovr/install.ps1")Non-Windows systems:
curl -fsSL https://nspc911.github.io/rovr/install.sh | bash- The executables are from action run 32371648070
SHA256
Binary Hash rovr-linux-arm64-nuitka.zip sha256:DB4249BAAEB5C7FA335E3A23E071FEA59C7F4D27E95741B9E5FCD3D6776DCAB6rovr-linux-x64-nuitka.zip sha256:555BD41A7A5132CADE3FD2FC923E7F3B91D46B34A3F456DE25262686B2E0AC3Drovr-macos-arm64-nuitka.zip sha256:76DCE64A2A384E0B8BC1ADBEB921075971F416B45487B7EBA18FACE5174A6E9Arovr-macos-x64-nuitka.zip sha256:8D650B9F79BB34B1F0BDEFA4C4117F6C778099FD16139DA4A2B8346A0FB30D33rovr-windows-arm-nuitka.zip sha256:34BA4AFB1EF43DB40E0D1FF313B69CEDF7F500AC78A765B936273CB2ABE7B161rovr-windows-x64-nuitka.zip sha256:D2F6418C598DFDFDBE76FA5853AE46C13DA45220860AD0AF7125E34AC642F88F
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
rovr - a stylish, batteries-included terminal file manager.

rovr is a terminal file manager built with Python's Textual framework. It was born out of frustration that TUI apps don't support the mouse properly, and I wanted to change that.
[!NOTE] rovr's development has been temporarily paused for the next 1.5 months (until 17 November) as I would like to focus more on my studies than on rovr.
Features
- Modern UI: Built with Textual for a beautiful and functional terminal interface.
- Highly Customizable: Tweak themes, borders, icons, and UI elements to match your exact preference. Configs for nearly everything.
- Batteries Included: Handles file preview, image preview, archive handling and more without reaching to external software (but still has integrations for popular tools out-of-box)
- Cross-Platform: Powered by Python, running smoothly anywhere Python 3.13 is supported. Binaries are also provided.
- Real Mouse Support: Full mouse support for navigation, selection, and actions, making it more intuitive to use.
Project Status
Currently in public beta similar to yazi. rovr follows the major version 0 scheme, meaning whenever the minor version (like 0.7.0 -> 0.8.0) is done, there are a lot of breaking changes.
I try to minimise them, and guide the user to what had gone wrong and more info on how to fix them, as well as attempt to fix it.
Installation
Quick Test:
## uv
uvx rovr
## pipx
pipx run rovr
# Install
## uv (my fav)
uv tool install rovr
## or pipx
pipx install rovr
## or plain old pip
pip install rovr
Other package managers
With AUR:
# binary
yay -S rovr-bin
# pip version
yay -S rovr
With scoop (windows):
scoop bucket add le-bucket https://github.com/NSPC911/le-bucket
scoop install rovr
With Conda/Pixi:
pixi global install rovr
Running from source
uv run rovr
Running in dev mode to see debug outputs and logs
uv run rovr --dev
# or with poethepoet
poe dev
the Textual console must also be active to see debug outputs
uv run textual console
# or uvx if not running from source
uvx --from textual-dev textual console
# or just capture print statements
poe log
For more info on Textual's console, refer to https://textual.textualize.io/guide/devtools/#console
Contributing
-
What can I contribute?
- Themes and features can be contributed.
- Refactors will be frowned on, and may take a longer time before merging.
-
How do I contribute?
- You need uv at minimum. prek, ruff and ty are automatically installed.
- Clone the repo, and inside it, run
uv sync. - Make your changes, ensure that your changes are properly formatted, before pushing to a custom branch on your fork.
- For more info, check the how to contribute page.
-
How do I make a feature suggestion?
- Open an issue using the
feature-requesttag. Make sure to add details and context to your suggestion.
- Open an issue using the
FAQ
-
There isn't X theme/Why isn't Y theme available?
- Textual's currently available themes are limited. However, extra themes can be added via the config file.
- You can take a look at what each color represents in https://textual.textualize.io/guide/design/#base-colors
- More info on styling can be found in https://nspc911.github.io/rovr/configuration/theming (dev version)
- Theme inheritance (that is one theme inheriting from another) will not be supported
-
Why not ratatui (rust) or bubbletea (go), why python, why??? sad, angry, weird compiled noises
- I like Python, feel free to leave if you hate it.
-
What's with the name?
-
How should I stylize rovr?
- Just "rovr", please. You can add backticks to it if you want, so
rovr, but please don't capitalise any letters.
- Just "rovr", please. You can add backticks to it if you want, so
-
Why should I use rovr?
- I don't want to sell it to you. I made it for myself. If you don't like it, sure go ahead, use yazi (rust) or superfile (go), or heck even use the cli, I'm not bothered.
-
OhMGee why are there so many borders and so many icons and so many xxx and so many yyy??? more angry noises
- Keep in mind, you can disable them. The screenshot is my setup, and the default setup. Textual CSS lets you hide things, disable borders, etc etc, so you can make it look however you want.
-
Is this vibe-coded?
- Depends on the meaning. AI was used in certain parts of the code, especially in cli functions, but aside from that, it is few and far between. However, AI was used to ensure I don't make mistakes while making changes.
License
This project is licensed under the MIT License. See the LICENSE file for details.
Stargazers
Thank you so much for starring this repo! Each star pushes me more to make even more amazing features for you!
_ ___ ___ __ _ˍ_ ___
/\`'__\/ __`\ \ /\ \`'__\
\ \ \_/\ \_\ \ V_/ /\ \_/
\ \_\\ \____/\___/\ \_\
\/_/ \/___/\/__/ \/_/ by NSPC911