1995 – 2026

Ruby Versions

Every public release of Ruby — from Yukihiro “Matz” Matsumoto's first public release in 1995 through Ruby 4.0 in December 2025 — with ship dates, maintenance status, and the major changes per version. Plus the annual Christmas-day release tradition, the 2004 Rails moment that made Ruby a mainstream web language, the 1.9 / YARV break, Ractor parallelism, and the YJIT → ZJIT performance arc.

Era & maintenance

Era

1.x — 1995–2011, the origin through the 1.9 / YARV line
2.x — 2013–2019, the mature line and the start of the Christmas cadence
3.x — 2020–2024, Ractor, RBS, and the YJIT performance push
4.x — 2025 onward, ZJIT and Ruby Box

Maintenance status

Normal — receiving bug fixes and security fixes
Security — security fixes only; no further bug fixes
EOL — past its support window; no further updates from ruby-core

Each stable branch gets roughly three years: about two in normal maintenance, then about one security-only, then end-of-life. The live status table is at ruby-lang.org/en/downloads/branches; every release is listed at ruby-lang.org/en/downloads/releases.

The Christmas release tradition

Ruby ships a new major every December 25.

Since Ruby 2.1 in 2013, every stable major has landed on Christmas Day — 2.2, 2.3, … 3.4, and Ruby 4.0 on December 25, 2025 — with patch releases through the rest of the year. The cadence has roots even earlier: Ruby 1.0 itself shipped on December 25, 1996. It's a deliberate, well-known rhythm that tells you exactly when to expect the next release.

Ruby version table

Version
Ruby 4.0
4.x
Normal
EOL ~2029 (TBD)
Dec 25, 2025
Latest release. ZJIT next-generation JIT; Ruby Box definition isolation (experimental); big Ractor improvements; Set and Pathname promoted to core classes.
  • ZJIT — a new method-based JIT compiler positioned as the next generation of YJIT, with an SSA intermediate representation and larger compilation units, written in Rust (1.85+). Enabled with --zjit. Faster than the interpreter but not yet as fast as YJIT — the release announcement tells users to experiment with it but hold off on deploying it in production, and closes the section with “Stay tuned for Ruby 4.1 ZJIT” (launch post).
  • Ruby Box (experimental, Ruby::Box) — enabled via RUBY_BOX=1, it isolates monkey patches, global / class variables, class / module definitions, and loaded libraries between boxes (Feature #21311).
  • Ractor improvements — a new Ractor::Port synchronization mechanism, Ractor#join / #value, Ractor.shareable_proc, and far less global-lock contention. Ractor.yield and Ractor#take were removed. Ruby-core says the work brings Ractor “closer to leaving experimental status,” and hopes to drop the label around 2026.
  • Set and Pathname were promoted from the standard library to core classes; a new top-level Ruby module was defined; Unicode was updated to 17.0.
  • Logical operators (&&, ||, and, or) at the start of a line now continue the previous line (fluent style); *nil no longer calls nil.to_a.
  • Ships RubyGems 4 and Bundler 4; CGI removed from the default gems; the C-based --rjit implementation was removed.
  • Latest point release as of this writing: Ruby 4.0.6 (July 14, 2026), announced as a routine bugfix release — though it also lifts the bundled net-imap gem from 0.6.2 to 0.6.4.1, quietly picking up CVE-2026-47240, CVE-2026-47241 and CVE-2026-47242 (several Net::IMAP commands accept raw-string arguments that bypass quoting; scored 5.8, 2.1 and 5.8 under CVSS 4.0 by the maintainers' own advisories, with no NIST primary score), the same three that reached 3.4 in 3.4.10. Ruby-core ships a 4.0 patch about every two months, with 4.0.7 slated for September and 4.0.8 for November. The prior 4.0.5 (May 20, 2026) was a security release fixing CVE-2026-46727 (use-after-free in the pthread-based getaddrinfo timeout handler; affects 4.0.0–4.0.4 only; severity: high, CVSS 8.1). Earlier, 4.0.3 (April 21, 2026) was a security-only release shipping ERB 6.0.1.1 for CVE-2026-41316 — the same ERB deserialization-guard bypass that reached 3.3 in 3.3.12 three months later (severity: high, CVSS 8.1), so 4.0.0–4.0.2 need it too. See the 4.0.0 announcement, the NEWS file, and the CVE advisory.
  • Open advisory (August 2026) — 4.0.6 ships the resolv default gem at 0.7.0, inside the range affected by CVE-2026-80212 (a name server an attacker controls can return responses resolv retains permanently, growing the process until it runs out of memory; 7.5 / high under CVSS 3.1, scored by MITRE with no NIST primary) and CVE-2026-80213 (a hostname past the DNS length limits can pass an allow-list check and then resolve to a different name; 4.0 / medium). No Ruby release carries the fix yet — the advisory of August 27, 2026 says to update the gem itself to resolv 0.7.2. Only code that resolves names through Resolv or resolv-replace is exposed; Net::HTTP and anything built on TCPSocket use the operating-system resolver.
Version
Ruby 3.4
3.x
Normal
EOL ~2028 (TBD)
Dec 25, 2024
it as the default block parameter; Prism becomes the default parser; “chilled” string literals; modular GC.
  • it as a default block parameter[1, 2, 3].map { it * 2 } references the first block argument without naming it; the headline syntax addition.
  • Prism is now the default parser, replacing the long-standing Bison-based parse.y. Prism is a portable, error-tolerant parser shared across Ruby tooling (IRB, RuboCop, Sorbet, TypeProf).
  • “Chilled” strings — string literals in files without a frozen_string_literal comment now warn on mutation, a measured step toward making frozen string literals the default.
  • Modular GC (--with-modular-gc) — a pluggable garbage-collector interface that allows alternative collectors such as MMTk to be loaded at runtime.
  • Happy Eyeballs Version 2 is the default for Socket.tcp / TCPSocket.new; Hash#freeze and Module#set_temporary_name; continued YJIT performance and memory improvements.
  • Latest point release: Ruby 3.4.10 (June 30, 2026), announced as a regular stable release updating the bundled net-imap gem to 0.5.15 for its security fixes — CVE-2026-47240, CVE-2026-47241 and CVE-2026-47242, three quoting failures in Net::IMAP's raw-data command arguments. It also ships erb 4.0.4.1 — one of the fixed versions named in the CVE-2026-41316 advisory, where 3.4.9 had shipped the vulnerable 4.0.4 — so the 3.4 branch is patched for the same ERB deserialization-guard bypass that reached 4.0 in 4.0.3 and 3.3 in 3.3.12, even though the release announcement doesn't say so.
  • Open advisory (August 2026) — 3.4.10 ships resolv 0.7.1, the newest version named as affected in the August 27, 2026 advisory for CVE-2026-80212 and CVE-2026-80213 (described on the 4.0 row). No 3.4 release carries the fix yet; the remedy is to update the resolv gem to 0.7.2.
Version
Ruby 3.3
3.x
Security
EOL Mar 2027 (expected)
Dec 25, 2023
Major YJIT performance gains; the pure-Ruby RJIT; the Prism parser introduced; an M:N thread scheduler.
  • YJIT is significantly faster and uses less memory by this release, and is widely deployed in production.
  • RJIT — a new pure-Ruby JIT compiler that replaced the C-based MJIT, primarily as a platform for JIT experimentation.
  • Prism parser introduced — the error-tolerant, portable parser that would become the default in Ruby 3.4.
  • M:N thread scheduler — maps many Ruby threads onto fewer native threads, improving Ractor and Fiber throughput.
  • Range#overlap?; ObjectSpace.dump and IRB improvements; broad performance work.
  • Latest point release: Ruby 3.3.12 (July 16, 2026), a security release — it updates the erb default gem to 4.0.3.1 for CVE-2026-41316 (an @_init deserialization-guard bypass via def_module / def_method / def_class that allows arbitrary code execution when Marshal.load is called on untrusted data in an app that loads both erb and ActiveSupport; severity: high, CVSS 8.1), and the bundled net-imap gem to 0.4.25 for eight further CVEs. The prior 3.3.11 shipped Mar 26, 2026.
  • Open advisory (August 2026) — 3.3.12 ships resolv 0.3.1, also affected by CVE-2026-80212 and CVE-2026-80213 (described on the 4.0 row). The 3.3 series sits on an older resolv line, so the advisory points it at resolv 0.3.2 rather than 0.7.2. No 3.3 release carries the fix yet.
Version
Ruby 3.2
3.x
EOL
Apr 2026
Dec 25, 2022
YJIT production-ready; WASI-based WebAssembly support; the Data immutable value class; Regexp ReDoS timeouts.
  • YJIT declared production-ready — the Rust-based JIT contributed by Shopify graduated from experimental.
  • WASI-based WebAssembly support — Ruby can be compiled to run in the browser and in WASI runtimes.
  • Data — a new class for simple immutable value objects, a lighter and immutable cousin of Struct.
  • Regexp ReDoS mitigationsRegexp.timeout and linear-time matching improvements guard against catastrophic backtracking.
  • Anonymous rest / keyword-rest / block argument forwarding (*, **, &); Module#const_added; Struct keyword-init by default.
  • Reached end-of-life on April 1, 2026 (per the branches table); the final point release was Ruby 3.2.11 (Mar 27, 2026), which carried the zlib CVE-2026-27820 fix. What end-of-life means in practice showed up five months later: the August 27, 2026 resolv advisory (CVE-2026-80212 and CVE-2026-80213) states that no fix is planned for the 0.2.x resolv line this branch ships, because the series has reached its end of life — those users are told to install resolv 0.7.2 themselves.
Version
Ruby 3.1
3.x
EOL
Mar 2025
Dec 25, 2021
YJIT introduced (experimental, from Shopify); the new debug gem; error_highlight; hash literal value omission.
  • YJIT — a new experimental in-process JIT contributed by Shopify; the start of Ruby's modern JIT era.
  • New debug gem — a fast, feature-rich debugger with remote-debugging support, replacing the old lib/debug.rb.
  • error_highlight — pinpoints the exact sub-expression that raised in a backtrace.
  • Hash literal value omission ({x:, y:}); the find pattern and pin-operator improvements in pattern matching; IRB autocompletion with a documentation popup.
  • Integer#ceildiv; MJIT improvements.
Version
Ruby 3.0
3.x
EOL
Apr 2024
Dec 25, 2020
The “Ruby 3x3” release. Ractor parallelism (experimental); Fiber Scheduler; RBS / TypeProf type tooling; one-line pattern matching.
  • Ractor (experimental) — an actor-model abstraction for thread-safe parallel execution that sidesteps the global VM lock.
  • Fiber Scheduler — a non-blocking I/O hook that lets ordinary blocking code run concurrently under an event loop.
  • RBS — a language for describing Ruby type signatures, shipped alongside TypeProf, a type-analysis tool; Ruby's official answer to gradual typing.
  • One-line pattern matching (in / =>); rightward assignment; Hash#except; the find pattern.
  • The capstone of the multi-year “Ruby 3x3” goal — roughly three times faster than Ruby 2.0 on key benchmarks, via MJIT and broad optimization.
Version
Ruby 2.7
2.x
EOL
Mar 2023
Dec 25, 2019
Pattern matching (experimental); numbered block parameters (_1); compaction GC; the keyword-argument separation warnings.
  • Pattern matching (case / in, experimental) — destructuring against arrays, hashes, and objects; the largest new control-flow feature in years.
  • Numbered block parameters (_1, _2); beginless ranges (..10).
  • Compaction GC (GC.compact) — reduces heap fragmentation and improves copy-on-write behavior.
  • Keyword-argument separation warnings — deprecation of the automatic conversion between positional hashes and keyword arguments; the runway for the hard separation in Ruby 3.0.
  • A substantially improved IRB with multi-line editing and syntax highlighting.
Version
Ruby 2.6
2.x
EOL
Apr 2022
Dec 25, 2018
MJIT — the first JIT compiler (experimental); endless ranges; then; Proc composition.
  • MJIT — Ruby's first JIT compiler (experimental), which emits C and uses the system C compiler.
  • Endless ranges ((1..)); Kernel#then (an alias of yield_self).
  • Proc#>> / Proc#<< method and proc composition; Binding#source_location.
  • RubyVM::AbstractSyntaxTree; Comparable#clamp with a range; Bundler folded into the standard library.
Version
Ruby 2.5
2.x
EOL
Apr 2021
Dec 25, 2017
rescue / else / ensure directly in blocks; yield_self; Hash#slice; branch and method coverage.
  • rescue / else / ensure directly inside do...end blocks — no surrounding begin needed.
  • yield_self; Hash#slice and Hash#transform_keys.
  • Top-level constant lookup removed — constants no longer resolve accidentally through Object.
  • Branch coverage and method coverage measurement; pp required by default; roughly 5–10% faster.
Version
Ruby 2.4
2.x
EOL
Mar 2020
Dec 25, 2016
Integer unification (Fixnum + Bignum → Integer); Comparable#clamp; String#unpack1; faster hashes.
  • Integer unificationFixnum and Bignum merged into a single Integer class.
  • Comparable#clamp; String#unpack1; Hash#compact; Enumerable#sum.
  • Hash-table (st_table) rewrite for better speed and memory use.
  • binding.irb — a REPL launchable from inside a running program; Unicode case mapping for String#upcase / downcase.
Version
Ruby 2.3
2.x
EOL
Mar 2019
Dec 25, 2015
Safe navigation operator (&.); frozen string literal magic comment; Hash#dig / Array#dig; did_you_mean.
  • Safe navigation operator &. (the “lonely operator”) — calls a method only on a non-nil receiver.
  • Frozen string literal magic comment# frozen_string_literal: true freezes every string literal in a file.
  • Hash#dig and Array#dig for nested access; Hash#to_proc.
  • did_you_mean bundled — spelling suggestions on NameError / NoMethodError; Array#bsearch_index.
Version
Ruby 2.2
2.x
EOL
Mar 2018
Dec 25, 2014
Incremental GC; symbol garbage collection; Kernel#itself; obsolete libraries removed.
  • Incremental GC — shorter GC pauses, a meaningful responsiveness win for Rails.
  • Symbol GC — symbols are now garbage-collected, closing the long-standing symbol-DoS memory-leak class.
  • Kernel#itself; Method#curry; String#unicode_normalize.
  • Removed obsolete DL and Digest::HMAC; jemalloc support and a faster Process.spawn.
Version
Ruby 2.1
2.x
EOL
Mar 2017
Dec 25, 2013
The first Christmas-day release and the move to semantic versioning. Generational GC (RGenGC); refinements; required keyword arguments.
  • The first annual Christmas-day major, and the switch from patchlevel numbering (-pN) to semantic versioning — the rhythm Ruby has kept ever since.
  • Generational GC (RGenGC) — a major garbage-collector throughput improvement.
  • Refinements promoted from experimental; required keyword arguments (def foo(a:)).
  • "string".freeze literal optimization (deduplicated frozen strings); rational (2r) and complex (2i) literals; def returns the method name as a symbol.
Version
Ruby 2.0
2.x
EOL
Feb 2016
Feb 24, 2013
Keyword arguments; Module#prepend; refinements (experimental); lazy enumerators; UTF-8 default source encoding.
  • Keyword arguments — the first real ones; and Module#prepend for clean method wrapping.
  • Refinements (experimental) — lexically scoped monkey-patching.
  • Enumerator::Lazy — lazy evaluation of large or infinite sequences; %i(...) symbol-array literals.
  • UTF-8 became the default source encoding. Designed to be roughly 99% backward-compatible with 1.9.3, and shipped on February 24, 2013 — Ruby's 20th anniversary.

The 1.9 / YARV break — the modern-era boundary. Above this line: the modern semantic-versioning era, from 2.x through 4.x. Below: the 1.x lineage, from Matz's first public release in 1995 through the 1.9 series. Ruby 1.9 (2007) replaced the original tree-walking interpreter with the YARV bytecode VM and introduced encoding-aware strings — a source-incompatible break that began modern Ruby. The full story is in the prose history below.

Version
Pre-2.0
1.x
EOL
long EOL
1995 – 2011
The origin line: 0.95, 1.0, the 1.6 / 1.8 workhorse releases, and the 1.9 / YARV break. Included for historical completeness.
  • Ruby 1.9.3 (Oct 31, 2011) — the stable, widely adopted 1.9 release; relicensed under the 2-clause BSD plus Ruby license. The final 1.9 patch was 1.9.3-p551 in 2014.
  • Ruby 1.9.0 / 1.9.1 (Dec 25, 2007 / Jan 30, 2009) — the YARV bytecode VM (Koichi Sasada), a large speedup; encoding-aware strings (M17N); the key: value hash syntax; block-local variables; Fiber; the -> lambda literal. 1.9.0 was experimental; 1.9.1 was the first stable 1.9. Source-incompatible with 1.8 — the modern-era boundary.
  • Ruby 1.8.7 (May 31, 2008) — the long-lived 1.8 workhorse, with many enumerator backports. The final patch was 1.8.7-p374 in 2013.
  • Ruby 1.8.0 (Aug 4, 2003) — the release that powered the Ruby on Rails explosion of 2004–2008; a large standard-library expansion.
  • Ruby 1.6 (Sep 2000) — the first Ruby widely distributed outside Japan.
  • Ruby 1.0 (Dec 25, 1996) — the first 1.0 release, itself a Christmas-day ship decades before the tradition was formalized.
  • Ruby 0.95 (Dec 1995) — the first public release, posted by Matz to Japanese newsgroups. Development had begun on February 24, 1993, the day Matz settled on the name “Ruby.”

Pre-1.8 releases predate the public English-language documentation era; they're listed here for historical completeness rather than ongoing relevance. The full pre-1.8 download archive is at ruby-lang.org/en/downloads/releases.

Click any row to expand. Each row has a stable id for sharing — e.g. /software/ruby/versions/#ruby-4-0, #ruby-3-4, #ruby-pre-2-0. Live release and maintenance state is documented at ruby-lang.org/en/downloads/branches.

The 1993 origin and the Japanese years

Ruby was created by Yukihiro “Matz” Matsumoto in Japan. He settled on the name on February 24, 1993 — a deliberate gem-of-a-name follow-on to Perl — and began building a language that blended the parts he liked from Perl, Smalltalk, Lisp, and Ada into something “more powerful than Perl, and more object-oriented than Python.” His guiding principle was programmer happiness: Ruby is designed so that ordinary code reads naturally and the language gets out of your way.

The first public release — Ruby 0.95 — went out to Japanese newsgroups in December 1995, and Ruby 1.0 followed on December 25, 1996. For its first several years Ruby was effectively a Japanese-only language: the mailing lists, the documentation, and nearly the entire community were in Japanese. That changed at the turn of the millennium.

The pickaxe book opens Ruby to the world (2000)

In 2000, Dave Thomas and Andy Hunt published Programming Ruby — universally known as the “pickaxe” book for the tool on its cover — the first comprehensive English-language guide to the language. It was the bridge that let Ruby cross out of Japan. For several years the pickaxe was the canonical reference for English-speaking developers, and it seeded the early international community that would be ready and waiting when Ruby's killer application arrived a few years later.

The Rails moment (2004) — Ruby's killer app

The single biggest accelerant in Ruby's history was Ruby on Rails. Extracted from the Basecamp codebase at 37signals and released by David Heinemeier Hansson (DHH) in 2004, Rails turned Ruby from a beloved-but-niche language into a mainstream web-development platform almost overnight. Its “convention over configuration” philosophy and a famous fifteen-minute blog screencast made it the framework that defined a generation of web startups. For many developers in the mid-2000s, “learning Ruby” and “learning Rails” were the same sentence.

In 2008 the Rails team merged with the competing Merb framework, folding Merb's modularity into Rails 3 and ending a brief fork in the community's energy. Rails has continued on its own annual-ish major cadence (Rails 5, 6, 7, and 8), and remains the reason a large share of Ruby jobs exist. Rails has its own release history distinct from the language's; a dedicated Rails versions page is a natural sibling to this one if and when it ships.

The 1.9 / YARV / encoding overhaul

Ruby's interpreter was originally a tree-walking evaluator — simple, but slow. Ruby 1.9 replaced it with YARV (Yet Another Ruby VM), a bytecode virtual machine written by Koichi Sasada, delivering a large performance jump and setting the architectural foundation for a decade of later optimization. 1.9 also introduced M17N encoding-aware strings (each string carries its own encoding rather than assuming one global encoding), the modern key: value hash syntax, the -> lambda literal, block-local variables, and Fiber. The 1.9.0 release shipped on Christmas Day 2007 as an experimental preview; 1.9.1 (January 2009) was the first stable 1.9, and 1.9.3 (2011) became the widely deployed workhorse. Because 1.9 was deliberately source-incompatible with 1.8, it is the cleanest dividing line between “old” and “modern” Ruby — though, unlike Python's 2-to-3 split, the transition was relatively swift and far less painful for the ecosystem.

The 2.x maturation and the Christmas cadence

Ruby 2.0 (February 2013) was designed to be almost fully backward-compatible with 1.9.3 while adding keyword arguments, refinements, lazy enumerators, and Module#prepend. Later that year, Ruby 2.1 established the rhythm Ruby still keeps: a stable major every December 25, and a switch from patchlevel numbering to semantic versioning. The 2.x line was a steady decade of polish — generational and incremental garbage collection, symbol GC, the safe-navigation operator, frozen string literals, Hash#dig, the first JIT (MJIT in 2.6), and experimental pattern matching in 2.7 — that set the table for the performance-and-concurrency push of the 3.x era.

Ruby 3x3 — Ractor, RBS, and performance (2020)

Ruby 3.0 (December 2020) was the capstone of the multi-year “Ruby 3x3” goal Matz announced in 2015: make Ruby roughly three times faster than Ruby 2.0. Beyond raw speed, 3.0 tackled Ruby's two long-standing gaps. Ractor introduced an actor-model concurrency abstraction for genuine parallelism that sidesteps the global VM lock, and the Fiber Scheduler let ordinary blocking code run concurrently under an event loop. On the typing front, RBS (a separate signature language) and TypeProf gave Ruby an official, gradual answer to static typing without changing the language's syntax. One-line pattern matching, rightward assignment, and Hash#except rounded out the release.

The JIT arc — MJIT to YJIT to ZJIT

Ruby's just-in-time compilation story runs through three generations. MJIT (Ruby 2.6, 2018) was the first attempt — it emitted C and shelled out to the system C compiler, which limited how aggressive it could be. The breakthrough came from Shopify, whose team (led by Maxime Chevalier-Boisvert) built YJIT, a Rust-based in-process JIT introduced experimentally in Ruby 3.1, declared production-ready in 3.2, and substantially faster by 3.3. YJIT made Ruby fast enough that large Rails deployments routinely turn it on. Ruby 4.0 (2025) introduced its successor, ZJIT — a method-based compiler with an SSA intermediate representation, designed to raise the performance ceiling further and to be more approachable for outside contributors. The ZJIT launch post is by Max Bernstein on behalf of the same Shopify compiler group that built YJIT. As of 4.0 ZJIT is faster than the interpreter but not yet faster than YJIT, and ruby-core's own advice is to experiment with it rather than deploy it in production; the team's stated plan is to close the gap with YJIT, and the 4.0.0 announcement's pointer for what comes next is simply “Stay tuned for Ruby 4.1 ZJIT.” That work is visibly under way on the 4.1 development branch: in July 2026 the compiler group reported that it had enabled an inliner in ZJIT, which lets it optimize through the block-passing calls — each, map and the rest — that dominate ordinary Ruby code. In September 2026 Shopify's Ruby team reported the next step, inlining the garbage collector's allocation fastpath into ZJIT-compiled code, so that common allocations — hash, range, array and string literals, and new class instances — no longer call out to the GC's C function; its allocation microbenchmarks run roughly 1.8–3× faster.

Governance and community

Matz remains Ruby's benevolent dictator: the language's direction runs through him and the volunteer ruby-core team. Feature proposals are debated openly on the issue tracker at bugs.ruby-lang.org, and a large decision is often settled at the annual developers' meeting. The non-profit Ruby Association — a Japanese foundation established in 2011 (succeeding a 2007 LLC of the same name), chaired by Matz with Koichi Sasada on its board — supports the language's development and community, while several committers have been employed over the years by companies including Heroku (acquired by Salesforce in 2010) and Shopify specifically to work on Ruby full-time.

Ruby's community has a strong cultural identity around the MINASWAN ethos — “Matz is nice and so we are nice” — which the early conference circuit codified into a norm of welcoming, patient mentorship. It remains one of the language's most-cited distinguishing traits.

Alternative implementations

CRuby (also called MRI, the Matz Ruby Interpreter) is the reference implementation that this page tracks, but several others have shaped the ecosystem:

  • JRuby — Ruby on the JVM, giving access to Java libraries and real OS-thread parallelism. The most mature alternative implementation, with its own multi-year release history.
  • TruffleRuby — a high-performance implementation built on GraalVM / Truffle, capable of very aggressive JIT optimization.
  • mruby — Matz's own lightweight, embeddable Ruby for devices and applications with tight memory budgets.
  • Rubinius — an influential Ruby-in-Ruby implementation with an LLVM-based JIT; less active today but historically important for pushing CRuby's performance conversation forward.

Full per-version coverage of each alternative is out of scope here — JRuby in particular has its own JVM-integration arc that wouldn't fit cleanly under the canonical Ruby page.

People who shaped Ruby

Creator and core: Yukihiro “Matz” Matsumoto (creator and lead), Koichi Sasada (YARV and Ractor), Nobuyoshi Nakada (“nobu”, the prolific committer behind a huge share of CRuby patches), Yui Naruse (release manager), Yusuke Endoh (“mame”), and Aaron Patterson (“tenderlove”, Ruby and Rails core, longtime performance work).

Performance and tooling: Maxime Chevalier-Boisvert, who led the Shopify project that built YJIT, and the compiler group that carried the same work into ZJIT, Jeremy Evans (Ruby committer and Sequel / Roda author), and Kevin Newton (Prism parser). Rails lineage: David Heinemeier Hansson (DHH), who created Ruby on Rails and, more than anyone outside Matz, drove Ruby's adoption.

Find your version — in the terminal

The browser cannot detect what version of Ruby is installed on your machine. Run one of these in your terminal to see your real install.

What's installed?

Print the active interpreter and where it lives on disk.

$ ruby --version                       # or the short form: ruby -v
$ ruby -v
$ which ruby                            # where the binary lives
$ ruby -e "puts RUBY_VERSION"           # just the version number
$ ruby -e "puts RUBY_DESCRIPTION"       # version + platform + JIT build info

Pin a project to a specific Ruby

A .ruby-version file is read by every major version manager; the Gemfile can pin the version for Bundler.

# .ruby-version (read by rbenv, chruby, asdf, mise, RVM)
4.0.0

# Gemfile
ruby "4.0.0"

The RUBY VERSION line in Gemfile.lock records the exact Ruby a project was last resolved against — the per-project source of truth for collaborators.

Install or upgrade a version

Multiple Rubies can coexist; installing a new one doesn't remove old ones.

# macOS (Homebrew) — newest stable
$ brew install ruby

# Version managers (any version, any platform)
$ rbenv install 4.0.0
$ mise use ruby@4.0
$ asdf install ruby 4.0.0

# Windows: RubyInstaller (recommended) or winget
> winget install RubyInstallerTeam.Ruby.4.0

Manage multiple Rubies

A version manager picks which Ruby a directory uses; Bundler isolates the gems per project.

# rbenv: list, set the user default, pin per-directory
$ rbenv versions
$ rbenv global 4.0.0
$ rbenv local 3.4.10                    # writes .ruby-version here

# chruby + ruby-install
$ chruby                                # list installed Rubies
$ chruby ruby-4.0.0                     # switch for this shell

# asdf / mise (polyglot version managers)
$ asdf list ruby
$ mise ls ruby

Sources: ruby-lang.org/en/downloads/releases; ruby-lang.org/en/downloads/branches; ruby-lang.org news (per-release announcements); ruby/ruby NEWS files; bugs.ruby-lang.org; and the contemporaneous reporting cited inline. Last updated September 2026.

Mungomash LLC · More software pages