No description
  • Python 58.5%
  • C 30.2%
  • Shell 5.9%
  • C++ 1.8%
  • Assembly 1.3%
  • Other 2%
Find a file
2026-07-24 22:43:00 -06:00
.builds [devtools] Prototype git shortlog in HTML 2025-12-04 16:41:09 -05:00
.github [build] Build search index before pushing wiki render (#2668) 2026-03-09 22:45:02 -06:00
asdl [ASDL cleanup] Minor changes in comments 2026-01-13 22:19:19 -05:00
benchmarks [devtools] Move blob dir from oilshell.org -> oils.pub 2025-12-15 12:27:06 -05:00
bin [translation] Translate "core dumped" message to C++ (#2612) 2025-12-27 16:35:27 -05:00
build [deps] Add ggplot2 to R-libs wedge 2026-05-17 22:26:29 -04:00
builtin [spec/builtin-umask] Add test coverage for restoring mask 2026-01-26 00:44:54 -05:00
client [rename] Move task-five.sh from devtools => stdlib/osh 2024-07-10 13:28:35 -04:00
core [builtin/umask] Parse and apply symbolic input like ug=rwx, etc. (#2484) 2026-01-25 21:01:51 -05:00
cpp [mycpp/runtime] Fix behavior of int(" ") 2026-01-25 23:33:43 -05:00
data_lang [cleanup] Remove build/dev-shell.sh in a few places 2025-10-30 19:01:37 -04:00
demo [demo] More surveys of Str methods in Python/JS (#2588) 2025-11-22 14:47:24 -05:00
deps [deps] Add ggplot2 to R-libs wedge 2026-05-17 22:26:29 -04:00
devtools [devtools/release-history] Separate OSH and YSH plots 2026-05-30 22:51:11 -04:00
display [cleanup] Remove remnants of the TokenTooLong check 2025-10-26 21:25:32 -04:00
doc [doc/idioms] Add 2 new topics under new "Strings and Quoting" section (#2437) 2026-03-13 22:16:41 -04:00
doctools [devtools] Use proper wget --directory-prefix flag (#2578) 2025-11-12 19:41:38 -05:00
frontend [builtin/umask] Parse and apply symbolic input like ug=rwx, etc. (#2484) 2026-01-25 21:01:51 -05:00
metrics [translation] Avoid name conflict with C macros isinf(), isnan() 2025-06-26 11:38:27 -04:00
mycpp [mycpp/runtime] Fix behavior of int(" ") 2026-01-25 23:33:43 -05:00
opy [regtest/aports cleanup] Remove syntax that OPy doesn't understand 2025-11-12 14:40:13 -05:00
osh [asdl refactor] Move cmd_frag type to syntax.asdl 2025-12-26 00:43:52 -05:00
pea [mycpp refactor] Re-order passes 2024-12-09 14:18:20 -05:00
pgen2 [cleanup] Rename Oil -> Oils (or OSH / YSH) 2025-10-26 13:43:52 -04:00
prebuilt [frontend/args] The sh -c special case only applies to MAIN_SPEC 2026-01-25 16:22:45 -05:00
pyext [translation] Translate "core dumped" message to C++ (#2612) 2025-12-27 16:35:27 -05:00
pylib [ysh] Implement Dict->update and ++ for dicts (#2609) 2025-12-14 12:11:35 -05:00
Python-2.7.13 [core] Remove libc locale hack; replace with InitLocale() 2025-08-19 13:29:28 -04:00
regtest [regtest] Add admin script 2025-12-05 17:20:52 +01:00
soil [deps] Updates after rebuilding images for re2c 2026-01-13 23:23:10 -05:00
spec Add jsh-multiline spec for stdin/script multi-line constructs 2026-07-24 22:43:00 -06:00
stdlib [ysh] Remove deprecated _status variable (#2572) 2025-12-04 20:52:21 -05:00
test [builtin/umask] Parse and apply symbolic input like ug=rwx, etc. (#2484) 2026-01-25 21:01:51 -05:00
testdata [testdata] Update golden files for mycpp/examples/scoped_resource 2025-05-16 19:35:45 -04:00
tools [core] Refactor and test --tool lint, deps, fmt 2025-12-24 21:37:47 -05:00
trees [build/deps.sh] New fetch and install procedure 2023-03-04 23:46:22 -05:00
vendor [devtools] Use proper wget --directory-prefix flag (#2578) 2025-11-12 19:41:38 -05:00
web [test/spec-cpp] Always generate compare.html; highlight failed files in red (#2617) 2025-12-17 13:56:36 -05:00
win32 [mycpp] bin/hello compiles on Windows! 2025-05-20 11:46:39 -04:00
yaks [mycpp build refactor] Remove wrap-cc rule, in favor of write-main 2025-05-19 10:36:43 -04:00
ysh [asdl refactor] Move cmd_frag type to syntax.asdl 2025-12-26 00:43:52 -05:00
.clang-format [devtools] Move clang-format config to .clang-format (#1516) 2023-02-24 22:13:28 -05:00
.clangd [devtools] Add a basic configuration for the clangd language server (#2134) 2024-11-29 11:56:11 -05:00
.envrc [devtools] direnv file to automatically add python2, etc. to $PATH (#1928) 2024-04-10 11:13:55 -04:00
.git-blame-ignore-revs [devtools] Ignore reformatting commit in git blame 2025-04-24 13:32:47 -04:00
.gitignore [git] Update .gitignore 2025-10-05 22:24:30 -04:00
.gitmodules [build] Remove py-yajl submodule! 2023-12-29 12:18:55 -05:00
.gitpod.yml [devtools] Fix .gitpod.yml and extract into shell script 2022-09-22 11:36:48 -04:00
.prettierrc.json [test/aports reformat] User lower case keywords 2025-08-02 16:16:23 -04:00
.style.yapf [devtools] Add .style.yapf 2023-09-29 16:07:01 -04:00
.travis.yml [toil] Add mksh, zsh, etc. to 'cpp' task 2021-03-27 11:25:05 -07:00
.travis.yml.in [toil] Add mksh, zsh, etc. to 'cpp' task 2021-03-27 11:25:05 -07:00
configure [configure] Prefer using mktemp -d (#2386) 2025-08-19 22:39:05 -04:00
configure-test.sh [build] Add missing file 2025-06-24 15:10:43 -04:00
install [release] Rename old oil- tarball to oils-ref 2025-04-25 12:34:19 -04:00
INSTALL-old.txt [release] Bump version to 0.37.0 2025-11-30 11:03:06 -05:00
INSTALL.txt [release] Bump version to 0.37.0 2025-11-30 11:03:06 -05:00
LICENSE.txt [release] Include the yajl license. 2019-12-07 15:35:04 -08:00
Makefile [build refactor] Move rest of oils-ref build to build/ref 2025-05-15 13:12:55 -04:00
NINJA-config.sh [mycpp build refactor] Simplify mycpp/examples rules 2025-05-14 17:07:09 -04:00
oils-version.txt [release] Bump version to 0.37.0 2025-11-30 11:03:06 -05:00
README-index.md [doc] Fix links in README.md 2025-03-13 13:14:07 -04:00
README-native.txt [release] Bump version to 0.37.0 2025-11-30 11:03:06 -05:00
README.md [doc] Simplify README, emphasizing dev build vs. release build 2025-10-30 10:18:05 -04:00
shell.nix [ysh] Add io.captureAll() to return stdout, stderr and status (#2292) 2025-04-21 10:42:54 -04:00
uninstall [build] Add missing ysh to uninstall script (#1663) 2023-07-16 02:03:59 -04:00
Vagrantfile Add FreeBSD and ubuntu32 Vagrant images. 2017-09-07 17:44:39 -07:00

Oils Source Code

Build
Status Contribute with Gitpod

Oils is our upgrade path from bash to a better language and runtime!

  • OSH runs your existing shell scripts.
  • YSH is for Python and JavaScript users who avoid shell.

Oils 2023 FAQ / Why Create a New Unix Shell?

It's written in Python, so the code is short and easy to change. But we translate it to C++ with custom tools, to make it fast and small. The deployed executable doesn't depend on Python.

This README is at the root of the git repo.

Important: If you want to use Oils, don't clone this repo. Instead, visit https://oils.pub/release/latest/. See the wiki: The Oils Repo Is Different From the Tarball Releases.

Contributing

  • Try making the dev build of Oils with the instructions on the Contributing page. This should take 1 to 5 minutes if you have a Linux machine.
  • If it doesn't, let us know. You can post on the #oils-dev channel of oilshell.zulipchat.com, or file an issue on Github.
  • Feel free to grab an issue from Github. Let us know what you're thinking before you get too far.

Dev Build

After following those instructions, you should have a Python program that you can quickly run and change! Try it interactively:

bash$ bin/osh

osh$ name=world
osh$ echo "hello $name"
hello world
  • Try running a shell script you wrote with bin/osh myscript.sh.
  • Try YSH with bin/ysh.

Let us know if any of these things don't work! The continuous build tests them at every commit.


Remember that this is the dev build in Python, not a released binary. The Oils Repo Is Different From the Tarball Releases.

Important: We Accept Small Contributions!

Oils is full of many ideas, which may be intimidating at first.

But the bar to contribution is very low. It's basically a medium size Python program with many tests, and many programmers know how to change such programs. It's great for prototyping.

  • For OSH compatibility, I often merge failing spec tests. You don't even have to write code! The tests alone help. I search for related tests with grep xtrace spec/*.test.sh, where xtrace is a shell feature.
  • You only have to make your code work in Python. Plain Python programs are easy to modify. The semi-automated translation to C++ is a separate step, although it often just works.
  • You can influence the design of YSH. If you have an itch to scratch, be ambitious. For example, you might want to show us how to implement nonlinear pipelines.

I aim for 24 hour response time

Please feel free to ping andychu on Zulip or Github if you're waiting for a pull request review! (or to ask questions)

Usually I can respond in 24 hours. I might be traveling, in which case I'll respond with something like I hope to look at this by Tuesday.

I might have also missed your Github message, so it doesn't hurt to ping me.

Thank you for the contributions!

Docs

The Wiki has many developer docs. Feel free to edit them. If you make a major change, let us know on Zulip!

If you're confused, the best thing to do is to ask on Zulip and someone should produce a pointer and/or improve the docs.

Docs for end users are linked from each release page.