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.
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):
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:
After that fix, non-Ruby blocks had no highlighting at all, so I added basic bash syntax highlighting for sh/shell/bash/console blocks:
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/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/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-bench
Fixed CI and the ruby-lsp benchmark to work with Ruby master after the tsort bundled gem transition: