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 good } else { echo bad }               
good
~> for x [lorem ipsum] {
echo $x.pdf
}
lorem.pdf
ipsum.pdf
~> try {
fail 'bad error'
} except e {
echo error $e
} else {
echo ok
}
error ?(fail 'bad error')
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]
LOCATION
* ~
* ~/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]
HISTORY
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]
NAVIGATING
elvish CONTRIBUTING.md FROM golang:onbuild
fix-for-0.7 Dockerfile
images Gopkg.lock
md-highlighter Gopkg.toml
LICENSE
Makefile
README.md
cover
daemon
edit
errors
eval
getopt
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