Ruby 3.4
Ruby 3.4.0 was released on 2024-12-25: https://www.ruby-lang.org/en/news/2024/12/25/ruby-3-4-0-released/
This epic tracks the work required to move GitLab from Ruby 3.3 to Ruby 3.4, from getting the topic branch green through to releasing to Self-Managed.
## Goals
- All `gitlab-org/gitlab` pipelines pass on Ruby 3.4.
- Ruby 3.4 is the default for local development (GDK/Caproni) and for MR pipelines.
- No performance regression against Ruby 3.3, validated with GPT.
- Ruby 3.4 is rolled out to GitLab.com and shipped to Self-Managed.
## Notable language changes
See the [Ruby 3.4 changelog](https://rubyreferences.github.io/rubychanges/3.4.html) for the full list.
- `it` as the anonymous block argument
- `**nil` unpacking
- String literals will be frozen in Ruby 3.5 (warnings surface here first)
- `Range#step` iterates any class implementing `+`
- Backtrace improvements
- Ractor improvements
- Significant implementation updates (Prism parser, modular GC)
## Plan
<table>
<tr>
<th>
\#
</th>
<th>Item</th>
<th>Owning team/DRIs</th>
<th>Issue/MR</th>
<th>Target date</th>
<th>Status</th>
</tr>
<tr>
<td>1</td>
<td>Get the Ruby 3.4-branch pipeline green and set ruby next to Ruby 3.4</td>
<td>Stan</td>
<td>
gitlab-org/gitlab!244463
</td>
<td></td>
<td>Rolled back for now until 2 is implemented</td>
</tr>
<tr>
<td>2</td>
<td>
Allow pipelines to run Ruby 3.4 — add `pipeline:run-as-ruby3.4` / `pipeline:run-as-ruby3.3` labels and restore scheduled `master` builds
</td>
<td>Development Health/Pipeline Maintainers</td>
<td>
gitlab-org/gitlab#619382
</td>
<td></td>
<td>Not started</td>
</tr>
<tr>
<td>3</td>
<td>Default the devkits (GDK/Caproni) to Ruby 3.4</td>
<td>Development Tooling</td>
<td>
gitlab-org/gitlab-development-kit#3342<br> gitlab-org/gitlab-development-kit#3343 (patch application bug, non-blocking)
</td>
<td></td>
<td>Not started</td>
</tr>
<tr>
<td>4</td>
<td>Audit gems and update/fix issues arising from it</td>
<td>TBD — some gems have shared/unclear ownership</td>
<td>
https://gitlab.com/groups/gitlab-org/-/work_items/18009+
</td>
<td>2026-10-31</td>
<td>Not started</td>
</tr>
<tr>
<td>5</td>
<td>Run GPT to validate performance</td>
<td>
Performance Enablement
@AndyWH
</td>
<td>
gitlab-org/gitlab#622304
</td>
<td></td>
<td>Not started</td>
</tr>
<tr>
<td>6</td>
<td>Build MRs with Ruby 3.4 by default</td>
<td>Development Health/Pipeline Maintainers</td>
<td></td>
<td></td>
<td>Not started</td>
</tr>
<tr>
<td>7</td>
<td>Distribution updates</td>
<td>Delivery Enablement</td>
<td></td>
<td></td>
<td>Not started</td>
</tr>
<tr>
<td>8</td>
<td>Roll out to GitLab.com</td>
<td>Delivery Enablement</td>
<td></td>
<td></td>
<td>Not started</td>
</tr>
<tr>
<td>9</td>
<td>Update CI to use Ruby 3.4</td>
<td>Development Health/Pipeline Maintainers</td>
<td></td>
<td></td>
<td>Not started</td>
</tr>
<tr>
<td>10</td>
<td>Update the release post and release to Self-Managed</td>
<td>Delivery Enablement</td>
<td></td>
<td></td>
<td>Not started</td>
</tr>
<tr>
<td>11</td>
<td>Clean up Ruby 3.3 pipeline configuration</td>
<td>Development Health/Pipeline Maintainers</td>
<td></td>
<td></td>
<td>Not started</td>
</tr>
</table>
epic