Elvish is a friendly and expressive shell for Linux, macOS and BSDs.

  • Enable JavaScript for the option of showing demos as slides.
~> curl https://api.github.com/repos/elves/elvish/issues |
from-json | each explode |
each [issue]{ echo $issue[number]: $issue[title] } |
head -n 11
366: Support searching file from elvish directly
364: Ctrl-C in elvish kills Atom in background
357: Asynchronous syntax highlighting
356: In web backend, run commands with pty IO, not pipe
354: Support multi-line prompts from byte output
353: Completers should detect context in a top-down manner
352: Quoted command names are highlighted randomly
351: keep navigation mode open after command
350: Raw mode requires two presses of ^V
344: Elvish won't compile
343: Possible to suppress job control messages?
Powerful Pipelines

Text pipelines are intuitive and powerful. However, if your data have inherently complex structures, passing them through the pipeline often requires a lot of ad-hoc, hard-to-maintain text processing code.

Pipelines in Elvish can carry structured data, not just text. You can stream lists, maps and even functions through the pipeline.

~> if $true {
echo true
} else {
echo false
~> for x [lorem ipsum] {
echo $x
~> # Braces rock [email protected]
Intuitive Control Structures

If you know programming, you probably already know how if looks in C. So why learn another syntax?

Control structures in Elvish have an intuitive C-like syntax.

~>                                           [email protected]
* ~
* ~/go/src/github.com/elves/elvish
110 ~/on/elvish-site/code
62 ~/on/elvish-site/code/src
52 ~/go/src/github.com/elves/elvish/edit
34 ~/on/elvish-site/code/tty
33 ~/on/elvish-site/code/assets
32 ~/go/src/github.com/elves/elvish/eval
26 ~/on/chat-app/code
24 ~/on/elvish-site/code/dst
20 ~/go/src/github.com/elves/md-highlighter
14 ~/on/chat-app/code/public
13 ~/.elvish
Directory History

Is cd /a/long/nested/directory the first thing you do every day? Struggling to remember where your logs and configurations?

Elvish remembers where you have been. Press Ctrl-L and search, like in a browser.

~>                                           [email protected]
13345 make tools/ttyshot
13346 make
13347 ./assets/
13348 ls
13349 ls
13350 rm *.png
13351 git st
13352 ..
13353 git st
13354 git add .
13355 git st
13356 git commit
13357 git push
Command History

Want to find the magical ffmpeg command that you used to transcode a video file two months ago?

Just dig through your command history with Ctrl-R. Same key, more useful.

(To be fair, you can do this in bash with history | grep ffmpeg, but it's far fewer keystrokes in Elvish :)

~/go/src/github.com/elves/elvish>            [email protected]
elvish CONTRIBUTING.md FROM golang:onbuild
fix-for-0.7 Dockerfile
images Gopkg.lock
md-highlighter Gopkg.toml
Built-in File Manager

Power of the shell or convenience of a file manager?

Choose both. Press Ctrl-N to quickly navigate directories and preview files, with full shell power.

Getting Elvish

Elvish is still in development, but has enough features and stability for daily use.

  • Download prebuilt binaries if you are running Linux or macOS on an x86-64 CPU.

  • Source code is available on the GitHub repository.

Speaking Elvish

  • Learn to speak Elvish by following tutorials.

    If you are not experienced with any shell, start with the fundamentals. (This tutorial is still a work in progress, though.)

    If you come from other shells, read the cookbook to get started quickly, and learn about Elvish’s unique semantics.

  • Reference documents describe Elvish in a more formal and complete way.

    Read about the philosophy, the language, the builtin module, and more.

  • The blog contains news on Elvish.

    It is the place for release notes, notes on the internals of Elvish, and other announcements or musings from the developers.

  • The feed contains updates to all sections of the website (not just the blog).

  • Follow Elvish on Twitter.

Meeting Other Elves