Elvish (noun):

  1. A powerful scripting language.

  2. A shell with useful interactive features built-in.

  3. A statically linked binary for Linux, BSDs, macOS or Windows.

Powerful modern shell scripting

Write readable and maintainable scripts - no cryptic operators, no double-quoting every variable.

jpg-to-png.elv (explainer)

for x [*.jpg] { gm convert $x (str:trim-suffix $x .jpg).png }

Power up your workflows with data structures and functional programming.

update-servers-in-parallel.elv (explainer)

var hosts = [[&name=a &cmd='apt update'] [&name=b &cmd='pacman -Syu']] # peach = "parallel each" peach {|h| ssh root@$h[name] $h[cmd] } $hosts

Catch errors before code executes.

Terminal: elvish (explainer)

~> var project = ~/project ~> rm -rf $projetc/bin compilation error: variable $projetc not found

Command failures abort execution by default. No more silent failures, no more && everywhere.

Terminal: elvish (explainer)

~> gm convert a.jpg a.png; rm a.jpg gm convert: Failed to convert a.jpg Exception: gm exited with 1 [tty 1]:1:1-22: gm convert a.jpg a.png; rm a.jpg # "rm a.jpg" is NOT executed

Run it anywhere

Elvish comes in a single statically linked binary for your laptop, your server, your PC, or your Raspberry Pi.

Terminal: Raspberry Pi

~> wget dl.elv.sh/linux-arm64/elvish-HEAD.tar.gz ~> tar -C /usr/local/bin -xvf elvish-HEAD.tar.gz elvish ~> elvish

Use Elvish in your CI/CD pipelines. Convenient shell syntax and modern programming language - why not both?


steps: - uses: elves/setup-elvish@v1 with: elvish-version: HEAD - name: Run something with Elvish shell: elvish {0} run: | echo Running Elvish $version

Interactive shell with batteries included

Press Ctrl-L for directory history, and let Elvish find java/com/acme/project for you.

Terminal: elvish - directory history (more)

~> elf@host LOCATION j 10 ~/java/com/acme/project/utilities 10 ~/java/com/acme/project 10 /opt/java

Press Ctrl-R for command history. That beautiful ffmpeg command you crafted two months ago is still there.

Terminal: elvish - command history (more)

~> elf@host HISTORY (dedup on) ff Ctrl-D dedup 34 ffmpeg -i input.mp4 -c:v libx264 -c:a aac outpu 35 ffmpeg -i input.mp4 -vf "transpose=1,scale=640:

Press Ctrl-N for the builtin file manager. Explore directories and files without leaving the comfort of your shell.

Terminal: elvish - file manager (more)

~/elvish> elf@host NAVIGATING Ctrl-H hidden Ctrl-F filter bash 1.0-release.m 1.0 has not been released y elvis CONTRIBUTING. zsh Dockerfile LICENSE Makefile PACKAGING.md README.md SECURITY.md

Chat with the community

Join any of the following channels – they are all bridged together thanks to Matrix!

More resources