Artichoke is a Ruby implementation written in Rust and Ruby. Artichoke intends to be MRI-compatible and targets Ruby 2.6.3. Artichoke provides a Ruby runtime implemented in Rust and Ruby.
Prebuilt nightly binaries
Download a prebuilt binary from artichoke/nightly. Binaries are available for Linux, Linux/Musl, macOS, and Windows.
These daily binaries track the latest master branch of Artichoke.
You can install a pre-release build of Artichoke using
cargo, Rust's package
manager, by running:
cargo install --git https://github.com/artichoke/artichoke --locked artichoke
You can launch a REPL by running:
docker run -it docker.io/artichokeruby/artichoke airb
Artichoke ships with two binaries:
airb is the Artichoke implementation of
irb and is an interactive Ruby shell
airb is a readline-enabled shell, although it does not persist history.
artichoke is the
ruby binary frontend to Artichoke.
artichoke supports executing programs via files, stdin, or inline with one or
Artichoke does not yet support local filesystem access. A temporary workaround
is to inject data into the interpreter with the
--with-fixture flag, which
reads file contents into a
$ artichoke --help artichoke 0.1.0-pre.0 Artichoke is a Ruby made with Rust. USAGE: artichoke [FLAGS] [OPTIONS] [--] [programfile] FLAGS: --copyright print the copyright -h, --help Prints help information -V, --version Prints version information OPTIONS: -e <commands>... one line of script. Several -e's allowed. Omit [programfile] --with-fixture <fixture> file whose contents will be read into the `$fixture` global ARGS: <programfile>
Design and Goals
Artichoke is designed to enable experimentation. The top goals of the project are:
- Support WebAssembly as a build target.
- Support embedding and executing Ruby in untrusted environments.
- Distribute Ruby applications as single-binary artifacts.
- Implement Ruby with state-of-the-art dependencies.
- Experiment with VMs to support dynamic codegen, ahead of time compilation, parallelism and eliminating the GIL, and novel memory management and garbage collection techniques.
Artichoke aspires to be a Ruby 2.6.3-compatible implementation of the Ruby programming language. There is lots to do.
If Artichoke does not run Ruby source code in the same way that MRI does, it is a bug and we would appreciate if you filed an issue so we can fix it.
If you would like to contribute code
If you'd like to engage in a discussion outside of GitHub, you can join Artichoke's public Discord server.
artichoke is licensed with the MIT License (c) Ryan Lopopolo.
Some portions of Artichoke are derived from third party sources. The READMEs in each crate discuss which third party licenses are applicable to the sources and derived works in Artichoke.