rovr

NSPC911MIT活跃维护

一款颜值高、开箱即用的终端文件管理器,基于 Python 和 Textual 构建,支持 Linux、macOS 和 Windows,让你在命令行里也能高效浏览和管理文件。

a stylish, batteries-included terminal file manager.

v0.10.3发布于 2026-10-01 11:00 UTC417star +1 / 7 天32fork同步于 2026-11-10 23:58 UTC

怎么上手

由 README 提炼,执行前请确认
uvx rovr
uv tool install rovr
硬件要求按 README 说明

README 未说明,仅要求 Python 3.13 可运行的环境,另提供预编译二进制

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

基于 Textual 的 Python 终端文件管理器,主打完整鼠标操作和开箱即用的预览能力

一款颜值高、开箱即用的终端文件管理器,基于 Python 和 Textual 构建,支持 Linux、macOS 和 Windows,让你在命令行里也能高效浏览和管理文件。

核心能力

  • 用 Textual 构建现代化 TUI 界面
  • 完整鼠标支持导航、选择与操作
  • 内置文件、图片预览和压缩包处理
  • 主题、边框、图标等配置几乎全部可调
  • 兼容流行外部工具的开箱集成

容易踩的坑

需要 Python 3.13 环境;项目处于 0.x 公开测试阶段,小版本升级可能带来大量破坏性变更;开发调试需另行启动 Textual console 才能看到日志

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v0.10.3
  1. 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): needs not depends
    • 288b70b feat: custom previewers (#374)
  2. 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 pid
    

    For 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 -> file1
    

    without 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 .jxl files, 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 extension

    For example

    [settings.preview_rules."application/(x-)?gzip"]
    default = "archive"
    extensions = { svgz = "resvg" }
    

    In this case, a typical gzip file will o

  3. 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 #363
    • filelist: deselect only if exiting select mode b833a1b
    • cwd: return last known cwd if cwd is nuked 8b4a36f
    • improve user facing errors 42b1c1b

    Performance

    • screens: defer import of screens 74cc95c 2a3e3c4
    • themes: 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
    

    SHA256

    BinaryHash
    rovr-linux-arm64-nuitka.zipsha256:89E1C0954F372F2A0336317D6D95BA6C58BEF3BD5B99BFCB8DD63F514CEECF10
    rovr-linux-x64-nuitka.zipsha256:C799A6AFB9F668DD7F759F77F4CD1C54546900793D947B30AE2FC71651208BB9
    rovr-macos-arm64-nuitka.zipsha256:7C40552D34368259F26BD6FADDBA293356B5864055E1668917C8DE13AB4B1C8C
    rovr-macos-x64-nuitka.zipsha256:30B758D89A8C7BE4F7CAF7FDC16CEA757C4E0F88096B1C73C0FFC34E59EDD657
    rovr-windows-arm-nuitka.zipsha256:51B68729DB936DE79B8581DFCCAF80EC73818474BEAF6C7A865936E1EF93CE67
    rovr-windows-x64-nuitka.zipsha256:8B0282EAAC63B3A3E379A68C0D3396F9FD706CBF2D736B47E4AF9799F205A49D
  4. 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, quit can take an optional boolean to denote whether to write to --cwd-file used for cd-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_chord selector if you want to theme it

    Previews

    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-cache

    https://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-expansions

    Breaking Changes

    settings.allow_tab_nav is removed; the new keybind handler lets you rebind the key to something else of your choice

    Added

  5. 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 f5b836f
    • firstlaunch: 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
    

    SHA256

    BinaryHash
    rovr-linux-arm64-nuitka.zipsha256:DB4249BAAEB5C7FA335E3A23E071FEA59C7F4D27E95741B9E5FCD3D6776DCAB6
    rovr-linux-x64-nuitka.zipsha256:555BD41A7A5132CADE3FD2FC923E7F3B91D46B34A3F456DE25262686B2E0AC3D
    rovr-macos-arm64-nuitka.zipsha256:76DCE64A2A384E0B8BC1ADBEB921075971F416B45487B7EBA18FACE5174A6E9A
    rovr-macos-x64-nuitka.zipsha256:8D650B9F79BB34B1F0BDEFA4C4117F6C778099FD16139DA4A2B8346A0FB30D33
    rovr-windows-arm-nuitka.zipsha256:34BA4AFB1EF43DB40E0D1FF313B69CEDF7F500AC78A765B936273CB2ABE7B161
    rovr-windows-x64-nuitka.zipsha256:D2F6418C598DFDFDBE76FA5853AE46C13DA45220860AD0AF7125E34AC642F88F

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    rovr - a stylish, batteries-included terminal file manager.

    image

    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-request tag. Make sure to add details and context to your suggestion.

    FAQ

    1. There isn't X theme/Why isn't Y theme available?

    2. 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.
    3. What's with the name?

      • ranger is a terminal file manager written in Python. And there is a car brand named Range Rover. Add the r, you get ranger. Hence, I wanted to use "rover", but there is already an existing file explorer named rover, so I just removed the "e" to be a bit more fancy.
    4. 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.
    5. 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.
    6. 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.
    7. 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