tlipinski/rura

Terminal UI for building shell pipelines

Rust

336

238 commits

updated Aug 30, 2026

See the code

README

Rura is a terminal UI for building shell pipelines. Edit a pipe like grep | sort | uniq, see output update live, inspect any stage, and diff between runs — replacing the usual edit, up-arrow, rerun loop.

Made with VHS

Features

  • Partial Pipeline Execution: Execute only up to the current subcommand to debug complex pipes.
  • Live Execution Modes: Real-time feedback as you type, with optional "Live Until Cursor" or "Live Full" modes.
  • Diff Mode: Line-based diff between two outputs, with a selectable base (stdin or any subcommand's output).
  • Presets: Save frequently used commands as named presets with optional single-key shortcuts.
  • Context-aware Completion: Tab-complete commands and file paths using your system's bash, zsh, or fish tools.
  • Command Caching: Automatically caches output of subcommands to speed up iteration.
  • Customizable: Fully configurable key bindings, themes, and UI placement via TOML.
  • Vim Mode: Full Vim-style keybindings for command editing (optional).
More features
  • Syntax & Error Highlighting: Visual feedback for subcommand boundaries, quotes, and pipes, plus highlighting of failed subcommands.
  • Custom Shell Support: Specify which shell to use for command execution and completions (supports sh, bash, zsh, fish on Unix and powershell on Windows).
  • Search: Search and highlight text within the output pane with regex support.
  • Command Formatting: Automatically format your command pipeline.
  • Subcommand Editing: Quick copy, cut, and paste of subcommands.
  • Progress Indicator: Visual indicator for long-running commands.
  • Persistent History: Quickly access and reuse previous commands.
  • Save to File: Save current output or command to a file.
  • Line Wrapping: Toggle whether long output lines wrap to fit the view.
  • Line Numbers: Toggle line numbers in the output pane.
  • Output Follow: Automatically scroll to the end of output as new data arrives from stdin.

Demos

Live Execution

Made with VHS

Diff Mode

Made with VHS

Command and filename completion

Made with VHS

More demos

Configurable layout

Made with VHS

History

Made with VHS

Search with regex support

Made with VHS

Line wrapping

Made with VHS

Installation

Packaging status

Check the Releases page for pre-compiled binaries for your platform.

Homebrew (macOS/Linux):

brew install rura

Arch Linux (AUR): Install via your AUR helper:

# Pre-compiled binary
yay -S rura-bin

# Build from latest git source
yay -S rura-git

Debian/Ubuntu: Download the .deb package from the Releases page and install it with:

sudo dpkg -i rura_<version>_<arch>.deb

Fedora/RHEL: Download the .rpm package from the Releases page and install it with:

sudo rpm -ivh rura_<version>_<arch>.rpm

NixOS:

nix-shell -p rura

For other Nix-based installation methods and options, see search.nixos.org.

Cargo:

# From crates.io
cargo install rura

# From source
cargo install --git https://github.com/tlipinski/rura

Usage

You can start Rura by passing a file as an argument, piping data into it, or providing an initial command.

# Open a file
rura --file data.json

# Pipe data into rura
cat logs.txt | rura

# Start with an initial command
rura --command "grep error | sort"

# Print the last executed command from history without opening the UI
rura --last

CLI Arguments

ArgumentDescription
-f, --file <FILE>Path to the input file.
-c, --command <COMMAND>Initial command to populate the input field.
-C, --config <FILE>Path to a custom TOML configuration file.
--default-configPrints default config to stdout.
-l, --lastPrint the last command from history and exit.
--no-cacheDisable caching of command output.
-s, --shell <SHELL>Specify the shell to use for execution and completions (e.g., bash, zsh, fish). Defaults to sh on Unix and powershell on Windows.
-m, --mode <MODE>Input mode for command editing (std, vim). Defaults to std.
-V, --versionPrint version information.

Key Bindings

Command Execution

KeyAction
EnterExecute the full command pipeline.
Alt + \Execute the pipeline up to the current subcommand (where your cursor is).
Alt + |Execute the pipeline up to the previous subcommand.
Alt + iReset view to show the original input data.
F9Toggle execution details view.
KeyAction
Arrows
Alt + h / j / k / l
Scroll the output (Left, Down, Up, Right).
PageUp / PageDown
Alt + Up / Down
Alt + Shift + j / k
Ctrl + u / d
Scroll the output up/down by page.
Alt + Shift + h / lScroll the output left/right by page.
Alt + wToggle line wrapping.
Alt + nToggle line numbers.
KeyAction
F3 / F4
Ctrl + f / b
Search forward or backward in the output.
Alt + xToggle regex mode.
Alt + cToggle case sensitivity.
Ctrl + pPrevious search query in history.
Ctrl + nNext search query in history.

Live Execution Modes

KeyAction
F11Toggle "Live Until Cursor" mode. Executes the pipeline up to the cursor as you type (requires confirmation). When already in "Live Full", switches to "Live Until Cursor".
F12Toggle "Live Full" mode. Executes the entire pipeline as you type (requires confirmation). When already in "Live Until Cursor", switches to "Live Full".

Diff

KeyAction
Alt + dToggle diff mode. Shows a line-based diff between the diff base and the current output.
Alt + /Set the current subcommand's output as the diff base.
Alt + ?Reset the diff base back to the original stdin.

Command Input & Subcommands

KeyAction
TabTrigger forward command or file completion (requires bash, zsh, or fish available).
Shift + TabTrigger backward command or file completion.
Alt + RightMove cursor to the next subcommand.
Alt + LeftMove cursor to the previous subcommand.
Alt + oFormat the command pipeline.
Alt + cCopy the current subcommand.
Alt + xCut the current subcommand.
Alt + vPaste the copied/cut subcommand after the current one.
Home / End
Ctrl + a / e
Move cursor to the beginning or end of the command line.
Ctrl + pPrevious command in history.
Ctrl + nNext command in history.

Note: If you enable Vim Mode, standard Vim keybindings are supported for command editing. It starts in Insert mode by default. Press Esc to enter Normal mode.

Presets

KeyAction
Alt + pOpen/close the presets panel.

In the presets panel (select mode):

KeyAction
Up / DownNavigate the preset list.
EnterInsert the selected preset after the current subcommand and close the panel.
Alt + EnterInsert the selected preset before the current subcommand and close the panel.
<shortcut>Insert the preset with that shortcut after the current subcommand and close the panel.
Shift + <shortcut>Insert the preset with that shortcut before the current subcommand and close the panel.
Ctrl + nAdd a new empty preset.
Ctrl + tAdd a new preset pre-filled with the current command.
Ctrl + eEdit the selected preset.
Ctrl + kDuplicate the selected preset.
Ctrl + dDelete the selected preset (asks for confirmation).
Ctrl + UpMove the selected preset up.
Ctrl + DownMove the selected preset down.
EscClose the presets panel.

When editing a preset:

KeyAction
TabSwitch focus between the command and shortcut fields.
EnterSave the preset.
EscCancel editing.

Saving to File

KeyAction
Ctrl + sSave the current output to a file.
Ctrl + Alt + sSave the current command to a file.

In the save popup, type a destination path (Tab completes paths) and press Enter to write. Existing files are not overwritten.

Stdin

KeyAction
F5Toggle continuous stdin reading.
F6Toggle output follow (automatically scroll to the end).

General

KeyAction
F1Toggle help screen.
Ctrl + cExit Rura. The last executed command is printed to your terminal.
Ctrl + qExit Rura and copy the last executed command to the clipboard.

Note for Linux users: Due to how the X11/Wayland clipboard works, the clipboard content might be lost when Rura exits if you don't have a clipboard manager running. If you experience this, we recommend using a clipboard manager.

Configuration

Rura can be configured via a TOML file. The shell used by Rura is determined by (in order of priority):

  1. The --shell (or -s) CLI argument.
  2. The shell property in the configuration file.
  3. The SHELL environment variable.
  4. Default to sh.

The configuration path is determined as follows:

  1. Path specified by the --config (or -C) CLI argument.
  2. Path specified by the RURA_CONFIG environment variable.
  3. Default path:
    • Linux: ~/.config/rura/config.toml
    • macOS: ~/Library/Application Support/rura/config.toml
    • Windows: %APPDATA%\rura\config.toml

General Options

OptionDescription
shellThe shell to use for execution and completions (e.g., "bash", "zsh", "fish", "nu").
command_line_placementSet to "top" or "bottom" (default) to change where the input field is rendered.
highlight_duration_msDuration in milliseconds for the temporary highlighting when executing commands (default: 250).
debounce_duration_msDuration in milliseconds to wait before executing commands in live mode (default: 500).
no_cacheDisable caching of command output when set to true (default: false).
log_levelSet the logging level (e.g., "info", "debug", "error"). Default is "info".
editing_modeThe input mode for command editing ("std", "vim"). Default: "std".
stdin_reading_interval_msDuration in milliseconds between stdin updates (default: 1000).

Customizing Key Bindings

You can override any default key binding in the [keybindings] section. Multiple keys can be assigned to the same action.

[keybindings]
quit = ["ctrl+q", "ctrl+c"]
execute_full = ["enter"]
complete = ["tab"]
complete_prev = ["shift+tab"]
subcommand_next = ["alt+right"]

Customizing Theme

Colors and styles can be adjusted in the [theme] section. Supported colors include red, green, yellow, blue, magenta, cyan, gray, black, white, and hex codes (e.g., "#ffffff").

Available theme keys:

KeyDescription
cmd_regularDefault command style.
cmd_regular_pipeStyle for the pipe character in regular mode.
cmd_regular_currentStyle for the currently selected subcommand.
cmd_highlightStyle for the subcommand being executed.
cmd_highlight_pipeStyle for the pipe character during execution.
cmd_highlight_currentStyle for the current subcommand during execution.
cmd_quotedStyle for quoted strings.
cmd_invalidStyle for invalid subcommands (if parsing fails).
cmd_diff_baseStyle for the subcommand currently marked as the diff base.
output_highlightStyle for search results in the output.
output_highlight_currentStyle for the currently selected search result.
line_numsStyle for line numbers in the output.
popupStyle for popups (e.g., help, save, live mode confirmation).
diff_additionStyle for lines added in diff mode.
diff_deletionStyle for lines removed in diff mode.
diff_equalStyle for unchanged lines in diff mode.
[theme.cmd_highlight]
fg = "black"
bg = "yellow"
bold = true

[theme.line_nums]
fg = "magenta"

Storage & Logs

History

Rura maintains a persistent command history. The history file is located at:

  • Linux: ~/.local/share/rura/history.txt
  • macOS: ~/Library/Application Support/rura/history.txt
  • Windows: %APPDATA%\rura\history.txt

Search History

Search queries are persisted across sessions. The search history file is located at:

  • Linux: ~/.local/share/rura/search_history.txt
  • macOS: ~/Library/Application Support/rura/search_history.txt
  • Windows: %APPDATA%\rura\search_history.txt

Presets

Presets are saved commands stored in a TOML file:

  • Linux: ~/.local/share/rura/presets.toml
  • macOS: ~/Library/Application Support/rura/presets.toml
  • Windows: %APPDATA%\rura\presets.toml

Logs

Application logs are useful for troubleshooting. They are stored at:

  • Linux: ~/.cache/rura/logs.txt
  • macOS: ~/Library/Caches/rura/logs.txt
  • Windows: %LOCALAPPDATA%\rura\logs.txt

License

Licensed under the MIT License.

cli
pipeline
shell
terminal
tui

Contributors

tlipinski

238 commits

tlipinski/rura

Terminal UI for building shell pipelines

Rust

336

238 commits

updated Aug 30, 2026

See the code

README

Rura is a terminal UI for building shell pipelines. Edit a pipe like grep | sort | uniq, see output update live, inspect any stage, and diff between runs — replacing the usual edit, up-arrow, rerun loop.

Made with VHS

Features

  • Partial Pipeline Execution: Execute only up to the current subcommand to debug complex pipes.
  • Live Execution Modes: Real-time feedback as you type, with optional "Live Until Cursor" or "Live Full" modes.
  • Diff Mode: Line-based diff between two outputs, with a selectable base (stdin or any subcommand's output).
  • Presets: Save frequently used commands as named presets with optional single-key shortcuts.
  • Context-aware Completion: Tab-complete commands and file paths using your system's bash, zsh, or fish tools.
  • Command Caching: Automatically caches output of subcommands to speed up iteration.
  • Customizable: Fully configurable key bindings, themes, and UI placement via TOML.
  • Vim Mode: Full Vim-style keybindings for command editing (optional).
More features
  • Syntax & Error Highlighting: Visual feedback for subcommand boundaries, quotes, and pipes, plus highlighting of failed subcommands.
  • Custom Shell Support: Specify which shell to use for command execution and completions (supports sh, bash, zsh, fish on Unix and powershell on Windows).
  • Search: Search and highlight text within the output pane with regex support.
  • Command Formatting: Automatically format your command pipeline.
  • Subcommand Editing: Quick copy, cut, and paste of subcommands.
  • Progress Indicator: Visual indicator for long-running commands.
  • Persistent History: Quickly access and reuse previous commands.
  • Save to File: Save current output or command to a file.
  • Line Wrapping: Toggle whether long output lines wrap to fit the view.
  • Line Numbers: Toggle line numbers in the output pane.
  • Output Follow: Automatically scroll to the end of output as new data arrives from stdin.

Demos

Live Execution

Made with VHS

Diff Mode

Made with VHS

Command and filename completion

Made with VHS

More demos

Configurable layout

Made with VHS

History

Made with VHS

Search with regex support

Made with VHS

Line wrapping

Made with VHS

Installation

Packaging status

Check the Releases page for pre-compiled binaries for your platform.

Homebrew (macOS/Linux):

brew install rura

Arch Linux (AUR): Install via your AUR helper:

# Pre-compiled binary
yay -S rura-bin

# Build from latest git source
yay -S rura-git

Debian/Ubuntu: Download the .deb package from the Releases page and install it with:

sudo dpkg -i rura_<version>_<arch>.deb

Fedora/RHEL: Download the .rpm package from the Releases page and install it with:

sudo rpm -ivh rura_<version>_<arch>.rpm

NixOS:

nix-shell -p rura

For other Nix-based installation methods and options, see search.nixos.org.

Cargo:

# From crates.io
cargo install rura

# From source
cargo install --git https://github.com/tlipinski/rura

Usage

You can start Rura by passing a file as an argument, piping data into it, or providing an initial command.

# Open a file
rura --file data.json

# Pipe data into rura
cat logs.txt | rura

# Start with an initial command
rura --command "grep error | sort"

# Print the last executed command from history without opening the UI
rura --last

CLI Arguments

ArgumentDescription
-f, --file <FILE>Path to the input file.
-c, --command <COMMAND>Initial command to populate the input field.
-C, --config <FILE>Path to a custom TOML configuration file.
--default-configPrints default config to stdout.
-l, --lastPrint the last command from history and exit.
--no-cacheDisable caching of command output.
-s, --shell <SHELL>Specify the shell to use for execution and completions (e.g., bash, zsh, fish). Defaults to sh on Unix and powershell on Windows.
-m, --mode <MODE>Input mode for command editing (std, vim). Defaults to std.
-V, --versionPrint version information.

Key Bindings

Command Execution

KeyAction
EnterExecute the full command pipeline.
Alt + \Execute the pipeline up to the current subcommand (where your cursor is).
Alt + |Execute the pipeline up to the previous subcommand.
Alt + iReset view to show the original input data.
F9Toggle execution details view.
KeyAction
Arrows
Alt + h / j / k / l
Scroll the output (Left, Down, Up, Right).
PageUp / PageDown
Alt + Up / Down
Alt + Shift + j / k
Ctrl + u / d
Scroll the output up/down by page.
Alt + Shift + h / lScroll the output left/right by page.
Alt + wToggle line wrapping.
Alt + nToggle line numbers.
KeyAction
F3 / F4
Ctrl + f / b
Search forward or backward in the output.
Alt + xToggle regex mode.
Alt + cToggle case sensitivity.
Ctrl + pPrevious search query in history.
Ctrl + nNext search query in history.

Live Execution Modes

KeyAction
F11Toggle "Live Until Cursor" mode. Executes the pipeline up to the cursor as you type (requires confirmation). When already in "Live Full", switches to "Live Until Cursor".
F12Toggle "Live Full" mode. Executes the entire pipeline as you type (requires confirmation). When already in "Live Until Cursor", switches to "Live Full".

Diff

KeyAction
Alt + dToggle diff mode. Shows a line-based diff between the diff base and the current output.
Alt + /Set the current subcommand's output as the diff base.
Alt + ?Reset the diff base back to the original stdin.

Command Input & Subcommands

KeyAction
TabTrigger forward command or file completion (requires bash, zsh, or fish available).
Shift + TabTrigger backward command or file completion.
Alt + RightMove cursor to the next subcommand.
Alt + LeftMove cursor to the previous subcommand.
Alt + oFormat the command pipeline.
Alt + cCopy the current subcommand.
Alt + xCut the current subcommand.
Alt + vPaste the copied/cut subcommand after the current one.
Home / End
Ctrl + a / e
Move cursor to the beginning or end of the command line.
Ctrl + pPrevious command in history.
Ctrl + nNext command in history.

Note: If you enable Vim Mode, standard Vim keybindings are supported for command editing. It starts in Insert mode by default. Press Esc to enter Normal mode.

Presets

KeyAction
Alt + pOpen/close the presets panel.

In the presets panel (select mode):

KeyAction
Up / DownNavigate the preset list.
EnterInsert the selected preset after the current subcommand and close the panel.
Alt + EnterInsert the selected preset before the current subcommand and close the panel.
<shortcut>Insert the preset with that shortcut after the current subcommand and close the panel.
Shift + <shortcut>Insert the preset with that shortcut before the current subcommand and close the panel.
Ctrl + nAdd a new empty preset.
Ctrl + tAdd a new preset pre-filled with the current command.
Ctrl + eEdit the selected preset.
Ctrl + kDuplicate the selected preset.
Ctrl + dDelete the selected preset (asks for confirmation).
Ctrl + UpMove the selected preset up.
Ctrl + DownMove the selected preset down.
EscClose the presets panel.

When editing a preset:

KeyAction
TabSwitch focus between the command and shortcut fields.
EnterSave the preset.
EscCancel editing.

Saving to File

KeyAction
Ctrl + sSave the current output to a file.
Ctrl + Alt + sSave the current command to a file.

In the save popup, type a destination path (Tab completes paths) and press Enter to write. Existing files are not overwritten.

Stdin

KeyAction
F5Toggle continuous stdin reading.
F6Toggle output follow (automatically scroll to the end).

General

KeyAction
F1Toggle help screen.
Ctrl + cExit Rura. The last executed command is printed to your terminal.
Ctrl + qExit Rura and copy the last executed command to the clipboard.

Note for Linux users: Due to how the X11/Wayland clipboard works, the clipboard content might be lost when Rura exits if you don't have a clipboard manager running. If you experience this, we recommend using a clipboard manager.

Configuration

Rura can be configured via a TOML file. The shell used by Rura is determined by (in order of priority):

  1. The --shell (or -s) CLI argument.
  2. The shell property in the configuration file.
  3. The SHELL environment variable.
  4. Default to sh.

The configuration path is determined as follows:

  1. Path specified by the --config (or -C) CLI argument.
  2. Path specified by the RURA_CONFIG environment variable.
  3. Default path:
    • Linux: ~/.config/rura/config.toml
    • macOS: ~/Library/Application Support/rura/config.toml
    • Windows: %APPDATA%\rura\config.toml

General Options

OptionDescription
shellThe shell to use for execution and completions (e.g., "bash", "zsh", "fish", "nu").
command_line_placementSet to "top" or "bottom" (default) to change where the input field is rendered.
highlight_duration_msDuration in milliseconds for the temporary highlighting when executing commands (default: 250).
debounce_duration_msDuration in milliseconds to wait before executing commands in live mode (default: 500).
no_cacheDisable caching of command output when set to true (default: false).
log_levelSet the logging level (e.g., "info", "debug", "error"). Default is "info".
editing_modeThe input mode for command editing ("std", "vim"). Default: "std".
stdin_reading_interval_msDuration in milliseconds between stdin updates (default: 1000).

Customizing Key Bindings

You can override any default key binding in the [keybindings] section. Multiple keys can be assigned to the same action.

[keybindings]
quit = ["ctrl+q", "ctrl+c"]
execute_full = ["enter"]
complete = ["tab"]
complete_prev = ["shift+tab"]
subcommand_next = ["alt+right"]

Customizing Theme

Colors and styles can be adjusted in the [theme] section. Supported colors include red, green, yellow, blue, magenta, cyan, gray, black, white, and hex codes (e.g., "#ffffff").

Available theme keys:

KeyDescription
cmd_regularDefault command style.
cmd_regular_pipeStyle for the pipe character in regular mode.
cmd_regular_currentStyle for the currently selected subcommand.
cmd_highlightStyle for the subcommand being executed.
cmd_highlight_pipeStyle for the pipe character during execution.
cmd_highlight_currentStyle for the current subcommand during execution.
cmd_quotedStyle for quoted strings.
cmd_invalidStyle for invalid subcommands (if parsing fails).
cmd_diff_baseStyle for the subcommand currently marked as the diff base.
output_highlightStyle for search results in the output.
output_highlight_currentStyle for the currently selected search result.
line_numsStyle for line numbers in the output.
popupStyle for popups (e.g., help, save, live mode confirmation).
diff_additionStyle for lines added in diff mode.
diff_deletionStyle for lines removed in diff mode.
diff_equalStyle for unchanged lines in diff mode.
[theme.cmd_highlight]
fg = "black"
bg = "yellow"
bold = true

[theme.line_nums]
fg = "magenta"

Storage & Logs

History

Rura maintains a persistent command history. The history file is located at:

  • Linux: ~/.local/share/rura/history.txt
  • macOS: ~/Library/Application Support/rura/history.txt
  • Windows: %APPDATA%\rura\history.txt

Search History

Search queries are persisted across sessions. The search history file is located at:

  • Linux: ~/.local/share/rura/search_history.txt
  • macOS: ~/Library/Application Support/rura/search_history.txt
  • Windows: %APPDATA%\rura\search_history.txt

Presets

Presets are saved commands stored in a TOML file:

  • Linux: ~/.local/share/rura/presets.toml
  • macOS: ~/Library/Application Support/rura/presets.toml
  • Windows: %APPDATA%\rura\presets.toml

Logs

Application logs are useful for troubleshooting. They are stored at:

  • Linux: ~/.cache/rura/logs.txt
  • macOS: ~/Library/Caches/rura/logs.txt
  • Windows: %LOCALAPPDATA%\rura\logs.txt

License

Licensed under the MIT License.

cli
pipeline
shell
terminal
tui

Contributors

tlipinski

238 commits

Languages

Rust

100.0%