Written in V — MIT Licensed
This tool was developed with the assistance of AI

The hackable
Unix shell

vlsh is a fast, modern shell built for developers who want to read, modify, and extend their shell — not just use it.

vlsh — ~
  # inline autosuggestion from history
~$ git push origin main
 
  # press → or End to accept
~$ git push origin main
  Everything up-to-date.
 
  # tab completion works after trailing /
~$ cd .config/nvim
 
~$

Everything you need, nothing you don't

vlsh ships with the fundamentals done right, then gets out of your way.

Fast & Compiled

Built with V, vlsh compiles to a lean native binary. Cold start is near-instant — no interpreter overhead on every keystroke.

|

Pipes, Redirection & Chains

Full pipeline support with | pipes, < / > / >> redirection, and && / || / ; command chaining. Glob expansion, tilde expansion, and $VAR substitution all work as expected.

💬

Smart History

Persistent command history across sessions (up to 5 000 entries). Press Ctrl+R for incremental search through every command you've run.

Tab Completion

File and directory completion out of the box, including paths after a trailing / in subdirectories. Plugins can register custom completions for commands, flags, and any domain-specific vocabulary.

Inline Autosuggestions

Fish-style ghost text appears as you type, sourced from command history. Press or End to accept the suggestion. Includes path validation for cd candidates and a filesystem fallback.

🔌

Plugin System

Install community plugins from the remote repository with plugins install <name> and keep them up to date with plugins update. Plugins can add commands, decorate the prompt, run hooks, and provide completions.

Built-in Multiplexer

Split panes horizontally or vertically with Ctrl+V prefix bindings. Mouse support and 1 000-line scrollback per pane — no tmux dependency needed.

📜

Native .vsh Scripts

Run .vsh V scripts directly without manually compiling them first. Great for automation that needs performance without the ceremony of a full build.

🎨

Theming & Aliases

Configure prompt colors via RGB values in ~/.vlshrc. Manage aliases at runtime or persist them in your config — all without restarting the shell.

POSIX compatibility

vlsh is not a POSIX-conformant shell, but it supports the commonly-used subset of POSIX features so that everyday scripts and muscle memory just work.

Supported operators

OperatorBehaviour
&&Run next command only on success
||Run next command only on failure
;Run next command unconditionally
<Redirect stdin from a file
>Redirect stdout, overwriting the file
>>Redirect stdout, appending to the file

Supported builtins

BuiltinDescription
export / unsetSet or remove environment variables
source / .Execute a script in the current shell context
cdChange directory; supports ~, $HOME, and cd -
exitExit the shell with an optional status code
$?Expands to the exit status of the last command

Get up and running

Pre-built packages for Linux, or build from source in seconds.

shell
# Download the latest .deb package from the releases page
wget https://github.com/vlshcc/vlsh/releases/latest/download/vlsh_linux_amd64.deb

# Install
sudo dpkg -i vlsh_linux_amd64.deb

# Add to valid login shells and set as default (optional)
echo "/usr/local/bin/vlsh" | sudo tee -a /etc/shells
chsh -s /usr/local/bin/vlsh
shell
# Download the standalone binary (64-bit Linux)
wget https://github.com/vlshcc/vlsh/releases/latest/download/vlsh_linux_amd64
chmod +x vlsh_linux_amd64
sudo mv vlsh_linux_amd64 /usr/local/bin/vlsh

# Add to valid login shells and set as default (optional)
echo "/usr/local/bin/vlsh" | sudo tee -a /etc/shells
chsh -s /usr/local/bin/vlsh
shell
# Requires V — https://vlang.io
git clone https://github.com/vlshcc/vlsh
cd vlsh
v .
sudo mv vlsh /usr/local/bin/vlsh

# Add to valid login shells and set as default (optional)
echo "/usr/local/bin/vlsh" | sudo tee -a /etc/shells
chsh -s /usr/local/bin/vlsh

Extend with pure V

The plugin system is the heart of vlsh's hackability. Install community plugins from the remote repository with a single command — plugins are versioned and stored under ~/.vlsh/plugins/<name>/<version>/. Plugins can:

  • 1 Register new built-in commands available everywhere in the shell
  • 2 Decorate the prompt — e.g. show the current git branch and commit
  • 3 Provide tab-completions for any command or flag
  • 4 Run pre/post hooks before and after every command
  • 5 Be installed from the community repo with plugins install
~/.vlsh/plugins/myplugin/v1.0.0/myplugin.v
// Plugins implement main() and respond to argument tokens
module main

import os

fn main() {
    arg := if os.args.len > 1 { os.args[1] } else { '' }
    match arg {
        'capabilities' { println('prompt') }
        'prompt' {
            branch := os.execute('git branch --show-current')
            if branch.exit_code == 0 {
                print(' (' + branch.output.trim_space() + ')')
            }
        }
        else {}
    }
}

Plugin management

CommandDescription
plugins listShow all locally installed plugins with their installed version
plugins remoteList plugins in the remote repository with version info and available updates
plugins search <query>Search available plugins by name or description
plugins install <name>Download and install the latest semver version of a plugin
plugins update [name]Update one plugin or all installed plugins to their latest version
plugins reloadRecompile and reload all plugins (run after install or update)
plugins enable / disable <name>Activate or deactivate a plugin without deleting it
plugins enable / disable allActivate or deactivate all plugins at once
plugins delete <name>Remove an installed plugin and its entire directory