<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>RubyFlow</title>
    <description>The Ruby and Rails community linklog</description>
    <link>https://rubyflow.com</link>
    <atom:link href="https://rubyflow.com/rss" rel="self" type="application/rss+xml"/>
    <item>
      <title>readword: word .doc and .docx files to markdown, in plain ruby</title>
      <description>i kept needing to feed word files to llms and coding agents, and reading old .doc files from ruby always meant shelling out to libreoffice or antiword. so i wrote &lt;a href="https://github.com/urbullet/readword" rel="nofollow"&gt;readword&lt;/a&gt;, its plain ruby, reads both .doc and .docx and gives you markdown with the headings, numbered lists, tables and links kept. compared it with antiword, the docx gem and anydoc on 650 files, numbers are in the readme. if you have a word file it gets wrong id love to see it</description>
      <pubDate>Fri, 23 Oct 2026 09:05:41 +0000</pubDate>
      <link>https://rubyflow.com/p/smarb8-readword-word-doc-and-docx-files-to-markdown-in-plain-ruby</link>
      <guid>https://rubyflow.com/p/smarb8-readword-word-doc-and-docx-files-to-markdown-in-plain-ruby</guid>
    </item>
    <item>
      <title>Solid Queue or Sidekiq? Choosing a background job backend for Rails 8 in 2026</title>
      <description>A comparison of Solid Queue 1.7 and Sidekiq 8.1 for Rails 8 apps: Rails version support (Solid Queue needs 7.1+), DB vs Redis tradeoffs, fiber mode, batches, feature parity, operational cost, and how to migrate between them.</description>
      <pubDate>Thu, 22 Oct 2026 15:14:13 +0000</pubDate>
      <link>https://rubyflow.com/p/i4u9rz-solid-queue-or-sidekiq-choosing-a-background-job-backend-for-rails-8-in-2026</link>
      <guid>https://rubyflow.com/p/i4u9rz-solid-queue-or-sidekiq-choosing-a-background-job-backend-for-rails-8-in-2026</guid>
    </item>
    <item>
      <title>Playwright API Testing Guide</title>
      <description>Playwright isn’t only for browser tests. With the community playwright-ruby-client gem, Ruby developers can send requests straight to a Rails API, check responses and reuse login sessions across tests, no browser needed. This post covers getting started, handling auth, and keeping backend dependencies stable so your API tests stay fast and reliable.
&lt;a href="https://keploy.io/blog/community/playwright-api-testing" rel="nofollow"&gt;https://keploy.io/blog/community/playwright-api-testing&lt;/a&gt;</description>
      <pubDate>Thu, 22 Oct 2026 10:19:54 +0000</pubDate>
      <link>https://rubyflow.com/p/nxnxys-playwright-api-testing-guide</link>
      <guid>https://rubyflow.com/p/nxnxys-playwright-api-testing-guide</guid>
    </item>
    <item>
      <title>Best Automation Testing Tools for API Testing in 2026: 12 Tools Compared by Use Case</title>
      <description>Picking an API testing tool for a Rails app usually means choosing between a lot of options that each solve a different part of the problem. This &lt;a href="https://keploy.io/blog/community/api-testing-tools" rel="nofollow"&gt;comparison of the best automation testing tools&lt;/a&gt; looks at 12 of them by use case: CI/CD automation, manual exploration, performance, security and SOAP. It covers Keploy, Karate, Postman/Newman, Bruno, Insomnia, k6, JMeter, OWASP ZAP and SoapUI, and includes a comparison table and a short guide for choosing a tool. Since these tools work over HTTP and don’t depend on the language, they apply to Rails and Sinatra APIs as well.</description>
      <pubDate>Thu, 22 Oct 2026 05:41:37 +0000</pubDate>
      <link>https://rubyflow.com/p/4ruk8b-best-automation-testing-tools-for-api-testing-in-2026-12-tools-compared-by-use-c</link>
      <guid>https://rubyflow.com/p/4ruk8b-best-automation-testing-tools-for-api-testing-in-2026-12-tools-compared-by-use-c</guid>
    </item>
    <item>
      <title>The Agents on Rails Files: designing black-box evals for coding agents</title>
      <description>Agents on Rails is the Rails Foundation’s LLM benchmark. Evil Martians designed its evaluation tasks and the tooling to run trials at scale. On our blog, we’re going behind the scenes. First up: how we wrote black-box checks for apps whose code we’d never seen, to keep trials fair and results reliable. Bonus: the same evals run against Rust.</description>
      <pubDate>Wed, 21 Oct 2026 18:39:44 +0000</pubDate>
      <link>https://rubyflow.com/p/snasoq-the-agents-on-rails-files-designing-black-box-evals-for-coding-agents</link>
      <guid>https://rubyflow.com/p/snasoq-the-agents-on-rails-files-designing-black-box-evals-for-coding-agents</guid>
    </item>
    <item>
      <title>Seven layers of cache in a Rails app, from the browser to Russian doll</title>
      <description>This post walks through the seven places a request can be answered before it reaches Postgres: browser cache (expires_in, fresh_when), Varnish, Nginx proxy cache, action caching, Russian doll fragments in ERB and jbuilder, Rails.cache on Memcached or Solid Cache, and an object cache on Redis. Each layer comes with its config, what it actually saves, and how it breaks (cookies vs Varnish, CSRF in cached actions, sharing Redis with Sidekiq). Ends with a suggested build order: headers first, edge last.</description>
      <pubDate>Wed, 21 Oct 2026 17:11:05 +0000</pubDate>
      <link>https://rubyflow.com/p/s1nh9w-seven-layers-of-cache-in-a-rails-app-from-the-browser-to-russian-doll</link>
      <guid>https://rubyflow.com/p/s1nh9w-seven-layers-of-cache-in-a-rails-app-from-the-browser-to-russian-doll</guid>
    </item>
    <item>
      <title>RubyLLM 2.0 and 2.1 are out and the gem is much better than before</title>
      <description>I wrote a thing or two how &lt;a href="https://serpapi.com/blog/rubyllm-2-x-whats-new-for-your-agents/" rel="nofollow"&gt;RubyLLM 2.x is improving agents&lt;/a&gt;.</description>
      <pubDate>Wed, 21 Oct 2026 08:16:12 +0000</pubDate>
      <link>https://rubyflow.com/p/iejuyb-rubyllm-20-and-21-are-out-and-the-gem-is-much-better-than-before</link>
      <guid>https://rubyflow.com/p/iejuyb-rubyllm-20-and-21-are-out-and-the-gem-is-much-better-than-before</guid>
    </item>
    <item>
      <title>SprintCo — A daily work log built with Ruby on Rails</title>
      <description>URL: &lt;a href="https://sprintco.dev/?ref=rubyflow" rel="nofollow"&gt;https://sprintco.dev/?ref=rubyflow&lt;/a&gt;</description>
      <pubDate>Wed, 21 Oct 2026 06:01:30 +0000</pubDate>
      <link>https://rubyflow.com/p/7xv2ia-sprintco-a-daily-work-log-built-with-ruby-on-rails</link>
      <guid>https://rubyflow.com/p/7xv2ia-sprintco-a-daily-work-log-built-with-ruby-on-rails</guid>
    </item>
    <item>
      <title>Regression Testing: Techniques, Tools &amp; Best Practices</title>
      <description>Learn regression testing, its types, techniques, tools, and best practices. Explore how automated regression testing helps detect bugs and maintain software quality.
&lt;a href="https://keploy.io/blog/community/regression-testing-an-introductory-guide" rel="nofollow"&gt;https://keploy.io/blog/community/regression-testing-an-introductory-guide&lt;/a&gt;</description>
      <pubDate>Wed, 21 Oct 2026 05:20:45 +0000</pubDate>
      <link>https://rubyflow.com/p/adm79g-regression-testing-techniques-tools-best-practices</link>
      <guid>https://rubyflow.com/p/adm79g-regression-testing-techniques-tools-best-practices</guid>
    </item>
    <item>
      <title>Why a Background Job Can Run More Than Once</title>
      <description>A deploy can replay unfinished Solid Queue jobs without retry_on, even after a webhook succeeds. Trace fork-mode shutdown, the effect that survives, and receiver-side duplicate protection, with source links and a separate process-death reproduction.</description>
      <pubDate>Wed, 21 Oct 2026 04:35:51 +0000</pubDate>
      <link>https://rubyflow.com/p/ibm1lk-why-a-background-job-can-run-more-than-once</link>
      <guid>https://rubyflow.com/p/ibm1lk-why-a-background-job-can-run-more-than-once</guid>
    </item>
    <item>
      <title>API Versioning in Rails: Start at /api/v1 Before You Think You Need It</title>
      <description>Most Rails APIs start as a &lt;code&gt;format.json&lt;/code&gt; branch in an HTML controller and only become an API once a partner depends on them. &lt;a href="https://rubyinsights.blog/en/blog/rails-api-versioning-start-at-v1" rel="nofollow"&gt;This post&lt;/a&gt; lays out the structure to put in place before that: URL path versioning starting at &lt;code&gt;/api/v1&lt;/code&gt;, an &lt;code&gt;Api::BaseController &amp;lt; ActionController::API&lt;/code&gt; that owns auth, error envelopes and transaction tagging, and one thin base per version.</description>
      <pubDate>Tue, 20 Oct 2026 18:47:57 +0000</pubDate>
      <link>https://rubyflow.com/p/5sytlj-api-versioning-in-rails-start-at-apiv1-before-you-think-you-need-it</link>
      <guid>https://rubyflow.com/p/5sytlj-api-versioning-in-rails-start-at-apiv1-before-you-think-you-need-it</guid>
    </item>
    <item>
      <title>RedGem 0.3 (3D engine with ruby) is out!</title>
      <description>This update brings bigger worlds, better visuals, and online multiplayer.</description>
      <pubDate>Mon, 19 Oct 2026 17:22:46 +0000</pubDate>
      <link>https://rubyflow.com/p/e1s5rz-redgem-03-experimental-is-out</link>
      <guid>https://rubyflow.com/p/e1s5rz-redgem-03-experimental-is-out</guid>
    </item>
    <item>
      <title>parallel_matrix_formatter: one readable display for parallel RSpec runs</title>
      <description>Running specs with &lt;a href="https://github.com/grosser/parallel_tests" rel="nofollow"&gt;parallel_tests&lt;/a&gt; or &lt;a href="https://github.com/grosser/parallel_split_test" rel="nofollow"&gt;parallel_split_test&lt;/a&gt; gives you interleaved output from every process and a separate failure report per process. &lt;a href="https://github.com/vovka/parallel_matrix_formatter" rel="nofollow"&gt;parallel_matrix_formatter&lt;/a&gt; is an RSpec formatter that sends results from all processes over a UNIX socket to process 1, which renders a single progress display and one consolidated failure report with rerun commands. It also silences stray stdout, keeps each process’s stderr in a log, and the progress display looks like Matrix digital rain. Version 0.2.0 is out: &lt;code&gt;gem install parallel_matrix_formatter&lt;/code&gt;. Feedback from real suites is very welcome.</description>
      <pubDate>Mon, 19 Oct 2026 14:57:42 +0000</pubDate>
      <link>https://rubyflow.com/p/60089b-parallelmatrixformatter-one-readable-display-for-parallel-rspec-runs</link>
      <guid>https://rubyflow.com/p/60089b-parallelmatrixformatter-one-readable-display-for-parallel-rspec-runs</guid>
    </item>
    <item>
      <title>Asgard 0.5.0 adds dynamic task execution on file/directory changes</title>
      <description>Asgard 0.5.0 adds a file watcher to the Ruby task runner. In a project’s &lt;code&gt;.loki&lt;/code&gt;, &lt;code&gt;watch :test, paths: %w[lib test], only: /\.rb\z/&lt;/code&gt; declares which files a task cares about, and &lt;code&gt;asgard watcher start&lt;/code&gt; runs one background process per project that reruns the task when they change.</description>
      <pubDate>Mon, 19 Oct 2026 05:44:24 +0000</pubDate>
      <link>https://rubyflow.com/p/xtmwkh-asgard-050-adds-dynamic-task-execution-on-filedirectory-changes</link>
      <guid>https://rubyflow.com/p/xtmwkh-asgard-050-adds-dynamic-task-execution-on-filedirectory-changes</guid>
    </item>
    <item>
      <title>New release Truemail 🚀 configurable framework agnostic plain Ruby 📨 email validator</title>
      <description>Meet new Truemail 4.0.0. &lt;a href="https://github.com/truemail-rb/truemail" rel="nofollow"&gt;https://github.com/truemail-rb/truemail&lt;/a&gt; This major release hardens MX validation against IDNA-mapped confusable/fullwidth domains. Spoofed Unicode domains are no longer treated as valid ASCII lookalikes.</description>
      <pubDate>Sun, 18 Oct 2026 20:31:22 +0000</pubDate>
      <link>https://rubyflow.com/p/nhngf6-new-release-truemail-configurable-framework-agnostic-plain-ruby-email-validator</link>
      <guid>https://rubyflow.com/p/nhngf6-new-release-truemail-configurable-framework-agnostic-plain-ruby-email-validator</guid>
    </item>
    <item>
      <title>Foreman or Docker Compose? The ideal local Rails setup in 2026</title>
      <description>Native Procfile.dev or everything in docker-compose? &lt;a href="https://rubyinsights.blog/en/blog/rails-dev-local-foreman-vs-docker-compose" rel="nofollow"&gt;This post&lt;/a&gt; argues for a hybrid: run web, css, js and workers natively via bin/dev, and keep only Postgres and Redis in a minimal compose file pinned to production versions. It covers why bind mounts slow Rails down on macOS, the Postgres 18 volume path change, OrbStack vs Docker Desktop memory usage, when a devcontainer still wins, and dropping Redis in dev with Solid Queue.</description>
      <pubDate>Sun, 18 Oct 2026 18:18:39 +0000</pubDate>
      <link>https://rubyflow.com/p/grrl42-foreman-or-docker-compose-the-ideal-local-rails-setup-in-2026</link>
      <guid>https://rubyflow.com/p/grrl42-foreman-or-docker-compose-the-ideal-local-rails-setup-in-2026</guid>
    </item>
    <item>
      <title>A new version of bidi2pdf is out</title>
      <description>The highlight of this release is built-in support for Claude Code skills. The repository now includes a Claude Code plugin with skills that help AI agents generate PDFs, troubleshoot rendering issues, and work with Chrome through WebDriver BiDi.</description>
      <pubDate>Sun, 18 Oct 2026 07:54:22 +0000</pubDate>
      <link>https://rubyflow.com/p/oijdvw-a-new-version-of-bidi2pdf-is-out</link>
      <guid>https://rubyflow.com/p/oijdvw-a-new-version-of-bidi2pdf-is-out</guid>
    </item>
    <item>
      <title>ruby_llm-providers-lms v0.3.0 with decisions API released</title>
      <description>ruby_llm-providers-lms 0.3.0 brings RubyLLM 2.1’s judgments to LM Studio. Point &lt;code&gt;RubyLLM.judge&lt;/code&gt; or a &lt;code&gt;RubyLLM::Judge&lt;/code&gt; class at a local decision model and get typed answers back in tens of milliseconds: a probability that something is true, a choice from a fixed set with a confidence, or a score on an ordered scale, with no text to parse and nothing generated.</description>
      <pubDate>Sun, 18 Oct 2026 01:43:20 +0000</pubDate>
      <link>https://rubyflow.com/p/z8rnzl-rubyllm-providers-lms-v030-with-decisions-api-released</link>
      <guid>https://rubyflow.com/p/z8rnzl-rubyllm-providers-lms-v030-with-decisions-api-released</guid>
    </item>
    <item>
      <title>Standard Ruby on Apple Silicon and Docker: one linter, two runners</title>
      <description>Standard is RuboCop with an unconfigurable ruleset, and that removes a whole category of style debates from code review. The post covers what it gives you (&lt;code&gt;--fix&lt;/code&gt;, &lt;code&gt;--generate-todo&lt;/code&gt;, plugins like &lt;code&gt;standard-rails&lt;/code&gt;, the Ruby LSP add-on) and how it layers its config on top of RuboCop, first-in-wins.</description>
      <pubDate>Sat, 17 Oct 2026 20:42:33 +0000</pubDate>
      <link>https://rubyflow.com/p/2a7890-standard-ruby-on-apple-silicon-and-docker-one-linter-two-runners</link>
      <guid>https://rubyflow.com/p/2a7890-standard-ruby-on-apple-silicon-and-docker-one-linter-two-runners</guid>
    </item>
    <item>
      <title>Fat Rails Models Might Be a Domain Modeling Problem (Kaigi on Rails 2026)</title>
      <description>Fat Rails models aren’t always a sign that we need another architectural layer. Sometimes, we’re missing a domain concept. I explored this idea in a talk at Kaigi on Rails 2026.</description>
      <pubDate>Sat, 17 Oct 2026 07:40:12 +0000</pubDate>
      <link>https://rubyflow.com/p/anzdzu-fat-rails-models-might-be-a-domain-modeling-problem-kaigi-on-rails-2026</link>
      <guid>https://rubyflow.com/p/anzdzu-fat-rails-models-might-be-a-domain-modeling-problem-kaigi-on-rails-2026</guid>
    </item>
    <item>
      <title>llm.rb v17.0.0 released!</title>
      <description>&lt;a href="https://github.com/r-uby-dev/llm#readme" rel="nofollow"&gt;llm.rb&lt;/a&gt; is an agentic runtime for building AI applications on CRuby. It supports 14 different providers, it has zero runtime dependencies &lt;em&gt;by default&lt;/em&gt;, and it can execute tool calls on their own process, thread, &lt;code&gt;Async::Reactor&lt;/code&gt;, or Ractor. It can reliably interrupt an agent running in the same process but a different thread or fiber, too. Plus much more. Check it out if that sounds like your thing :)</description>
      <pubDate>Sat, 17 Oct 2026 00:55:53 +0000</pubDate>
      <link>https://rubyflow.com/p/m0h2jc-llmrb-v1700-released</link>
      <guid>https://rubyflow.com/p/m0h2jc-llmrb-v1700-released</guid>
    </item>
    <item>
      <title>A small RSpec helper that saves code, risk, and AI tokens</title>
      <description>&lt;a href="https://widefix.com/blog/stub-env-rspec-and-ai-instructions/" rel="nofollow"&gt;https://widefix.com/blog/stub-env-rspec-and-ai-instructions/&lt;/a&gt;</description>
      <pubDate>Fri, 16 Oct 2026 21:07:58 +0000</pubDate>
      <link>https://rubyflow.com/p/syeuc9-a-small-rspec-helper-that-saves-code-risk-and-ai-tokens</link>
      <guid>https://rubyflow.com/p/syeuc9-a-small-rspec-helper-that-saves-code-risk-and-ai-tokens</guid>
    </item>
    <item>
      <title>Upgrading a Rails app from Ruby 3.4.4 to 4.0.3: what actually breaks</title>
      <description>Ruby 4.0 is the first major bump in over a decade, but a Rails 8.x app usually upgrades in a day of focused work. Most of the pain is not in the language: it is gems that left the default set (&lt;code&gt;cgi&lt;/code&gt;, &lt;code&gt;ostruct&lt;/code&gt;, &lt;code&gt;logger&lt;/code&gt;, &lt;code&gt;benchmark&lt;/code&gt;), the &lt;code&gt;Ractor::Port&lt;/code&gt; rewrite, &lt;code&gt;Kernel#open("| cmd")&lt;/code&gt; no longer spawning a process, and a handful of changes that break tests rather than code (&lt;code&gt;Set#inspect&lt;/code&gt; output, &lt;code&gt;Net::HTTP&lt;/code&gt; no longer defaulting &lt;code&gt;Content-Type&lt;/code&gt; on bodies, new backtrace frames that confuse Sentry/Datadog grouping rules).</description>
      <pubDate>Thu, 15 Oct 2026 21:15:32 +0000</pubDate>
      <link>https://rubyflow.com/p/cjmtdv-upgrading-a-rails-app-from-ruby-344-to-403-what-actually-breaks</link>
      <guid>https://rubyflow.com/p/cjmtdv-upgrading-a-rails-app-from-ruby-344-to-403-what-actually-breaks</guid>
    </item>
    <item>
      <title>Gravity Defied, the old fashion motorbike game, rebuilt with pure Ruby physics</title>
      <description>Remember Gravity Defied, the motorbike game from old Nokia phones? I &lt;a href="https://github.com/Halvanhelv/gravity-defied" rel="nofollow"&gt;rebuilt it&lt;/a&gt; on &lt;a href="https://dragonruby.org" rel="nofollow"&gt;DragonRuby GTK&lt;/a&gt; with the physics written in pure Ruby: no physics engine, just six point masses joined by springs and 16.16 fixed-point math. Thanks to WebAssembly, you can &lt;a href="https://halvanhelv.github.io/gravity-defied/" rel="nofollow"&gt;play it right in the browser&lt;/a&gt; with all 30 original tracks. Since every run is deterministic, a small beam-search bot finds clean runs offline, and the game replays them frame for frame</description>
      <pubDate>Thu, 15 Oct 2026 17:26:21 +0000</pubDate>
      <link>https://rubyflow.com/p/bzwrde-gravity-defied-the-old-fashion-motorbike-game-rebuilt-with-pure-ruby-physics</link>
      <guid>https://rubyflow.com/p/bzwrde-gravity-defied-the-old-fashion-motorbike-game-rebuilt-with-pure-ruby-physics</guid>
    </item>
    <item>
      <title>Ruby Memes 2026-10-15: Pencils Down!</title>
      <description>Ruby Memes 2026-10-15: Pencils Down! &lt;a href="https://andymaleh.blogspot.com/2026/10/ruby-memes-2026-10-15-pencils-down.html" rel="nofollow"&gt;https://andymaleh.blogspot.com/2026/10/ruby-memes-2026-10-15-pencils-down.html&lt;/a&gt;</description>
      <pubDate>Thu, 15 Oct 2026 17:02:54 +0000</pubDate>
      <link>https://rubyflow.com/p/v2scu4-ruby-memes-2026-10-15-pencils-down</link>
      <guid>https://rubyflow.com/p/v2scu4-ruby-memes-2026-10-15-pencils-down</guid>
    </item>
  </channel>
</rss>
