Friendly and expressive shell
Clone or download
Failed to load latest commit information.
_tools _tools/ Don't use input redirection with sha256sum. Sep 25, 2018
_website _website/download: Move old versions to the bottom. Sep 23, 2018
buildinfo build -> buildinfo; include GOROOT and GOPATH and remove builder. Jun 14, 2018
daemon Support deleting command history with store:del-cmd. May 14, 2018
edit Quote file path separator in the filename completer. Sep 23, 2018
eval Fix keys and has-keys for struct types. Sep 24, 2018
getopt Cosmetics. Jan 1, 2018
glob Fix minor issues found by gofmt, go vet, and misspell. Dec 14, 2017
newedit newedit/core: Add Editor.InitMode. Sep 24, 2018
parse parse: cleanup test utils. Mar 16, 2018
program newedit: Add prompt API. Sep 20, 2018
runtime runtime: Kill outdated daemon with SIGINT, not SIGKILL. Mar 24, 2018
store Support deleting command history with store:del-cmd. May 14, 2018
styled styled: Simplify implementation of FindTransformer. Jul 17, 2018
sys sys: Use x/sys/* packages instead of syscall. Mar 1, 2018
tt tt: Support custom return value matching. Jan 31, 2018
util eval: Remove more throws. Mar 1, 2018
vendor Update dependency. Mar 1, 2018
.appveyor.yml Disable coverage upload on AppVeyor. Sep 20, 2018
.dockerignore Dockerfile: Use golang:alpine Jun 13, 2018
.gitattributes Use .gitattributes to filter go sources through goimports Feb 10, 2014
.gitignore .gitignore: Add /_bin/. Sep 24, 2018
.travis.yml Use "binaries" for the job of building binaries on Travis. Sep 14, 2018 Attempt #4 to fix Jun 6, 2018 CONTRIBUTING: Document all codegen deps. Jan 1, 2018
Dockerfile Improve Dockerfile. Sep 15, 2018
Gopkg.lock Update dependency. Mar 1, 2018
Gopkg.toml Update dep constraints. Jan 5, 2018
LICENSE Project rename: das -> elvish Jan 29, 2014
Makefile Simplify coverage deployment scripts for Travis. Sep 14, 2018 README: Bump requirement of Go version to 1.10. Sep 22, 2018
main.go New title and description. Dec 31, 2017

Elvish: Friendly and Expressive Shell


Elvish is a cross-platform shell, supporting Linux, BSDs and Windows. It features an expressive programming language, with features like namespacing and anonymous functions, and a fully programmable user interface with friendly defaults. It is suitable for both interactive use and scripting.

... which is not 100% true yet. Elvish is already suitable for most daily interactive use, but it is neither complete nor stablized. Contributions are more than welcome!

This README documents the development aspect of Elvish. Other information is to be found on the website.

Build Status on Travis Build status on AppVeyor Build Status on VSTS Code Coverage on Code Coverage on Go Report Card GoDoc License

Gitter Telegram Group #elvish on freenode Gitter for Developers Telegram Group for Developers #elvish-dev on freenode Twitter

Building Elvish

To build Elvish, you need

  • Linux, {Free,Net,Open}BSD, macOS, or Windows (Windows support is experimental).

  • Go >= 1.10.

Once you have a suitable environment, simply build Elvish with go get:

go get

The binary will be placed in $GOPATH/bin. If you haven't configured a GOPATH, it defaults to ~/go. Refer to How To Write Go Code on how to set up workspace for Go.

Users of macOS can also build Elvish using Homebrew:

brew install --HEAD elvish




In roguelikes, items made by the elves have a reputation of high quality. These are usually called elven items, but I chose "elvish" because it ends with "sh", a long tradition of Unix shells. It also rhymes with fish, one of the shells that influenced the philosophy of Elvish.

The word "Elvish" should be capitalized like a proper noun. However, when referring to the elvish command, use it in lower case with fixed-width font.

Whoever practices the Elvish way by either contributing to it or simply using it is called an Elf. (You might have guessed this from the name of the GitHub organization.) The official adjective for Elvish (as in "Pythonic" for Python, "Rubyesque" for Ruby) is Elven.