<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
   <title>Hanami</title>
   <subtitle>Hanami web framework blog</subtitle>
   <link href="http://hanamirb.org/atom.xml" rel="self"/>
   <link href="http://hanamirb.org/blog"/>
   <updated>2026-03-12T01:15:00+00:00</updated>
   <id>http://hanamirb.org/blog</id>
   <author>
     <name>Hanami</name>
     <email>admin@hanamirb.org</email>
   </author>

     <entry>
       <title>Thank you Sidekiq for your support in 2026</title>
       <id>http://hanamirb.org/blog/2026/03/12/thank-you-sidekiq-2026/</id>
       <link rel="alternate" href="http://hanamirb.org/blog/2026/03/12/thank-you-sidekiq-2026/"/>
       <updated>2026-03-12T01:15:00+00:00</updated>
       <author>
         <name>Tim Riley</name>
       </author>
       <summary>
         Welcoming back Mike Perham and Sidekiq.
       </summary>
       <content type="html"><![CDATA[<p>We’re very excited to welcome back Mike Perham and <a href="https://sidekiq.org">Sidekiq</a> as a patron of Hanami (and Dry and Rom) for 2026.</p>

<p>Mike was the very first person to come on board when we opened our sponsorships last year. His early support gave me the confidence to commit a dedicated day per week to this project, which helped us achieve <a href="/blog/2025/12/22/state-of-hanami-december-2025/">everything we did in 2025</a>: shipping our biggest release yet, growing our maintainer team, and beginning to unify our community and ecosystem.</p>

<p>We&#39;re excited to continue our work in 2026. This year you&#39;ll see us launch our new face to the world, bring you two exciting releases of Hanami, and more! Thank you Mike for helping make this happen.</p>

<p>We’d love to have you to join Mike in support of our work. <a href="https://sponsor.hanamirb.org/">Visit our sponsorship site</a> to learn more.</p>
]]></content>
     </entry>
     <entry>
       <title>State of Hanami, December 2025</title>
       <id>http://hanamirb.org/blog/2025/12/22/state-of-hanami-december-2025/</id>
       <link rel="alternate" href="http://hanamirb.org/blog/2025/12/22/state-of-hanami-december-2025/"/>
       <updated>2025-12-22T12:30:00+00:00</updated>
       <author>
         <name>Tim Riley</name>
       </author>
       <summary>
         Everything we did in 2025, and our plans for 2026.
       </summary>
       <content type="html"><![CDATA[
      <h1 id="state-of-hanami-december-2025" class="title"><a name="state-of-hanami-december-2025" class="anchor" href="#state-of-hanami-december-2025">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>State of Hanami, December 2025</h1>
    
<p>I’m very pleased to share our <strong>State of Hanami</strong> update for 2025! We’re back for our second time. If you want to get caught up, <a href="https://hanamirb.org/blog/2024/12/10/state-of-hanami-december-2024/">check out our update from last year</a>.</p>

<p>This has been a pivotal year for Hanami, our first steps into a new era: we made a substantial new release, began unifying our ecosystem, expanded our team, launched our sponsorship program, and saw a real uptick in community activity.</p>

<p>I’ll go into all these highlights below, before leaving you with some plans for 2026.</p>

      <h2 id="our-biggest-release-yet" class="title"><a name="our-biggest-release-yet" class="anchor" href="#our-biggest-release-yet">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>Our biggest release yet</h2>
    
<p>In November we <a href="https://hanamirb.org/blog/2025/11/12/hanami-23-racked-and-ready/">released Hanami 2.3</a>. This was our first major release in a year, and it turned out to be our biggest release yet, with 32 different contributors choosing to make Hanami better. Hanami 2.3 introduced Rack 3 support, resource routing, improved media type handling, along with a wide range of DX improvements. We’d love for you to give it a try!</p>

      <h2 id="our-ecosystem-came-together" class="title"><a name="our-ecosystem-came-together" class="anchor" href="#our-ecosystem-came-together">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>Our ecosystem came together</h2>
    
<p>Our maintainers this year have been taking care of <a href="https://dry-rb.org">Dry</a> and <a href="https://rom-rb.org">Rom</a> in addition to Hanami. We’ve been working towards bringing these projects together under a single banner. As part of this, we’ve chosen a new overall project name, and have been developing a new website and unified branding. Together, these will reintroduce us to the Ruby world and give our users an easier time learning our tools. We plan to launch these in February, but in the meantime, you can check out the <a href="https://github.com/hanakai-rb/site">source code</a> and the <a href="https://hanakai.org">in-progress</a> live site (our guides are already <a href="https://hanakai.org/learn/hanami/v2.3/getting-started">looking particularly fine</a>).</p>

      <h2 id="our-team-grew-again" class="title"><a name="our-team-grew-again" class="anchor" href="#our-team-grew-again">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>Our team grew again</h2>
    
<p>This year we welcomed nine new people to our maintainers team:</p>

<ul>
<li><a href="https://github.com/aaronmallen">Aaron Allen</a></li>
<li><a href="https://github.com/afomera">Andrea Fomera</a></li>
<li><a href="https://github.com/dcr8898">Damian C. Rossney</a></li>
<li><a href="https://github.com/josephinehall">Josephine Hall</a></li>
<li><a href="https://github.com/krzykamil">Krzysztof Piotrowski</a></li>
<li><a href="https://github.com/makenosound">Max Wheeler</a></li>
<li><a href="https://github.com/katafrakt">Paweł Świątkowski</a></li>
<li><a href="https://github.com/radar">Ryan Bigg</a></li>
<li><a href="https://github.com/svoop">Sven Schwyn</a></li>
</ul>

<p>These joined our existing team members, who have continued to work over the last year:</p>

<ul>
<li><a href="https://github.com/aaronmoodie">Aaron Moodie</a></li>
<li><a href="https://github.com/alassek">Adam Lassek</a></li>
<li><a href="https://github.com/kyleplump">Kyle Plump</a></li>
<li><a href="https://github.com/waiting-for-dev">Marc Busqué</a></li>
<li><a href="https://github.com/flash-gordon">Nikita Shilnikov</a></li>
<li><a href="https://github.com/parndt">Philip Arndt</a></li>
<li><a href="https://github.com/cllns">Sean Collins</a></li>
<li><a href="https://github.com/timriley">Tim Riley</a></li>
</ul>

<p>Thank you to all these beautiful people for giving their time to Hanami and for improving our part of the Ruby world!</p>

<p>All up, our maintainers team is now 17 strong. This feels like a good foundation for us to step up and do even better work next year. If you’d like to get involved, we recommend helping to triage issues and evaluate pull requests.</p>

      <h2 id="our-community-shone-through" class="title"><a name="our-community-shone-through" class="anchor" href="#our-community-shone-through">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>Our community shone through</h2>
    
<p>Our community took things to a new level this year:</p>

<ul>
<li>We launched <a href="https://discord.gg/KFCxDmk3JQ">our Discord</a> and saw it bring more community activity than ever before.</li>
<li>We saw the launch of several new open source Hanami apps, including Princeton University Library’s <a href="https://github.com/pulibrary/orcid_princeton_hanami">orcid_princeton_hanami</a>, which is also running in production! Huge props to <a href="https://github.com/carolyncole">Carolyn Cole</a> for driving that project and <a href="https://discourse.hanamirb.org/t/converting-a-rails-app-feature-parity/1287">sharing her thoughts</a> on the process. We also saw the release of Pat Allan’s <a href="https://codeberg.org/patallan/playsmith">Playsmith</a>, Ryan Bigg’s <a href="https://github.com/radar/twist-v3">Twist v3</a>, and our very own <a href="https://github.com/hanakai-rb/site">upcoming website</a>. Meanwhile, Paweł continues to keep <a href="https://github.com/katafrakt/palaver">Palaver</a> up to date as one of the most complete example apps out there.</li>
<li><a href="https://github.com/inouire">Edouard</a> launched the new (commercial) <a href="https://catalogue-studio.com/">Catalogue Studio</a>, after leaving us a brilliant trail of “<a href="https://discourse.hanamirb.org/t/hanami-1-3-hanami-2-2-tips-notes-about-my-journey/1210">Tips and notes about [his] journey</a>” from Hanami 1.3 to 2.2.</li>
<li><a href="https://github.com/afomera">Andrea Fomera</a> arrived on the scene with a <em>meteorological</em> level of energy. She contributed some key pieces to Hanami 2.3, and also created <a href="https://github.com/afomera/hanami-omakase">hanami-omakase</a> as a proving ground for Rails-alike features.</li>
<li><a href="https://github.com/radar">Ryan Bigg</a> pointed his big blogging brain our way and penned his “<a href="https://ryanbigg.com/2025/10/hanami-for-rails-developers-1-models">Hanami for Rails developers</a>” series. With Ryan now on the team, we’re looking forward to creating our very own “for Rails devs” guides in the future!</li>
<li><a href="https://github.com/andrew">Andrew Nesbitt</a> shipped <a href="https://github.com/andrew/hanami-sprockets">hanami-sprockets</a>, an alternative asset bundler and proving ground for the pluggable bundlers we’d like to ship next year.</li>
<li>Andrew also helped us get our new <a href="https://github.com/hanakai-rb/awesome-hanakai">awesome-hanakai</a> repo off the ground. There’s still a bit of tidying to do, but it exists, and that’s the important thing. If you have something awesome, now you know where to put it!</li>
<li>Did I mention our Hanami 2.3 release saw input from 32 different contributors? This is amazing! Thanks in particular to <a href="https://github.com/wout">Wout</a> and <a href="https://github.com/wuarmin">Armin</a> for multiple helpful contributions across the year.</li>
<li>Starting in August, I’ve also been sharing <a href="https://timriley.info/tag/continuations">my weeknotes</a> covering Hanami development. I hope you find them helpful!</li>
</ul>

<p>Our community is the most important thing to us. To reflect this, this year we made our community values clearer than ever, and placed them <a href="https://hanamirb.org">front and centre on our website</a>:</p>

<blockquote>
<p>We want the Hanami community to be a welcoming place for people who bring kindness, curiosity, and care. A place where people of all backgrounds and experience levels can feel respected, and can share and grow. A place for people to be proud of, and feel safe within.</p>

<p>We do not tolerate nazis, transphobes, racists, or any kind of bigotry. See our <a href="https://hanamirb.org/community#code-of-conduct">code of conduct</a> for more.</p>
</blockquote>

<p>We also <a href="https://hanamirb.org/blog/2025/09/02/hanami-adopts-contributor-covenant-3-0/">adopted the Contributor Covenant 3.0</a>, which brings a more approachable text for our worldwide community, and places a helpful emphasis on restorative justice.</p>

<p>I believe our values have played a big part in the health and growth of our community this year. Thank you to everyone for building a space we can all enjoy!</p>

      <h2 id="we-went-out-into-the-world" class="title"><a name="we-went-out-into-the-world" class="anchor" href="#we-went-out-into-the-world">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>We went out into the world</h2>
    
<p>Once again, we took ourselves to some conferences!</p>

<ul>
<li>Tim visited beautiful Riga, Latvia for <a href="https://balticruby.org/archive/2025">Baltic Ruby</a>, where he presented a new Murakami-themed introduction to Hanami, and thoughts on the importance of a diverse Ruby ecosystem. He also ran a hack session, where <a href="https://github.com/ismasan">Ismael Celis</a> used his <a href="https://github.com/ismasan/sourced">sourced</a> toolkit to create the <a href="https://bsky.app/profile/ismaelcelis.com/post/3lrj5ltfvlc2a">world’s first event-sourced calculator built on Hanami</a>, and <a href="https://github.com/krzykamil">Krzysztof</a> worked on the <code>db rollback</code> command for Hanami 2.3. Thank you to Baltic Ruby for the invitation!</li>
<li><a href="https://github.com/cllns">Sean</a> attended <a href="https://rockymtnruby.dev">Rocky Mountain Ruby</a> in Boulder, Colorado, and spoke on <a href="https://www.rubyevents.org/talks/slicing-and-dicing-through-complexity-with-hanami?back_to=%2Fevents%2Frocky-mountain-ruby-2025%2Ftalks%3Fscroll_top%3D1872&amp;back_to_title=Rocky+Mountain+Ruby+2025">Slicing and Dicing through Complexity with Hanami</a>. He also got to spend some quality time with some #HanamiFriends new and old!</li>
<li>Tim was lucky enough to reprise his talk at both <a href="https://www.xoruby.com/event/san-diego/">XO Ruby San Diego</a> and <a href="https://thoughtbot.com/blog/announcing-the-thoughtbot-open-summit-2025-full-schedule">thoughtbot Open Summit</a>. Thanks to XO organiser <a href="https://ruby.social/@jremsikjr">Jim Remsik</a>, the San Diego talk was streamed to the internet, and the Open Summit was a native online event. We saw a good-sized group come together for each one, and I’m really glad I could share Hanami in such an open way. Thank you to Jim and thoughtbot for making these happen!</li>
</ul>

<div style="display: flex; gap: 1rem;">
<img src="/blog/2025/12/22/state-of-hanami-december-2025/sean-at-rocky-mountain-ruby.jpeg" alt="Sean on stage at Rocky Mountain Ruby" style="flex: 1; max-width: 50%;">
<img src="/blog/2025/12/22/state-of-hanami-december-2025/tim-at-baltic-ruby.jpeg" alt="Matz joins the Hanami table at Baltic Ruby" style="flex: 1; max-width: 50%;">
</div>

      <h2 id="we-launched-our-sponsorship-program" class="title"><a name="we-launched-our-sponsorship-program" class="anchor" href="#we-launched-our-sponsorship-program">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>We launched our sponsorship program</h2>
    
<p>This year we launched our first ever <a href="https://sponsor.hanamirb.org">sponsorship program</a> for Hanami, Dry and Rom. These are big and ambitious projects, and they need consistent attention for them to grow. Thanks to the support of the Ruby community, we made this happen! Since February this year, I’ve been able to commit a full business day every week towards the stewardship of our projects.</p>

<p>This could not have happened without our founding patrons. Thank you to <a href="https://sidekiq.org/"><strong>Sidekiq</strong></a>, <a href="https://github.com/baweaver"><strong>Brandon Weaver</strong></a>, <a href="https://www.honeybadger.io/?utm_source=hanami&amp;utm_medium=paid-referral&amp;utm_campaign=founding-patron"><strong>Honeybadger</strong></a>, <a href="https://www.fastruby.io/"><strong>FastRuby</strong></a>, and <a href="https://www.appsignal.com/"><strong>AppSignal</strong></a> for your support! Your courage and belief is what got this thing off the ground in the first place.</p>

<p>Thank you also to all the individuals who are supporting us <a href="https://github.com/sponsors/hanami">through GitHub sponsors</a>. There are 20 of you right now! There’s real power in numbers, and your support takes us further than we could go alone.</p>

<p>We’ll run another sponsorship drive toward the middle of next year, but we are ready to accept your support at any time! <a href="https://sponsor.hanamirb.org">See our sponsorship site</a> to learn more. A few more businesses, or growing from 20 to 40 individual supporters, would make a huge difference to our project. And as you can see from everything in this post, your support goes a long way.</p>

<p>We have also ceased our relationship with Ruby Central as a fiscal host, following their removal of the Bundler and RubyGems.org maintainer teams from those projects, and their conduct thereafter. We stand with every maintainer.</p>

      <h2 id="looking-forward-to-next-year" class="title"><a name="looking-forward-to-next-year" class="anchor" href="#looking-forward-to-next-year">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>Looking forward to next year</h2>
    
<p>Just like <a href="https://hanamirb.org/blog/2024/12/10/state-of-hanami-december-2024/">last year</a>, we have some goals we want to pursue across 2026:</p>

<ul>
<li><strong>Establish a twice-a-year release cycle for Hanami.</strong> Right now we’re aiming for May and November.</li>
<li><strong>Finish unifying our ecosystem.</strong> We’ll launch our new site, finish rolling out our repo sync and release automation, then look at merging our forums.</li>
<li><strong>Prepare the future for Dry and Rom.</strong> We want to reinvigorate these gems and make things easier for new contributors. This means triaging issues, bringing on focused maintainers, and developing roadmaps for the next phase of these projects.</li>
<li><strong>Enter a successful second year of funded maintenance.</strong> Year one proved we could do this. Year two will show us whether we can sustain it. We’re looking forward to your support!</li>
</ul>

<p>We’ll share more on each of these as we work through the year.</p>

<p>In the meantime, that’s it from us for 2025. Thank you to everyone who contributed to a wonderful year of improvements. We’re looking forward to continuing the work!</p>
]]></content>
     </entry>
     <entry>
       <title>Hanami 2.3: Racked and Ready</title>
       <id>http://hanamirb.org/blog/2025/11/12/hanami-23-racked-and-ready/</id>
       <link rel="alternate" href="http://hanamirb.org/blog/2025/11/12/hanami-23-racked-and-ready/"/>
       <updated>2025-11-12T13:00:00+00:00</updated>
       <author>
         <name>Tim Riley</name>
       </author>
       <summary>
         Our biggest release yet. Rack 3, resource routes, and so much more.
       </summary>
       <content type="html"><![CDATA[<p>Today we are excited to announce Hanami 2.3! With this release, we unlock Rack 3, introduce resource routes, and deliver dozens of quality-of-life improvements that make building with Hanami smoother than ever.</p>

      <h2 id="built-for-rack-3" class="title"><a name="built-for-rack-3" class="anchor" href="#built-for-rack-3">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>Built for Rack 3</h2>
    
<p>We are excited to bring Rack 3 support to Hanami! We now support both versions 2 and 3, so you can use whichever version of Rack suits your situation. We encourage you to upgrade Rack when you can, and we’re happy that Hanami can help you on this path.</p>

<p>When you upgrade to Rack 3, check out the <a href="https://github.com/rack/rack/blob/main/UPGRADE-GUIDE.md">Rack 3 upgrade guide</a>. Hanami already handles the essential changes for you, but you may need to update your app code if you’re working with Rack request/response details.</p>

      <h2 id="streamlined-from-route-to-response" class="title"><a name="streamlined-from-route-to-response" class="anchor" href="#streamlined-from-route-to-response">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>Streamlined from route to response</h2>
    
<p>More than just Rack, we’ve refined all aspects of our routing and request handling layer. The biggest change is the return of resource-based routing.</p>

<p>To set up RESTful routes, you’d previously add the following lines:</p>
<div class="highlight"><pre class="highlight ruby"><code><span style="color: #999988;font-style: italic"># Previously...</span>
<span style="background-color: #f8f8f8">get</span> <span style="color: #d14">"/books"</span><span style="background-color: #f8f8f8">,</span> <span style="color: #990073">to: </span><span style="color: #d14">"books.index"</span><span style="background-color: #f8f8f8">,</span> <span style="color: #990073">as: :books</span>
<span style="background-color: #f8f8f8">get</span> <span style="color: #d14">"/books/:id"</span><span style="background-color: #f8f8f8">,</span> <span style="color: #990073">to: </span><span style="color: #d14">"books.show"</span><span style="background-color: #f8f8f8">,</span> <span style="color: #990073">as: :book</span>
<span style="background-color: #f8f8f8">get</span> <span style="color: #d14">"/books/new"</span><span style="background-color: #f8f8f8">,</span> <span style="color: #990073">to: </span><span style="color: #d14">"books.new"</span><span style="background-color: #f8f8f8">,</span> <span style="color: #990073">as: :new_book</span>
<span style="background-color: #f8f8f8">post</span> <span style="color: #d14">"/books"</span><span style="background-color: #f8f8f8">,</span> <span style="color: #990073">to: </span><span style="color: #d14">"books.create"</span>
<span style="background-color: #f8f8f8">get</span> <span style="color: #d14">"/books/:id/edit"</span><span style="background-color: #f8f8f8">,</span> <span style="color: #990073">to: </span><span style="color: #d14">"books.edit"</span><span style="background-color: #f8f8f8">,</span> <span style="color: #990073">as: :edit_book</span>
<span style="background-color: #f8f8f8">patch</span> <span style="color: #d14">"/books/:id"</span><span style="background-color: #f8f8f8">,</span> <span style="color: #990073">to: </span><span style="color: #d14">"books.update"</span>
<span style="background-color: #f8f8f8">delete</span> <span style="color: #d14">"/books/:id"</span><span style="background-color: #f8f8f8">,</span> <span style="color: #990073">to: </span><span style="color: #d14">"books.destroy"</span>
</code></pre></div>
<p>Now, all you need is one:</p>
<div class="highlight"><pre class="highlight ruby"><code><span style="color: #999988;font-style: italic"># Now! 🥰</span>
<span style="background-color: #f8f8f8">resources</span> <span style="color: #990073">:books</span>
</code></pre></div>
<p>Resource routing is integrated with every aspect of routing. Resources can be customized, nested, and combined with scopes and ordinary routes. <a href="https://guides.hanamirb.org/v2.3/routing/overview/#resource-routes">Learn more here</a>.</p>

<p>The improvements don’t stop there! With this release:</p>

<ul>
<li>Route scopes can be given custom name prefixes.</li>
<li>Routes can be named with a prefix that precedes scope prefixes.</li>
<li>Router runtime performance is considerably improved for large numbers of routes.</li>
<li>Multipart form and JSON request bodies are parsed by default.</li>
<li>Action format and media type config is <a href="https://guides.hanamirb.org/v2.3/actions/formats-and-media-types/">clearer and more flexible</a>.</li>
<li>You can access your subdomains via <code>Request#subdomains</code>, and <a href="https://guides.hanamirb.org/v2.3/actions/request-and-response/#request">configure your TLD length</a>.</li>
<li>When you add <code>&#39;nonce&#39;</code> to your content security policy, nonces are automatically added to script and stylesheet tags.</li>
<li>CSRF tokens are loaded from the <code>X-CSRF-Token</code> header in addition to request params.</li>
</ul>

      <h2 id="dx-in-the-details" class="title"><a name="dx-in-the-details" class="anchor" href="#dx-in-the-details">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>DX in the details</h2>
    
<p>We’ve also improved many more of your day-to-day interactions with Hanami:</p>

<ul>
<li><code>hanami new</code> now initializes a Git repository for new apps. You can also provide <code>--skip-view</code> to skip the view layer, as well as <code>--gem-source</code>, so you can use <a href="https://gem.coop">gem.coop</a> from the get-go.</li>
<li>New apps get a helpful <code>bin/setup</code> script, as well as an improved README with a handy list of first steps.</li>
<li>New apps also receive a <code>bin/hanami</code> binstub, so you can invoke <code>bin/hanami</code> without requiring a <code>bundle exec</code>.</li>
<li>Run <code>hanami db rollback</code> to easily rollback a database migration.</li>
<li>Add your own methods to <code>hanami console</code> via your own modules: add <code>config.console.include MyModule</code> in your app class.</li>
<li>Prefer Pry to IRB? Make it the default with <code>config.console.engine = :pry</code>.</li>
<li>The console now prints a one-time warning when you access the <code>keys</code> for an un-booted app or slice. You can also chose to boot your app preemptively with <code>hanami console --boot</code>.</li>
<li>The default <code>Rakefile</code> will automatically load custom tasks from <code>lib/tasks/</code>.</li>
<li><a href="https://guides.hanamirb.org/v2.3/views/context/">View context</a> classes are generated by default, so you can more easily see where to put custom view logic.</li>
<li>Run <code>hanami generate</code> command within a slice directory and the generated file will target that slice automatically.</li>
</ul>

<p>We’ve made dozens more small improvements and fixes. Check out <a href="https://github.com/hanami/hanami/blob/main/CHANGELOG.md">the changelogs</a> to learn more.</p>

      <h2 id="try-hanami-2-3" class="title"><a name="try-hanami-2-3" class="anchor" href="#try-hanami-2-3">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>Try Hanami 2.3</h2>
    
<p>There’s never been a better time to try Hanami. For this release we’ve made our <a href="https://guides.hanamirb.org/v2.3/introduction/getting-started/">getting started guide</a> more concise and easier to follow. Now you can get up and running faster than ever!</p>

<p>Why don’t you give it a try? Your first Hanami app is just a few commands away:</p>
<div class="highlight"><pre class="highlight shell"><code><span style="color: #008080">$ </span>gem <span style="color: #0086B3">install </span>hanami
<span style="color: #008080">$ </span>hanami new my_app
<span style="color: #008080">$ </span><span style="color: #0086B3">cd </span>my_app
<span style="color: #008080">$ </span>bin/hanami dev
<span style="color: #008080">$ </span>open http://localhost:2300
</code></pre></div>
<p>We’d love to hear how you go! Come join our <a href="https://discord.gg/KFCxDmk3JQ">Discord</a> or <a href="https://discourse.hanamirb.org">forum</a> and share your experience with our lovely community.</p>

<p>And if you’re a certified legend already rocking a Hanami app, make sure to check out the <a href="https://guides.hanamirb.org/v2.3/upgrade-notes/v2.3/">upgrade notes</a> for 2.3.</p>

      <h2 id="thank-you-to-our-contributors-" class="title"><a name="thank-you-to-our-contributors-" class="anchor" href="#thank-you-to-our-contributors-">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>Thank you to our contributors!</h2>
    
<p>Hanami 2.3 is a significant release: it comes courtesy of our <strong>biggest contributors group yet.</strong> Thank you to all these wonderful humans!</p>

<ul>
<li><a href="https://github.com/aaronmallen">Aaron Allen</a></li>
<li><a href="https://github.com/alassek">Adam Lassek</a></li>
<li><a href="https://github.com/rickenharp">Alexander Gräfe</a></li>
<li><a href="https://github.com/AlexanderZagaynov">Alexander Zagaynov</a></li>
<li><a href="https://github.com/afomera">Andrea Fomera</a></li>
<li><a href="https://github.com/baweaver">Brandon Weaver</a></li>
<li><a href="https://github.com/dcr8898">Damian C. Rossney</a></li>
<li><a href="https://github.com/davidcelis">David Celis</a></li>
<li><a href="https://github.com/hanarimawi">Hana Rimawi</a></li>
<li><a href="https://github.com/inouire">inouire</a></li>
<li><a href="https://github.com/jaredcwhite">Jared White</a></li>
<li><a href="https://github.com/josephinehall">Jojo Hall</a></li>
<li><a href="https://github.com/krzykamil">Krzysztof Piotrowski</a></li>
<li><a href="https://github.com/kyleplump">Kyle Plump</a></li>
<li><a href="https://github.com/mathewdbutton">Mathew Button</a></li>
<li><a href="https://github.com/maxemitchell">Max Mitchell</a></li>
<li><a href="https://github.com/minaslater">Mina Slater</a></li>
<li><a href="https://github.com/katafrakt">Paweł Świątkowski</a></li>
<li><a href="https://github.com/p8">Petrik de Heus</a></li>
<li><a href="https://github.com/parndt">Philip Arndt</a></li>
<li><a href="https://github.com/robyurkowski">Rob Yurkowski</a></li>
<li><a href="https://github.com/radar">Ryan Bigg</a></li>
<li><a href="https://github.com/cllns">Sean Collins</a></li>
<li><a href="https://github.com/masterT">Simon Thiboutôt</a></li>
<li><a href="https://github.com/stephannv">stephannv</a></li>
<li><a href="https://github.com/svoop">Sven Schwyn</a></li>
<li><a href="https://github.com/seven1m">Tim Morgan</a></li>
<li><a href="https://github.com/timriley">Tim Riley</a></li>
<li><a href="https://github.com/WToa">William Tio</a></li>
<li><a href="https://github.com/wout">Wout</a></li>
<li><a href="https://github.com/wuarmin">wuarmin</a></li>
<li><a href="https://github.com/y-yagi">y-yagi</a></li>
</ul>

<p>There’s always room for more. Our community is <a href="https://hanamirb.org/community/">inclusive and welcoming</a>, and we’d love to have you join us.</p>

      <h2 id="thank-you-to-our-patrons-" class="title"><a name="thank-you-to-our-patrons-" class="anchor" href="#thank-you-to-our-patrons-">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>Thank you to our patrons! 🌸</h2>
    
<p>This is also our first major release since launching our <a href="https://sponsor.hanamirb.org">sponsorship program</a>. I’d like to extend my deepest thanks to our founding patrons: <a href="https://sidekiq.org"><strong>Sidekiq</strong></a>, <a href="https://github.com/baweaver"><strong>Brandon Weaver</strong></a>, <a href="https://www.honeybadger.io/?utm_source=hanami&amp;utm_medium=paid-referral&amp;utm_campaign=founding-patron"><strong>Honeybadger</strong></a>, <a href="https://www.fastruby.io/"><strong>FastRuby.io</strong></a> and <a href="https://www.appsignal.com/"><strong>AppSignal</strong></a>. Without you, this release wouldn’t have been possible.</p>

<p>Thank you also to the individuals supporting Hanami through our <a href="https://github.com/sponsors/hanami">GitHub Sponsors</a>. There are now 21 of you!</p>

<p>We’d love for you to become a patron too. <a href="https://sponsor.hanamirb.org">Learn more here</a>.</p>
]]></content>
     </entry>
     <entry>
       <title>Announcing Hanami 2.3 beta2</title>
       <id>http://hanamirb.org/blog/2025/10/17/announcing-hanami-230beta2/</id>
       <link rel="alternate" href="http://hanamirb.org/blog/2025/10/17/announcing-hanami-230beta2/"/>
       <updated>2025-10-17T09:30:00+00:00</updated>
       <author>
         <name>Tim Riley</name>
       </author>
       <summary>
         Improved action formats, hanami run command and more.
       </summary>
       <content type="html"><![CDATA[<p>Two weeks after <a href="/blog/2025/10/03/announcing-hanami-230beta2/">beta1</a>, it’s time for 2.3 beta2!</p>

<p>This will be our last beta, and we’re aiming for the full 2.3 release in two weeks. Read on to see what’s new.</p>

      <h2 id="-code-hanami-run-code-command" class="title"><a name="-code-hanami-run-code-command" class="anchor" href="#-code-hanami-run-code-command">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a><code>hanami run</code> command</h2>
    
<p>You can now can run your own scripts and code snippets with the <code>hanami run</code> command!</p>
<div class="highlight"><pre class="highlight shell"><code><span style="color: #008080">$ </span>bundle <span style="color: #0086B3">exec </span>hanami run my_script.rb
<span style="color: #008080">$ </span>bundle <span style="color: #0086B3">exec </span>hanami run <span style="color: #d14">'Hanami.app["repos.commit_repo"].all.count'</span>
</code></pre></div>
      <h2 id="improved-action-formats-config" class="title"><a name="improved-action-formats-config" class="anchor" href="#improved-action-formats-config">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>Improved action formats config</h2>
    
<p>Our <a href="https://guides.hanamirb.org/v2.2/actions/formats-and-mime-types/">previous approach</a> to action formats config (<code>config.formats</code> in action classes or <code>config.actions.formats</code> in app or slice classes) made it too hard to configure and use your own custom formats. We’ve now overhauled this config and made it much more flexible.</p>

<p>This is an important change and we’d love your help with testing. If you configure formats for your actions, please pull down this beta and give this a go!</p>

<p><strong>Use <code>config.formats.register</code> to register a new format and its media types.</strong></p>

<p>This replaces <code>config.formats.add</code>. Unlike <code>.add</code>, it does <em>not</em> activate the format as “accepted” at the same time. This makes it easier to <code>register</code> your custom formats in app config or a base action class, while maintaining control over where you apply your format restrictions.</p>

<p>A simple registration looks like this:</p>
<div class="highlight"><pre class="highlight ruby"><code><span style="background-color: #f8f8f8">config</span><span style="background-color: #f8f8f8">.</span><span style="color: #990000;font-weight: bold">formats</span><span style="background-color: #f8f8f8">.</span><span style="color: #990000;font-weight: bold">register</span><span style="background-color: #f8f8f8">(</span><span style="color: #990073">:json</span><span style="background-color: #f8f8f8">,</span> <span style="color: #d14">"application/json"</span><span style="background-color: #f8f8f8">)</span>
</code></pre></div>
<p><code>.register</code> also allows you to register one or more media types for the different stages of request processing:</p>

<ul>
<li>Provide <code>accept_types:</code> to accept requests based on specific <code>Accept</code> types in request headers.</li>
<li>Provide <code>content_types:</code> to accept requests based on specific <code>Content-Type</code> request headers.</li>
<li>Both the above are are optional. If you do not provide these, then the format’s <em>default</em> media type (the required second argument) is used for each.</li>
<li>This default media type is also set as the default <code>Content-Type</code> response header when requests match that format.</li>
</ul>

<p>Together, these allow you to register a format like this:</p>
<div class="highlight"><pre class="highlight ruby"><code><span style="background-color: #f8f8f8">config</span><span style="background-color: #f8f8f8">.</span><span style="color: #990000;font-weight: bold">formats</span><span style="background-color: #f8f8f8">.</span><span style="color: #990000;font-weight: bold">register</span><span style="background-color: #f8f8f8">(</span>
  <span style="color: #990073">:jsonapi</span><span style="background-color: #f8f8f8">,</span>
  <span style="color: #d14">"application/vnd.api+json"</span><span style="background-color: #f8f8f8">,</span>
  <span style="color: #990073">accept_types: </span><span style="background-color: #f8f8f8">[</span><span style="color: #d14">"application/vnd.api+json"</span><span style="background-color: #f8f8f8">,</span> <span style="color: #d14">"application/json"</span><span style="background-color: #f8f8f8">],</span>
  <span style="color: #990073">content_types: </span><span style="background-color: #f8f8f8">[</span><span style="color: #d14">"application/vnd.api+json"</span><span style="background-color: #f8f8f8">,</span> <span style="color: #d14">"application/json"</span><span style="background-color: #f8f8f8">],</span>
<span style="background-color: #f8f8f8">)</span>
</code></pre></div>
<p><strong>Use <code>config.formats.accept</code> to accept specific formats from an action.</strong></p>

<p><code>formats.accept</code> replaces <code>Action.format</code> and <code>config.format</code>. You can access your accepted formats via <code>formats.accepted</code>, which replaces <code>config.formats.values</code>.</p>

<p>To accept a format:</p>
<div class="highlight"><pre class="highlight ruby"><code><span style="background-color: #f8f8f8">config</span><span style="background-color: #f8f8f8">.</span><span style="color: #990000;font-weight: bold">formats</span><span style="background-color: #f8f8f8">.</span><span style="color: #990000;font-weight: bold">accept</span> <span style="color: #990073">:html</span><span style="background-color: #f8f8f8">,</span> <span style="color: #990073">:json</span>
<span style="background-color: #f8f8f8">config</span><span style="background-color: #f8f8f8">.</span><span style="color: #990000;font-weight: bold">formats</span><span style="background-color: #f8f8f8">.</span><span style="color: #990000;font-weight: bold">accepted</span> <span style="color: #999988;font-style: italic"># =&gt; [:html, :json]</span>

<span style="background-color: #f8f8f8">config</span><span style="background-color: #f8f8f8">.</span><span style="color: #990000;font-weight: bold">formats</span><span style="background-color: #f8f8f8">.</span><span style="color: #990000;font-weight: bold">accept</span> <span style="color: #990073">:csv</span> <span style="color: #999988;font-style: italic"># Accepted formats are additive</span>
<span style="background-color: #f8f8f8">config</span><span style="background-color: #f8f8f8">.</span><span style="color: #990000;font-weight: bold">formats</span><span style="background-color: #f8f8f8">.</span><span style="color: #990000;font-weight: bold">accepted</span> <span style="color: #999988;font-style: italic"># =&gt; [:html, :json, :csv]</span>
</code></pre></div>
<p>The first format you give to <code>accept</code> will also become the <em>default format</em> for responses from your action, but <em>only</em> if you haven’t already configured a default using the approach below.</p>

<p><strong>Use config.formats.default=` to set an action&#39;s default format.</strong></p>

<p>This is a new capability. Assign an action’s default format using <code>config.formats.default=</code>.</p>

<p>The default format is used to set the response <code>Content-Type</code> header when the request does not specify a format via <code>Accept</code>.</p>
<div class="highlight"><pre class="highlight ruby"><code><span style="background-color: #f8f8f8">config</span><span style="background-color: #f8f8f8">.</span><span style="color: #990000;font-weight: bold">formats</span><span style="background-color: #f8f8f8">.</span><span style="color: #990000;font-weight: bold">accept</span> <span style="color: #990073">:html</span><span style="background-color: #f8f8f8">,</span> <span style="color: #990073">:json</span>

<span style="color: #999988;font-style: italic"># When no default is already set, the first accepted format becomes default</span>
<span style="background-color: #f8f8f8">config</span><span style="background-color: #f8f8f8">.</span><span style="color: #990000;font-weight: bold">formats</span><span style="background-color: #f8f8f8">.</span><span style="color: #990000;font-weight: bold">default</span> <span style="color: #999988;font-style: italic"># =&gt; :html</span>

<span style="color: #999988;font-style: italic"># But you can now configure this directly</span>
<span style="background-color: #f8f8f8">config</span><span style="background-color: #f8f8f8">.</span><span style="color: #990000;font-weight: bold">formats</span><span style="background-color: #f8f8f8">.</span><span style="color: #990000;font-weight: bold">default</span> <span style="color: #000000;font-weight: bold">=</span> <span style="color: #990073">:json</span>
</code></pre></div>
<p><strong>Previous format config methods are deprecated.</strong></p>

<p>The previous format config methods (<code>Action.format</code>, <code>config.format</code>, <code>config.formats.add</code>, <code>config.formats.values</code>, and <code>config.formats.values=</code>) continue to work, but are now deprecated and will be removed in Hanami 2.4.</p>

<p>Switching to the methods above should be straightforward, and they give you significantly more flexibility. We hope you give them a go!</p>

      <h2 id="thank-you-to-our-patrons-" class="title"><a name="thank-you-to-our-patrons-" class="anchor" href="#thank-you-to-our-patrons-">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>Thank you to our patrons 🌸</h2>
    
<p>Thank you to our <a href="https://sponsor.hanamirb.org">Hanami patrons</a> who made this release possible! That’s <a href="https://sidekiq.org"><strong>Sidekiq</strong></a>, <a href="https://github.com/baweaver"><strong>Brandon Weaver</strong></a>, <a href="https://www.honeybadger.io/?utm_source=hanami&amp;utm_medium=paid-referral&amp;utm_campaign=founding-patron"><strong>Honeybadger</strong></a>, <a href="https://www.fastruby.io/"><strong>FastRuby.io</strong></a> and <a href="https://www.appsignal.com/"><strong>AppSignal</strong></a>.</p>

<p>Thank you also to all the community members supporting Hanami through our <a href="https://github.com/sponsors/hanami">GitHub Sponsors</a>. There are now more than 20 of you!</p>

<p>We’d love for you to become a patron too. <a href="https://sponsor.hanamirb.org">Learn more here.</a></p>

      <h2 id="improvements-amp-fixes" class="title"><a name="improvements-amp-fixes" class="anchor" href="#improvements-amp-fixes">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>Improvements &amp; fixes</h2>
    
<p>We’ve got even more improvements and fixes in this release:</p>

<ul>
<li>The router sees a big runtime performance boost for large numbers of routes, addressing a performance regression that was introduced as part of some fixes in Hanami 2.2.</li>
<li><code>hanami generate action</code> now accepts a <code>--skip-tests</code> flag.</li>
<li><code>hanami generate action</code> will add routes to slice-specific <code>config/routes.rb</code> files, if present.</li>
<li><code>hanami generate</code> commands now graceully handle names given with mixed cases.</li>
<li>In new apps, the <code>Types</code> module now uses <code>Dry.Types(default: :strict)</code>.</li>
<li>In new apps, the generated <code>Guardfile</code> now passes the environment from <code>ENV[&quot;HANAMI_ENV&quot;]</code>.</li>
<li>The view context no longer includes <code>&quot;settings&quot;</code> as a default dependency. You can include this yourself if you need it.</li>
<li>Errors for missing actions in routes now show friendlier, relative file paths.</li>
</ul>

<p>With this release, we’ve also dropped support for Ruby 3.1. Hanami 2.3 will require Ruby 3.2 or later.</p>

      <h2 id="we-need-your-help-" class="title"><a name="we-need-your-help-" class="anchor" href="#we-need-your-help-">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>We need your help!</h2>
    
<p>We need your help with testing! In addition to the new action formats config, we’re still keen for feedback from people navigating the upgrade to Rack 3, which we enabled <a href="/blog/2025/10/03/announcing-hanami-230beta1/">as part of beta1</a>.</p>

<p>If you have a Hanami app, please try upgrading to 2.3.0.beta2, adopting Rack 3, and improving your action formats. We’d love to hear how you go!</p>

      <h2 id="how-can-i-try-it-" class="title"><a name="how-can-i-try-it-" class="anchor" href="#how-can-i-try-it-">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>How can I try it?</h2>
    <div class="highlight"><pre class="highlight plaintext"><code>&gt; gem install hanami --pre
&gt; hanami new my_app
&gt; cd my_app
&gt; bundle exec hanami dev
</code></pre></div>
      <h2 id="what-s-included-" class="title"><a name="what-s-included-" class="anchor" href="#what-s-included-">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>What’s included?</h2>
    
<p>Today we’re releasing the following:</p>

<ul>
<li>hanami v2.3.0.beta2</li>
<li>hanami-assets v2.3.0-beta.2 (npm package)</li>
<li>hanami-assets v2.3.0.beta2</li>
<li>hanami-cli v2.3.0.beta2</li>
<li>hanami-controller v2.3.0.beta2</li>
<li>hanami-db v2.3.0.beta2</li>
<li>hanami-reloader v2.3.0.beta2</li>
<li>hanami-router v2.3.0.beta2</li>
<li>hanami-rspec v2.3.0.beta2</li>
<li>hanami-utils v2.3.0.beta2</li>
<li>hanami-validations v2.3.0.beta2</li>
<li>hanami-view v2.3.0.beta2</li>
<li>hanami-webconsole v2.3.0.beta2</li>
</ul>

<p>For the full list of changes, please see each package’s own CHANGELOG.</p>

      <h2 id="what-s-next-" class="title"><a name="what-s-next-" class="anchor" href="#what-s-next-">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>What’s next?</h2>
    
<p>We have a short list of remaining fixes and improvements to make before our proper 2.3 release. See <a href="https://github.com/orgs/hanami/projects/12/views/1">this GitHub project</a> for details.</p>

<p>We expect to be back with 2.3 in a couple of weeks.</p>

      <h2 id="thank-you-to-our-contributors-" class="title"><a name="thank-you-to-our-contributors-" class="anchor" href="#thank-you-to-our-contributors-">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>Thank you to our contributors!</h2>
    
<p>Thank you to all these amazing people who contributed to this release!</p>

<ul>
<li><a href="https://github.com/afomera">Andrea Fomera</a></li>
<li><a href="https://github.com/baweaver">Brandon Weaver</a></li>
<li><a href="https://github.com/kyleplump">Kyle Plump</a></li>
<li><a href="https://github.com/minaslater">Mina Slater</a></li>
<li><a href="https://github.com/cllns">Sean Collins</a></li>
<li><a href="https://github.com/stephannv">stephannv</a></li>
<li><a href="https://github.com/timriley">Tim Riley</a></li>
</ul>

<p>And thank you again for giving this beta a try! We’re looking forward to hearing your feedback. 🌸</p>
]]></content>
     </entry>
     <entry>
       <title>Announcing Hanami 2.3 beta1</title>
       <id>http://hanamirb.org/blog/2025/10/03/announcing-hanami-230beta1/</id>
       <link rel="alternate" href="http://hanamirb.org/blog/2025/10/03/announcing-hanami-230beta1/"/>
       <updated>2025-10-03T08:20:00+00:00</updated>
       <author>
         <name>Tim Riley</name>
       </author>
       <summary>
         Rack 3 support and so much more. Help us with your testing!
       </summary>
       <content type="html"><![CDATA[<p>After getting set up for <a href="https://sponsor.hanamirb.org">sponsorship</a> (we still want to hear from you!), we’re back with a new Hanami release. Today we’re pleased to announce the first beta of Hanami 2.3.</p>

      <h2 id="rack-3-support" class="title"><a name="rack-3-support" class="anchor" href="#rack-3-support">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>Rack 3 support</h2>
    
<blockquote>
<p>This one goes up to <s>eleven</s> three.</p>
</blockquote>

<p>With this release, we introduce Rack 3 support to Hanami!</p>

<p>We now support Rack versions 2 and 3, so you can use whichever version suits your situation. We still encourage you to upgrade Rack when you can, and we’re happy that Hanami is no longer a blocker on this path.</p>

<p>To upgrade your app to Rack 3, update your Hanami gems to this beta release, then <code>bundle update rack</code>. You should also check out the <a href="https://github.com/rack/rack/blob/main/UPGRADE-GUIDE.md">Rack 3 upgrade guide</a>. Most changes will be handled for you by the Hanami gems, but you may need to update some of your app code if you&#39;re dealing with lower-level request/response details.</p>

      <h2 id="thank-you-to-our-patrons-" class="title"><a name="thank-you-to-our-patrons-" class="anchor" href="#thank-you-to-our-patrons-">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>Thank you to our patrons 🌸</h2>
    
<p>This is a our first release since launching our <a href="https://sponsor.hanamirb.org">sponsorship program</a>. I’d like to extend a very warm thank you to the patrons who made this possible: <a href="https://sidekiq.org"><strong>Sidekiq</strong></a>, <a href="https://github.com/baweaver"><strong>Brandon Weaver</strong></a>, <a href="https://www.honeybadger.io/?utm_source=hanami&amp;utm_medium=paid-referral&amp;utm_campaign=founding-patron"><strong>Honeybadger</strong></a>, <a href="https://www.fastruby.io/"><strong>FastRuby.io</strong></a> and <a href="https://www.appsignal.com/"><strong>AppSignal</strong></a>.</p>

<p>Thank you also to all the community members supporting Hanami through our <a href="https://github.com/sponsors/hanami">GitHub Sponsors</a>. There are now 20 of you!</p>

      <h2 id="improvements" class="title"><a name="improvements" class="anchor" href="#improvements">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>Improvements</h2>
    
<p>This beta also brings a range of nice improvements to your Hanami experience:</p>

<ul>
<li>Add your own methods to <code>hanami console</code> via own modules. Add <code>config.console.include MyModule, AnotherModule</code> to your app class.</li>
<li>Prefer Pry to IRB? Make it the default with <code>config.console.engine = :pry</code>.</li>
<li>When you specify <code>&#39;nonce&#39;</code> in your content security policy, a nonce is automatically added to <code>javascript_tag</code> and <code>stylesheet_tag</code>.</li>
<li>Access subdomains using <code>Request#subdomains</code>, and configure your default TLD length with <code>config.actions.default_tld_length</code>.</li>
<li>Redirect to absolute URLs in route definitions: <code>redirect &#39;/example&#39;, to: https://example.com, code: 302</code></li>
<li>You can now use single-character slice names.</li>
<li>Run any <code>hanami generate</code> command inside a slice directory and the slice will automatically be used as the target for the new files.</li>
<li>Run <code>hanami db rollback</code> to easily rollback a database migration.</li>
<li>Running <code>hanami new</code> will now initialize a Git repository in your new app.</li>
<li>Run <code>hanami new</code> with <code>--skip-view</code> to skip generating the view layer.</li>
<li>The default <code>Rakefile</code> will automatically load custom tasks from the conventional <code>lib/tasks/</code> location.</li>
<li>The <code>README.md</code> in newly generated apps now includes some helpful instructions for next steps.</li>
</ul>

      <h2 id="fixes" class="title"><a name="fixes" class="anchor" href="#fixes">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>Fixes</h2>
    
<p>We’ve also fixed a bunch of bugs:</p>

<ul>
<li>Allow access to autoloaded constants in <code>config/routes.rb</code>.</li>
<li>Support <code>include Deps</code> in repo classes.</li>
<li>Avoid false negatives for content type matches in actions.</li>
<li>Properly show database errors arising from <code>hanami db</code> commands.</li>
<li>Skip ENV var processing by Foreman (run via <code>hanami dev</code> by default) to ensure consistent ENV loading across environemnts.</li>
<li>Respect app inflections when running <code>hanami generate</code> commands.</li>
<li>Prevent <code>generate</code> commands from overwriting files.</li>
<li>Convert special characters to underscores in route helper names.</li>
<li>Include all necessary gems when running <code>hanami new</code> with the <code>--head</code> option.</li>
</ul>

      <h2 id="we-need-your-help-" class="title"><a name="we-need-your-help-" class="anchor" href="#we-need-your-help-">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>We need your help!</h2>
    
<p>Our Rack 3 upgrade is one of the more intricate changes we’ve made, especially considering the broad ecosystem that depends on Rack. We need your help to make sure this goes smoothly!</p>

<p>If you have a Hanami app, please try upgrading to 2.3.0.beta1 and Rack 3, and let us know how you go!</p>

      <h2 id="how-can-i-try-it-" class="title"><a name="how-can-i-try-it-" class="anchor" href="#how-can-i-try-it-">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>How can I try it?</h2>
    <div class="highlight"><pre class="highlight plaintext"><code>&gt; gem install hanami --pre
&gt; hanami new my_app
&gt; cd my_app
&gt; bundle exec hanami dev
</code></pre></div>
      <h2 id="what-s-included-" class="title"><a name="what-s-included-" class="anchor" href="#what-s-included-">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>What’s included?</h2>
    
<p>Today we’re releasing the following:</p>

<ul>
<li>hanami v2.3.0.beta1</li>
<li>hanami-assets v2.3.0-beta.1 (npm package)</li>
<li>hanami-assets v2.3.0.beta1</li>
<li>hanami-cli v2.3.0.beta1</li>
<li>hanami-controller v2.3.0.beta1</li>
<li>hanami-db v2.3.0.beta1</li>
<li>hanami-reloader v2.3.0.beta1</li>
<li>hanami-router v2.3.0.beta1</li>
<li>hanami-rspec v2.3.0.beta1</li>
<li>hanami-utils v2.3.0.beta1</li>
<li>hanami-validations v2.3.0.beta1</li>
<li>hanami-view v2.3.0.beta1</li>
<li>hanami-webconsole v2.3.0.beta1</li>
</ul>

<p>For the full list of changes, please see each package’s own CHANGELOG.</p>

      <h2 id="what-s-next-" class="title"><a name="what-s-next-" class="anchor" href="#what-s-next-">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>What’s next?</h2>
    
<p>We have a short list of remaining fixes and improvements to make before a proper 2.3 release. See <a href="https://github.com/orgs/hanami/projects/12/views/1">this GitHub project</a> for details.</p>

<p>I anticipate we’ll do one more beta release, followed by the final 2.3 release.</p>

      <h2 id="thank-you-to-our-contributors-" class="title"><a name="thank-you-to-our-contributors-" class="anchor" href="#thank-you-to-our-contributors-">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>Thank you to our contributors!</h2>
    
<p>Thank you to all these amazing people who contributed to this release!</p>

<ul>
<li><a href="https://github.com/aaronmallen">Aaron Allen</a></li>
<li><a href="https://github.com/alassek">Adam Lassek</a></li>
<li><a href="https://github.com/AlexanderZagaynov">Alexander Zagaynov</a></li>
<li><a href="https://github.com/afomera">Andrea Fomera</a></li>
<li><a href="https://github.com/hanarimawi">Hana Rimawi</a></li>
<li><a href="https://github.com/inouire">inouire</a></li>
<li><a href="https://github.com/krzykamil">Krzysztof Piotrowski</a></li>
<li><a href="https://github.com/kyleplump">Kyle Plump</a></li>
<li><a href="https://github.com/maxemitchell">Max Mitchell</a></li>
<li><a href="https://github.com/katafrakt">Paweł Świątkowski</a></li>
<li><a href="https://github.com/cllns">Sean Collins</a></li>
<li><a href="https://github.com/stephannv">stephannv</a></li>
<li><a href="https://github.com/svoop">Sven Schwyn</a></li>
<li><a href="https://github.com/seven1m">Tim Morgan</a></li>
<li><a href="https://github.com/timriley">Tim Riley</a></li>
<li><a href="https://github.com/WToa">William Tio</a></li>
<li><a href="https://github.com/wout">Wout</a></li>
<li><a href="https://github.com/wuarmin">wuarmin</a></li>
<li><a href="https://github.com/y-yagi">y-yagi</a></li>
</ul>

<p>And thank you again for giving this beta a try! We’re looking forward to hearing your feedback. 🌸</p>
]]></content>
     </entry>
     <entry>
       <title>Hanami adopts Contributor Covenant 3.0</title>
       <id>http://hanamirb.org/blog/2025/09/02/hanami-adopts-contributor-covenant-3-0/</id>
       <link rel="alternate" href="http://hanamirb.org/blog/2025/09/02/hanami-adopts-contributor-covenant-3-0/"/>
       <updated>2025-09-02T08:30:00+00:00</updated>
       <author>
         <name>Tim Riley</name>
       </author>
       <summary>
         Strengthening our community tools.
       </summary>
       <content type="html"><![CDATA[<p>Our community is the most precious part of Hanami. When you pick up Hanami, we want to make sure you have a great time. This is why we place our community values front and centre <a href="https://hanamirb.org">on our home page</a>:</p>

<blockquote>
<p>We want the Hanami community to be a welcoming place for people who bring kindness, curiosity, and care. A place where people of all backgrounds and experience levels can feel respected, and can share and grow. A place for people to be proud of, and feel safe within.</p>
</blockquote>

<p>It’s also why we govern our community spaces under the <a href="https://www.contributor-covenant.org">Contributor Covenant</a> code of conduct. This is the gold standard for community codes of conduct, and it’s served us well <a href="https://github.com/hanami/hanami/commit/54ce22376146efcd8a76c0b281e5bb74a3ff16e1">for over ten years</a>.</p>

<p><strong>Today we’re delighted to adopt the new <a href="https://www.contributor-covenant.org/version/3/0/code_of_conduct/">Contributor Covenant 3.0</a>,</strong> released just last month. This new version brings <a href="https://ethicalsource.dev/blog/contributor-covenant-3/">a number of improvements</a>:</p>

<blockquote>
<p>Contributor Covenant 3.0 is designed to be more adaptable to different kinds of communities, both online and offline. It is written with clearer, less US-centric language, intended to be easier to understand and translate. The enforcement guidelines section has been reimagined as “Addressing and Repairing Harm,” reflecting an alignment with principles of restorative justice, including finding ways to safely reintegrate someone back into a community after an incident occurs.</p>
</blockquote>

<p>We’re pleased that this new version is more approachable for our worldwide community. We also welcome the focus on restorative justice. The examples of how people can make genuine amends to grow and rejoin a community are clear and well explained.</p>

<p>These changes won’t affect how we interact day-to-day in our already lovely community, but do give us better tools for the rare times when conflicts need thoughtful resolution.</p>

<p>Thank you to the <a href="https://ethicalsource.dev">Organization for Ethical Source</a> for their work on this new version!</p>

<p>You can find our instance of the Contributor Covenant on <a href="https://hanamirb.org/community/#code-of-conduct">our community page</a>.</p>
]]></content>
     </entry>
     <entry>
       <title>Wrapping up our sponsorship drive</title>
       <id>http://hanamirb.org/blog/2025/08/27/wrapping-up-our-sponsorship-drive/</id>
       <link rel="alternate" href="http://hanamirb.org/blog/2025/08/27/wrapping-up-our-sponsorship-drive/"/>
       <updated>2025-08-27T11:45:00+00:00</updated>
       <author>
         <name>Tim Riley</name>
       </author>
       <summary>
         While we may be wrapping up inaugural sponsorship drive, you can support us at any time!
       </summary>
       <content type="html"><![CDATA[<p>After six posts (the <a href="/blog/2025/06/03/become-a-hanami-dry-and-rom-patron/">announcement</a>, our <a href="/blog/2025/06/11/hear-from-our-founding-patrons/">founding patrons</a>, a <a href="/blog/2025/06/20/field-report-from-riga-and-the-rooftop/">field report</a>, meeting <a href="/blog/2025/06/26/meet-tim-and-sean/">Tim and Sean</a>, the <a href="/blog/2025/07/11/hanami-and-the-elephant-in-the-room/">Rails elephant in the room</a>, and a <a href="/blog/2025/07/24/the-look-of-things-to-come/">cuteness preview</a>), it’s time to wrap up our sponsorship drive for 2025.</p>

      <h2 id="how-d-we-go-" class="title"><a name="how-d-we-go-" class="anchor" href="#how-d-we-go-">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>How’d we go?</h2>
    
<p>Thanks to your support, we’ve entered a whole new era for Hanami, Dry and Rom. For the first time ever, Ruby has a <em>second</em> framework backed by funding!</p>

<p>Granted, we’re at only 0.2 of a full-time role, but a start is a start! We’re here for the long haul, and going from 0 to <em>something</em> is one of the most important jumps we will make.</p>

<p>We have you—the Ruby community—to thank for this.</p>

<p>Thank you especially to <a href="https://www.mikeperham.com">Mike Perham</a> and <a href="https://sidekiq.org">Sidekiq</a>, <a href="https://github.com/baweaver">Brandon Weaver</a>, Joshua Wood and <a href="https://www.honeybadger.io/?utm_source=hanami&amp;utm_medium=paid-referral&amp;utm_campaign=founding-patron">Honeybadger</a>, Ernesto Tagwerker and <a href="https://www.fastruby.io/">FastRuby</a>, and Roy Tomeij and <a href="https://www.appsignal.com/">AppSignal</a>.</p>

<p>These are our <a href="/blog/2025/06/11/hear-from-our-founding-patrons/">founding patrons</a>, and without their support, this whole thing would never have got off the ground. They’ve committed $26k towards our first year of paid maintenance.</p>

<p>These people are visionaries, going out of their way to support a brighter, better Ruby. Just look at how Brandon describes it:</p>

<blockquote>
<p>In Ruby diversity is our greatest strength, whether that be the people, the ideas, or the technologies we use. Ruby is not just one framework, nor is it just one person, it is a community of passionate people pushing the boundaries of what’s possible not just as individuals, but as a collective. I am happy to continue to fund efforts building upon that vision of the future.</p>
</blockquote>

<p>Who <em>wouldn’t</em> want this for Ruby? We’re doing everything we can to make this real.</p>

<p>We’ve also been buoyed by new support from fellow community members. We’ve been delighted to welcome 15 new community patrons via our <a href="https://github.com/sponsors/hanami">GitHub Sponsors</a>. These are individuals who’re putting their own money towards Hanami, and together they’re contributing $260/month. Thank you!</p>

<p>We’ve also established <a href="https://rubycentral.org/news/ruby-central-announces-open-source-fiscal-sponsorship-program-hanami-support/">a partnership with Ruby Central</a> as our fiscal host. Ruby Central gives us a very attractive fee structure (5% vs the 10% that Open Collective charges) and they have already handled the funds for most of our business patrons. This means more of your money goes directly to our work on tools for Rubyists.</p>

<p>Ruby Central went out of their way to set this up for us, and I couldn’t think of a better partner for this. We share the same vision for Ruby’s future, and I’m excited to collaborate with them for many years to come!</p>

<p><strong>After all of this, how did we go? We’ve raised $29k (so far!). This is short of our initial $40k target, but fortunately, it’s still enough to support me at 1 day/week for this first year of paid maintenance.</strong></p>

      <h2 id="we-re-ready-are-you-" class="title"><a name="we-re-ready-are-you-" class="anchor" href="#we-re-ready-are-you-">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>We’re ready. Are you?</h2>
    
<p>While our sponsorship drive may be coming to an end, we’re ready to bring in new supporters at any time.</p>

<p>Does your business already depend on our gear? (I’m sure there are a lot of you out there, with our billion gem downloads and counting across Hanami, Dry and Rom). Or do you want to step up and count yourself among the brave few willing to forge a healthier, kinder future for Ruby? If so, then come <a href="https://sponsor.hanamirb.org">talk to us</a>!</p>

      <h2 id="what-s-next-" class="title"><a name="what-s-next-" class="anchor" href="#what-s-next-">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>What’s next?</h2>
    
<p>Establishing our sponsorship was <a href="/blog/2024/12/10/state-of-hanami-december-2024/">one of our most important goals for 2025</a>, and I’m very happy we’ve managed to get that done. While it did take a lot of time and brain space, we’ve still managed several other initiatives:</p>

<p><strong>Upcoming release:</strong></p>

<ul>
<li>Moving towards a Hanami 2.3 release. Rack 3 support will be the centrepiece here, but this will bring in a range of small improvements and fixes too.</li>
</ul>

<p><strong>Brand and community:</strong></p>

<ul>
<li>Preparing new branding for our projects, along with a way to bring them together as a unified family. <a href="/blog/2025/07/24/the-look-of-things-to-come/">You’ve seen a preview of this already</a>!</li>
<li>Building our brand new website, which will provide a one-stop shop for everything Hanami, Dry and Rom. Guides, docs, news, community info and more.</li>
</ul>

<p><strong>Project maintenance:</strong></p>

<ul>
<li>Catching up on <em>housekeeping</em>. First order of business is rolling out a tool to keep our 50+ GitHub repos in sync.</li>
<li>Working on new contributor guidelines that will make it clear how you can become a maintainer, and empower our existing maintainers to take our gems to the next level.</li>
</ul>

<p><strong>One more thing:</strong></p>

<ul>
<li>Personally, I’ve (finally!) found some time to work on my open source Hanami example app, Decaf Sucks. My current focus is <a href="https://github.com/decafsucks/decafsucks/pull/32">adding streamlined Rodauth integration</a>, something that feels completely “Hanami-native” and can serve as the foundation for an eventual rodauth-hanami gem.</li>
</ul>

<p>With sponsorships in place, I can’t wait to bring you all of the above!</p>

<p>Exciting stuff is on the way. If you want to help out or follow along, come say hi in <a href="https://discord.gg/KFCxDmk3JQ">chat</a> or <a href="https://discourse.hanamirb.org">our forum</a>!</p>
]]></content>
     </entry>
     <entry>
       <title>The look of things to come</title>
       <id>http://hanamirb.org/blog/2025/07/24/the-look-of-things-to-come/</id>
       <link rel="alternate" href="http://hanamirb.org/blog/2025/07/24/the-look-of-things-to-come/"/>
       <updated>2025-07-24T12:50:00+00:00</updated>
       <author>
         <name>Tim Riley</name>
       </author>
       <summary>
         A preview of our new visual identity.
       </summary>
       <content type="html"><![CDATA[<p>It’s week 6 of our sponsorship drive!</p>

<p>Let’s make sure you’re all caught up. So far, we have:</p>

<ul>
<li><a href="https://hanamirb.org/blog/2025/06/03/become-a-hanami-dry-and-rom-patron/">Launched the sponsorship drive</a></li>
<li><a href="https://hanamirb.org/blog/2025/06/11/hear-from-our-founding-patrons/">Heard from our founding patrons</a></li>
<li><a href="https://hanamirb.org/blog/2025/06/20/field-report-from-riga-and-the-rooftop/">Shared a podcast and field report</a></li>
<li><a href="https://hanamirb.org/blog/2025/06/26/meet-tim-and-sean/">Met Tim and Sean</a></li>
<li><a href="https://hanamirb.org/blog/2025/07/11/hanami-and-the-elephant-in-the-room/">And addressed elephant in the room, Rails</a></li>
</ul>

<p>There’s a lot of words across those posts. So today I want to share something different, something <em>visual</em>. Behold, cuteness!</p>

<p><img src="/blog/2025/07/24/the-look-of-things-to-come/new-logos-preview.png" title="A preview of our new logos" alt="A preview of our new logos" /></p>

<p>Here you have your very own preview of the new faces we’re creating for Hanami, Dry and Rom.</p>

<p>I’m <em>so</em> excited for this. These logos will unify our projects while allowing each to maintain its own identity. They’re also the visual representation of <a href="/blog/2025/07/11/hanami-and-the-elephant-in-the-room/#it-all-comes-back-to-people">the culture we’re building</a>, of kindness, curiosity and care — and also, delight! Ruby is fun, after all!</p>

<p>We’ll have more to share on this in due course, but if there’s one thing I already know, it’s that the future is looking bright (and cute!). We’d love to have you join in. 🌸</p>

<p>A huge thank you to <a href="https://aaronmoodie.com">Aaron Moodie</a> for his work in bringing this to life!</p>

      <h2 id="sponsorship-updates" class="title"><a name="sponsorship-updates" class="anchor" href="#sponsorship-updates">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>Sponsorship updates</h2>
    
<p>Since our last update, we’ve had a slew of community patrons <a href="https://github.com/sponsors/hanami">join via GitHub Sponsors</a>. Thank you for your support, <a href="https://github.com/aaronmallen">Aaron Allen</a>, <a href="https://github.com/PericlesTheo">Pericles Theodorou</a>, <a href="https://github.com/hedselu">Robert Pawlas</a>, <a href="https://github.com/konung">Nick Gorbikoff</a> and <a href="https://github.com/jaredsmithse">Jared Smith</a>!</p>

<p>We’d love for you to join them and become a patron. <a href="https://sponsor.hanamirb.org">Learn more here</a>.</p>

<p>We’re nearly at the end of our inaugural sponsorship drive. In my next post, I’ll come back to wrap everything up. See you then!</p>
]]></content>
     </entry>
     <entry>
       <title>Hanami and the elephant in the room</title>
       <id>http://hanamirb.org/blog/2025/07/11/hanami-and-the-elephant-in-the-room/</id>
       <link rel="alternate" href="http://hanamirb.org/blog/2025/07/11/hanami-and-the-elephant-in-the-room/"/>
       <updated>2025-07-11T18:30:00+00:00</updated>
       <author>
         <name>Tim Riley</name>
       </author>
       <summary>
         Let’s talk about Rails.
       </summary>
       <content type="html"><![CDATA[<p>It’s week 5 of our sponsorship drive! By now you’ve <a href="https://hanamirb.org/blog/2025/06/03/become-a-hanami-dry-and-rom-patron/">already</a> <a href="https://hanamirb.org/blog/2025/06/11/hear-from-our-founding-patrons/">heard</a> the <a href="https://hanamirb.org/blog/2025/06/20/field-report-from-riga-and-the-rooftop/">many</a> <a href="https://hanamirb.org/blog/2025/06/26/meet-tim-and-sean/">reasons</a> to <a href="https://sponsor.hanamirb.org/">become a patron</a> of Hanami, Dry and Rom. You’ve also seen me talk about such things <a href="https://www.rubyevents.org/speakers/tim-riley">on conference stages</a> over the years.</p>

<p>Thing is, I’m a fairly restrained person, and I always try to be thoughtful and positive. Sometimes I wonder what this means for my <em>cut-through</em>, especially when so far I’ve tried to stay focused on our gear and its benefits, rather than the elephant in the room — Ruby on Rails.</p>

<p>Today I’ll share my reasons again, but this time directly acknowledging Rails, and trying not to pull any punches. So, let’s imagine ourselves in the hallway track at one of those conferences, having a chat, and you ask...</p>

      <h2 id="ruby-has-rails-i-use-rails-why-should-i-support-you-" class="title"><a name="ruby-has-rails-i-use-rails-why-should-i-support-you-" class="anchor" href="#ruby-has-rails-i-use-rails-why-should-i-support-you-">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>Ruby has Rails. I use Rails! Why should I support you?</h2>
    
<p>This is about creating a healthy future for Ruby. This is good for <em>everyone</em> who cares about Ruby. Rails users should care about this too.</p>

<p>A healthy future for Ruby is a more diverse one. Monocultures are fragile and bad for people. We want to make it so both Rails and Hanami become part of a broader range of offerings for Rubyists new and old. This will help Ruby grow, because we’ll have the tools and communities to suit a wider range of needs and wants.</p>

<p>For this to work, these other tools and communities can’t all remain the tiniest of tiny niches. They need to be attractive and self-sustaining. They need a certain critical mass.</p>

<p>This is where we are with Hanami, Dry and Rom. We’ve put ten years into constructing this ecosystem. It’s already complete and capable. We have a turnkey framework and a whole bunch of useful standalone gems. We have an active and growing community of contributors and users. With a bit of help, we can cross over this threshold and turn this into something that can really change Ruby for the better.</p>

      <h2 id="that-s-all-well-and-good-but-how-does-it-help-me-now-" class="title"><a name="that-s-all-well-and-good-but-how-does-it-help-me-now-" class="anchor" href="#that-s-all-well-and-good-but-how-does-it-help-me-now-">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>That’s all well and good. But how does it help me now?</h2>
    
<p>We’re already helping thousands of Rails developers thanks to our <a href="https://dry-rb.org/">Dry</a> gems (a billion downloads and counting!). These bring structure and precision to your app’s business logic. To get a taste, check out <a href="https://dry-rb.org/gems/dry-validation">dry-validation</a>, <a href="https://dry-rb.org/gems/dry-types">dry-types</a>/<a href="https://dry-rb.org/gems/dry-struct">dry-struct</a> and <a href="https://dry-rb.org/gems/dry-operation">dry-operation</a>.</p>

<p>If you’re in a Rails app and you aren’t using these tools, or if you haven’t yet played with Hanami, I think you should give them a try!</p>

<p>Why? Because they’ll stretch your brain in new and helpful ways. You’ll practice different patterns and see new ways of working with Ruby. The experience will make you a better developer.</p>

<p>Better how? You’ll see how separation of concerns and object composition form the foundation of good software practice. You’ll see the freeing benefits of working with immutable objects and clear data flows. You’ll see how apps can be clearly layered rather than blended to the point where you’re concerning yourself with database queries while writing view code.</p>

<p>I’m certain you’ll come out of the experience with some new ideas for improving your day-to-day Rails apps.</p>

<p>You might even decide you want more of this in your future, in your apps, or even as a contributor. I know this can happen, because I lived it.</p>

      <h2 id="i-know-this-matters-because-it-s-why-i-m-still-here" class="title"><a name="i-know-this-matters-because-it-s-why-i-m-still-here" class="anchor" href="#i-know-this-matters-because-it-s-why-i-m-still-here">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>I know this matters because it’s why I’m still here</h2>
    
<p>I got lucky. I found Ruby very early on. And I loved it. Ruby and me, we just clicked.</p>

<p>But ten years ago, I began feeling disillusioned in my work writing Rails apps. I felt I’d stopped growing and learning as a software developer.</p>

<p>I knew I needed to try something different to break out of that rut, to expose myself to new ideas. But I also didn’t want to leave Ruby, because Ruby felt like home.</p>

<p>Instead, I looked around for the people doing things differently <em>within</em> Ruby. I tell you, it felt like a wilderness! But I did find some folks. Peter Solnica and his projects. Jeremy Evans with Roda. And of course, Luca Guidi in his early days with Hanami.</p>

<p>From there I started cobbling things together and building and shipping completely different kinds of apps in Ruby. And I learnt so much along the way! Actual <em>software design</em> things, more than just colouring in the MVC lines.</p>

<p>Hanami, Dry and Rom are why I’m still with Ruby today. They let me write the Ruby I want to write. The Ruby that fits the way I think. The Ruby that helps me build apps I feel confident to maintain.</p>

<p>Thanks to our work, it’s no longer a wilderness out there! Today if you want or need something different, you can install a gem and start playing and learning in minutes.</p>

      <h2 id="it-all-comes-back-to-people" class="title"><a name="it-all-comes-back-to-people" class="anchor" href="#it-all-comes-back-to-people">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>It all comes back to people</h2>
    
<p>A big reason many of us click with Ruby is the idea of “programmer happiness” that Matz imbued into the language. Matz created Ruby for <em>people</em>.</p>

<p>But our experience with Ruby doesn’t start and end with the language itself. It’s further defined by the tools we use on top of it, and the communities we inhabit around it.</p>

<p>With Hanami, Dry and Rom, our goal is to provide healthy alternatives at every level. We’re here to offer more than just a new flavour of technical tools. We care even more about the community that we’re building around them.</p>

<blockquote>
<p>We want this to be a welcoming place for people who bring kindness, curiosity, and care.</p>
</blockquote>

<p>We want this to be a welcoming place for people who bring kindness, curiosity, and care. A place where people of all backgrounds and experience levels can feel respected, and can share and grow. A place people can feel proud of, and can feel safe within.</p>

<p>This means being clear on what we won&#39;t tolerate. It’s why we put “No nazis, no transphobes, no racists, no bigotry of any kind” front and centre on our website and in all our community spaces.</p>

<p>So if you’re a Rails dev tired of the <a href="https://web.archive.org/web/20221121092605/https://world.hey.com/dhh/the-waning-days-of-dei-s-dominance-9a5b656c">bile</a> <a href="https://web.archive.org/web/20250121025347/https://world.hey.com/dhh/mega-a0f62cd4">coming</a> <a href="https://web.archive.org/web/20250120071809/https://world.hey.com/dhh/failed-integration-and-the-fall-of-multiculturalism-77296314">from</a> <a href="https://web.archive.org/web/20250630061232/https://world.hey.com/dhh/the-parental-dead-end-of-consent-morality-e4e8a8ee">dear</a> <a href="https://web.archive.org/web/20250417082450/https://world.hey.com/dhh/bad-therapy-08849dc9">leader’s</a> <a href="https://web.archive.org/web/20250618025856/https://world.hey.com/dhh/cold-reading-an-adhd-affliction-44163793">bully</a> <a href="https://web.archive.org/web/20230115183046/https://world.hey.com/dhh/we-must-say-no-to-these-people-e0fb301c">pulpit</a>, now you have another place you can invest your energy, knowing it will go towards something that feels right, like the Ruby that called to you in the beginning. Perhaps it’s time you gave it a shot?</p>

      <h2 id="support-your-future-with-ruby" class="title"><a name="support-your-future-with-ruby" class="anchor" href="#support-your-future-with-ruby">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>Support your future with Ruby</h2>
    
<p>So if you’re currently on Rails, those are your reasons for supporting our work with Hanami, Dry and Rom: we’re helping to create a healthy thriving future for you as well as <em>all of Ruby</em>, Rails included.</p>

<p>We offer essential variety to Ruby: gems to help your Rails apps today, opportunities to learn and grow, a framework for when you want the next level, and a caring community to back it all up.</p>

<p>Our community has had its ups and downs, but right now we’re riding a fresh wave of energy and growth. If you love Ruby, this is where you can learn, share, and belong, now and for years to come.</p>

<p>When you sponsor our work, you’re not just supporting our projects, you’re investing in your own future. As you grow and your needs change, we can make sure Ruby grows with you.</p>

<p>What are you waiting for? Let’s do this! 🌸</p>
]]></content>
     </entry>
     <entry>
       <title>Meet Tim and Sean</title>
       <id>http://hanamirb.org/blog/2025/06/26/meet-tim-and-sean/</id>
       <link rel="alternate" href="http://hanamirb.org/blog/2025/06/26/meet-tim-and-sean/"/>
       <updated>2025-06-26T18:15:00+00:00</updated>
       <author>
         <name>Tim Riley</name>
       </author>
       <summary>
         It’s week 4 of our sponsorship drive. Get to know the people you’re supporting.
       </summary>
       <content type="html"><![CDATA[<p>It’s week 4 of our <a href="/blog/2025/06/03/become-a-hanami-dry-and-rom-patron/">sponsorship drive</a>! This week is your chance to get to know the people you’ll be supporting:</p>

<p><img src="/blog/2025/06/26/meet-tim-and-sean/sean-and-tim.jpeg" title="Sean and Tim at RubyConf 2024" alt="Sean and Tim at RubyConf 2024" /></p>

<p>That’s Sean on the left, me on the right. Now let’s get into it!</p>

      <h2 id="meet-tim" class="title"><a name="meet-tim" class="anchor" href="#meet-tim">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>Meet Tim</h2>
    
      <h3 id="tell-us-a-bit-about-yourself" class="title"><a name="tell-us-a-bit-about-yourself" class="anchor" href="#tell-us-a-bit-about-yourself">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>Tell us a bit about yourself</h3>
    
<p>I’m a software developer living in Canberra, Australia with my wife and two children.</p>

<p>I’ve been toying with computers since I was a kid. After years of playing newsagency-bought shareware games, teenage me found Linux (thank you <a href="https://archive.org/details/TheLinuxPocketbook/TheLinuxPocketbookfrontCover.jpg">APC Mag Pocketbook</a>). After another  few years, mostly spent reinstalling distros and theming Openbox, I eventually found Ruby! That was in 2002. I’ve been lucky to work with it ever since.</p>

      <h3 id="what-s-your-story-with-hanami-" class="title"><a name="what-s-your-story-with-hanami-" class="anchor" href="#what-s-your-story-with-hanami-">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>What’s your story with Hanami?</h3>
    
<p>My path towards Hanami started 10 years ago. Back then I was helping to run <a href="https://www.icelab.com.au">Icelab</a>, a design and development agency here in Australia. Our team would build apps for our clients in their entirety, and go on to maintain them thereafter. Our tool of choice was Rails, and it had served us well.</p>

<p>After shipping and maintaining dozens of Rails apps over the years, I felt like I had begun to stagnate as a developer. I was no longer growing and learning in the way I wanted to. The code I’d been writing no longer felt right for me.</p>

<p>I knew I needed some kind of change to break out of the rut and begin a new stage of growth. But I loved Ruby, and didn’t want to leave. So instead I looked around for people who were doing things <em>differently</em> with Ruby. I found <a href="https://roda.jeremyevans.net">Roda</a> from <a href="https://github.com/jeremyevans">Jeremy Evans</a>. I found <a href="https://github.com/solnic">Peter Solnica</a>. It was this that set me off on my journey to Hanami.</p>

<p>In 2015, I was part of the team that founded the <a href="https://dry-rb.org">Dry</a> project. I spent the following years building production apps at Icelab composed of Dry, <a href="https://rom-rb.org">Rom</a>, and Roda. This was exactly the experience I hoped for!  We built great things, and I learnt so much along the way.</p>

<p>A few years later, the Dry and Hanami teams joined together to build the next version of Hanami. This is where I’ve focused my energy since. I drove most of the development towards <a href="https://hanamirb.org/blog/2022/11/22/announcing-hanami-200/">2.0</a>, <a href="https://hanamirb.org/blog/2024/02/27/hanami-210/">2.1</a> and <a href="https://hanamirb.org/blog/2024/11/05/hanami-220/">2.2</a>.</p>

<p>I’m very proud of the experience we’ve created with Hanami. We provide essential diversity to the Ruby community. Today, anyone who reaches that same moment of <em>needing something different</em> doesn’t need to feel like they’re in the wilderness, and possibly leave Ruby entirely. They now have an easy step to take: <code>gem install hanami</code>. Within minutes they can be playing and learning.</p>

      <h3 id="what-are-you-looking-forward-to-for-the-future-" class="title"><a name="what-are-you-looking-forward-to-for-the-future-" class="anchor" href="#what-are-you-looking-forward-to-for-the-future-">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>What are you looking forward to for the future?</h3>
    
<p>I’m excited to set Hanami up for a successful second decade! We’ve spent years preparing a good foundation with version 2. Now we get to build upon it.</p>

<p>In the near term, this means making <a href="https://hanamirb.org/blog/2024/12/10/state-of-hanami-december-2024/">these goals</a> happen: unify Hanami, Dry and Rom, help our users be more successful, and fundraise for sustainable maintenance. You’ve already seen the launch of our fundraising, and we’re already making big strides towards the others. I can’t wait to share more later this year.</p>

<p>Together, these efforts will help us find our critical mass, across all parts of our community: users, contributors, and financial supporters. And the more people we bring together, the more their ideas and passion can help make Hanami (and Dry and Rom) better for everyone, all while having fun and learning along the way!</p>

<p>Looking a little further ahead, there are a couple of other bits I’m particularly excited to drive: a first-class extensions API for Hanami, and the establishment of a clear and trustworthy governance structure for our projects.</p>

<p>There’s lots to do, and it’s occasionally overwhelming, but I’m happy to be here. The future is bright!</p>

      <h2 id="meet-sean" class="title"><a name="meet-sean" class="anchor" href="#meet-sean">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>Meet Sean</h2>
    
      <h3 id="tell-us-a-bit-about-yourself" class="title"><a name="tell-us-a-bit-about-yourself" class="anchor" href="#tell-us-a-bit-about-yourself">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>Tell us a bit about yourself</h3>
    
<p>I’m an <a href="https://seancollins.tech/">independent contractor</a> who lives in Denver, Colorado. I’ve been working with Ruby for over a dozen years. I’ve also done some purely functional programming with Elm. I’m interested in pragmatic software architecture, helping codebases stay healthy as they grow.</p>

      <h3 id="what-s-your-story-with-hanami" class="title"><a name="what-s-your-story-with-hanami" class="anchor" href="#what-s-your-story-with-hanami">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>What’s your story with Hanami</h3>
    
<p>I moved to Colorado in 2015 and the timing was auspicious: Rocky Mountain Ruby took place shortly after I arrived. On the first day, I participated in a workshop about “Component-Based Rails Applications”, which used Rails Engines to split up large codebases. This was novel to me, managing scope and thinking about your dependencies from a higher level. I tried that approach on a couple projects but it was difficult: I was constantly fighting against the framework, and few gems supported Engines because they were used so rarely.</p>

<p>A couple months later, at the Boulder Ruby meetup, a speaker mentioned a new Ruby web framework called “Lotus.” It supported modularity as a first-class feature. Beyond that, it broke things into more layers than Rails did, and encouraged writing small classes with limited responsibilities. This was exactly what I had been looking for! A more measured approach to writing large Ruby apps.</p>

<p>I started contributing to the project: first documentation fixes, then with a generator. It was later renamed to Hanami and I joined the core team for the 1.0 launch. My level of involvement has fluctuated over the years, but I&#39;ve been more involved again since early last year. I&#39;m excited and energized by the community interest increasing as we are promoting <a href="https://sponsor.hanamirb.org/">our sponsorship drive</a>!</p>

      <h3 id="what-are-you-looking-forward-to-for-the-future-" class="title"><a name="what-are-you-looking-forward-to-for-the-future-" class="anchor" href="#what-are-you-looking-forward-to-for-the-future-">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>What are you looking forward to for the future?</h3>
    
<p>I&#39;m excited about the potential that AI-assisted development holds for Hanami. I know this is controversial but I really think AI can help speed up Hanami’s adoption and reduce much of the friction users have faced in the past.</p>

<p>In particular, AI can help us address some of the framework’s current challenges, while also amplifying its architectural strengths.</p>

<p>Challenges, mitigated by AI:</p>

<ul>
<li>Smaller knowledge base. There’s less information available on the web about Hanami than Rails: complete apps, blog posts, Stack Overflow questions, and more. This means there’s less training data available for LLMs to be aware of Hanami. However, Hanami’s simple APIs and more modular architecture means documentation and source code can be brought into the LLMs context window. That means you can ask questions and get tailored answers that apply to your specific project. That said, hallucinations are still a real concern, so AI isn’t a substitute for understanding the framework yourself. At best, it’s an accelerant and can help you find the documentation you need.</li>
<li>Fewer third-party gems. Hanami has a smaller ecosystem of ready-made gems compared to Rails. Over the years, I’ve heard this as a sticking point for why people have trouble succeeding with Hanami. Now in the age of AI, many people are generating the code they used to pull in as a dependency, in the style that matches the rest of their codebase. You can generate bespoke code that you can bring into your codebase (after you review it!!) instead of adding a dependency.</li>
<li>More boilerplate. Hanami encourages writing classes that are small, with a tight scope of responsibility. This means Hanami projects have more files and more code, requiring switching between files more. When you’re the one typing everything out, this can be annoying. When AI is writing and modifying the code, this is less of an issue.</li>
</ul>

<p>Advantages in the AI era:</p>

<ul>
<li>Functional, immutable style. Hanami enables and encourages a more functional and immutable style of writing Ruby. Instead of internal state determining behavior, code’s flow can often be inferred lexically, which makes it easier for LLMs (and humans) to reason about.</li>
<li>Modularity with Slices. The framework’s architectural boundaries (via Slices) reduce cross-cutting concerns, making it easier for different humans and AI agents to work in parallel without unintended side effects. Agents can be made to ignore everything but the Slice they’re working on (and its dependencies), to keep them focused on the code that matters.</li>
<li>Explicitness and structure. Hanami leans towards being explicit, instead of adding a lot of implicit ‘magic’ behind-the-scenes. This is similar to Python and Django, which LLMs tend to perform well with. That explicitness pays dividends in both AI-generated and human-reviewed code. It also has a cost, with more lines of code, but when those lines are written by the computer, they’re less costly to write (though still need to be reviewed carefully).</li>
<li>Scalability of complexity. As individual developers become more productive with AI, the ability to manage complexity becomes more important. If developers start reliably writing 10 times more code, then codebases will naturally grow much faster. Hanami’s modularity and built-in tools for architecting large codebases will be invaluable in those situations.</li>
</ul>

<p>Looking ahead, I also see opportunities where we can leverage AI to help us audit, fix, and maintain our documentation. This could free us up to work on other activities, and increase the quality of our documentation.</p>

<p>To be clear: we’re not at the point where AI agents can write Hanami apps as well as they can write Rails apps. Rails has been more exposed to the world, so LLMs have “seen” it more. But I believe we can close that gap to make Hanami a fully viable alternative to Rails. Beyond that, I can imagine a future where Hanami’s modularity, explicitness, and functional/immutable style help it become the preferred framework for writing Ruby apps.</p>

      <h2 id="sponsorship-updates" class="title"><a name="sponsorship-updates" class="anchor" href="#sponsorship-updates">      <svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewBox="0 0 16 16" width="16">
      <path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 3-3.5s-1.5-3.5-3-3.5z"></path>
      </svg>
</a>Sponsorship updates</h2>
    
<p>(What is all of this? <a href="https://sponsor.hanamirb.org">Read our sponsorhip site to learn more.</a>)</p>

<p>Since <a href="/blog/2025/06/20/field-report-from-riga-and-the-rooftop/">week 3</a>, we’ve had one new person become a community patron and support our work on Hanami, Dry and Rom. Thank you very much, <a href="https://github.com/mathewdbutton">Mathew Button</a>!</p>

<p>Bit by bit, we get closer. If you’re a human being who cares about a diverse, thriving Ruby, we’d love for you to join Matthew and <a href="https://github.com/sponsors/hanami">all our community patrons</a>. And if you’re a collection of human beings in a business, we’d love to hear from you too!</p>

<p>As of this week, we’re still sitting at $27.5k:</p>

<p>🟩 🟩 🟩 🟩 ⬜ ⬜ ⬜ ⬜ ⬜ ⬜<br>
<em><strong>$27.5k of $70k</strong> — 39% to our goal…</em></p>

<p>Next week, I think it’s time I address the 800-pound elephant in the room. I’ll see you then.</p>
]]></content>
     </entry>
</feed>
