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.

sh, bash,
zsh, fish on Unix and powershell on Windows).Live Execution

Diff Mode

Command and filename completion

Configurable layout

History

Search with regex support

Line wrapping

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
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
| Argument | Description |
|---|---|
-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-config | Prints default config to stdout. |
-l, --last | Print the last command from history and exit. |
--no-cache | Disable 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, --version | Print version information. |
| Key | Action |
|---|---|
Enter | Execute 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 + i | Reset view to show the original input data. |
F9 | Toggle execution details view. |
| Key | Action |
|---|---|
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 / l | Scroll the output left/right by page. |
Alt + w | Toggle line wrapping. |
Alt + n | Toggle line numbers. |
| Key | Action |
|---|---|
F3 / F4 Ctrl + f / b | Search forward or backward in the output. |
Alt + x | Toggle regex mode. |
Alt + c | Toggle case sensitivity. |
Ctrl + p | Previous search query in history. |
Ctrl + n | Next search query in history. |
| Key | Action |
|---|---|
F11 | Toggle "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". |
F12 | Toggle "Live Full" mode. Executes the entire pipeline as you type (requires confirmation). When already in "Live Until Cursor", switches to "Live Full". |
| Key | Action |
|---|---|
Alt + d | Toggle 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. |
| Key | Action |
|---|---|
Tab | Trigger forward command or file completion (requires bash, zsh, or fish available). |
Shift + Tab | Trigger backward command or file completion. |
Alt + Right | Move cursor to the next subcommand. |
Alt + Left | Move cursor to the previous subcommand. |
Alt + o | Format the command pipeline. |
Alt + c | Copy the current subcommand. |
Alt + x | Cut the current subcommand. |
Alt + v | Paste 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 + p | Previous command in history. |
Ctrl + n | Next 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
Escto enter Normal mode.
| Key | Action |
|---|---|
Alt + p | Open/close the presets panel. |
In the presets panel (select mode):
| Key | Action |
|---|---|
Up / Down | Navigate the preset list. |
Enter | Insert the selected preset after the current subcommand and close the panel. |
Alt + Enter | Insert 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 + n | Add a new empty preset. |
Ctrl + t | Add a new preset pre-filled with the current command. |
Ctrl + e | Edit the selected preset. |
Ctrl + k | Duplicate the selected preset. |
Ctrl + d | Delete the selected preset (asks for confirmation). |
Ctrl + Up | Move the selected preset up. |
Ctrl + Down | Move the selected preset down. |
Esc | Close the presets panel. |
When editing a preset:
| Key | Action |
|---|---|
Tab | Switch focus between the command and shortcut fields. |
Enter | Save the preset. |
Esc | Cancel editing. |
| Key | Action |
|---|---|
Ctrl + s | Save the current output to a file. |
Ctrl + Alt + s | Save 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.
| Key | Action |
|---|---|
F5 | Toggle continuous stdin reading. |
F6 | Toggle output follow (automatically scroll to the end). |
| Key | Action |
|---|---|
F1 | Toggle help screen. |
Ctrl + c | Exit Rura. The last executed command is printed to your terminal. |
Ctrl + q | Exit 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.
Rura can be configured via a TOML file. The shell used by Rura is determined by (in order of priority):
--shell (or -s) CLI argument.shell property in the configuration file.SHELL environment variable.sh.The configuration path is determined as follows:
--config (or -C) CLI argument.RURA_CONFIG environment variable.~/.config/rura/config.toml~/Library/Application Support/rura/config.toml%APPDATA%\rura\config.toml| Option | Description |
|---|---|
shell | The shell to use for execution and completions (e.g., "bash", "zsh", "fish", "nu"). |
command_line_placement | Set to "top" or "bottom" (default) to change where the input field is rendered. |
highlight_duration_ms | Duration in milliseconds for the temporary highlighting when executing commands (default: 250). |
debounce_duration_ms | Duration in milliseconds to wait before executing commands in live mode (default: 500). |
no_cache | Disable caching of command output when set to true (default: false). |
log_level | Set the logging level (e.g., "info", "debug", "error"). Default is "info". |
editing_mode | The input mode for command editing ("std", "vim"). Default: "std". |
stdin_reading_interval_ms | Duration in milliseconds between stdin updates (default: 1000). |
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"]
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:
| Key | Description |
|---|---|
cmd_regular | Default command style. |
cmd_regular_pipe | Style for the pipe character in regular mode. |
cmd_regular_current | Style for the currently selected subcommand. |
cmd_highlight | Style for the subcommand being executed. |
cmd_highlight_pipe | Style for the pipe character during execution. |
cmd_highlight_current | Style for the current subcommand during execution. |
cmd_quoted | Style for quoted strings. |
cmd_invalid | Style for invalid subcommands (if parsing fails). |
cmd_diff_base | Style for the subcommand currently marked as the diff base. |
output_highlight | Style for search results in the output. |
output_highlight_current | Style for the currently selected search result. |
line_nums | Style for line numbers in the output. |
popup | Style for popups (e.g., help, save, live mode confirmation). |
diff_addition | Style for lines added in diff mode. |
diff_deletion | Style for lines removed in diff mode. |
diff_equal | Style for unchanged lines in diff mode. |
[theme.cmd_highlight]
fg = "black"
bg = "yellow"
bold = true
[theme.line_nums]
fg = "magenta"
Rura maintains a persistent command history. The history file is located at:
~/.local/share/rura/history.txt~/Library/Application Support/rura/history.txt%APPDATA%\rura\history.txtSearch queries are persisted across sessions. The search history file is located at:
~/.local/share/rura/search_history.txt~/Library/Application Support/rura/search_history.txt%APPDATA%\rura\search_history.txtPresets are saved commands stored in a TOML file:
~/.local/share/rura/presets.toml~/Library/Application Support/rura/presets.toml%APPDATA%\rura\presets.tomlApplication logs are useful for troubleshooting. They are stored at:
~/.cache/rura/logs.txt~/Library/Caches/rura/logs.txt%LOCALAPPDATA%\rura\logs.txtLicensed under the MIT License.
238 commits
Rust
100.0%
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.

sh, bash,
zsh, fish on Unix and powershell on Windows).Live Execution

Diff Mode

Command and filename completion

Configurable layout

History

Search with regex support

Line wrapping

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
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
| Argument | Description |
|---|---|
-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-config | Prints default config to stdout. |
-l, --last | Print the last command from history and exit. |
--no-cache | Disable 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, --version | Print version information. |
| Key | Action |
|---|---|
Enter | Execute 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 + i | Reset view to show the original input data. |
F9 | Toggle execution details view. |
| Key | Action |
|---|---|
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 / l | Scroll the output left/right by page. |
Alt + w | Toggle line wrapping. |
Alt + n | Toggle line numbers. |
| Key | Action |
|---|---|
F3 / F4 Ctrl + f / b | Search forward or backward in the output. |
Alt + x | Toggle regex mode. |
Alt + c | Toggle case sensitivity. |
Ctrl + p | Previous search query in history. |
Ctrl + n | Next search query in history. |
| Key | Action |
|---|---|
F11 | Toggle "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". |
F12 | Toggle "Live Full" mode. Executes the entire pipeline as you type (requires confirmation). When already in "Live Until Cursor", switches to "Live Full". |
| Key | Action |
|---|---|
Alt + d | Toggle 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. |
| Key | Action |
|---|---|
Tab | Trigger forward command or file completion (requires bash, zsh, or fish available). |
Shift + Tab | Trigger backward command or file completion. |
Alt + Right | Move cursor to the next subcommand. |
Alt + Left | Move cursor to the previous subcommand. |
Alt + o | Format the command pipeline. |
Alt + c | Copy the current subcommand. |
Alt + x | Cut the current subcommand. |
Alt + v | Paste 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 + p | Previous command in history. |
Ctrl + n | Next 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
Escto enter Normal mode.
| Key | Action |
|---|---|
Alt + p | Open/close the presets panel. |
In the presets panel (select mode):
| Key | Action |
|---|---|
Up / Down | Navigate the preset list. |
Enter | Insert the selected preset after the current subcommand and close the panel. |
Alt + Enter | Insert 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 + n | Add a new empty preset. |
Ctrl + t | Add a new preset pre-filled with the current command. |
Ctrl + e | Edit the selected preset. |
Ctrl + k | Duplicate the selected preset. |
Ctrl + d | Delete the selected preset (asks for confirmation). |
Ctrl + Up | Move the selected preset up. |
Ctrl + Down | Move the selected preset down. |
Esc | Close the presets panel. |
When editing a preset:
| Key | Action |
|---|---|
Tab | Switch focus between the command and shortcut fields. |
Enter | Save the preset. |
Esc | Cancel editing. |
| Key | Action |
|---|---|
Ctrl + s | Save the current output to a file. |
Ctrl + Alt + s | Save 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.
| Key | Action |
|---|---|
F5 | Toggle continuous stdin reading. |
F6 | Toggle output follow (automatically scroll to the end). |
| Key | Action |
|---|---|
F1 | Toggle help screen. |
Ctrl + c | Exit Rura. The last executed command is printed to your terminal. |
Ctrl + q | Exit 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.
Rura can be configured via a TOML file. The shell used by Rura is determined by (in order of priority):
--shell (or -s) CLI argument.shell property in the configuration file.SHELL environment variable.sh.The configuration path is determined as follows:
--config (or -C) CLI argument.RURA_CONFIG environment variable.~/.config/rura/config.toml~/Library/Application Support/rura/config.toml%APPDATA%\rura\config.toml| Option | Description |
|---|---|
shell | The shell to use for execution and completions (e.g., "bash", "zsh", "fish", "nu"). |
command_line_placement | Set to "top" or "bottom" (default) to change where the input field is rendered. |
highlight_duration_ms | Duration in milliseconds for the temporary highlighting when executing commands (default: 250). |
debounce_duration_ms | Duration in milliseconds to wait before executing commands in live mode (default: 500). |
no_cache | Disable caching of command output when set to true (default: false). |
log_level | Set the logging level (e.g., "info", "debug", "error"). Default is "info". |
editing_mode | The input mode for command editing ("std", "vim"). Default: "std". |
stdin_reading_interval_ms | Duration in milliseconds between stdin updates (default: 1000). |
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"]
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:
| Key | Description |
|---|---|
cmd_regular | Default command style. |
cmd_regular_pipe | Style for the pipe character in regular mode. |
cmd_regular_current | Style for the currently selected subcommand. |
cmd_highlight | Style for the subcommand being executed. |
cmd_highlight_pipe | Style for the pipe character during execution. |
cmd_highlight_current | Style for the current subcommand during execution. |
cmd_quoted | Style for quoted strings. |
cmd_invalid | Style for invalid subcommands (if parsing fails). |
cmd_diff_base | Style for the subcommand currently marked as the diff base. |
output_highlight | Style for search results in the output. |
output_highlight_current | Style for the currently selected search result. |
line_nums | Style for line numbers in the output. |
popup | Style for popups (e.g., help, save, live mode confirmation). |
diff_addition | Style for lines added in diff mode. |
diff_deletion | Style for lines removed in diff mode. |
diff_equal | Style for unchanged lines in diff mode. |
[theme.cmd_highlight]
fg = "black"
bg = "yellow"
bold = true
[theme.line_nums]
fg = "magenta"
Rura maintains a persistent command history. The history file is located at:
~/.local/share/rura/history.txt~/Library/Application Support/rura/history.txt%APPDATA%\rura\history.txtSearch queries are persisted across sessions. The search history file is located at:
~/.local/share/rura/search_history.txt~/Library/Application Support/rura/search_history.txt%APPDATA%\rura\search_history.txtPresets are saved commands stored in a TOML file:
~/.local/share/rura/presets.toml~/Library/Application Support/rura/presets.toml%APPDATA%\rura\presets.tomlApplication logs are useful for troubleshooting. They are stored at:
~/.cache/rura/logs.txt~/Library/Caches/rura/logs.txt%LOCALAPPDATA%\rura\logs.txtLicensed under the MIT License.
238 commits
Rust
100.0%