Hanami with Rodauth
A guide to setting up Rodauth for authentication in Hanami applications, covering setup with gems like bcrypt and jwt, along with features, database configuration, and testing.
The last month of the top Ruby blogs
Tumbleweeds in Ruby land today.
A guide to setting up Rodauth for authentication in Hanami applications, covering setup with gems like bcrypt and jwt, along with features, database configuration, and testing.
This video episode explores using Claude Code to assist in developing Rails applications, focusing on practical tools rather than vibe coding.
Implementing the Lox interpreter in Ruby while working through Crafting Interpreters, with a minimal type checking setup using Sorbet configured with RBS comment syntax.
No posts today. Everyone must be busy writing code.
Version 6.1.2 of the Passenger application server has been released. This is a very small bugfix release, which rolls out the new signing key for Linux repos.
A developer describes how Conductor.build, used with Claude models, has revolutionized shipping Rails code. The multi-workspace, multi-process setup initially feels odd compared to a single-editor workflow.
The January 2026 README newsletter is live, featuring highlights from the Fundraising Gala, Awards Honorees, Ruby news, introductions to new Ruby Central Board members, volunteer spotlights, and a supporter feature with GitButler.
Ruby makes random number generation simple and powerful, useful for games, simulations, test data, tokens, and user experiences in Ruby and Rails apps. It provides built-in methods and classes for developers.
This official Rails blog post from Wojtek summarizes recent changes in the Rails codebase, including disabling query cache in the console and various bugfixes.
This week's Awesome Ruby Newsletter features Ruby::Box: Rethinking Code Reloading with Isolated Namespaces.
If you've built a RAG system, you've probably hit this wall: vector search returns semantically similar documents, but many don't answer the query. This reference architecture shows how to build production-grade AI search on Heroku, addressing the gap between demo and production.
Static and animated cartography built directly from GeoJSON. For a long time, generating maps from code meant working inside heavy ecosystems designed primarily for analysis. Those tools are powerful, but they are not always the right fit. In many practical scenarios, the problem is simpler and more concrete.
A tutorial on creating a link-icon custom element that automatically displays icons for URLs from platforms like Twitter, GitHub, LinkedIn, Instagram, and YouTube. If unrecognized, it shows a generic link icon. No configuration needed—just pass the URL. Code available on GitHub.
In today’s digital economy, speed is crucial for startups, SaaS features, and enterprise platforms to shrink development timelines. Rails enables faster time-to-market, allowing quicker idea validation, iteration based on feedback, and staying ahead of the market.
This week's Ruby Weekly newsletter highlights RubyConf's pitch competition for Ruby-powered startups, an article on AI tools in coding, and a post on implementing optimistic UI in Rails.
This official RubyGems and Bundler release includes enhancements, bug fixes, and documentation updates. Key changes: removed unused deprecate loading, validated executable names, and fixed issues with requiring gems. Update with gem update --system [--pre] and gem install bundler [--pre].
Open two browser windows. Add a comment in one and watch it appear in the other. No server required, just GitHub Pages. Unlocked with the key of imagination.
Rails has long been known for accelerating web development without compromising quality, scalability, or security. In 2026, it's still a favorite for startups, enterprises, and SaaS businesses to build scalable apps quickly. A key success factor is the maturity and developer-friendliness of its development lifecycle.
Rails framework code is full of inheritance magic, but your application code doesn't have to be. Learn how composition makes dependencies explicit, testing easier, and debugging a breeze using patterns you already know from JavaScript.
From Disaster Prevention to High-Performance Maps. Tokyo Gas uses Ruby in production to protect millions during earthquakes by rendering seismic observation data.
In this podcast episode, Joël and Aji share the books, talks, and videos that influenced their programming perspectives. They highlight Practical Object-Oriented Design in Ruby, Confident Ruby, and a RailsConf 2014 talk, discussing how these shaped their approach to coding, confidence, and handling uncertainty.
An update on polishing Hanami's built-in i18n support, shared as a pull request on the forum. Follows a recent code-a-thon.
Tailwind CSS 4 introduces CSS-based configuration using @theme directives and the Tailwind CLI. Set it up with Jekyll using the jekyll-tailwind gem, which integrates into Jekyll's build process and uses the same tailwindcss-ruby gem as Rails. Update Gemfile and _config.yml, and optionally install plugins via npm.
Hotwire Weekly is a newsletter rounding up the latest in Hotwire development. This issue covers optimistic UIs with Turbo, Vite setup on Rails, CSS counters, and more.
Build optimistic UI in Rails with Inertia by updating props before requests complete. Learn the replaceProp pattern, automatic reconciliation, rollback behavior, and history caveats using a kanban board example.
A new tool called overitall (oit) provides a terminal UI combining process management with log viewing, enhancing overmind with a viewer that handles modern, noisy apps. Ideal for terminal-first developers.
Exploring what happens when code becomes the easy part, including excitement, dread, and implications for a solo-run business.
A quick tip on using CSS counters to automatically update list numbers in Rails applications without JavaScript. Ideal for sortable lists, ensuring correct numbering after reordering with tools like the positioning gem and Hotwire.
AI code assistants are transforming how developers debug production errors, but they require context to be effective. This guide shows how to create a custom GitHub Copilot agent that integrates directly with your error tracking tool.
An upcoming Rails change adds ActiveSupport notifications for CSRF events, giving you visibility into attack attempts and failed validations.
No posts today. Everyone must be busy writing code.
A recap of a LeadDev webinar panel exploring why software maintenance feels outdated and strategies for evolving long-lived software.
Reflecting on modern software development, possibly influenced by AI tools like Opus 4.5, the author describes building a business tool for accounting, invoicing, and time tracking across multiple projects. They emphasize letting models drive the application to focus less on code, drawing parallels to others' experiences.
This official Rails blog post explores this week's changes in the Rails codebase.
The official Rails blog announces the release of Rails version 8.1.2.
This week's Awesome Ruby Newsletter highlights RatatuiRuby, a RubyGem wrapping Rust Ratatui to build TUIs with Ruby's ease.
The full flow from HTML paywall to real-time success message, and how a single UUID is all it takes to tie it together.
JSON remains a popular data interchange format, powering APIs, configuration files, microservices, and data pipelines in Ruby applications—from Rails APIs to background jobs and CLI tools. Ruby has offered excellent built-in support for JSON since version 1.9.3 through the standard library's JSON module—no external gems required.
A simplified approach to optimistic UI in Rails using Turbo, replacing custom elements with forms, data attributes, and a touch of JavaScript for instant feedback. Code available on GitHub.
This week's Ruby Weekly newsletter highlights RatatuiRuby, a new gem for creating terminal user interfaces in Ruby, inspired by Rust's Ratatui. It also includes Rails upgrade roadmaps and a comparison of background job options like GoodJob, Solid Queue, Sidekiq, and Active Job.
Rails stands out as an ideal framework for MVPs in the fast-paced startup world. It delivers speed without sacrificing quality, with sensible defaults, a mature ecosystem for features like authentication and payments, and a clear path to scale.
When writer's block is actually the weight of the bugs you're papering over.
Prefer SVG over PNG, trust browsers to downscale, and drop obscure formats in this ultimate guide to favicons for modern web. Includes steps for static HTML and Webpack.
This security advisory details a vulnerability in AlchemyCMS, a Ruby on Rails CMS, where authenticated attackers can achieve remote code execution through eval injection in the ResourcesHelper. It requires access to manipulate module configurations.
A quick win that made loading faker-ruby 19% faster.
A practical guide to setting up Vite in your Rails app for faster JavaScript development. Includes step-by-step instructions, tips, and real-world examples.
Hosts discuss AI's pros, limitations, downsides, and harm in coding, contrasting AI-generated and human code. References Sandi Metz's RubyConf talk on red-lighting and an article on running out of ideas. Explores the future of the AI boom.
A developer shares their journey from short-lived tech-learning projects to creating a lasting Ruby app that generates crochet patterns, inspired by personal hobbies.
This edition of Continuations, a Ruby-focused newsletter, is going out a couple days later than usual due to a Bonus Weekend of open source work, with updates to share.
GitLab announces updates to its HackerOne Bug Bounty program, emphasizing transparency and streamlined processes. Key changes include enhanced testing guidance, strongly recommending the GitLab Development Kit (GDK) for local testing to protect production infrastructure, especially for security research like denial-of-service impacts.
This article in the series explores DAGs as the underpinning of workflow and durable computation engines, introducing the concept of two worlds. Rails users are directed to geneva_drive for a preferred approach in Rails-land.
Details the development of instrumentation for RubyLLM operations as part of RubyLLM::Monitoring, achieved without altering the core RubyLLM library.
This article covers the stabilization of libgd-gis's core rendering API, consolidating responsibilities in static GIS rendering, layered composition, and image manipulation into a stable, documented interface. Comprehensive documentation is also provided.
This newsletter edition welcomes 2026 with highlights on jQuery 4.0.0's release, CSS Grid Lanes for better layouts, and Inertia.js integration in Rails for modern UI components without separate APIs.
Use the new retry_on error argument to build intelligent retry strategies that respect rate limits, handle transient failures, and fail fast on unrecoverable errors.
The post explains why the grpc gem causes slow builds on Ruby 4.0. Its precompiled binaries are locked to Ruby 3.1 and 3.5.dev, so on 4.0 it compiles from source, leading to 30+ minute build times reminiscent of old sassc and nokogiri issues.
A personal reflection from Ruby developer Victor Shepelev on his long hiatus from writing about software development and programming languages, including Ruby, amid personal circumstances in Ukraine.
Inspired by a Bike Shed podcast episode, this post shares a system for reading pull requests to accelerate growth and push work towards production. It covers when to review them and the mechanics involved, excluding commenting on changes.
Continuing the series on step functions, this post explores DAGs as an alternative to marshalable stacks in Rails. For Rails users, check out the geneva_drive repo.
Active Storage variants allow transforming images to desired sizes or formats. Call variant on an attachment with transformations. Rails processes the original image on demand when requested and redirects to the generated file.
A personal perspective on choosing background job backends like GoodJob, Solid Queue, Sidekiq, and Active Job for Rails. It emphasizes the importance of context in technical decisions, avoiding justifications based on trends or uniqueness.
Exploring durable execution for web applications, particularly in payments and verifications. Discusses Temporal.io and competitors like Restate, DBOS, and Vercel Workflow, all based on sagas managed by separate services. Shares a personal journey from initial interest to practical implementation.
This official Rails blog post summarizes highlights from this week's updates to the Rails codebase, including error-aware retry_on and PostgreSQL type mappings.
This week's Awesome Ruby Newsletter features Elo, a data expression language that compiles to JavaScript, Ruby, and SQL.
This newsletter recap covers discussions on tab navigation, audio playback, Liquid Glass modal fixes, and more from January's office hours.
Announcement of general availability for reranking models on Heroku Managed Inference and Agents, supporting Cohere Rerank 3.5 and Amazon Rerank 1.0. These semantic models score documents by relevance to queries, unlike keyword or vector searches, and serve as a high-fidelity filter in RAG pipelines to cut noise and token costs.
A beginner’s guide to generating database models in Rails. In the evolving world of web development, Rails remains a mature, battle-tested framework, thriving alongside new technologies like JavaScript frameworks and AI tools.
accepts_nested_attributes_for in Rails
A tutorial on building nested forms in Rails without using acceptsnestedattributes_for. It employs a simpler approach with models where a Form has many Fields, using Single Table Inheritance for different field types.
Splitting a full name like "Ayrton Senna da Silva" into first and last parts can be tricky with inconsistent whitespace. Using split(" ", 2) after squish provides a clean solution: "Ayrton Senna da Silva".squish.split(" ", 2) results in ["Ayrton", "Senna da Silva"] without extra spaces.
GitLab Credits introduce usage-based pricing for agentic AI, addressing issues with seat-based models that limit access for teams. Unlike traditional AI tools, GitLab Duo Agent Platform allows AI assistance triggered by SDLC events, not just user seats, making it fairer for varied usage patterns.
A blog post on serving Markdown source files alongside HTML in Jekyll to optimize for AI agents. It uses a GitHub Actions workflow to copy markdown files to the site, discoverable via a link tag in the HTML head.
This week's Ruby Weekly newsletter highlights TruffleRuby 33, a high-performance GraalVM-based Ruby implementation celebrating its 13th birthday, plus updates to Ruby 4.0.1 and Ruby 3.2.10.
The official RubyGems blog announces RubyGems 4.0.4 and Bundler 4.0.4, featuring enhancements and bug fixes. Update with gem update --system [--pre] for RubyGems or gem install bundler [--pre] for Bundler.
DateTime has been deprecated in Ruby since version 3.0. While it once offered a wider date range on 32-bit systems, Time now covers a vast range since Ruby 1.9.2. The post explores why some still use DateTime and touches on Rails upgrade experiences.
The official Ruby team has released Ruby 3.2.10. For further details, see the GitHub releases. Downloads are available in tar.gz, tar.xz, and zip formats with provided hashes.
Part 6 of the eight-part guide on Getting Started with GitLab Duo Agent Platform covers automating AI workflows in GitLab. It introduces managing agents and flows, setting up event-driven triggers, and monitoring activity.
When using multiple LLM providers, tracking costs manually becomes impossible fast. We needed visibility into our AI spending and LLM performance. Here's the monitoring engine we built for Rails.
The Ruby 4.0 release marks the 30th birthday of the language. It covers everything that's changed in Ruby 4, and how to upgrade with the least friction.
A guide to building a file deduplication system using ActiveStorage, focusing on detecting identical uploads and reusing blobs to save storage and speed up uploads.
Ruby 4 just dropped! Here’s a rundown of the new features, as well as a basic upgrade plan you can use to get to 4.0 greatness.
In this podcast episode, Joël and Sally discuss what makes a codebase and team welcoming, covering integration tips, the importance of project lore, future-proofing for developers, and the role of communication.
The official Ruby blog announces Ruby 4.0.1, which includes a bugfix for spurious wakeup from Kernel#sleep when subprocess exits in another thread, along with other bugfixes. The release schedule plans for Ruby 4.0.2 in March, 4.0.3 in May, and so on.
Rails 8.1 introduces the except_on option for validations and callbacks, allowing them to be skipped in specific contexts. This improves on the limited on: option, which only supported create or update, reducing the need for custom conditional logic.
This security announcement details a critical remote code execution vulnerability in OpenC3 COSMOS's JSON-RPC API. Attackers can execute Ruby code via eval() in parameter parsing, bypassing authorization.
Real-world cartography in pure Ruby. Until recently, libgd-gis could render raw GeoJSON. Now it renders cities, evolving into a style-aware, layered GIS engine capable of producing publication-quality maps directly from Ruby.
Ruby 4.0 introduces Array#rfind, a method that efficiently finds the last element in an array matching a condition by iterating backwards. This avoids creating intermediate reversed arrays, improving performance for large datasets.
This newsletter highlights shipping releases of Dry gems: dry-types 1.9.0, dry-schema 1.15.0, dry-inflector 1.3.0, and dry-cli 1.4.0, packed with numerous improvements.
No posts today. Everyone must be busy writing code.
This episode of the Breaking Change podcast features Justin Searls sharing thoughts on various topics, including a live phone call. He discusses his upcoming solo trip to Japan and invites listener feedback. Includes a collection of interesting links.
A pure-Ruby GIS engine for rendering cities like Paris, Tokyo, and New York. Explores why Ruby isn't typically associated with maps, GIS, or visual computing, and contrasts with standard stacks like QGIS, PostGIS, Mapnik, Mapbox, or JavaScript.
GitLab is making multi-factor authentication (MFA) mandatory for sign-ins using a username and password on GitLab.com. This enhances security against credential stuffing and account takeover attacks. It applies to password-based logins and API access, but not to SSO or social sign-on.
Issue 503 of the Awesome Ruby Newsletter highlights a Ruby YAML parser and other Ruby-related updates.
Native payment sheets on iOS and Android. Subscription data in your Rails database.
This article shows how to build modals and sliders using the native dialog element combined with Attractive.js and Turbo Frames, without any custom JavaScript. It starts by adding a dialog element to the application layout.
A look at moving billions of files out of Amazon S3 with zero downtime.
This week's Ruby Weekly newsletter features Zverok's guide to language changes in Ruby 4.0 with examples, the end of security support for Rails 7.1, and the introduction of ZJIT, a new JIT compiler in Ruby 4.0.
Mobile first design starts with smaller screens, focusing on simplicity, readability, and speed. For consultancies, it's essential since most visitors view sites on phones, where first impressions are made. Poor mobile usability can drive potential clients away.
Learn how to use Rails Action Cable without Redis. Follow along and build a Solid Cable application with real-time features.
Skip the SaaS subscription. Rails 8.2's credentials system is all you need for feature flags - version controlled, environment-overridable, and free.
This security announcement details a critical vulnerability in Shakapacker, where the EnvironmentPlugin exposes all build environment variables—including secrets like database credentials and API keys—to client-side JavaScript bundles since 2017. No recent changes triggered it.
This security advisory details an unauthenticated Insecure Direct Object Reference (IDOR) vulnerability in the Spree API, allowing attackers to access guest address information without credentials. The issue stems from a faulty authorization check in the CanCanCan Ability class for guest users.
This security announcement details an authenticated IDOR vulnerability in Spree API, allowing users to access other users' address information by manipulating order updates. The issue affects order management endpoints and lacks proper authorization checks.
When all deprecations are fixed and dual booting is in place, this is how we systematically bring the test suite back to green during a Rails upgrade.
A flashy homepage means nothing without clear goals. Here’s how to make the right things matter first.
How libgd-gis turns Ruby into a real GIS engine. For many years, Ruby was missing in maps, graphics, and spatial data, but now it can handle them with this library, starting with an ice cream example.
As part of building a fast Ruby project tool, we've released rv clean-install in rv version 0.4. Inspired by npm and orogene, it provides a clean install of gems after a fresh checkout or for CI tests, marking a step toward full project management.
The OWASP Foundation has released the eighth edition of its Top 10 Security Risks list for 2025, reflecting evolving application security based on over 175,000 CVEs and global feedback. It introduces two new categories and consolidates one, highlighting emerging risks.
Prism is here to change our lives as Ruby developers: find out how.
Exploring what happens when a Rails chat app is transpiled to Cloudflare Workers. D1, Durable Objects, and Hotwire all work seamlessly.
Paid members only, with a Zoom link provided.
Ruby offers simple and elegant ways to read and write files, emphasizing readability and developer happiness. This guide covers common idiomatic approaches with examples, using the File class or File.open.
Aji and Joël discuss hackerthons and the importance of having fun in development. They reflect on their RailsConf mini hackerthon experience, emphasizing creative play for skill honing and self-discovery. (Podcast episode)
The exreg gem is a pure-Ruby implementation of a Unicode regular expression engine. It supports nearly all functionality of Onigmo, Ruby's regex engine, with caveats in the README. It uses a Thompson-style NFA VM, making it immune to ReDoS from catastrophic backtracking.
Build a per-tenant configuration system using Rails 8.2's CombinedConfiguration. Let tenants override API keys, feature flags, and limits without code changes.
Configuring Dependabot for a Rails project to update only minor and patch versions of Gems, avoiding breaking changes. Includes YAML configuration examples for security and version updates.
This newsletter from Ruby Central highlights the December 2025 edition, including key points from the 2022-2024 Annual Report and updates on Ruby 4.0.
How ruby-libgd brings a real raster engine back to Ruby. For many years, Ruby quietly lost the ability to generate images natively, fast, and with full control. RMagick and MiniMagick exist but depend on external binaries, are slow, fragile in production, and unsuitable for things like map tiles.
Using current_user in controllers and views is straightforward, but accessing it in models for business rule validation can be tricky. Developers often pass the user as a parameter, yet Rails offers a native solution.
ActiveRecord provides methods that balance convenience and performance. Among the most powerful are deleteall and updateall, which execute bulk operations directly in SQL. Until recently, they behaved inconsistently with query methods like limit or distinct.
Rails 8.2's new credentials API isn't just for secrets, it's a composable configuration system. Here are 5 patterns you haven't considered.
Exploring the creation of portable mruby binaries using Cosmopolitan to overcome cross-platform compatibility issues, allowing executables built on one system to run on others like from Linux to macOS.
This newsletter issue kicks off the year with the completion of new automated release machinery called Release Machine, a simple tool for streamlining releases.
This monthly newsletter issue updates on Mike McQuaid joining the POSSE Party for maintenance help, an architectural review of the codebase on Reddit, and tweaks to a ChatGPT-powered Shortcut for Japanese study, highlighting Shortcuts' advanced features.
This Drifting Ruby screencast demonstrates deploying a fresh Rails 8 application on a Raspberry Pi, including provisioning the device, setting up a domain, and implementing geo restrictions for added security.
Build server-rendered countdown timers that update in real-time using Rails 8's new relativetimein_words helper and Turbo Streams.
No posts today. Everyone must be busy writing code.