2.6 released 25 December 2018, latest 2.6.10.
Ruby 2.6 reached end of life on 31 March 2022.
What changed
Ruby 2.6 added the experimental MJIT just-in-time compiler, exposed an abstract-syntax-tree API through RubyVM::AST, and added language and core-library features including endless ranges, the Kernel#then alias for yield_self, Proc composition with << and >>, Enumerator::ArithmeticSequence, and Array union and difference operations. MJIT was experimental, so it should not be treated as a stable performance contract.
What staying costs
This cycle has reached end of life, so Ruby 2.6 no longer receives upstream security fixes or bug fixes. Remaining on it increases exposure to defects in the interpreter and its bundled components, and makes dependency maintenance harder as gems, native extensions, operating-system toolchains, and TLS or OpenSSL environments move forward. The longer an application stays on 2.6, the more likely its eventual upgrade is to combine Ruby compatibility work with accumulated dependency and platform changes.
What to do
Choose a currently supported Ruby target based on the application's framework, gem, and deployment-platform requirements. Build a test matrix that runs the application, its full dependency bundle, and native extensions on both 2.6 and the target version; resolve deprecations and behavior changes before switching production workloads. Update CI images, build tooling, Bundler and lockfile handling as needed, then validate startup, background jobs, test suites, performance-sensitive paths, and TLS-dependent integrations in a production-like environment. Do not rely on MJIT behavior from 2.6 when setting performance expectations for the new runtime.
We can tell you what moving off Ruby 2.6 involves.
What it takes to move off Ruby 2.6 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
