#804 — June 11, 2026
Read on the Web
Ruby Weekly
📈 Small PRs, Big Speedups: The Ruby Performance Work You Almost Missed — A roundup of recent Ruby performance PRs covering strings, file handling, GC, concurrency, Prism, JITs, and more. It’s a neat snapshot of how much incremental performance work has landed in CRuby in the past year.
Maciej Mensfeld
Stop Juggling 5 Tools to Monitor One Rails App — Errors, performance, logs, uptime, host metrics — AppSignal covers your whole Rails stack. Auto-instruments Active Record, Sidekiq, Puma, and ActionView out of the box. Request-based pricing, unlimited seats. Free 30-day…
AppSignal sponsor
…
Performance problems in Rails applications are sneaky. Generally speaking, nobody opens tickets that say “my application is slower than it was last month (about 20%)”. What you do get instead are vague complaints from team members about a p95 latency that is climbing every week or a background job that used to take 2 seconds now taking 40 seconds to finish.
Nine times out of ten, the problem is going to be a query that used to be fast, and now it’s not. When that query was first written, it had 500 records in the table. Now, it’s got 500K records, and it’s running a full table scan on every page load. Each new row means slightly more scan time and latency. This increase in time continues…
To get from Zagreb, where I live, to Vienna, where RubyConf Austria was happening: drive 173km to Graz, take a right and go for another 198km. Sure, I’ve glossed over two country borders and some other details, but that’s mostly it. It’s pretty straightforward, unlike how the conference got me thinking about the future of Ruby conferences. But I’ll get to that. Day 1: The Vienna Ruby Meetup ...
Quizzes are a fun! Well… I do think they are. Always up to learn new things. So how can you create one in with your favorite frameworks? In this article, I want to show how you can build a quiz witg Stimulus. It can be a good starting point for learn about a new customer in your SaaS or as a smart, little marketing tool (keep readers engaged/on your page). 💡
The quiz loads questions from a Rails endpoint, tracks answers in real-time, calculates results and submits them to your server. As always, the code can be found on GitHub.

This will be the result. Time to dust off that good ol’ computer science knowledge… 🤓
Building the data class
Here’s the QuizData class that handles the quiz…
Recently, we had a crash in our NeetoCRMapplication.

As we can see in the screenshot, it looks like the error happened inneeto-widget-replay.js file.
At Neeto we have built an internal tool called NeetoReplaywhich captures users' activities in the browser. This helps us in debugging whenusers contact us for support or in investigating bugs. This is built on top ofrrweb. Just want to add that admins of theworkspace can completely opt out of NeetoReplay.
We had not changed anything in NeetoReplay for a while, so the error happeningin NeetoReplay was perplexing. Upon investigation, I found that the consoleindeed pointed to the neeto-widget-replay.js file. But I also knew that thefilename only…

We’re excited to announce that Ruby Central has been awarded a grant from Alpha-Omega to help improve the security of the Ruby open source ecosystem. With this support, Ruby Central is funding a team of Security Engineers in Residence to find real vulnerabilities in the gems the community depends on most, verify them, and bring maintainers reports worth their time.
The same AI tooling that helps developers ship faster has made finding vulnerabilities cheap. An attacker can act on a raw signal the moment a tool surfaces it. A responsible reporter cannot. Someone has to confirm the vulnerability is real, work out what it means in practice, and decide it is worth a maintainer's time. That work…

As part of our recent bylaw modernization, the Ruby Central Board has been exploring new ways to increase participation across the Ruby ecosystem while maintaining the accountability required to effectively operate a nonprofit organization.
Our goal in 2026 is to create more opportunities for contributors, community members, sponsors, and ecosystem leaders to help shape Ruby Central's future while preserving the Board's responsibility for stewarding the organization. And to do this as quickly as possible.
Ruby Central governs its own suite of voluntary programs, infrastructure, education, and initiatives that support the Ruby ecosystem. It does not govern the Ruby language itself.
Guiding…
Our Rails developer, Jaison Coelho, shares some of his favorite talks from the Tropical on Rails conference this year and why he keeps going back.
Continue Reading
How ActiveModel::Attributes gives tableless Rails objects type casting, defaults, and a Rails-native attribute system, and where the API still needs more support.
There's a moment at every RubyConf that we quietly look forward to: the smell of fresh coffee drifting through the venue as attendees start their mornings, and the sight of a room full of name badges swaying from lanyards as people connect, collaborate, and find their people. For years, that moment has been made possible by GitLab.
GitLab has been a steadfast supporter of the Ruby community as both our coffee sponsor and name badge lanyard sponsor, and we don't take that for granted. Sponsorships like these are easy to overlook; they don't come with a keynote slot or a giant booth, but they are woven into the fabric of the conference experience in ways that matter deeply.
Every cup of coffee…
Rachael interviews the new host of the show, David Hill, to discuss his history with Ruby, his love for podcasting, and how much he loves meetups and conferences.
Show Notes
Sponsors
Lots of teams out there are still overpaying for their hosting and getting tripped up by traffic spikes. If you’re on one of those teams, you need a better autoscaler. Judoscale uses better metrics, gives you more control, and reacts faster than any other autoscaler. Learn more at https://judoscale.com/
The Hidden DSL Inside Every Rails Model June 10, 2026 Most Rails developers use belongs_to, has_many, scope, and validates every day. We type them almost without thinking. class User < ApplicationRecord belongs_to :company validates :email, presence: true scope :active, -> { where(active: true) } end But here's something interesting: None of those are Ruby keywords. … Continue reading The Hidden DSL Inside Every Rails Model →
RubyGems 4.0.14 includes enhancements and Bundler 4.0.14 includes bug fixes.
To update to the latest RubyGems you can run:
gem update --system [--pre]
To update to the latest Bundler you can run:
gem install bundler [--pre]
bundle update --bundler=4.0.14
RubyGems Release Notes
Enhancements:
- Add executables and bindir validation to the gem installer. Pull request #9595 by hsbt
- Strip C1 control characters from displayed gem text. Pull request #9597 by hsbt
- Installs bundler 4.0.14 as a default gem.
Bundler Release Notes
Bug fixes:
- Preserve per-source cooldown when converging sources from the lockfile. Pull request #9601 by bryanwoods
- Don’t exclude the locked version…
Manual Installation
To install RubyGems…
## Summary
When an application uses OAuth2::Client (typically via an
OAuth2::AccessToken) and the configured authorization server returns
a redirect whose Location header is a protocol-relative URI of the
form //attacker.example/leak, OAuth2::Client#request resolves the
redirect with response.response.env.url.merge(location). Per
RFC 3986 §5.2, an input that starts with // is a network-path reference
and replaces the authority of the base URL:
URI("http://idp.trusted/userinfo").merge("//attacker.example/leak")
returns http://attacker.example/leak. The recursive request(verb,
full_location, req_opts) call then re-sends the request to the attacker
host while preserving the Authorization:…
## Summary
When an application uses OAuth::Consumer to request OAuth 1.0 request
tokens or access tokens, the token request helper follows 300..399
redirects returned by the OAuth server. In affected versions,
OAuth::Consumer#token_request parses the raw Location header, follows
the redirect recursively, and can mutate the consumer's configured
site when the redirect points to a different host with the same path.
The result is a cross-origin signed-request disclosure primitive: if an OAuth
server token endpoint returns a redirect whose target an attacker controls,
the client can re-sign the token request and send OAuth 1.0 request metadata,
including the OAuth signature, nonce, timestamp,…

Version 6.1.5 of the Passenger application server has been released. This release contains no changes and addresses an ABI break in Ubuntu's Nginx packages.
Installing 6.1.5
Please see the installation guide for advice on getting started with Passenger. Coming from a language other than Ruby, Python, Meteor or Node? Even if we didn't write a specific tutorial for your language, we made a generic guide that shows you the steps.
Upgrading to 6.1.5
We strongly advise staying up to date with the latest version.
Check out our upgrade guides for the different platforms:
Please be aware that you can enjoy enterprise features and sponsor the open…
When you first reach for an LLM library, the only question is whether it works. Can it call the model, parse the response, run a tool. Once your app is actually in production, the questions change. Is it fast? Can I see what it’s doing when something goes wrong? Can I send its traffic through my own infrastructure instead of straight out to the provider?
I released RubyLLM 1.16 today. It answers these production questions.
The three headline features are about speed, visibility, and control: tools that run concurrently, structured events for everything RubyLLM does, and a configurable base URL for every native provider. None of them change how you write your app. All of them matter the…
Authors: Gleb Stroganov, Product Designer, Varya Nekhina, Account Manager, and Travis Turner, Tech Editor
Topics: Case Study, Developer Products, Product development, Developer marketing, Google Analytics

A designer and an engineer shipped a production MVP in four weeks on Rails + Inertia. In this post, we share our agentic coding stack, the skills we built, and why it clicked.
We shipped a full production MVP in 4 weeks with a team of two Martians: a designer and an engineer. In this post, we're sharing the experience, lessons learned, the open source skills we developed, and why Rails + Inertia is now our go-to stack for agentic coding.
This is episode #01 of the Ruby Stained Glass Notes, a pop-up newsletter in which I write about the process of building a stained-glass panel celebrating Ruby.
It’s common for Rails applications to serve massive CSS files filled with unused Bootstrap, Tailwind, or custom utility classes as projects grow. This bloat isn’t just a developer annoyance—it has a real impact on your users. Every unused kilobyte adds milliseconds to page load time. In this post, we’ll explore what PurgeCSS is and how your Rails project can benefit from it.
What Is PurgeCSS and Why Should You Care?
PurgeCSS is a tool that analyzes your content and CSS, then removes unused CSS selectors, stripping away dead weight to leave you with lean, optimized stylesheets.
For example, if you’re using the full Bootstrap CSS framework (approximately 200KB) but only utilizing 30% of…
If you’ve ever written a test for your code, you’re probably familiar with
typical test framework methods: test/it to define test cases, and
assert/expect to make assertions about the behavior of your code.
However, I want to highlight a less commonly used method: in other languages or
frameworks it goes by other names, but in Ruby’s minitest it’s called skip.
In this post, I’ll cover what skip does, when it may be useful, and, most
importantly, when you should probably use something else.
Just skip to the good stuff
Okay, so what does skip do? Put simply, it allows you to not run a test.
More concretely: in minitest, none of the test code after skip is run, an
S will be printed…
The JRuby community is pleased to announce the release of JRuby 9.4.15.0.
JRuby 9.4.15.x targets Ruby 3.1 compatibility.
Thank you to our contributors this release, you help keep JRuby moving forward!
With this release, JRuby 9.4 moves into end-of-life (“EOL”). This means that future releases of 9.4.x will only be provided as needed by commercial JRuby users.
Get in touch with us if you require long-term support options for the JRuby 9.4.x series.
38 Issues and PRs resolved for 9.4.15.0
A practical mental model for choosing symbols vs strings in Ruby.
I’ve well and truly entered release prep mode. Lots of stuff done this week, and I expect about another week or so until I can get a release candidate out the door.
My most notable accomplishment this week was writing overviews of two big features that will be landing soon: Previewing mailers in Hanami 3.0 and Previewing i18n integration in Hanami 3.0. I hope these will help our users kick the tyres — let me know how you go, I’m keen for feedback!
I upgraded decafsucks to the latest Hanami main branches and discovered that our default component memoization conflicted with the container stubbing I was using in the app. So to preserve that functionality, I disabled container memoization…
For a brief…
June 7, 2026 When Ruby receives a method call, it follows a well-defined search path to determine where that method is implemented. Most developers learn inheritance early, but fewer take the time to understand the complete method lookup path, also known as the ancestor chain. Understanding this mechanism can make debugging easier, clarify how Rails … Continue reading Ruby’s Ancestor Chain: Why prepend Cuts the Line →
Websockets are great, but they are not always the right approach. In this episode, we will look at implementing a long polling for new records.
In the last year or so I’ve been working on
UringMachine, a Ruby gem for
doing I/O with io_uring, and I’ve been reporting on my progress on my website,
as part of my grant work for the Ruby Association.
A Quick Recap
Here’s a quick recap of what UringMachine does: UringMachine provides a
low-level API for performing I/O operations using io_uring, which is an
interface for performing I/O operations asynchronously on recent Linux kernels.
UringMachine also provides a Fiber
Scheduler
implementation that allows it to integrate nicely with the rest of the Ruby
ecosystem and be used in any Ruby application that supports fiber concurrency.
In my work on this project I’ve been looking to find…
### Impact
The `DynamicClientRegistrationController#register` action hard-codes
`confidential: false` when creating applications
(dynamic_client_registration_controller.rb:18-25), yet the response
includes a client_secret and advertises `token_endpoint_auth_methods_supported:
["client_secret_basic", "client_secret_post"]`.
Because Doorkeeper's `Application.by_uid_and_secret` treats a
blank/missing secret as valid for non-confidential (public) clients, an
attacker who knows only the client_id (which is public information)
can authenticate as the dynamically-registered client at the token endpoint.
**Note** that Dynamic Client Registration is opt-in feature which is
disabled by default so…
CSV formula injection (also known as formula injection or CSV injection)
affects customer export. User-controlled values customer names, email
addresses, and shipping addresses. When an administrator opens a
crafted Export in Microsoft Excel or LibreOffice Calc, formulas
embedded in user data execute in the context of the administrator's
desktop, potentially exfiltrating data or executing OS commands
via DDE (Dynamic Data Exchange).
## Impact
Vulnerability class: CSV / Formula Injection (CWE-1236)
## Who is impacted
Administrators who download and open export files in spreadsheet
software are the direct victims. Administrative accounts have
access to all store data, payment method…
How to use Stripe Test Clocks and the Stripe CLI to run a real end-to-end payment failure webhook test locally.
Hi, it’s Claudio. Let’s explore this week’s changes in the Rails codebase.
The revamped Active Job guide is live
Check out the new Active Jobs Basics guide to learn everything about background jobs in Rails, from Solid Queue to bulk enqueueing, from testing to debugging.
The API-only guide is ready for community review
Using Rails for API-only applications? Leave your feedback on this PR which is bound to update the existing API-only guide.
Update Active Storage for ImageProcessing 2.0
The new version requires adding ruby-vips and/or mini_magick gems to the Gemfile and blocks untrusted formats by default on libvips 8.13+ (BPM, PSD and ICO among others).
Reimplement Action Cable redis…

Since our last Board message that announced the launch of Steering Committees and making an open call for volunteer leadership, we have spent a significant amount of time discussing the future of our organization.
Those conversations covered sustainability, governance, infrastructure stewardship, community participation, membership, sponsorship, and the role Ruby Central should play in supporting the Ruby ecosystem for years to come.
As those discussions evolved, it became clear that our bylaws no longer reflected how Ruby Central operates today, nor how we want it to operate in the future.
Many of the governing documents that served Ruby Central well in the past were written for a smaller…
A small Rails debugging note about why redirect_to performs a response but does not stop Ruby control flow.
Siri doesn’t understand Argentinian Spanish.
I have to pronounce some words in a neutral accent, which sounds weird here, and my toddlers learn it as local, or write them out, navigating the awkward iOS cursor, or tap each letter and then correct typos.
I use calendar, timers, notes, and reminders as anyone else, and I’ve been a “tech person” since my early years.
So I was surprised by my own surprise when Fede, my brother-in-law, repeated my ask to his Telegram agent: “remind me to pick up the kids at 11:30”. Well that was simple, and it wouldn’t rely on our memory. He didn’t write or pronounce how Siri expects, he just said my words to his phone. I’ve long wanted to schedule calendar…
Normally I just fire off a tweet when I spot a nice performance PR landing in Ruby. Lately I've been catching up on a backlog of Ruby performance work I'd bookmarked and never gotten around to - so some of what's below isn't brand new, with a few PRs dating back to 2025. There were so many of them - some headline-grabbing, some small but delightfully clever - that a thread won't cut it. So here's a roundup instead, both the recent landings and the ones I'm late to.
A few ground rules: every PR below ships a concrete benchmark number, so when I say "Nx faster" it's the author's own measurement, not vibes. Numbers come from different machines and workloads, so treat them as "here's the win on…
Revise Auth and Podcasting Plans
Chris and David cover a lot of ground in this episode, starting with Chris’s experience teaching a Rails workshop for Frontend Masters in Minneapolis. Along the way, they dive deep into Rails authentication, Devise, Authlogic migrations, Chris’s ReviseAuth gem, password security, session handling, and the hard tradeoffs of maintaining open source tools. The episode wraps with big podcasting news: David is taking over The Ruby on Rails Podcast! Hit download now to hear more!
Links
We scoped a client spike at 20 hours. Our Software Delivery Manager built it in five. Here's what made that possible.
Continue Reading
A quick look at new rate-limiter features in the upcoming Rails version.
I build quite a few sites. For my own products or I help others. Since I released Perron that is my go-to static site generator now. But it was missing one feature for a speedy development cycle: live reload. Not just a page refresh, but more like hot reloading.
Most live reload solutions either require ActionCable (overkill when using Perron) or just do full-page reloads (annoying/too minimal). I wanted something in between.
Meet Mata: a lightweight live reload solution for Rack apps. It uses Server-Sent Events (SSE) and idiomorph.
You can install Mata simply by running bundle add mata --group=development. Then configure the middleware with watch and skip paths. That’s it. No JavaScript…
RubyGems.org is the quiet backbone of the Ruby world. It processes over 1,500 gem requests per second, serves billions of downloads every month, and keeps the tools developers rely on available, secure, and free. It's the kind of infrastructure you only notice when something goes wrong. Which, thanks to supporters like 84codes, it rarely does.
84codes has long believed that great developer tools deserve to be sustained. As a company built around making infrastructure invisible, whether through CloudAMQP (their managed service) or LavinMQ (their open-source message broker), 84codes knows firsthand how much trust gets placed in shared services every single day. Supporting RubyGems.org isn't a…
Rails 8.2 adds f.datalist to FormBuilder, so you can wire a text input to a native HTML autocomplete list with zero JavaScript and no derived-id bookkeeping.
RubyGems 4.0.13 includes enhancements and Bundler 4.0.13 includes enhancements, bug fixes and security.
To update to the latest RubyGems you can run:
gem update --system [--pre]
To update to the latest Bundler you can run:
gem install bundler [--pre]
bundle update --bundler=4.0.13
RubyGems Release Notes
Enhancements:
- Prevent extraction from escaping destination_dir via pre-existing symlinks. Pull request #9493 by thesmartshadow
- Close stdin immediately when using popen2e. Pull request #9540 by rwstauner
- Fallback to copy symlinks on Windows. Pull request #9296 by larskanis
- Installs bundler 4.0.13 as a default gem.
Bundler Release Notes
Enhancements:
Most supply-chain attacks against RubyGems exploit a narrow window: an account is compromised, a malicious version ships, and any bundle install in the minutes that follow resolves straight to it. Bundler 4.0.13 introduces cooldown, a time-based filter that refuses to resolve to a version until it has been public for at least N days. Releases too new to have been scrutinized are passed over in favor of ones that have aged past the window.
The feature was designed in the open, drawing on how other ecosystems approach the same problem. It is opt-in, and complements rather than replaces existing defenses like mandatory 2FA and trusted publishing.
Cooldown reads the per-version created_at…
Imagine this scenario: a developer added a pub/sub gem built on top of Sidekiq to handle background event broadcasting
in your company’s Rails app. At the time, it was a huge win: instead of building a custom job orchestration system,
they could drop in the gem, wire up a few events, and ship a feature in days instead of weeks.
Fast forward a few years: Sidekiq needed an update. You find out the gem wasn’t actively maintained anymore. But by
then, the entire application depended on it. Core features like sending notifications, syncing with third-party APIs,
and triggering billing logic all ran through this pub/sub layer.
Now you face a painful choice: either keep running on an…
This post walks the whole Agile process: why it needs structure, the four nested loops it runs on, and a single example traced from a raw idea down to buildable stories.
Contents
- Why process?
- The process on one picture
- Four nested loops
- The planning cycle is a tree
- The six stages
-
Example for a cleaning business
Why process?
It is tempting to jump straight to coding: we know what we want, and we’ll…
For The Agile Process I recreated the cohesive cycle figure from LaunchSchool’s Process Overview: four feedback loops drawn as rings, where each loop opens into the next.

What I compared
Tool
Circular layout?
Why it did not work
Mermaid
No
Ranked straight lines, no radial layout; needs a runtime CDN script
PlantUML
No
Renders through Graphviz
dot, same straight lines; needs Java and a render step
Graphviz circo
Partly
One ring is great; four chained rings cascade in a line, and closing the loop merges all nodes into one giant ring
Custom Python + SVG
…

Version 6.1.4 of the Passenger application server has been released. This release bumps the version of the builtin Nginx engine used in Standalone mode and adds prebuilt binaries for ruby 4.0.5.
Updates & improvements
- [Nginx] Upgrades preferred Nginx to 1.30.2 from 1.30.1.
- Updated various library versions used in precompiled binaries (used for e.g. gem installs):
- ccache: 4.13.4 -> 4.13.6
- cmake: 4.3.2 -> 4.3.3
- gnupg: 2.5.19 -> 2.5.20
- libgpg_error: 1.60 -> 1.61
- libksba: 1.6.8 -> 1.8.0
- rubygems: 4.0.10 -> 4.0.12
- rubies:
Installing 6.1.4
Please see the installation guide for advice on getting started with Passenger. Coming from a language other than Ruby, Python, Meteor or Node? Even if we…
Two years in a row, we love to see it. A huge thank you to Jason Bosco and the Typesense team for coming back and continuing to invest in this community. It genuinely means a lot to us.
You might not know their name yet, but trust me you're about to. Typesense is an open-source search engine that's blazing fast, typo-tolerant, and actually a joy to work with. Think of it as everything you wished Algolia was (including open source), without the Elasticsearch therapy bills. They're self-funded and building for developers, not investors, and it shows in every line of their docs.
Oh, and one more thing: Typesense is your WiFi sponsor this year. That's right every Slack message you send from the…
Sally and Joël get technical as they lay out their thoughts on blog posts.
Our hosts pick apart what makes a good technical blog post, why consistent terms are more important than you might think when communicating with your audience, and how to improve your own writing to ensure your reader remains engaged.
—
There’s still time to secure your place at thoughtbot’s upcoming UK meet ups over the next month.
London Tech Leader Meetup - Tuesday June 23rd
Brighton Tech Leader Meetup - Wednesday June 24th
Brighton Ruby - Thursday June 25th
Evolve - Friday June 26th
Your hosts for this episode have been thoughtbot’s own Joël Quenneville and Sally Hall.
If you would like to…
Frequently Played 🔗
I tend to listen to the same songs or albums on repeat that are evocative of how I’m feeling or what’s going on with me. Here is what I’m currently listening to over, and over, and over, and over, again.
Not Bad For New Jersey 🔗
A signature Tele AND two new tunes from Brian? Yes, please.
Full Lyrics
I can’t say I had a good time
But after all this crazy, I think we did alright
Make You Feel My Love 🔗
Thanks to K-Pop Demon Hunters, my daughter assumes any song lyrics she doesn’t understand are in Korean. But sometimes I get to say no, that’s just Bob Dylan singing.
Full Lyrics
The storms are raging on the rolling sea
And on the highway of regret
The winds of change are blowing wild…
The Original Sin, the Scorpion, and Local AI June 1, 2026 For the last few weeks, I have been experimenting with local AI models to help me develop and maintain Ruby projects. Built for Ruby on Rails Build Maps WithoutGoogle APIs Generate beautiful production-ready maps directly from your Rails backend. Fast rendering, zero external dependencies, … Continue reading The Original Sin, the Scorpion, and Local AI →
I went on Code with Jason for the second time. Jason and I got into the Fireside acquisition, how to actually find and finance a business to buy, why support is a product, and where I think developer tools are headed in the AI era.
Some of the highlights:
Why I Bought Fireside. Complete happenstance. I was already paying Garrett Dimon to push Flipper forward, and Garrett had worked on Fireside for Dan Benjamin back in the day. Dan had lost interest and was trying to sell, but it was too big for the small players and too small for the big ones. The math was simple: if I bought it, the profit could pay for Garrett to work on both Fireside and Flipper instead of it coming out of my pocket every…
After talking with Jeremy Smith and Jess Brown on the IndieRails podcast about stained glass and how I transitioned to programming in Ruby, I’ve had this crazy idea that I could tie the two together in a weird project. Well, here goes nothing!
This week I got the last big piece done before we can make the next Hanami release. Mailers now fully integrate into Hanami apps, with zero necessary boilerplate, just like all our other essential components.
This integration piece was the first real usage test of Hanami Mailer itself, and it drove a couple little improvements: keeping test delivery state at the instance-level, and allowing for a configurable view class for each mailer.
With that done, there’s not a whole lot left before we can ship a release candidate! I’m hoping to get to that in the next ~7-10 days. I want to get some decent docs sorted first, so folks can easily test out all the new things.
With release prep in…
Proactive engineering is the practice — and rigor — of staying atop new technologies, designs, and changes in order to keep your software stack healthy, minimize risks, and keep technical debt low. This allows you to build a healthy team and well maintained code base that is a joy to work with.
Proactive engineering is also the exact opposite of reactive engineering (a.k.a. move fast and break things). The problem is most teams don’t have this kind of rigor. They work in a constant state of fire fighting, dealing with on-call issues, bombarded with interrupts, and/or sheer neglect. The goal is to get you into a healthy state in which you have time for Deep Work…
Turning Years of Ruby Knowledge Into a Local Coding Assistant June 1, 2026 Introduction Over the years, most Ruby developers accumulate a vast amount of knowledge. Not just source code, but articles, documentation, experiments, bug fixes, pull requests, design decisions, and lessons learned from maintaining production systems. The problem is that this knowledge often remains … Continue reading Turning Years of Ruby Knowledge Into a Local Coding Assistant →
Storing data as a sequence of events - RubyConfAt lightning talk supplement
This post originated from the lightning talk and the discussions I had afterward at RubyConfAt.
It was a great conference. Especially the music part was amazing. Big kudos and applause to the organizers, once again!
The Lightning Talk
During my lightning talk I discussed an alternative way of storing data in Ruby applications. The alternative way is to store data as a sequence of events.
It all starts with admitting the fact that an update of data causes information loss. We do know what it is now - we see the current state in a database column. But we don’t know how we got there. Context is lost.
Event…
### Summary
CarrierWave's content_type_denylist check fails to escape regex
metacharacters in string entries, causing the denylist to silently
not match the content types it is intended to block.
**Note**: CarrierWave is aware `#content_type_denylist is deprecated
for the security reason`, but it still used by developers, and the
problem here isn't denylist allows any filetype, and thats not a
vulnerability in carrierwave, its an implementation problem in
developers using CarrierWave, the problem is its denylist entries
are interpolated directly into a regex without `Regexp.quote` or
anchoring. The denylist is still useful when developers want to
ban specific content types but allow…
We can easily configure global rate limits, but how can we make them dynamic?
In the new glorous website of Hanakai there are two “getting started” guides for Hanami: one for a “web app” (meaning, a fullstack app) and one for an API app. Even though those two guides follow building the same application (bookshelf), they differ quite a bit in places. Sometimes it’s absolutely justified (you don’t have HTML templates in API app), sometimes it feels justified, but can also provoke a thought. This is one of these thoughts.
Let’s look about 30% in the guide at “Fetching books from database” subsection. It demonstrates how to get a books index page, paginated. This is how is looks for a fullstack app (combined into one listing for clarity):
# action
module Bookshelf
mo…
Rails World Tickets, New JavaScript Package Managers, and Security Worries
Chris, Andrew, and David kick things off with a detour through Dungeon Crawler Carl, Rails World tickets, and conference travel before diving into developer tooling, package manager security, and the latest Ruby ecosystem updates. The conversation covers everything from Hotwire-style UI patterns and pnpm/Corepack setup to Jeff Dickey’s new package manager, the RubyGems malicious package attack, Ruby 4.0.4, Shopify’s Rubydex, Claude/Codex chatter, and the increasingly strange future of AI agents and delivery robots. Hit download now to hear more!
Links
Hi, Wojtek here. Let’s see a huge list of this week’s changes in the Rails codebase.
Action Cable server adapterization
Extract low-level Action Cable server responsibilities into ActionCable::Server abstractions.
This refactoring separates socket handling, concurrency primitives, and other transport-specific behavior from application-level connections and channels. It makes Action Cable more flexible as a framework and opens the door to alternative server implementations without changing user-facing channel and connection code.
Active Storage Guide update
Can be read on Edge Guides already.
Add shims for Ractor shareability methods
Adds new core extension to Kernel ractor_shareable?, ra…
What follows is the complete text of an audit report I produced for the Organization for Transformative Works, a non-profit which was for many years run one of the largest fan-fiction archives on the Internet.
This was produced as part of my Ruby on Rails performance retainer service. Since the app is open source, OTW has kindly agreed to let me publish the report online for all to see.
The Archive Of Our Own, also known as “AO3”, is a Rails application that is more than 16 years old. It was the focus of my engagement.
Without any further ado, here’s what I handed over to OTW and their crack team of volunteers. I think I am one of a very, very small number of people who has ever been paid…
We’re thrilled to welcome SerpApi as a new silver-tier Hanakai sponsor!
SerpApi is the world’s leading provider of search data, pioneering APIs that turn search engine results into structured, developer-ready information. Founded in 2017, the company enables developers and organizations around the world to integrate live search insights from sources like Google, Bing, and YouTube.
SerpApi comes on board as we near the first anniversary of our sponsorship program. Support like this has been instrumental in everything we’ve achieved this past year: shipping Hanami 2.3, launching Hanakai, and cooking up a very special Hanami 3.0 release—more on that one soon!
SerpApi is proud to sponsor…
Running AI Locally for Ruby Development: A Practical Guide with Ollama, Aider, and Your Own Codebase May 28, 2026 Ruby Stack News — by Germán Silva There's a quiet revolution happening in developer tooling, and it doesn't require a cloud subscription, an API key, or sending your proprietary code to someone else's server. Over the … Continue reading Running AI Locally for Ruby Development: A Practical Guide with Ollama, Aider, and Your Own Codebase →
This is a short post to show the compatibility between Sidekiq
and Ruby across different versions. In the
process of upgrading really old applications to more modern versions of Ruby and
Sidekiq we have run into a lot of these combinations.
Sidekiq’s maintenance policy
only covers the current and previous major versions (8.x and 7.x today), as
long as they are less than five years old. Older versions (6.x and below) no
longer receive updates, including security fixes, so if you are on a legacy
version, upgrading is the safer path.
Sidekiq Version
Required Ruby Version
Recommended Ruby Version
8.1.Z
>= 3.2.0
4.0
…
#802 — May 28, 2026
Read on the Web
Ruby Weekly
A New Register Allocator For ZJIT — Deep-in-the-engine-room stuff, but the kind that makes Ruby faster for us all. Tenderlove’s walkthrough of ZJIT’s new register allocator shows how processing an entire method at once lets the JIT keep more values in CPU registers and lays the groundwork for bigger optimizations to come, including method inlining.
Aaron Patterson
Hone Your Postgres Skills - Choose from 44 POSETTE 2026 Talks — Pick from talks about PostgreSQL-backed app development, Postgres performance, scaling, graph data, AI agents, Postgres 19 and more in the Ultima…
A little while ago I was asked to to build a “white-label” feature into an existing app. Their customers can now customize the app to match their brand without touching code.
It will look a little something like this:

This article walks through how I build a custom theme system using Tailwind CSS and the OKLCH color space. The basics for this feature I extracted and is available on GitHub.
The approach I took generates an entire color palette from a single value, instead of managing eleven different color stops manually. Sounds complicated? It really is quite simple. Let me show you.
Tailwind allows defining custom colors using the @theme directive (these can then be used normally, e.g. te…
Exploring Ruby’s OpenSSL stdlib internals: from C bindings to Ruby APIs May 27, 2026 Ruby ships with a standard library gem named openssl, responsible for exposing cryptographic primitives, TLS/SSL sockets, certificates, digests, encryption, and secure communication APIs directly to Ruby developers. Built for Ruby on Rails Build Maps WithoutGoogle APIs Generate beautiful production-ready maps directly … Continue reading Exploring Ruby’s OpenSSL stdlib internals: from C bindings to Ruby APIs →
Agents iterate fast; your CI pipeline may not be ready for what that actually costs. More throughput means more test runs, a growing suite, and infrastructure spend that compounds in ways most teams don't catch until someone asks about more than token spend.
Continue Reading
We recently landed a new register allocator in ZJIT and I thought I’d write a post about it!
What is a register allocator?
Whenever a compiler generates machine code it needs to decide where to put values.
Those values usually take the shape of a variable in your function, though the compiler can also compute intermediate values as well.
When we need to perform a calculation on some value, the CPU needs to know how to find the value.
The CPU can typically only compute output based on inputs that are in registers, though some architectures (like x86) allow computations on values stored in memory.
That said, reading and writing to registers is much faster than memory, so it behooves the…
We’re thrilled to announce that Mudflap is returning as a sponsor of RubyConf for the second year in a row. Their continued investment in the Ruby community means a lot to us, and we couldn’t be more excited to have them back.
If you’re not familiar with Mudflap, they serve the $800B trucking industry — the backbone of the U.S. economy. Their market-leading payments and marketplace platform helps truckers save thousands of dollars on fuel (their #1 business expense), while giving fuel stop partners access to new, hard-to-reach customers. It’s a powerful example of technology bringing transparency and efficiency to a historically fragmented space.
Mudflap is also expanding beyond fuel into the…
May 26, 2026 Ruby’s elegance hides an extremely sophisticated runtime underneath. Features like blocks, lambdas, closures, binding, method(:foo), and even &:to_s rely on a dense set of VM internals implemented in CRuby’s proc.c. This file is one of the best entry points for understanding how Ruby models executable code objects. The source analyzed here comes … Continue reading Understanding Ruby Proc Internals Through proc.c →
## Impact
PROXY protocol support for Puma was added in version 5.5.0.
When PROXY protocol v1 support is enabled, Puma reads incoming bytes
into an internal buffer. It waits for "\r\n" to determine whether a
PROXY v1 line is present. If an attacker opens a TCP connection and
continuously sends bytes without CRLF, Puma keeps appending to this
pre-parse buffer.
This can cause unbounded in-process memory growth and additional
CPU cost from repeatedly scanning the growing buffer for CRLF.
A single, unauthenticated TCP connection can drive significant memory
growth and may cause process/container OOM or degraded availability.
Only Puma servers using the following non-default config are…
## Impact
Puma is vulnerable to source IP spoofing when set_remote_address
proxy_protocol: :v1 is enabled and persistent connections are used.
PROXY protocol v1 is a connection-level protocol. Support was added
to Puma in v5.5.0. A proxy sends one PROXY header at the beginning
of a TCP connection, before any HTTP data. Puma incorrectly re-parsed
PROXY protocol headers after each keep-alive request on the same
connection. An attacker able to send HTTP requests through a trusted
proxy could therefore inject a second PROXY header between HTTP
requests. Puma would treat the injected header as authoritative for
the next request and overwrite REMOTE_ADDR.
This can mislead applications or…
Ruby LSP is a wonderful language server built on top of Prism, Rubydex and RBS. It implements a variety of features that enrich the code editing experience in Ruby projects. Its add-on architecture allows extending it with Rails features, Rubocop support and custom functionality.
Coming from Vim, I was really used to rails.vim. When I switched to Zed, I started using Ruby LSP. In some ways I felt like I’d gained superpowers, as now I had all these modern editor features that are possible because my Ruby code is actually being parsed. On the other hand, I found there were some features I was missing.
One such feature was following render calls in view templates. Rails.vim offered a gf (“go…
Authors: Andrey Sitnik, Author of PostCSS and Autoprefixer, Principal Frontend Engineer, and Travis Turner, Tech Editor
Topics: AI, DX, Open Source, Agent Experience, LLMs

Move LLM safeguards out of AGENTS.md: how agent hooks plus nano-staged run linters on changed files only, cut tokens, and tighten the agent's feedback loop
Small life hack: using agent hooks and pre-commit managers like nano-staged to run linters and safeguards is far more reliable—and faster—than asking an agent to do it in AGENTS.md. Read how five minutes of setup can mean a tighter loop and fewer tokens.
ActionCable brought WebSocket support to Rails,
but it traditionally required Redis as a message broker.
This added complexity and cost to deployments.
Rails 8 introduces SolidCable as the default ActionCable adapter.
It stores messages in the database
and uses polling to deliver them to subscribers.
This eliminates Redis as a dependency for real time features.
In this post, we will explore how SolidCable works,
how to configure it for production,
and important considerations for the application.
How SolidCable Works
Traditional ActionCable with Redis uses pub/sub:
when a message is broadcast, Redis immediately pushes it to all subscribers.
SolidCable takes a different…
Caching in Rails has traditionally meant choosing between Redis or Memcached.
Both are fast but expensive when we need large caches.
Memory costs add up quickly.
Rails 8 introduces Solid Cache as the default production cache store.
It stores cache entries in the database,
leveraging modern SSD performance
to provide larger caches at significantly lower costs.
In this post, we will explore how Solid Cache works,
how to configure it for production,
and important tradeoffs to consider.
The Case for Database Backed Caching
Traditional memory based caches have a fundamental limitation:
RAM is expensive.
A 10GB Redis cache costs significantly more than 10GB of SSD storage.
Modern NVMe SSDs…
Background job processing has always required external dependencies like Redis or Memcached in Rails applications.
With Rails 8, that changes.
Solid Queue is now the default Active Job backend,
and it stores jobs directly in the database.
This eliminates the need for Redis in many applications,
simplifying deployment
and reducing infrastructure costs.
In this post, we will explore Solid Queue in depth,
covering installation, configuration, real world usage patterns,
and important caveats to consider.
Why Solid Queue?
Traditional job backends like Sidekiq
and Resque rely on Redis for job storage.
While Redis is fast,
it adds operational complexity:
- Additional infrastructure to manage
…
The Bike Shed celebrates its 500th episode with hosts new and old as they reflect on the show’s history and ask, what’s new in your world?
Our past hosts look back at their time on the show, their favourite moments while hosting, what they took away from producing the Bike Shed, and what they might do today if they were still in the hosting chair.
—
Your hosts for this special episode of The Bike Shed have been Joël Quenneville, Sally Hall and Aji Slater. Joining them have been our returning hosts Derek Prior, Sage Griffin, Stephanie Viccari, Chris Toomey and Stephanie Minn.
Listen back to some of our guest’s highlighted episodes
Bike Shed 14: An Acceptable Level of Hassle…
Like it or not, a lot of applications are adding AI–native features: anything related to automated answers, object classification, knowledge base search, or text summarization can already be handed off to an LLM with pretty good results. If you happen to do this as a Rails engineer, this post will definitely be useful.
In this post I will describe my approach to LLM integration for Rails applications. We will discuss some common problems, explore related gems, build our own architecture layer for LLM integration, cover it with specs, and discuss ways to prepare the context.
Why we need a layer
Integrating an LLM into a Rails app at the early stages usually does not differ much from…
Duck Typer is a Ruby gem that validates interface
compatibility across polymorphic classes sharing the same
role, so they can be used interchangeably. It detects and clearly
reports interface drift directly in your test suite.
Since Duck Typer launched, there’s been some discussion about the
validity of interface testing. In this post, I want to make the case
for it.
“Interface tests are fragile, so you shouldn’t write them”
That’s not true without context. How is your test suite structured?
What do you test? Obviously, if you write only
interface tests like this:
def test_interfaces_match
assert_interfaces_match [StripeProcessor, PaypalProcessor]
end
With no behavior tests…
Recent months have been crazy. AI changed software engineering and there is no way to escape it.
Productivity growing exponentially, small teams beating huge companies, new models emerging every day.
It’s a major shift in the way we work.
Unfortunately, it brings a lot of challenges. Experts on X telling you you’re being left behind if you’re not running 10
sessions at once. Code quality dropping to the ground. Constant exhaustion from context switching. It’s a clear path to
burnout. I’ve seen it myself - on me and on my team.
But it doesn’t have to be this way. Over the last few months I’ve adjusted how I work with AI -
how many agents I run, when I look at them, what I let interrupt me…
I finished off Hanami’s streamlined i18n support this week! I had built the core functionality quite a while ago, and thought that adding view helpers would be a cakewalk. In the end, this turned out to be another 80% after the first 80%.
So this week, I: reimplemented I18n’s #localize so it can respect slice isolation, bundled English language defaults available via a new shared_load_path setting, added i18n view helpers, tracked the currently-rendering template in Hanami View, used this to add relative i18n key lookup in view helpers, added i18n helpers to actions as well, and then finally, added i18n to the Gemfile and generated placeholder en.yml files in new apps. That’s one big…
Paweł merged a setting to configure the log level for Hanami’s DB logs, and we hashed out a plan to keep the production logs leaner: by default, DB logs will have the :debug severity level, while in…
The videos from Blue Ridge Ruby 2026 are now available on YouTube. Check them all out!
I wanted a fast way to read the quality of a Ruby repository, so I wrote a small gem called linecounter.
Why bother
Most files should not be too long, and most methods should not be too long. A long file is hard to hold in your head, and a long method usually hides more than one job. I wanted a quick signal for that, plus which files change the most and where the branching piles up. Not a full audit, just a first read so I know where to look next.
gem install linecounter
cd your-ruby-project
linecounter
It prints one row per file, sorted so the files that change often and carry the most logic float to the top:
Churn Branches LOC File
4 34 189 …
Hi, I’m Emmanuel Hayford. Rails had a busy week, so grab a tea and let’s get into it.
The 2026 Ruby on Rails Community Survey is open
Open through July 3rd. Anonymous, and takes about 10 to 12 minutes, results published free. This year goes deeper on tools, deployment, team shape, and how AI is (or isn’t) showing up in your workflow.
Limit the size of strings we call to_i on in ActiveRecord
Calling to_i on a very long string can be a DoS vector. Active Model now caps auto-integer coercion to the first _limit * 4 bytes of the input, where _limit is the column’s storage size: 16 bytes for a default 4-byte integer, 32 bytes for an 8-byte bigint. That’s comfortably more than the digits any…
A collection of the various Ruby libraries and execution environments for building desktop, mobile, terminal, game, and browser applications.
A lot of people have developed a gag reflex against anything touched by AI.
I understand where that comes from. There is a lot of slop, maintainers are tired of reviewing code from people who do not understand it, and people are tired of predictable cadence.
We’re also heading toward a version of the future where all code will be generated. The models are good enough that for a lot of work, especially the boring repetitive kind, typing everything by hand makes very little sense. You can describe what you want, steer the model, ask for changes, review the output, and get to a working implementation much faster than before.
That caused some people to jump from “models can generate code” to…
Blue Ridge Ruby Insights & Experiences
In this episode, Chris, Andrew, and David are back together with David starting out giving a recap of Blue Ridge Ruby and his renewed motivation to contribute to open source. The group discusses the value of smaller single-track conferences to hallway conversations, and lightning talks. The conversation then shifts into real-world Rails and Stripe lessons, including workshop prep, validation decisions, webhook recovery, subscription edge cases, and the growing complexity of payment integrations. Hit download now to hear more!
Links
HoneybadgerHoney…
Introduction
Markdown has become the lingua franca of AI.
Large language models output markdown by default,
documentation lives in markdown files,
and developers think in markdown.
Why AI “Speaks” Markdown
Markdown’s rise in the age of AI comes down to a few key factors:
-
Simplicity and Structure: Its minimalist, plain text syntax (# for headings, * for lists) creates a clear, predictable structure that AI models are trained on and can easily interpret.
-
Enhanced Comprehension: AI struggles with complex formats like PDFs or Word documents due to visual clutter and metadata. Markdown strips this away, letting AI focus on meaningful content.
-
Improved Prompting…
May 21, 2026 How MRI Really Implements include, prepend, extend, Singleton Classes and Method Lookup Ruby’s object model looks elegant from the outside: module Logging def call puts "before" super end end class Service prepend Logging def call puts "service" end end But internally, MRI/CRuby performs a surprising amount of machinery to make this work. … Continue reading Inside Ruby’s Object Model →
Welcome Back, Judoscale! We're excited to welcome Judoscale back as a Silver Sponsor of RubyConf for the second year in a row. If you've ever lost sleep wondering whether your Rails app could handle a sudden traffic spike, Judoscale is probably already on your radar and if it's not, it should be.
Judoscale is a dedicated autoscaler for Rails apps (and beyond), purpose-built around request queue time rather than blunt metrics like CPU or memory. That distinction matters: queue time tells you when your app is actually struggling, not just busy. The result is smarter, faster scaling up when you need it, down when you don't without the overprovisioning tax most teams quietly pay every month.…
Fuik is a Rails engine for handling webhooks that I launched recently. But it can also be used to process inbound emails! 💡
When working with inbound email in Rails using Action Mailbox, there’s a key requirement: managing EML files and blob storage. Once an email arrives at your domain, your email provider captures it and sends the data to you via webhook. You then extract what you need and process (or store) it. Action Mailbox requires: ActiveStorage ánd ActionMailer.
But what if you don’t have a need for ActiveStorage (including its cloud storage setup) or ActionMailer (because you use Courrier).
Most transactional email providers send their inbound emails as webhooks: Postmark,…
Making software accessible often comes down to removing small but repeated points of friction in everyday workflows. Today, on Global Accessibility Awareness Day, we’re sharing recent improvements in JetBrains IDEs across several areas: compatibility with assistive technologies on various platforms, keyboard navigation, and non-visual feedback. Some of these improvements are already available, and some are coming later this year.
You can use the audio player below to listen to this blog post.
Accessibility Blog Post Audio
Better compatibility with…
Dropping a column from a database table is one of the simplest possible migrations, if you just look at the syntax. But if you run that migration in a large application used by a ton of users where taking the application down for maintenance is not an option, you may run into problems.
One thing I didn't realize until researching this post: ActiveRecord caches each model's schema the first time the model is loaded, and in production, with eager loading on, that means the whole schema is effectively cached at boot.
This matters because of the deploy order. The migration runs first, then the app server restarts onto the new schema. In between, there's a window where the old process…
RailsEventStore 2.19: Starting Gun for 3.0
RailsEventStore 2.19.2 is out — grab that one, not .0 or .1 (more on why below).
This release is the starting gun for 3.0. We’ve added deprecation warnings for everything we’re removing in the next major version. Run your test suite — every warning you see is a hard error in 3.0.
Deprecations
We’re deprecating a batch of APIs in 2.19 that will be removed in 3.0.
RubyEventStore
in_batches_of
Renamed to in_batches for consistency with the rest of the API.
# deprecated
event_store.read.in_batches_of(100).each { |batch| ... }
# use instead
event_store.read.in_batches(100).each { |batch| ... }
of_types
Renamed to of_type. Singular, consistent with…
RubyGems 4.0.12 includes enhancements and bug fixes and Bundler 4.0.12 includes enhancements and bug fixes.
To update to the latest RubyGems you can run:
gem update --system [--pre]
To update to the latest Bundler you can run:
gem install bundler [--pre]
bundle update --bundler=4.0.12
RubyGems Release Notes
Enhancements:
- Remove cygwin from WIN_PATTERNS. Pull request #9527 by fd00
- Installs bundler 4.0.12 as a default gem.
Bug fixes:
- Fall back to lockfile version when
BUNDLE_VERSION is “lockfile”. Pull request #9545 by hsbt
- Read
BUNDLE_VERSION env var in BundlerVersionFinder. Pull request #9538 by hsbt
Bundler Release Notes
Enhancements:
For more than two decades, Ruby has shaped how we think about software development at thoughtbot. It influenced how we write code, how we collaborate, how we teach, and how we build products alongside our clients. Many of the practices, tools, and ideas that define our company today were either born from or heavily influenced by the Ruby community.
Ruby also helped shape our careers, friendships, businesses, and opportunities. That’s a big part of why we’re excited to share that thoughtbot is joining the Ruby Alliance alongside Gusto as a founding company.
What is the Ruby Alliance?
The Ruby Alliance is a new coalition of companies making a long-term financial and operational…
A use-after-free vulnerability has been discovered in the pthread-based getaddrinfo timeout handler of Ruby. This vulnerability has been assigned the CVE identifier CVE-2026-46727. This issue has been fixed in Ruby 4.0.5. We recommend upgrading Ruby.
Details
A race condition exists in the timeout cancellation path of rb_getaddrinfo used by Addrinfo.getaddrinfo(..., timeout:) and Socket.tcp(..., resolv_timeout:). A remote attacker who can delay DNS responses near the specified timeout may cause the Ruby process to dereference freed memory and crash.
Recommended action
Please update to Ruby 4.0.5 or later.
Workaround
If you cannot upgrade immediately, avoid passing timeout: to Addrinfo.…
Ruby 4.0.5 has been released.
This release only contains a security fix for
CVE-2026-46727: Use-after-free in pthread-based getaddrinfo timeout handler
and a build system regression in Ruby 4.0.4 under C locale [Bug #22065].
Please see the GitHub releases for further details.
Release Schedule
We intend to release the latest stable Ruby version (currently Ruby 4.0) every two months following the most recent regular release. Ruby 4.0.6 will be released in July, 4.0.7 in September, and 4.0.8 in November.
If a change arises that significantly affects users, a release may occur earlier than planned, and the subsequent schedule may shift accordingly.
Download
We gathered again at Working & Co in Buenos Aires for another Ruby Argentina meetup. As always, the event was streamed live on RubySur’s YouTube channel, and our sponsors (SINAPTIA, Rootstrap, OmbuLabs, and Crunchloop) kept us fed and hydrated throughout the night.
Vacas, Rails y Blockchain
Ignacio Cesarani presented his thesis project: a cattle trading platform built with Ruby on Rails and blockchain. The interesting part is the architecture: it uses Ethereum RSK as a sidechain to record transactions immutably, while keeping operational data in a traditional database.
Break
After the first talk, we had time to eat, drink, and chat. The sponsors put together a good spread, and the…
Authors: Ivan Chepurin, Frontend Engineer, and Travis Turner, Tech Editor
Topics: AI, Developer Community

AI-assisted code generation is not free. It comes with a hidden cost: burnout. Are we dangerously ignorant to this problem? And how can we cope with it? In this post, we discuss this question.
We’re more productive than ever. AI allows us to generate code at supersonic speeds, unfold entire modules in seconds, and ship thousands of lines of code. It's easier to pick up tasks and generate value, even in unfamiliar codebases. But there’s a dark side. AI-assisted code generation isn't free; there's a hidden cost that we as an industry are only beginning to realize: AI burnout. Are we…