{"id":5203,"date":"2025-11-21T15:52:13","date_gmt":"2025-11-21T10:22:13","guid":{"rendered":"https:\/\/www.tntra.io\/blog\/?p=5203"},"modified":"2025-11-21T16:10:02","modified_gmt":"2025-11-21T10:40:02","slug":"modernizing-rails-6-app-into-future-ready-rails-8-platform","status":"publish","type":"post","link":"https:\/\/www.tntra.io\/blog\/modernizing-rails-6-app-into-future-ready-rails-8-platform\/","title":{"rendered":"Beyond the Version Number: How We Modernized a Legacy Rails 6 App into a Future-Ready Rails 8 Platform"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_76 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #c4161d;color:#c4161d\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #c4161d;color:#c4161d\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 eztoc-toggle-hide-by-default' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.tntra.io\/blog\/modernizing-rails-6-app-into-future-ready-rails-8-platform\/#The_Business_Case_for_Modernization\" >The Business Case for Modernization<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.tntra.io\/blog\/modernizing-rails-6-app-into-future-ready-rails-8-platform\/#Chapter_1_The_Rails_6_%E2%86%92_8_Upgrade_Begins\" >Chapter 1: The Rails 6 \u2192 8 Upgrade Begins<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.tntra.io\/blog\/modernizing-rails-6-app-into-future-ready-rails-8-platform\/#Chapter_2_Enter_Docker_The_Great_Segfault\" >Chapter 2: Enter Docker &amp; The Great Segfault<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.tntra.io\/blog\/modernizing-rails-6-app-into-future-ready-rails-8-platform\/#Chapter_3_Saying_Goodbye_to_Sprockets\" >Chapter 3: Saying Goodbye to Sprockets<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.tntra.io\/blog\/modernizing-rails-6-app-into-future-ready-rails-8-platform\/#Chapter_4_Rebuilding_CSS_with_Dart_Sass_ESBuild\" >Chapter 4: Rebuilding CSS with Dart Sass + ESBuild<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.tntra.io\/blog\/modernizing-rails-6-app-into-future-ready-rails-8-platform\/#Chapter_5_The_Hidden_Villain_Page-Specific_Styles\" >Chapter 5: The Hidden Villain, Page-Specific Styles<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.tntra.io\/blog\/modernizing-rails-6-app-into-future-ready-rails-8-platform\/#Chapter_6_ESBuild_to_the_Rescue\" >Chapter 6: ESBuild to the Rescue<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.tntra.io\/blog\/modernizing-rails-6-app-into-future-ready-rails-8-platform\/#Chapter_7_Cleanup_Final_Polish\" >Chapter 7: Cleanup &amp; Final Polish<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/www.tntra.io\/blog\/modernizing-rails-6-app-into-future-ready-rails-8-platform\/#Outcomes\" >Outcomes<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/www.tntra.io\/blog\/modernizing-rails-6-app-into-future-ready-rails-8-platform\/#Lessons_Learned_For_Business_Decision-Makers\" >Lessons Learned (For Business Decision-Makers)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/www.tntra.io\/blog\/modernizing-rails-6-app-into-future-ready-rails-8-platform\/#In_Retrospect_A_Detox_Not_Just_an_Upgrade\" >In Retrospect, A Detox, Not Just an Upgrade<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/www.tntra.io\/blog\/modernizing-rails-6-app-into-future-ready-rails-8-platform\/#Final_Tech_Stack\" >Final Tech Stack<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n\n<p>When we decided to modernize <strong><a href=\"https:\/\/www.tntra.io\/case-studies\/saas-application\" target=\"_blank\" rel=\"noreferrer noopener\">InspectDate<\/a><\/strong>, our loan approval platform connecting with trusted vendors, the goal wasn\u2019t just to \u201cupgrade Rails.\u201d It was to <strong>future-proof our system<\/strong>, improve performance, simplify deployments, and ensure long-term maintainability.<\/p>\n\n\n\n<p>But as anyone who\u2019s touched a legacy Rails app knows, migrating from <strong>Rails 6 \u2192 Rails 8<\/strong> is less of an upgrade and more of a journey, through deprecations, segfaults, and the occasional existential crisis.<\/p>\n\n\n\n<p>This is the story of how we went from a tangled asset pipeline to a clean, modern architecture, and what business leaders can take away from it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"The_Business_Case_for_Modernization\"><\/span>The Business Case for Modernization<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>The project\u2019s objective was clear:<\/p>\n\n\n\n<p><strong>Objective:<\/strong> Modernize the InspectDate stack to improve performance, maintainability, and deployment efficiency.<\/p>\n\n\n\n<p>The legacy setup was showing its age:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ruby 2.5.1 struggling with memory management<\/li>\n\n\n\n<li>Rails 6 running on outdated libraries<\/li>\n\n\n\n<li>A brittle <strong>Sprockets + Sass-Rails<\/strong> asset pipeline<\/li>\n\n\n\n<li>Inconsistent deployment environments<\/li>\n<\/ul>\n\n\n\n<p>Every incremental update felt risky. Our engineers were spending more time patching the past than building the future. So, we committed to a <strong>strategic modernization<\/strong>, not just patchwork.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Chapter_1_The_Rails_6_%E2%86%92_8_Upgrade_Begins\"><\/span>Chapter 1: The Rails 6 \u2192 8 Upgrade Begins<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>The upgrade began simply enough:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Target versions\n\nRuby: 2.5.1 \u2192 3.3.3\n\nRails: 6 \u2192 8.0.1<\/code><\/pre>\n\n\n\n<p>We wanted to leverage <strong>Rails 8\u2019s improved concurrency, Hotwire support, and Ruby 3.3\u2019s JIT (Just-In-Time) compiler<\/strong> for performance.<\/p>\n\n\n\n<p>Our app, however, was still wired with the classic:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gem 'sass-rails'\n\ngem 'sprockets-rails'\n\ngem 'sprockets'<\/code><\/pre>\n\n\n\n<p>and assets managed via:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@import \"variables\";\n\n@import \"header\";\n\nIt worked\u2026 until it didn\u2019t.<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Chapter_2_Enter_Docker_The_Great_Segfault\"><\/span>Chapter 2: Enter Docker &amp; The Great Segfault<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>As we <strong>Dockerized the app<\/strong> to standardize environments and streamline deployments, a mysterious issue emerged.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\ud83d\udca5 Segmentation fault (core dumped)<\/code><\/pre>\n\n\n\n<p>Every time we ran bundle install or compiled assets, Docker would crash.<br><br>After hours of debugging, we traced it to <strong>sass-rails<\/strong>, which depended on <strong>libsass<\/strong>, an outdated C library incompatible with <strong>Ruby 3.3\u2019s YJIT<\/strong>.<\/p>\n\n\n\n<p>Our setup was too modern for its own legacy stack.<\/p>\n\n\n\n<p>Even switching to sassc-rails didn\u2019t help, the segfault persisted. That\u2019s when the realization hit:<\/p>\n\n\n\n<p><strong>The real issue wasn\u2019t the segfault. It was the outdated ecosystem around it.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Chapter_3_Saying_Goodbye_to_Sprockets\"><\/span>Chapter 3: Saying Goodbye to Sprockets<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>The turning point came when we accepted a hard truth, <strong>Sprockets was done<\/strong>.<\/p>\n\n\n\n<p>Rails core had already moved on, recommending <strong>Propshaft<\/strong>, a cleaner, faster replacement.<\/p>\n\n\n\n<p>So, we removed the old asset pipeline:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Gemfile (removed)\n\ngem 'sass-rails'\n\ngem 'sprockets-rails'\n\ngem 'sprockets'<\/code><\/pre>\n\n\n\n<p>And added:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gem 'propshaft'\n\nThen updated our config\/application.rb:\n\n# require \"sprockets\/railtie\"\n\nrequire \"propshaft\/railtie\"<\/code><\/pre>\n\n\n\n<p>Just like that, we freed the application from years of baggage.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Chapter_4_Rebuilding_CSS_with_Dart_Sass_ESBuild\"><\/span>Chapter 4: Rebuilding CSS with Dart Sass + ESBuild<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Next up: CSS compilation.<br><br>Since <strong>Dart Sass<\/strong> is now the reference implementation (and no longer available as a Ruby gem), we turned to <strong>Yarn<\/strong> and <strong>ESBuild<\/strong>.<\/p>\n\n\n\n<p>We rewrote the old imports:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Old Sass-Rails style\n\n@import \"variables\";\n\n@import \"header\";<\/code><\/pre>\n\n\n\n<p>to the new Dart Sass syntax:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ New Dart Sass style\n\n@use \"sass:math\";\n\n@use \"variables\" as *;\n\n@use \"header\";\n\npadding: math.div(10px, 2);<\/code><\/pre>\n\n\n\n<p>This alone eliminated several warnings and improved build times.<br><br>The pipeline was now <strong>language-agnostic, faster, and aligned with Rails 8\u2019s philosophy<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Chapter_5_The_Hidden_Villain_Page-Specific_Styles\"><\/span>Chapter 5: The Hidden Villain, Page-Specific Styles<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Then came an unexpected blocker.<\/p>\n\n\n\n<p>Our app used <strong>page-specific stylesheets<\/strong>, loaded dynamically:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>= stylesheet_link_tag \"pages_scss\/#{controller_name}-#{action_name}\", media: \"all\"<\/code><\/pre>\n\n\n\n<p>But <strong>Propshaft didn\u2019t auto-load or support glob imports<\/strong>, and our single application.scss wasn\u2019t cutting it anymore.<\/p>\n\n\n\n<p>We needed a modern equivalent to <strong>per-page SCSS<\/strong>, without reverting to the old Sprockets magic.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Chapter_6_ESBuild_to_the_Rescue\"><\/span>Chapter 6: ESBuild to the Rescue<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>The solution came from thinking like a builder, not a maintainer.<\/p>\n\n\n\n<p>Instead of trying to replicate Sprockets\u2019 behavior, we used <strong>ESBuild to compile each SCSS file individually<\/strong>.<\/p>\n\n\n\n<p>Our structure looked like this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>app\/assets\/stylesheets\/pages_scss\/\n\n\u251c\u2500\u2500 users-show.scss\n\n\u251c\u2500\u2500 orders-index.scss\n\n\u2514\u2500\u2500 \u2026<\/code><\/pre>\n\n\n\n<p>And our build process (yarn build) handled each file:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>yarn build\n\nRAILS_ENV=production bin\/rails assets:precompile<\/code><\/pre>\n\n\n\n<p>Each page now had its <strong>own optimized CSS bundle<\/strong>, just like before, but with modern tooling, zero segfaults, and faster builds.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Chapter_7_Cleanup_Final_Polish\"><\/span>Chapter 7: Cleanup &amp; Final Polish<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Once everything compiled successfully, we cleaned house:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Commands\n\nyarn build\n\nbin\/dev\n\nRAILS_ENV=production bin\/rails assets:clobber\n\nRAILS_ENV=production bin\/rails assets:precompile<\/code><\/pre>\n\n\n\n<p>And removed the remnants of the old world:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Deleted app\/assets\/config\/manifest.js\n\nRemoved all \/\/= require directives\n\nMigrated fonts &amp; images to Propshaft paths\n\nReorganized SCSS into base\/, components\/, and layout\/<\/code><\/pre>\n\n\n\n<p>The result? <strong>A leaner, modular, and future-proof front-end system.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Outcomes\"><\/span>Outcomes<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-center\" data-align=\"center\"><strong>Aspect<\/strong><\/th><th class=\"has-text-align-center\" data-align=\"center\"><strong>Before<\/strong><\/th><th class=\"has-text-align-center\" data-align=\"center\"><strong>After<\/strong><\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Ruby Version<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">2.5.1<\/td><td class=\"has-text-align-center\" data-align=\"center\">3.3.3<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Rails Version<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">6<\/td><td class=\"has-text-align-center\" data-align=\"center\">8.0.1<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Asset Pipeline<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">Sprockets + Sass-Rails<\/td><td class=\"has-text-align-center\" data-align=\"center\">Propshaft + Dart Sass<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Deployment<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">Manual environments<\/td><td class=\"has-text-align-center\" data-align=\"center\">Dockerized consistency<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Performance<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">Slow, memory-heavy<\/td><td class=\"has-text-align-center\" data-align=\"center\">Faster JIT compilation<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Maintainability<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">Legacy dependencies<\/td><td class=\"has-text-align-center\" data-align=\"center\">Clean, modern stack<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>Highlights:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Migrated from deprecated Ruby Sass to Dart Sass<\/li>\n\n\n\n<li>Eliminated segfaults and deprecated gems<\/li>\n\n\n\n<li>Improved build and runtime performance<\/li>\n\n\n\n<li>Streamlined deployment with Docker<\/li>\n\n\n\n<li>Created a future-ready Rails stack<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Lessons_Learned_For_Business_Decision-Makers\"><\/span>Lessons Learned (For Business Decision-Makers)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Upgrading a legacy app isn\u2019t just a technical move, it\u2019s a <strong>strategic business investment<\/strong>.<\/p>\n\n\n\n<p>Here\u2019s what it taught us:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Technical debt compounds silently.<\/strong><strong><br><\/strong>Old dependencies don\u2019t just slow developers down, they add operational risk.<\/li>\n\n\n\n<li><strong>Modernization should be holistic, not incremental.<\/strong><strong><br><\/strong>Fixing one gem won\u2019t solve an outdated ecosystem. Update the architecture, not just the version.<\/li>\n\n\n\n<li><strong>Tooling simplicity pays long-term dividends.<\/strong><strong><br><\/strong>Propshaft and ESBuild reduced build complexity, improving onboarding and maintenance costs.<\/li>\n\n\n\n<li><strong>Docker is more than deployment, it\u2019s stability.<\/strong><strong><br><\/strong>Environment consistency alone saved hours of debugging.<\/li>\n\n\n\n<li><strong>Performance gains are real.<\/strong><strong><br><\/strong>Ruby 3.3\u2019s JIT compiler and cleaner asset handling made the app snappier and lighter.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"In_Retrospect_A_Detox_Not_Just_an_Upgrade\"><\/span>In Retrospect, A Detox, Not Just an Upgrade<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>This migration wasn\u2019t just about keeping up with Rails, it was about <strong>shedding the weight of the past<\/strong>.<\/p>\n\n\n\n<p>By replacing Sprockets with Propshaft, Ruby Sass with Dart Sass, and manual deployments with Docker, we built an application that\u2019s <strong>cleaner, faster, and easier to evolve<\/strong>.<\/p>\n\n\n\n<p>Modern Rails prefers simplicity.<br>Don\u2019t just upgrade your code, <strong>upgrade your mindset.<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Final_Tech_Stack\"><\/span><strong>Final Tech Stack<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\"><strong>Layer<\/strong><\/th><th class=\"has-text-align-left\" data-align=\"left\"><strong>Technology<\/strong><\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-left\" data-align=\"left\"><\/td><td class=\"has-text-align-left\" data-align=\"left\"><\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>Language<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">Ruby 3.3.3<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>Framework<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">Rails 8.0.1<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>Assets<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">Propshaft + Dart Sass + ESBuild<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>Deployment<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">Docker<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>Infrastructure Goal<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\">Speed, Maintainability, Future-readiness<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><br><strong>In business terms?<br><\/strong>We didn\u2019t just upgrade a Rails app, we de-risked our product, future-proofed our technology, and gave our engineering team the clarity to build faster.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>Read the full breakdown of the <a href=\"https:\/\/medium.com\/@mj.thakkar97\/from-segfaults-to-sass-salvation-my-journey-migrating-rails-6-to-8-with-dart-sass-propshaft-ffeedf82ecbb\" target=\"_blank\" rel=\"noreferrer noopener\">Rails 6 \u2192 Rails 8 modernization journey here<\/a> \u2014 a deep-dive into the migration challenges, architecture decisions, and performance wins, originally published by <a href=\"https:\/\/www.linkedin.com\/in\/mitesh-thakkar-500434105\" target=\"_blank\" rel=\"noreferrer noopener\">Mitesh Thakkar<\/a> on Medium<\/strong>, <\/p>\n\n\n\n<p><strong>Related Article<\/strong><\/p>\n\n\n\n<p><a href=\"https:\/\/www.tntra.io\/blog\/loan-approval-platform-modernization-rails-8\/\" target=\"_blank\" rel=\"noreferrer noopener\">Modernizing Loan Approval with InspectDate: How Upgrading to Rails 8 Unlocked Speed, Scalability, and Simplicity<\/a><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>When we decided to modernize InspectDate, our loan approval platform&#8230;<\/p>\n","protected":false},"author":6,"featured_media":5219,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,9,3],"tags":[],"class_list":["post-5203","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development","category-programming","category-software-development"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Beyond the Version Number: How We Modernized a Legacy Rails 6 App into a Future-Ready Rails 8 Platform - Tntra<\/title>\n<meta name=\"description\" content=\"Modernized a legacy Rails 6 app into a future-ready Rails 8 platform with Propshaft, Dart Sass, ESBuild, and Docker\u2014improving performance, stability, and maintainability.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.tntra.io\/blog\/modernizing-rails-6-app-into-future-ready-rails-8-platform\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Beyond the Version Number: How We Modernized a Legacy Rails 6 App into a Future-Ready Rails 8 Platform - Tntra\" \/>\n<meta property=\"og:description\" content=\"Modernized a legacy Rails 6 app into a future-ready Rails 8 platform with Propshaft, Dart Sass, ESBuild, and Docker\u2014improving performance, stability, and maintainability.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.tntra.io\/blog\/modernizing-rails-6-app-into-future-ready-rails-8-platform\/\" \/>\n<meta property=\"og:site_name\" content=\"Tntra\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/tntraio\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-21T10:22:13+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-21T10:40:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.tntra.io\/blog\/wp-content\/uploads\/2025\/11\/rails-6-to-8-migration-modernization-journey.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"627\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Team Tntra\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@tntraio\" \/>\n<meta name=\"twitter:site\" content=\"@tntraio\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Team Tntra\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.tntra.io\\\/blog\\\/modernizing-rails-6-app-into-future-ready-rails-8-platform\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tntra.io\\\/blog\\\/modernizing-rails-6-app-into-future-ready-rails-8-platform\\\/\"},\"author\":{\"name\":\"Team Tntra\",\"@id\":\"https:\\\/\\\/www.tntra.io\\\/blog\\\/#\\\/schema\\\/person\\\/60e991eb246bca7a9eba958b3c7c7462\"},\"headline\":\"Beyond the Version Number: How We Modernized a Legacy Rails 6 App into a Future-Ready Rails 8 Platform\",\"datePublished\":\"2025-11-21T10:22:13+00:00\",\"dateModified\":\"2025-11-21T10:40:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.tntra.io\\\/blog\\\/modernizing-rails-6-app-into-future-ready-rails-8-platform\\\/\"},\"wordCount\":924,\"publisher\":{\"@id\":\"https:\\\/\\\/www.tntra.io\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.tntra.io\\\/blog\\\/modernizing-rails-6-app-into-future-ready-rails-8-platform\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.tntra.io\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/rails-6-to-8-migration-modernization-journey.png\",\"articleSection\":[\"Development\",\"Programming\",\"Software Development\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.tntra.io\\\/blog\\\/modernizing-rails-6-app-into-future-ready-rails-8-platform\\\/\",\"url\":\"https:\\\/\\\/www.tntra.io\\\/blog\\\/modernizing-rails-6-app-into-future-ready-rails-8-platform\\\/\",\"name\":\"Beyond the Version Number: How We Modernized a Legacy Rails 6 App into a Future-Ready Rails 8 Platform - Tntra\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tntra.io\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.tntra.io\\\/blog\\\/modernizing-rails-6-app-into-future-ready-rails-8-platform\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.tntra.io\\\/blog\\\/modernizing-rails-6-app-into-future-ready-rails-8-platform\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.tntra.io\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/rails-6-to-8-migration-modernization-journey.png\",\"datePublished\":\"2025-11-21T10:22:13+00:00\",\"dateModified\":\"2025-11-21T10:40:02+00:00\",\"description\":\"Modernized a legacy Rails 6 app into a future-ready Rails 8 platform with Propshaft, Dart Sass, ESBuild, and Docker\u2014improving performance, stability, and maintainability.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.tntra.io\\\/blog\\\/modernizing-rails-6-app-into-future-ready-rails-8-platform\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.tntra.io\\\/blog\\\/modernizing-rails-6-app-into-future-ready-rails-8-platform\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.tntra.io\\\/blog\\\/modernizing-rails-6-app-into-future-ready-rails-8-platform\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.tntra.io\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/rails-6-to-8-migration-modernization-journey.png\",\"contentUrl\":\"https:\\\/\\\/www.tntra.io\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/rails-6-to-8-migration-modernization-journey.png\",\"width\":1200,\"height\":627,\"caption\":\"How We Modernized a Legacy Rails 6 App into a Future-Ready Rails 8 Platform\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.tntra.io\\\/blog\\\/modernizing-rails-6-app-into-future-ready-rails-8-platform\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.tntra.io\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Beyond the Version Number: How We Modernized a Legacy Rails 6 App into a Future-Ready Rails 8 Platform\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.tntra.io\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.tntra.io\\\/blog\\\/\",\"name\":\"Tntra\",\"description\":\"AI-First &amp; IP-Enabled Innovation Ecosystem\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.tntra.io\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.tntra.io\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.tntra.io\\\/blog\\\/#organization\",\"name\":\"Tntra\",\"url\":\"https:\\\/\\\/www.tntra.io\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.tntra.io\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.tntra.io\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/logo.png\",\"contentUrl\":\"https:\\\/\\\/www.tntra.io\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/logo.png\",\"width\":300,\"height\":300,\"caption\":\"Tntra\"},\"image\":{\"@id\":\"https:\\\/\\\/www.tntra.io\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/tntraio\",\"https:\\\/\\\/x.com\\\/tntraio\",\"https:\\\/\\\/www.instagram.com\\\/tntra.io\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/tntra\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.tntra.io\\\/blog\\\/#\\\/schema\\\/person\\\/60e991eb246bca7a9eba958b3c7c7462\",\"name\":\"Team Tntra\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.tntra.io\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/tntra-logo.png\",\"url\":\"https:\\\/\\\/www.tntra.io\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/tntra-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.tntra.io\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/tntra-logo.png\",\"caption\":\"Team Tntra\"},\"description\":\"Tntra is an AI-First, IP-Led Innovation &amp; Engineering company helping enterprises, startups, and innovation-driven organizations transform ideas into scalable innovation, intellectual property, and real-world impact through its proprietary i3 framework. With expertise in product engineering, enterprise AI, digital transformation, cloud, and platform modernization, Tntra delivers secure, scalable, and future-ready technology solutions. The company\u2019s insights and articles bring perspectives from experienced leaders, engineers, and domain experts focused on innovation, AI, enterprise technology, and business transformation.\",\"sameAs\":[\"https:\\\/\\\/www.tntra.io\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/tntra\\\/\"],\"url\":\"https:\\\/\\\/www.tntra.io\\\/blog\\\/author\\\/tntra\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Beyond the Version Number: How We Modernized a Legacy Rails 6 App into a Future-Ready Rails 8 Platform - Tntra","description":"Modernized a legacy Rails 6 app into a future-ready Rails 8 platform with Propshaft, Dart Sass, ESBuild, and Docker\u2014improving performance, stability, and maintainability.","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:\/\/www.tntra.io\/blog\/modernizing-rails-6-app-into-future-ready-rails-8-platform\/","og_locale":"en_US","og_type":"article","og_title":"Beyond the Version Number: How We Modernized a Legacy Rails 6 App into a Future-Ready Rails 8 Platform - Tntra","og_description":"Modernized a legacy Rails 6 app into a future-ready Rails 8 platform with Propshaft, Dart Sass, ESBuild, and Docker\u2014improving performance, stability, and maintainability.","og_url":"https:\/\/www.tntra.io\/blog\/modernizing-rails-6-app-into-future-ready-rails-8-platform\/","og_site_name":"Tntra","article_publisher":"https:\/\/www.facebook.com\/tntraio","article_published_time":"2025-11-21T10:22:13+00:00","article_modified_time":"2025-11-21T10:40:02+00:00","og_image":[{"width":1200,"height":627,"url":"https:\/\/www.tntra.io\/blog\/wp-content\/uploads\/2025\/11\/rails-6-to-8-migration-modernization-journey.png","type":"image\/png"}],"author":"Team Tntra","twitter_card":"summary_large_image","twitter_creator":"@tntraio","twitter_site":"@tntraio","twitter_misc":{"Written by":"Team Tntra","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.tntra.io\/blog\/modernizing-rails-6-app-into-future-ready-rails-8-platform\/#article","isPartOf":{"@id":"https:\/\/www.tntra.io\/blog\/modernizing-rails-6-app-into-future-ready-rails-8-platform\/"},"author":{"name":"Team Tntra","@id":"https:\/\/www.tntra.io\/blog\/#\/schema\/person\/60e991eb246bca7a9eba958b3c7c7462"},"headline":"Beyond the Version Number: How We Modernized a Legacy Rails 6 App into a Future-Ready Rails 8 Platform","datePublished":"2025-11-21T10:22:13+00:00","dateModified":"2025-11-21T10:40:02+00:00","mainEntityOfPage":{"@id":"https:\/\/www.tntra.io\/blog\/modernizing-rails-6-app-into-future-ready-rails-8-platform\/"},"wordCount":924,"publisher":{"@id":"https:\/\/www.tntra.io\/blog\/#organization"},"image":{"@id":"https:\/\/www.tntra.io\/blog\/modernizing-rails-6-app-into-future-ready-rails-8-platform\/#primaryimage"},"thumbnailUrl":"https:\/\/www.tntra.io\/blog\/wp-content\/uploads\/2025\/11\/rails-6-to-8-migration-modernization-journey.png","articleSection":["Development","Programming","Software Development"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.tntra.io\/blog\/modernizing-rails-6-app-into-future-ready-rails-8-platform\/","url":"https:\/\/www.tntra.io\/blog\/modernizing-rails-6-app-into-future-ready-rails-8-platform\/","name":"Beyond the Version Number: How We Modernized a Legacy Rails 6 App into a Future-Ready Rails 8 Platform - Tntra","isPartOf":{"@id":"https:\/\/www.tntra.io\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.tntra.io\/blog\/modernizing-rails-6-app-into-future-ready-rails-8-platform\/#primaryimage"},"image":{"@id":"https:\/\/www.tntra.io\/blog\/modernizing-rails-6-app-into-future-ready-rails-8-platform\/#primaryimage"},"thumbnailUrl":"https:\/\/www.tntra.io\/blog\/wp-content\/uploads\/2025\/11\/rails-6-to-8-migration-modernization-journey.png","datePublished":"2025-11-21T10:22:13+00:00","dateModified":"2025-11-21T10:40:02+00:00","description":"Modernized a legacy Rails 6 app into a future-ready Rails 8 platform with Propshaft, Dart Sass, ESBuild, and Docker\u2014improving performance, stability, and maintainability.","breadcrumb":{"@id":"https:\/\/www.tntra.io\/blog\/modernizing-rails-6-app-into-future-ready-rails-8-platform\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.tntra.io\/blog\/modernizing-rails-6-app-into-future-ready-rails-8-platform\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.tntra.io\/blog\/modernizing-rails-6-app-into-future-ready-rails-8-platform\/#primaryimage","url":"https:\/\/www.tntra.io\/blog\/wp-content\/uploads\/2025\/11\/rails-6-to-8-migration-modernization-journey.png","contentUrl":"https:\/\/www.tntra.io\/blog\/wp-content\/uploads\/2025\/11\/rails-6-to-8-migration-modernization-journey.png","width":1200,"height":627,"caption":"How We Modernized a Legacy Rails 6 App into a Future-Ready Rails 8 Platform"},{"@type":"BreadcrumbList","@id":"https:\/\/www.tntra.io\/blog\/modernizing-rails-6-app-into-future-ready-rails-8-platform\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.tntra.io\/blog\/"},{"@type":"ListItem","position":2,"name":"Beyond the Version Number: How We Modernized a Legacy Rails 6 App into a Future-Ready Rails 8 Platform"}]},{"@type":"WebSite","@id":"https:\/\/www.tntra.io\/blog\/#website","url":"https:\/\/www.tntra.io\/blog\/","name":"Tntra","description":"AI-First &amp; IP-Enabled Innovation Ecosystem","publisher":{"@id":"https:\/\/www.tntra.io\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.tntra.io\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.tntra.io\/blog\/#organization","name":"Tntra","url":"https:\/\/www.tntra.io\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.tntra.io\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.tntra.io\/blog\/wp-content\/uploads\/2025\/11\/logo.png","contentUrl":"https:\/\/www.tntra.io\/blog\/wp-content\/uploads\/2025\/11\/logo.png","width":300,"height":300,"caption":"Tntra"},"image":{"@id":"https:\/\/www.tntra.io\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/tntraio","https:\/\/x.com\/tntraio","https:\/\/www.instagram.com\/tntra.io\/","https:\/\/www.linkedin.com\/company\/tntra\/"]},{"@type":"Person","@id":"https:\/\/www.tntra.io\/blog\/#\/schema\/person\/60e991eb246bca7a9eba958b3c7c7462","name":"Team Tntra","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.tntra.io\/blog\/wp-content\/uploads\/2025\/11\/tntra-logo.png","url":"https:\/\/www.tntra.io\/blog\/wp-content\/uploads\/2025\/11\/tntra-logo.png","contentUrl":"https:\/\/www.tntra.io\/blog\/wp-content\/uploads\/2025\/11\/tntra-logo.png","caption":"Team Tntra"},"description":"Tntra is an AI-First, IP-Led Innovation &amp; Engineering company helping enterprises, startups, and innovation-driven organizations transform ideas into scalable innovation, intellectual property, and real-world impact through its proprietary i3 framework. With expertise in product engineering, enterprise AI, digital transformation, cloud, and platform modernization, Tntra delivers secure, scalable, and future-ready technology solutions. The company\u2019s insights and articles bring perspectives from experienced leaders, engineers, and domain experts focused on innovation, AI, enterprise technology, and business transformation.","sameAs":["https:\/\/www.tntra.io\/","https:\/\/www.linkedin.com\/company\/tntra\/"],"url":"https:\/\/www.tntra.io\/blog\/author\/tntra\/"}]}},"_links":{"self":[{"href":"https:\/\/www.tntra.io\/blog\/wp-json\/wp\/v2\/posts\/5203","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tntra.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tntra.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tntra.io\/blog\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tntra.io\/blog\/wp-json\/wp\/v2\/comments?post=5203"}],"version-history":[{"count":12,"href":"https:\/\/www.tntra.io\/blog\/wp-json\/wp\/v2\/posts\/5203\/revisions"}],"predecessor-version":[{"id":5220,"href":"https:\/\/www.tntra.io\/blog\/wp-json\/wp\/v2\/posts\/5203\/revisions\/5220"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.tntra.io\/blog\/wp-json\/wp\/v2\/media\/5219"}],"wp:attachment":[{"href":"https:\/\/www.tntra.io\/blog\/wp-json\/wp\/v2\/media?parent=5203"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tntra.io\/blog\/wp-json\/wp\/v2\/categories?post=5203"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tntra.io\/blog\/wp-json\/wp\/v2\/tags?post=5203"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}