Ruby 3.4

3.4 released 24 December 2024, latest 3.4.10.

Ruby 3.4 is currently supported. It reaches end of life on 31 March 2028.

What changed

Ruby 3.4 makes Prism the default Ruby parser, replacing the legacy parser in normal execution. Application semantics are intended to remain compatible, but parser-facing tools, syntax-error handling, source locations, and code that depends on parser internals need validation. YJIT is no longer experimental and is enabled by default on builds that include the required Rust support; this can change startup, memory, and throughput characteristics. Ruby 3.4 also introduces the experimental ZJIT compiler, which is disabled by default. The language adds the implicit it block parameter, and several standard-library components have changed gem packaging, so applications should not assume every previously included library has identical installation and dependency behavior.

What staying costs

Ruby 3.4 remains actively maintained, so staying on it does not create an immediate upstream-maintenance gap. The trade-off is that later Ruby lines will accumulate runtime fixes, performance work, parser and JIT improvements, and compatibility updates that 3.4 will not receive. Teams that defer upgrades can also face a larger eventual test and dependency migration, especially where native extensions, parser-dependent tools, or standard-library gems are involved. Leaving YJIT enabled without measuring it can also create operational uncertainty: it may improve throughput, but its memory and warm-up behavior should be assessed against the application's workload.

What to do

Run the full application, test suite, and static-analysis or code-generation tools on Ruby 3.4, with particular attention to syntax parsing, error reporting, and any use of Ripper, RubyVM AST APIs, or third-party parsers. Update and lock dependencies, then verify that required standard-library libraries are declared and installed consistently in developer, CI, and production environments. Benchmark representative workloads with the default YJIT configuration and with YJIT disabled, measuring latency, throughput, boot time, and memory before selecting a production setting. Keep CI exercising Ruby 3.4 and a newer supported Ruby line so that dependency and language compatibility issues are found incrementally rather than during a forced upgrade.

Release history

3.x

We can tell you what moving off Ruby 3.4 involves.

What it takes to move off Ruby 3.4 depends on what you built on it — the version you are on, how much depends on it, and how much of the work is mechanical. Leave your email with this version and we can tell you what that looks like for you.

Not sure yet? Get my plan