Skip to content
A surprisingly powerful Unix shell
Go TeX
Find file
Latest commit 0daaf40 May 22, 2016 @michaelmacinnis Update README.
Failed to load latest commit information.
bin Adding list methods. Apr 10, 2016
doc Update comparison. May 22, 2016
img Rearranging. May 4, 2015
lib Update README. May 22, 2016
pkg Add umask. May 15, 2016
LICENSE Update license. May 14, 2016 Update README. May 22, 2016
main.go Is recursive go generate a good idea? May 14, 2016
version.go Update for Go 1.5. Aug 24, 2015

A surprisingly powerful Unix shell

Oh is a Unix shell. If you've used other Unix shells, oh should feel familiar.


Where oh diverges from traditional Unix shells is its programming language features.

At its core, oh is a heavily modified dialect of the Scheme programming language, complete with first-class continuations and proper tail recursion. Like early Scheme implementations, oh exposes environments as first-class values. Oh extends environments to allow both public and private members and uses these extended first-class environments as the basis for its prototype-based object system.

Written in Go, oh is also a concurrent programming language. It exposes channels, in addition to pipes, as first-class values. As oh uses the same syntax for code and data, channels and pipes can, in many cases, be used interchangeably. This homoiconic nature also allows oh to support fexprs which, in turn, allow oh to be easily extended. In fact, much of oh is written in oh.

For a detailed comparison to other Unix shells see: Comparing oh to other Unix Shells


With Go 1.5 or greater installed,

go get

(Oh compiles and runs, but should be considered experimental, on Windows.)


For more detail see: Using oh


Oh is released under an MIT-style license.

Something went wrong with that request. Please try again.