<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: sanif</title>
    <description>The latest articles on DEV Community by sanif (@sanifhimani).</description>
    <link>https://dev.to/sanifhimani</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3733437%2F79b3035e-2f97-4250-a25f-9d05c3a49191.png</url>
      <title>DEV Community: sanif</title>
      <link>https://dev.to/sanifhimani</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sanifhimani"/>
    <language>en</language>
    <item>
      <title>Ruby Deserves Better Documentation Tools</title>
      <dc:creator>sanif</dc:creator>
      <pubDate>Tue, 27 Jan 2026 01:16:21 +0000</pubDate>
      <link>https://dev.to/sanifhimani/ruby-deserves-better-documentation-tools-5j</link>
      <guid>https://dev.to/sanifhimani/ruby-deserves-better-documentation-tools-5j</guid>
      <description>&lt;p&gt;I maintain a Ruby gem. When it came time to write documentation, I went looking for the right tool.&lt;/p&gt;

&lt;p&gt;Jekyll was the obvious choice. It's Ruby-native, battle-tested, and powers GitHub Pages. But Jekyll is built for blogs. Making it work for documentation meant hunting for themes, configuring layouts, and adapting blog-oriented templates to fit technical content. It's possible, but it's work.&lt;/p&gt;

&lt;p&gt;I ended up using VitePress.&lt;/p&gt;

&lt;h2&gt;
  
  
  VitePress Is Excellent. But It Felt Off.
&lt;/h2&gt;

&lt;p&gt;VitePress gave me exactly what I wanted: fast builds, beautiful output, search that just works. My docs looked professional in minutes.&lt;/p&gt;

&lt;p&gt;But there I was - a Ruby gem with a JavaScript documentation site. It worked fine. It just felt like I was borrowing someone else's tools because my own ecosystem didn't have what I needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Gap
&lt;/h2&gt;

&lt;p&gt;JavaScript developers have VitePress, Docusaurus, and Starlight. Python has MkDocs with the Material theme. These are purpose-built for documentation. You run a command, write Markdown, and get a professional docs site with search, dark mode, and components like tabs and callouts.&lt;/p&gt;

&lt;p&gt;Ruby has excellent tools, but they solve different problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;YARD &amp;amp; RDoc&lt;/strong&gt; - API documentation generated from code comments. Perfect for that use case, but not for writing guides and tutorials.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jekyll, Bridgetown, Middleman, Nanoc&lt;/strong&gt; - Capable static site generators, but general-purpose. You'd need to build docs-specific features yourself.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want a documentation site with minimal setup, your options are: configure a general-purpose SSG, or reach for a tool from another ecosystem.&lt;/p&gt;

&lt;p&gt;That felt like a gap worth filling.&lt;/p&gt;

&lt;h2&gt;
  
  
  Docyard
&lt;/h2&gt;

&lt;p&gt;Docyard is a Ruby gem for building documentation sites. The goal: make it as easy to create docs in Ruby as it is in JavaScript or Python.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gem &lt;span class="nb"&gt;install &lt;/span&gt;docyard
docyard init my-docs
&lt;span class="nb"&gt;cd &lt;/span&gt;my-docs
docyard serve
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;That gives you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Search&lt;/strong&gt; - Full-text, keyboard navigation, works offline&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dark mode&lt;/strong&gt; - Follows system preference&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Syntax highlighting&lt;/strong&gt; - All the languages you'd expect&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Components&lt;/strong&gt; - Tabs, callouts, code groups, steps, accordions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sensible defaults&lt;/strong&gt; - Clean typography, responsive layout&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No themes to configure. No build pipeline to set up.&lt;/p&gt;

&lt;p&gt;Here's what a callout looks like in Markdown:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;:::note
This is a note callout. There's also &lt;span class="sb"&gt;`tip`&lt;/span&gt;, &lt;span class="sb"&gt;`warning`&lt;/span&gt;, and &lt;span class="sb"&gt;`danger`&lt;/span&gt;.
:::
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;That renders as a styled callout box. Same pattern for tabs, steps, and other components - all plain Markdown syntax.&lt;/p&gt;
&lt;h2&gt;
  
  
  See It
&lt;/h2&gt;

&lt;p&gt;The Docyard documentation is built with Docyard.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docyard.dev" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Check out Docyard&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Try the search. Toggle dark mode. That's what you get out of the box.&lt;/p&gt;
&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;Docyard is at v1. It handles the core use case well, but there's more to build.&lt;/p&gt;

&lt;p&gt;It's free and open source.&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/sanifhimani" rel="noopener noreferrer"&gt;
        sanifhimani
      &lt;/a&gt; / &lt;a href="https://github.com/sanifhimani/docyard" rel="noopener noreferrer"&gt;
        docyard
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Generate beautiful documentation sites from Markdown
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;
  &lt;a href="https://docyard.dev" rel="nofollow noopener noreferrer"&gt;
    
      
      &lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fsanifhimani%2Fdocyard%2Fdocs%2Fpublic%2Flogo.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fsanifhimani%2Fdocyard%2Fdocs%2Fpublic%2Flogo.svg" height="60" alt="Docyard"&gt;&lt;/a&gt;
    
  &lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
  Markdown to docs in seconds. No Node.js required.
&lt;/p&gt;
&lt;p&gt;
  &lt;a href="https://github.com/sanifhimani/docyard/actions/workflows/ci.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/sanifhimani/docyard/actions/workflows/ci.yml/badge.svg" alt="CI"&gt;&lt;/a&gt;
  &lt;a href="https://badge.fury.io/rb/docyard" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/6f97042ae34db3b9f729bf05114b7a88efbb8c14fd053efda2c4c69e12e35c18/68747470733a2f2f62616467652e667572792e696f2f72622f646f63796172642e737667" alt="Gem Version"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/sanifhimani/docyard/blob/main/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7013272bd27ece47364536a221edb554cd69683b68a46fc0ee96881174c4214c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c75652e737667" alt="License"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;a href="https://docyard.dev" rel="nofollow noopener noreferrer"&gt;Docs&lt;/a&gt; ·
  &lt;a href="https://docyard.dev/getting-started/quickstart" rel="nofollow noopener noreferrer"&gt;Quickstart&lt;/a&gt; ·
  &lt;a href="https://github.com/sanifhimani/docyard/blob/main/CHANGELOG.md" rel="noopener noreferrer"&gt;Changelog&lt;/a&gt;
&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Install&lt;/h2&gt;

&lt;/div&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;gem install docyard
docyard init
docyard serve&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Open &lt;code&gt;localhost:4200&lt;/code&gt;. Edits reload instantly.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Example&lt;/h2&gt;

&lt;/div&gt;

&lt;div class="highlight highlight-text-md notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-s"&gt;:::&lt;/span&gt;&lt;span class="pl-en"&gt;note&lt;/span&gt;
Requires Ruby 3.2 or higher.
&lt;span class="pl-s"&gt;:::&lt;/span&gt;

&lt;span class="pl-s"&gt;:::&lt;/span&gt;&lt;span class="pl-en"&gt;tabs&lt;/span&gt;
== macOS
brew install ruby

== Linux
sudo apt install ruby-full
&lt;span class="pl-s"&gt;:::&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Callouts, tabs, steps, cards, code groups, accordions, and more. &lt;a href="https://docyard.dev/write-content/components" rel="nofollow noopener noreferrer"&gt;See all components&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Build&lt;/h2&gt;

&lt;/div&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;docyard build&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Static HTML, search index, sitemap, and social cards in &lt;code&gt;dist/&lt;/code&gt;. Deploy anywhere.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Docs&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://docyard.dev" rel="nofollow noopener noreferrer"&gt;docyard.dev&lt;/a&gt; is built with Docyard.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Contributing&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;See &lt;a href="https://github.com/sanifhimani/docyard/CONTRIBUTING.md" rel="noopener noreferrer"&gt;CONTRIBUTING.md&lt;/a&gt;.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;License&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://github.com/sanifhimani/docyard/LICENSE" rel="noopener noreferrer"&gt;MIT&lt;/a&gt;&lt;/p&gt;

&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/sanifhimani/docyard" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;





&lt;p&gt;If you try it on a project, I'd like to hear how it goes - especially the rough edges. Issues and feedback welcome.&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>opensource</category>
      <category>documentation</category>
      <category>rails</category>
    </item>
  </channel>
</rss>
