{"id":970,"date":"2026-05-04T13:38:33","date_gmt":"2026-05-04T13:38:33","guid":{"rendered":"https:\/\/ruby-doc.org\/blog\/?p=970"},"modified":"2026-05-07T12:04:43","modified_gmt":"2026-05-07T12:04:43","slug":"notes-on-the-modern-rails-stack-and-what-it-means-for-new-developers","status":"publish","type":"post","link":"https:\/\/ruby-doc.org\/blog\/notes-on-the-modern-rails-stack-and-what-it-means-for-new-developers\/","title":{"rendered":"Notes on the Modern Rails Stack and What It Means for New Developers"},"content":{"rendered":"\n<p>One of the more interesting things about reading Rails documentation in 2026 is how much of it has changed in the last two years without much fanfare. Rails 8 shipped a meaningfully different default stack, the Hotwire ecosystem matured into a first-class part of the framework, and Kamal quietly replaced a generation of deployment tooling. For developers who learned Rails a few years ago and have not been keeping up, the gap between what the documentation describes and what their muscle memory still expects has grown wider than most people realize.<\/p>\n\n\n\n<p>This post is a short tour of where the documentation has moved, what the new defaults actually mean in practice, and a few thoughts on what this looks like from the perspective of someone learning Rails for the first time.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>The Solid Trio and the End of Required Redis<\/strong><\/h2>\n\n\n\n<p>Probably the largest single change in recent Rails versions is the introduction of Solid Queue, Solid Cache, and Solid Cable. Together, they let a Rails application handle background jobs, caching, and Action Cable connections using the primary database, with no separate Redis instance required.<\/p>\n\n\n\n<p>The practical effect is that a fresh rails new application can now run a fairly complete production workload with just Rails and Postgres. For small and medium applications, this is a significant operational simplification. The <a href=\"https:\/\/guides.rubyonrails.org\/\">official Rails guides<\/a> document the new defaults thoroughly, and the migration path from Sidekiq or Resque to Solid Queue is reasonably gentle if you are coming from an older codebase.<\/p>\n\n\n\n<p>There are still good reasons to reach for Redis. High-throughput job processing, very large cache footprints, and certain pub\/sub patterns still benefit from a dedicated key-value store. But the default has flipped. New applications no longer assume Redis is part of the stack, and the documentation reflects that.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Hotwire as the Default View Layer<\/strong><\/h2>\n\n\n\n<p>The other large shift, and the one that takes the longest to internalize if you are coming from a JavaScript-heavy background, is the consolidation of Hotwire as the default Rails approach to interactive UIs. Turbo Frames, Turbo Streams, and Stimulus are now treated as core framework concepts in the documentation, not as optional add-ons.<\/p>\n\n\n\n<p>What this means in practice is that the modern Rails application is once again a single codebase with server-rendered views, augmented by small amounts of JavaScript where genuinely necessary. The Turbo handbook walks through the patterns end to end, and fluency with what it describes is increasingly what hiring managers expect from a Rails developer.<\/p>\n\n\n\n<p>This is a meaningful pedagogical shift. A few years ago, learning Rails and learning React were treated as parallel tracks that you needed to combine. Today, the documentation assumes Hotwire first, and the React integration is a separate concern handled through importmap or jsbundling-rails when it comes up at all.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Kamal and the Quiet Shift Away From Heroku<\/strong><\/h2>\n\n\n\n<p>Deployment is the third area where the documentation has changed in a way that takes a moment to absorb. Kamal, originally extracted from Basecamp and 37signals, is now the default deployment story for Rails applications. The Rails generator includes Kamal configuration out of the box, and the documentation walks through deploying to a generic VPS rather than assuming a platform-as-a-service.<\/p>\n\n\n\n<p>This change matters for two reasons. The first is cost. Running a small Rails application on a $5 to $20 VPS is dramatically cheaper than the equivalent Heroku dynos, and the operational gap has narrowed considerably as Kamal has matured. The second is that it shifts what a developer is expected to understand. Knowing how to read an nginx configuration, set up a basic systemd service, and reason about Docker images is now part of the baseline rather than a senior-engineer concern.<\/p>\n\n\n\n<p>For developers learning Rails today, this is worth knowing because it changes what a portfolio project should look like. A Rails application deployed to a VPS with Kamal demonstrates a different and arguably more useful set of skills than the same application deployed to Heroku with a single git push.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>What This Means for New Rails Developers<\/strong><\/h2>\n\n\n\n<p>The cumulative effect of these changes is that the Rails of 2026 is a slightly different framework than the Rails of 2020, even though the core abstractions are unchanged. Active Record still feels like Active Record. Controllers and views still work the way they always have. But the supporting cast around the framework has been substantially reworked, and someone learning Rails for the first time today is learning a more cohesive and self-contained stack than the one a developer would have encountered five years ago.<\/p>\n\n\n\n<p>One useful side effect of this consolidation is that the gap between learning Rails and being employable in Rails has narrowed. The skills that the official documentation now teaches map fairly directly onto what mid-sized Rails-using companies are looking for in junior hires. There is less of a separate &#8220;production Rails&#8221; body of knowledge that you have to absorb on top of what the docs cover.<\/p>\n\n\n\n<p>For anyone curious about the hiring side of this picture, DayOneJobs published a useful breakdown earlier this year on <a href=\"https:\/\/www.dayonejobs.com\/blog\/where-junior-ruby-on-rails-developers-actually-get-hired-in-2026\">where junior Ruby on Rails developers are actually getting hired<\/a>, which lists the companies running production Rails codebases and what the current compensation ranges look like. The piece is worth a read for a few reasons.<\/p>\n\n\n\n<p>The first is that it pushes back, with actual data, against the recurring &#8220;Rails is dead&#8221; narrative. The list of companies still hiring Rails developers in volume is longer and more interesting than most people assume, and includes a healthy mix of well-known platforms like Shopify, GitHub, GitLab, and Stripe alongside a long tail of mid-sized SaaS companies that are quietly some of the best places for a junior to start a career. The mid-sized tier is the part most candidates overlook, and it is also where the most genuine mentorship and early-career ownership tends to happen.<\/p>\n\n\n\n<p>The second is the compensation picture, which is more favorable than the framework&#8217;s reputation suggests. Junior Rails roles in the United States are clustering around six figures for candidates with one to two years of experience, and the remote-first hiring culture that took hold across the Rails ecosystem after 2020 has held up better than in most other stacks. The piece also breaks down what hiring managers are specifically looking for in 2026, which tracks closely with the modern stack covered above. Familiarity with Rails 8, comfort with Hotwire over heavy SPA frameworks, real testing discipline with RSpec or Minitest, and the ability to deploy a Rails application to production are all listed as baseline expectations rather than nice-to-haves.<\/p>\n\n\n\n<p>It is a reasonable companion read if you are working through the Rails documentation and wondering what the framework looks like as a career path rather than just as a technology. The technical material on this site will get you most of the way to being a competent Rails developer. The hiring picture is the part the documentation cannot tell you, and it is worth knowing what the other side of that bridge actually looks like before you start walking across it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>A Few Practical Suggestions<\/strong><\/h2>\n\n\n\n<p>For developers using this site to learn or refresh their Rails knowledge, a few suggestions on what to prioritize given the current state of the documentation.<\/p>\n\n\n\n<p>Start with Rails 8 directly rather than older tutorials. Material from 2021 or earlier is not wrong, but it will quietly steer you toward patterns that have since been replaced. The conceptual core of Rails has been stable for a long time, but the surrounding tooling has not.<\/p>\n\n\n\n<p>Spend real time with Hotwire before reaching for a <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Learn_web_development\/Core\/Frameworks_libraries\">JavaScript framework<\/a>. The instinct to add React to a Rails application is often a holdover from an earlier era, and a surprising amount of what people used to use React for is now cleaner with Turbo Frames and Stimulus.<\/p>\n\n\n\n<p>Deploy something. The documentation can take you a long way, but the gap between &#8220;the tutorial works on my laptop&#8221; and &#8220;the application is running on a server I configured&#8221; is where most of the durable learning happens.<\/p>\n\n\n\n<p>Read the changelogs. The Rails team has been unusually thoughtful about documenting the rationale behind recent changes, and reading the release notes for Rails 7.1, 7.2, and 8.0 in sequence is genuinely useful for understanding why the framework looks the way it does today.<\/p>\n\n\n\n<p>The documentation has done a good job of keeping up with the framework. The framework, in turn, has done a good job of staying useful. For a project entering its third decade, that is more than most software ecosystems can claim.<\/p>\n\n\n\n<p>One last note for anyone weighing Rails as a career path rather than just as a technology. Compensation data for Ruby and Rails roles varies quite a bit depending on which source you check, and it is worth triangulating across a few before drawing conclusions. Levels.fyi is the most useful source for senior and staff-level numbers at larger companies, since it leans heavily on self-reported total compensation including equity. Payscale and this database gives a more conservative picture closer to base salary medians and is generally better calibrated for mid-sized employers and non-coastal markets.<a href=\"https:\/\/interviewpal.com\/salaries\"><\/a>The gap between these sources is sometimes substantial, particularly for Rails roles where total comp can swing widely depending on whether the employer is a profitable bootstrapped SaaS or a venture-backed startup with meaningful equity. Reading two or three of them together gives a more honest picture than relying on any single number.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>One of the more interesting things about reading Rails documentation in 2026 is how much of it has changed in the last two years without much fanfare. Rails 8 shipped a meaningfully different default stack, the Hotwire ecosystem matured into a first-class part of the framework, and Kamal quietly replaced a generation of deployment tooling. [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":973,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-970","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ruby-tips"],"blocksy_meta":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Notes on the Modern Rails Stack and What It Means for New Developers - Ruby-Doc.org<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ruby-doc.org\/blog\/notes-on-the-modern-rails-stack-and-what-it-means-for-new-developers\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Notes on the Modern Rails Stack and What It Means for New Developers - Ruby-Doc.org\" \/>\n<meta property=\"og:description\" content=\"One of the more interesting things about reading Rails documentation in 2026 is how much of it has changed in the last two years without much fanfare. Rails 8 shipped a meaningfully different default stack, the Hotwire ecosystem matured into a first-class part of the framework, and Kamal quietly replaced a generation of deployment tooling. [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ruby-doc.org\/blog\/notes-on-the-modern-rails-stack-and-what-it-means-for-new-developers\/\" \/>\n<meta property=\"og:site_name\" content=\"Ruby-Doc.org\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-04T13:38:33+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-07T12:04:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ruby-doc.org\/blog\/wp-content\/uploads\/2026\/05\/Notes-on-the-Modern-Rails-Stack-and-What-It-Means-for-New-Developers.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1536\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Ryan McGregor\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ryan McGregor\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/blog\\\/notes-on-the-modern-rails-stack-and-what-it-means-for-new-developers\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/blog\\\/notes-on-the-modern-rails-stack-and-what-it-means-for-new-developers\\\/\"},\"author\":{\"name\":\"Ryan McGregor\",\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/blog\\\/#\\\/schema\\\/person\\\/db7fcc3c518c40f29f8bf79ffa678dfc\"},\"headline\":\"Notes on the Modern Rails Stack and What It Means for New Developers\",\"datePublished\":\"2026-05-04T13:38:33+00:00\",\"dateModified\":\"2026-05-07T12:04:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/blog\\\/notes-on-the-modern-rails-stack-and-what-it-means-for-new-developers\\\/\"},\"wordCount\":1571,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/blog\\\/notes-on-the-modern-rails-stack-and-what-it-means-for-new-developers\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ruby-doc.org\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/Notes-on-the-Modern-Rails-Stack-and-What-It-Means-for-New-Developers.png\",\"articleSection\":[\"Ruby tips\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/ruby-doc.org\\\/blog\\\/notes-on-the-modern-rails-stack-and-what-it-means-for-new-developers\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/blog\\\/notes-on-the-modern-rails-stack-and-what-it-means-for-new-developers\\\/\",\"url\":\"https:\\\/\\\/ruby-doc.org\\\/blog\\\/notes-on-the-modern-rails-stack-and-what-it-means-for-new-developers\\\/\",\"name\":\"Notes on the Modern Rails Stack and What It Means for New Developers - Ruby-Doc.org\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/blog\\\/notes-on-the-modern-rails-stack-and-what-it-means-for-new-developers\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/blog\\\/notes-on-the-modern-rails-stack-and-what-it-means-for-new-developers\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ruby-doc.org\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/Notes-on-the-Modern-Rails-Stack-and-What-It-Means-for-New-Developers.png\",\"datePublished\":\"2026-05-04T13:38:33+00:00\",\"dateModified\":\"2026-05-07T12:04:43+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/blog\\\/notes-on-the-modern-rails-stack-and-what-it-means-for-new-developers\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/ruby-doc.org\\\/blog\\\/notes-on-the-modern-rails-stack-and-what-it-means-for-new-developers\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/blog\\\/notes-on-the-modern-rails-stack-and-what-it-means-for-new-developers\\\/#primaryimage\",\"url\":\"https:\\\/\\\/ruby-doc.org\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/Notes-on-the-Modern-Rails-Stack-and-What-It-Means-for-New-Developers.png\",\"contentUrl\":\"https:\\\/\\\/ruby-doc.org\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/Notes-on-the-Modern-Rails-Stack-and-What-It-Means-for-New-Developers.png\",\"width\":1536,\"height\":1024},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/blog\\\/notes-on-the-modern-rails-stack-and-what-it-means-for-new-developers\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/ruby-doc.org\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Notes on the Modern Rails Stack and What It Means for New Developers\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/ruby-doc.org\\\/blog\\\/\",\"name\":\"Ruby-Doc.org\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/ruby-doc.org\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/blog\\\/#organization\",\"name\":\"Ruby-Doc.org\",\"url\":\"https:\\\/\\\/ruby-doc.org\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/ruby-doc.org\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/Ruby-Doc.org_logo_cropped.png\",\"contentUrl\":\"https:\\\/\\\/ruby-doc.org\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/Ruby-Doc.org_logo_cropped.png\",\"width\":909,\"height\":833,\"caption\":\"Ruby-Doc.org\"},\"image\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/blog\\\/#\\\/schema\\\/person\\\/db7fcc3c518c40f29f8bf79ffa678dfc\",\"name\":\"Ryan McGregor\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f7b4d11da7f55d40163cd9431935ce1148d9bd69c95928064822f7757b6314dd?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f7b4d11da7f55d40163cd9431935ce1148d9bd69c95928064822f7757b6314dd?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f7b4d11da7f55d40163cd9431935ce1148d9bd69c95928064822f7757b6314dd?s=96&d=mm&r=g\",\"caption\":\"Ryan McGregor\"},\"url\":\"https:\\\/\\\/ruby-doc.org\\\/blog\\\/author\\\/ryan\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Notes on the Modern Rails Stack and What It Means for New Developers - Ruby-Doc.org","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ruby-doc.org\/blog\/notes-on-the-modern-rails-stack-and-what-it-means-for-new-developers\/","og_locale":"en_US","og_type":"article","og_title":"Notes on the Modern Rails Stack and What It Means for New Developers - Ruby-Doc.org","og_description":"One of the more interesting things about reading Rails documentation in 2026 is how much of it has changed in the last two years without much fanfare. Rails 8 shipped a meaningfully different default stack, the Hotwire ecosystem matured into a first-class part of the framework, and Kamal quietly replaced a generation of deployment tooling. [&hellip;]","og_url":"https:\/\/ruby-doc.org\/blog\/notes-on-the-modern-rails-stack-and-what-it-means-for-new-developers\/","og_site_name":"Ruby-Doc.org","article_published_time":"2026-05-04T13:38:33+00:00","article_modified_time":"2026-05-07T12:04:43+00:00","og_image":[{"width":1536,"height":1024,"url":"https:\/\/ruby-doc.org\/blog\/wp-content\/uploads\/2026\/05\/Notes-on-the-Modern-Rails-Stack-and-What-It-Means-for-New-Developers.png","type":"image\/png"}],"author":"Ryan McGregor","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Ryan McGregor","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ruby-doc.org\/blog\/notes-on-the-modern-rails-stack-and-what-it-means-for-new-developers\/#article","isPartOf":{"@id":"https:\/\/ruby-doc.org\/blog\/notes-on-the-modern-rails-stack-and-what-it-means-for-new-developers\/"},"author":{"name":"Ryan McGregor","@id":"https:\/\/ruby-doc.org\/blog\/#\/schema\/person\/db7fcc3c518c40f29f8bf79ffa678dfc"},"headline":"Notes on the Modern Rails Stack and What It Means for New Developers","datePublished":"2026-05-04T13:38:33+00:00","dateModified":"2026-05-07T12:04:43+00:00","mainEntityOfPage":{"@id":"https:\/\/ruby-doc.org\/blog\/notes-on-the-modern-rails-stack-and-what-it-means-for-new-developers\/"},"wordCount":1571,"commentCount":0,"publisher":{"@id":"https:\/\/ruby-doc.org\/blog\/#organization"},"image":{"@id":"https:\/\/ruby-doc.org\/blog\/notes-on-the-modern-rails-stack-and-what-it-means-for-new-developers\/#primaryimage"},"thumbnailUrl":"https:\/\/ruby-doc.org\/blog\/wp-content\/uploads\/2026\/05\/Notes-on-the-Modern-Rails-Stack-and-What-It-Means-for-New-Developers.png","articleSection":["Ruby tips"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/ruby-doc.org\/blog\/notes-on-the-modern-rails-stack-and-what-it-means-for-new-developers\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/ruby-doc.org\/blog\/notes-on-the-modern-rails-stack-and-what-it-means-for-new-developers\/","url":"https:\/\/ruby-doc.org\/blog\/notes-on-the-modern-rails-stack-and-what-it-means-for-new-developers\/","name":"Notes on the Modern Rails Stack and What It Means for New Developers - Ruby-Doc.org","isPartOf":{"@id":"https:\/\/ruby-doc.org\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ruby-doc.org\/blog\/notes-on-the-modern-rails-stack-and-what-it-means-for-new-developers\/#primaryimage"},"image":{"@id":"https:\/\/ruby-doc.org\/blog\/notes-on-the-modern-rails-stack-and-what-it-means-for-new-developers\/#primaryimage"},"thumbnailUrl":"https:\/\/ruby-doc.org\/blog\/wp-content\/uploads\/2026\/05\/Notes-on-the-Modern-Rails-Stack-and-What-It-Means-for-New-Developers.png","datePublished":"2026-05-04T13:38:33+00:00","dateModified":"2026-05-07T12:04:43+00:00","breadcrumb":{"@id":"https:\/\/ruby-doc.org\/blog\/notes-on-the-modern-rails-stack-and-what-it-means-for-new-developers\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ruby-doc.org\/blog\/notes-on-the-modern-rails-stack-and-what-it-means-for-new-developers\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ruby-doc.org\/blog\/notes-on-the-modern-rails-stack-and-what-it-means-for-new-developers\/#primaryimage","url":"https:\/\/ruby-doc.org\/blog\/wp-content\/uploads\/2026\/05\/Notes-on-the-Modern-Rails-Stack-and-What-It-Means-for-New-Developers.png","contentUrl":"https:\/\/ruby-doc.org\/blog\/wp-content\/uploads\/2026\/05\/Notes-on-the-Modern-Rails-Stack-and-What-It-Means-for-New-Developers.png","width":1536,"height":1024},{"@type":"BreadcrumbList","@id":"https:\/\/ruby-doc.org\/blog\/notes-on-the-modern-rails-stack-and-what-it-means-for-new-developers\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ruby-doc.org\/blog\/"},{"@type":"ListItem","position":2,"name":"Notes on the Modern Rails Stack and What It Means for New Developers"}]},{"@type":"WebSite","@id":"https:\/\/ruby-doc.org\/blog\/#website","url":"https:\/\/ruby-doc.org\/blog\/","name":"Ruby-Doc.org","description":"","publisher":{"@id":"https:\/\/ruby-doc.org\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ruby-doc.org\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/ruby-doc.org\/blog\/#organization","name":"Ruby-Doc.org","url":"https:\/\/ruby-doc.org\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ruby-doc.org\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/ruby-doc.org\/blog\/wp-content\/uploads\/2025\/07\/Ruby-Doc.org_logo_cropped.png","contentUrl":"https:\/\/ruby-doc.org\/blog\/wp-content\/uploads\/2025\/07\/Ruby-Doc.org_logo_cropped.png","width":909,"height":833,"caption":"Ruby-Doc.org"},"image":{"@id":"https:\/\/ruby-doc.org\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/ruby-doc.org\/blog\/#\/schema\/person\/db7fcc3c518c40f29f8bf79ffa678dfc","name":"Ryan McGregor","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f7b4d11da7f55d40163cd9431935ce1148d9bd69c95928064822f7757b6314dd?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f7b4d11da7f55d40163cd9431935ce1148d9bd69c95928064822f7757b6314dd?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f7b4d11da7f55d40163cd9431935ce1148d9bd69c95928064822f7757b6314dd?s=96&d=mm&r=g","caption":"Ryan McGregor"},"url":"https:\/\/ruby-doc.org\/blog\/author\/ryan\/"}]}},"_links":{"self":[{"href":"https:\/\/ruby-doc.org\/blog\/wp-json\/wp\/v2\/posts\/970","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ruby-doc.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ruby-doc.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ruby-doc.org\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/ruby-doc.org\/blog\/wp-json\/wp\/v2\/comments?post=970"}],"version-history":[{"count":2,"href":"https:\/\/ruby-doc.org\/blog\/wp-json\/wp\/v2\/posts\/970\/revisions"}],"predecessor-version":[{"id":972,"href":"https:\/\/ruby-doc.org\/blog\/wp-json\/wp\/v2\/posts\/970\/revisions\/972"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ruby-doc.org\/blog\/wp-json\/wp\/v2\/media\/973"}],"wp:attachment":[{"href":"https:\/\/ruby-doc.org\/blog\/wp-json\/wp\/v2\/media?parent=970"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ruby-doc.org\/blog\/wp-json\/wp\/v2\/categories?post=970"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ruby-doc.org\/blog\/wp-json\/wp\/v2\/tags?post=970"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}