January was a busy month for RDoc, with a batch of improvements that align with my RDoc roadmap for 2026. I also published ruby-skills, a Claude Code plugin that helps it work correctly with Ruby’s version managers and ecosystem.

Claude Code plugins for Ruby development.
Shell 58 1

ruby/rdoc

Markdown and GFM compatibility

The biggest theme this month was bringing RDoc’s Markdown support closer to GitHub Flavored Markdown. I want documentation to render consistently whether you’re reading it on GitHub or in RDoc-generated pages.

Heading anchors now follow GitHub’s convention (lowercase, hyphenated), so standard Markdown links like [link](#my-heading) work as expected:

Strikethrough got a two-part fix. The initial PR added ~~text~~ support, and the follow-up aligned the behavior with GitHub by dropping single-tilde ~text~ (which GitHub doesn’t support either):

ruby/rdoc#1548 by st0012

I also made backticks work for inline code in RDoc markup. Most of developers already use backticks in Ruby documentation out of habit – rather than correcting them when they contribute to RDoc-based documents, the tool should just support it:

And there’s an open PR adding a comparison reference between RDoc’s Markdown support and the GFM spec:

Code blocks and syntax highlighting

Code blocks with explicit non-Ruby language tags (like ```bash) were incorrectly getting Ruby syntax highlighting. I fixed the detection logic and switched to class-based highlight selectors:

ruby/rdoc#1538 by st0012
ruby/rdoc#1546 by st0012

After that fix, non-Ruby blocks had no highlighting at all, so I added basic bash syntax highlighting for sh/shell/bash/console blocks:

ruby/rdoc#1544 by st0012

Documentation rebuild

While working on all of the above, I rebuilt RDoc’s markup documentation to better explain what’s supported in each format:

ruby/rdoc#1542 by st0012

ruby/irb

Two bug fixes this month, both related to debug.gem integration.

The first fixed history not being saved when using debug with RUBY_DEBUG_IRB_CONSOLE=true – the debug gem’s eager session creation confused IRB’s first-session detection:

The second fixed a NoMethodError when using debugger inside IRB (e.g. in Rails console) with Ruby 4.0, where frame.path could be nil during frame filtering:

ruby/irb#1161 by st0012

ruby/ruby

Added gitignore rules for AI agent configuration files. This means developers can now keep local AI instructions (like CLAUDE.md) when working on Ruby without worrying about accidentally committing them:

ruby/ruby#15955 by st0012

ruby/ruby-bench

Fixed CI and the ruby-lsp benchmark to work with Ruby master after the tsort bundled gem transition:

ruby/ruby-bench#458 by st0012