<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="rss.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Marvellous Codeworks Blog</title>
        <link>https://kb.marvellouscode.works/blog</link>
        <description>Marvellous Codeworks Blog</description>
        <lastBuildDate>Fri, 03 Jul 2026 15:30:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[Road to TMS 9: watching the Tab Health repair work, live, on Brave]]></title>
            <link>https://kb.marvellouscode.works/blog/road-to-tms9-tab-health-repair</link>
            <guid>https://kb.marvellouscode.works/blog/road-to-tms9-tab-health-repair</guid>
            <pubDate>Fri, 03 Jul 2026 15:30:00 GMT</pubDate>
            <description><![CDATA[A quick look at TMS 9's Tab Health page catching and repairing broken grouped tabs on Brave — the same recovery logic we described in the Chrome 150 post, this time in action.]]></description>
            <content:encoded><![CDATA[<p>We spent the last few posts chasing a Chromium regression across three browsers: it <a class="" href="https://kb.marvellouscode.works/blog/tms-tab-groups-chrome-149-bug">broke grouped tabs on Chrome 149</a>, <a class="" href="https://kb.marvellouscode.works/blog/tms-tab-groups-edge-chromium-bug">reached Edge</a> shortly after, and was finally <a class="" href="https://kb.marvellouscode.works/blog/tms-tab-groups-chrome-150-fixed">fixed upstream in Chrome 150</a>. That last post also introduced the plan for <strong>Brave</strong>, which does not follow Chrome's release schedule and might stay affected for a while: TMS 9's new Tab Health page can detect and repair the broken tabs on demand, without waiting for Brave to catch up.</p>
<p>This week we actually ran that repair on a Brave profile with tab groups in a broken state, and it is worth showing rather than just describing.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="scan-tabs">Scan Tabs<a href="https://kb.marvellouscode.works/blog/road-to-tms9-tab-health-repair#scan-tabs" class="hash-link" aria-label="Direct link to Scan Tabs" title="Direct link to Scan Tabs" translate="no">​</a></h2>
<p>The Tab Health page opens with a single button. Nothing happens until you ask for it.</p>
<p><img decoding="async" loading="lazy" alt="TMS 9 Tab Health page on Brave, before scanning — just the Scan Tabs button" src="https://kb.marvellouscode.works/assets/images/tms9-tab-health-brave-scan-566a58c0af37b3dae247793d23c450d7.webp" width="1400" height="472" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-the-scan-found">What the scan found<a href="https://kb.marvellouscode.works/blog/road-to-tms9-tab-health-repair#what-the-scan-found" class="hash-link" aria-label="Direct link to What the scan found" title="Direct link to What the scan found" translate="no">​</a></h2>
<p>Clicking <strong>Scan Tabs</strong> walks through every tab and reports back. On this Brave profile, out of 28 tabs, TMS found 5 suspended tabs, 20 cached favicons — and <strong>21 grouped tabs in a broken state</strong>, flagged specifically as the Tab Groups bug.</p>
<p>That number is the point of this post. On Brave, those 21 tabs would otherwise sit there as blank <code>chrome://newtab/</code> pages until someone clicked the browser Back button on each one, one at a time. Instead, a <strong>Repair 21 grouped tab(s)</strong> button appears right below the scan results.</p>
<p>One click later: "Restoring favicons... 21 tabs. Done. Re-scan to verify grouped tabs are back to their suspended state." All 21 tabs recovered in a single pass, matched back to their original suspended URLs by window order and tab index — the Brave-specific recovery path described in the <a class="" href="https://kb.marvellouscode.works/blog/tms-tab-groups-chrome-150-fixed#for-brave-and-edge-users">Chrome 150 post</a>.</p>
<p><img decoding="async" loading="lazy" alt="TMS 9 Tab Health page on Brave, after scanning and repairing — scan results showing 21 grouped tabs in broken state, followed by the repair progress and completion message" src="https://kb.marvellouscode.works/assets/images/tms9-tab-health-brave-repair-d1718fc5cfcfee3d6ca73621321bc738.webp" width="1400" height="812" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-this-matters-for-brave-users-specifically">Why this matters for Brave users specifically<a href="https://kb.marvellouscode.works/blog/road-to-tms9-tab-health-repair#why-this-matters-for-brave-users-specifically" class="hash-link" aria-label="Direct link to Why this matters for Brave users specifically" title="Direct link to Why this matters for Brave users specifically" translate="no">​</a></h2>
<p>Chrome shipped the real fix in version 150. Whether and when Brave aligns with it is out of our hands — Brave tracks upstream Chromium on its own schedule, and there is no guarantee it lands quickly. If it does, this repair simply becomes unnecessary, the same way it already is for Chrome 150 users.</p>
<p>If it does not, TMS 9 gives Brave users a real answer instead of a manual workaround: open the Tab Health page, click Scan Tabs, and if it finds broken grouped tabs, click Repair. No side-loaded companion extension, no clicking Back on every tab, no waiting on a browser vendor's release notes.</p>
<div class="theme-admonition theme-admonition-warning admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>warning</div><div class="admonitionContent_BuS1"><p>TMS 9 is still in development. The screenshots in this post come from a build running on the <code>feature/session-backup</code> branch, not a public release. <strong>Do not side-load TMS 9 branches yourself</strong> — they share the same extension ID as the Chrome Web Store version, and doing so would overwrite your production installation. Wait for the official release.</p></div></div>]]></content:encoded>
            <category>The Marvellous Suspender</category>
            <category>Road to TMS 9</category>
        </item>
        <item>
            <title><![CDATA[Chrome 150 fixes the Tab Groups bug — and here is what changed in TMS]]></title>
            <link>https://kb.marvellouscode.works/blog/tms-tab-groups-chrome-150-fixed</link>
            <guid>https://kb.marvellouscode.works/blog/tms-tab-groups-chrome-150-fixed</guid>
            <pubDate>Tue, 30 Jun 2026 23:00:00 GMT</pubDate>
            <description><![CDATA[Chrome 150.0.7871.47 ships the browser-side fix for the tab group restore regression that broke suspended tabs since version 149. We removed the TMS startup workarounds — but kept the recovery logic where it matters most.]]></description>
            <content:encoded><![CDATA[<p>When Chrome 149 introduced a regression that silently discarded suspended tabs inside tab groups on every browser restart, TMS shipped a workaround in <a class="" href="https://kb.marvellouscode.works/blog/tms-tab-groups-chrome-149-bug">version 8.1.4</a>. When the same regression reached Microsoft Edge, <a class="" href="https://kb.marvellouscode.works/blog/tms-tab-groups-edge-chromium-bug">we addressed that too</a>. We knew from the start that these were stopgap measures — the right fix had to come from the browser itself.</p>
<p>It is now here. <strong>Chrome 150.0.7871.47</strong> ships the browser-side patch for <a href="https://crbug.com/522338670" target="_blank" rel="noopener noreferrer" class="">crbug.com/522338670</a>. Tab groups restore correctly without any intervention from TMS. We have verified this with a clean restart session and multiple group configurations, and everything behaves as expected.</p>
<p>Here is what that means for TMS, and what we decided to do with the workaround code.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-we-removed-from-the-startup-path">What we removed from the startup path<a href="https://kb.marvellouscode.works/blog/tms-tab-groups-chrome-150-fixed#what-we-removed-from-the-startup-path" class="hash-link" aria-label="Direct link to What we removed from the startup path" title="Direct link to What we removed from the startup path" translate="no">​</a></h2>
<p>The TMS 8.1.4 workaround lived entirely in the extension's startup sequence. Every time the browser launched, TMS would:</p>
<ol>
<li class="">Scan all tabs and cache suspended URLs for grouped tabs as Chrome assigned group IDs.</li>
<li class="">Detect grouped suspended tabs that Chrome marked as discarded before the user could click them.</li>
<li class="">Re-create those tabs in-place, restore their group membership, and remove the broken originals.</li>
<li class="">Handle late <code>onReplaced</code> events that fired after the startup window closed (the Chrome and Edge variant of the bug).</li>
<li class="">For Brave — which doesn't fire <code>onReplaced</code> at all — match broken <code>chrome://newtab/</code> grouped tabs against the last saved session by window order and tab index, then recreate them.</li>
</ol>
<p>With Chrome 150 restoring grouped tabs correctly, all of this runs for nothing on every single startup. Worse, if Chrome and TMS both try to recreate the same tab, the interaction is unpredictable. So we disabled the entire startup path.</p>
<p>The code is still there, commented out in <code>gsSession.js</code> and <code>background.js</code>, clearly marked with <code>// DISABLED FOR TESTING: Chrome 150 Tab Groups fix</code>. If a future Chrome update regresses this behavior, re-enabling it takes minutes.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-we-kept--and-where">What we kept — and where<a href="https://kb.marvellouscode.works/blog/tms-tab-groups-chrome-150-fixed#what-we-kept--and-where" class="hash-link" aria-label="Direct link to What we kept — and where" title="Direct link to What we kept — and where" translate="no">​</a></h2>
<img src="https://kb.marvellouscode.works/img/suspendy-guy-doctor.webp" alt="Suspendy Guy: Health" style="float:right;margin:0 0 1rem 1.5rem;width:180px">
<p>Disabling startup recovery does not mean abandoning users who hit broken grouped tabs. It means moving the recovery to the right place: <strong>the Tab Health page</strong>.</p>
<p>The Tab Health page (<code>health.html</code>) is TMS's existing on-demand diagnostic tool. You open it, click Scan Tabs, and TMS checks your suspended tabs for issues — missing favicons, stale cache entries, tabs that haven't fully loaded. It reports what it finds and offers a targeted action to fix it.</p>
<p>We added a new check to this scan: <strong>grouped tabs in broken state</strong>. The scan now detects two failure modes:</p>
<ul>
<li class=""><strong>Chrome / Edge path</strong> — a grouped suspended tab is in a discarded state. This means Chrome started the session restore but did not complete it correctly, leaving the tab with its suspended URL intact but inactive. TMS can re-create the tab in-place, restore its group, and remove the broken copy — without the user having to click anything manually.</li>
<li class=""><strong>Brave path</strong> — a grouped tab is showing <code>chrome://newtab/</code> instead of any content. Brave does not fire the <code>onReplaced</code> events that Chrome and Edge use, so the broken URL is gone. TMS recovers the suspended URL by matching the tab's position (window order and tab index) against the last saved session.</li>
</ul>
<p>If the scan finds zero broken grouped tabs — which will be the case for every Chrome 150+ user — it shows <code>0 ✓</code> and moves on. If it finds any, a <strong>Repair grouped tab(s)</strong> button appears as the first action, above the existing favicon checks, because a structurally broken tab is a more urgent problem than a missing favicon.</p>
<p>The recovery logic itself is identical to what the startup path used. It is just no longer running automatically on every launch.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-this-split-makes-sense">Why this split makes sense<a href="https://kb.marvellouscode.works/blog/tms-tab-groups-chrome-150-fixed#why-this-split-makes-sense" class="hash-link" aria-label="Direct link to Why this split makes sense" title="Direct link to Why this split makes sense" translate="no">​</a></h2>
<p>The startup workaround had to be aggressive by design: it ran before the user could interact with any tab, because a single click on a broken grouped tab in Chrome's session restore was enough to lose the suspended URL permanently. That aggression was justified when the bug was active. Now that Chrome fixes it natively, running the same code at startup becomes unnecessary noise — and potentially a source of conflicts if Chrome's own restore logic and TMS's recreate logic both fire on the same tab.</p>
<p>Moving recovery to the health page shifts it from "runs automatically every time, no matter what" to "runs when the user explicitly asks." That is the right model for a workaround that is no longer expected to be needed.</p>
<p>The event-driven handlers — the ones that hooked into <code>onReplaced</code> and <code>onUpdated</code> during the startup window — cannot be replicated outside the startup context, so those remain commented out in the background script. They are not lost; they are preserved exactly where they need to be if we ever want to reactivate them.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="for-brave-and-edge-users">For Brave and Edge users<a href="https://kb.marvellouscode.works/blog/tms-tab-groups-chrome-150-fixed#for-brave-and-edge-users" class="hash-link" aria-label="Direct link to For Brave and Edge users" title="Direct link to For Brave and Edge users" translate="no">​</a></h2>
<p>The browser-side fix shipped in Chrome 150. Brave and Edge follow their own Chromium release schedules, so the patch may arrive at different times for those browsers.</p>
<ul>
<li class=""><strong>Brave users</strong>: the Brave path in the health page recovery remains active and will work on any Brave version. If you restart Brave and notice grouped tabs showing as new tabs, open the Tab Health page and run a scan.</li>
<li class=""><strong>Edge users</strong>: Edge 149+ has shown symptoms of the same regression. Once the Chromium 150 patch reaches Edge's stable channel, you will be in the same position as Chrome users today. Until then, the health page recovery is available if you need it.</li>
</ul>
<p>We hope the other Chromium-based browsers catch up with this fix quickly. But if they don't, once <strong>TMS 9</strong> is available you will be able to rely on the new Tab Health page recovery to fix broken grouped tabs on demand, without waiting for a browser-side patch.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="summary">Summary<a href="https://kb.marvellouscode.works/blog/tms-tab-groups-chrome-150-fixed#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary" translate="no">​</a></h2>
<table><thead><tr><th>What</th><th>Before (TMS 8.1.4)</th><th>After (TMS + Chrome 150)</th></tr></thead><tbody><tr><td>Chrome grouped tab restore</td><td>Broken — TMS fixed at startup</td><td>Fixed natively by Chrome 150</td></tr><tr><td>Startup workaround</td><td>Active on every launch</td><td>Disabled (code preserved as comments)</td></tr><tr><td>Manual recovery</td><td>Not available</td><td>Tab Health page → Scan Tabs</td></tr><tr><td>Brave recovery</td><td>Active at startup</td><td>Tab Health page → Scan Tabs</td></tr><tr><td>Edge recovery</td><td>Active at startup (8.1.5+)</td><td>Tab Health page → Scan Tabs</td></tr></tbody></table>
<p>If you are on Chrome 150 and everything is working: nothing to do. If you ever hit broken grouped tabs again — on any browser — open the Tab Health page and let TMS sort it out.</p>
<hr>
<p><em>Related posts: <a class="" href="https://kb.marvellouscode.works/blog/tms-tab-groups-chrome-149-bug">TMS &amp; Chrome 149: the original bug report</a> · <a class="" href="https://kb.marvellouscode.works/blog/tms-tab-groups-edge-chromium-bug">TMS &amp; Microsoft Edge: the Chromium regression hits Edge too</a></em></p>
<p><em>GitHub issues: <a href="https://github.com/gioxx/MarvellousSuspender/issues/369" target="_blank" rel="noopener noreferrer" class="">#369</a> · <a href="https://github.com/gioxx/MarvellousSuspender/issues/374" target="_blank" rel="noopener noreferrer" class="">#374</a></em></p>]]></content:encoded>
            <category>Bug</category>
            <category>News</category>
            <category>The Marvellous Suspender</category>
            <category>Announcement</category>
            <category>Road to TMS 9</category>
        </item>
        <item>
            <title><![CDATA[Under the hood: replacing abandoned libraries in TMS 9]]></title>
            <link>https://kb.marvellouscode.works/blog/tms-dependency-cleanup</link>
            <guid>https://kb.marvellouscode.works/blog/tms-dependency-cleanup</guid>
            <pubDate>Fri, 26 Jun 2026 23:00:00 GMT</pubDate>
            <description><![CDATA[The next TMS update quietly replaces two aging third-party libraries — one abandoned since 2021, one still stuck on a 2020 release candidate. Here is why it matters and what we are asking the community.]]></description>
            <content:encoded><![CDATA[<p>TMS 9 is shaping up to be one of the most significant releases in the extension's history — if you have been following along, you already know about the automatic session backups and the Google Drive integration we covered in the previous posts. But not all of the work that goes into a release shows up in the changelog. Some of the most important changes happen completely out of sight, and this one is a good example of that. We replaced two third-party libraries that had been silently aging inside the extension, and we want to be transparent about what changed and why.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-a-third-party-library-and-why-should-you-care">What is a "third-party library" and why should you care?<a href="https://kb.marvellouscode.works/blog/tms-dependency-cleanup#what-is-a-third-party-library-and-why-should-you-care" class="hash-link" aria-label="Direct link to What is a &quot;third-party library&quot; and why should you care?" title="Direct link to What is a &quot;third-party library&quot; and why should you care?" translate="no">​</a></h2>
<p>TMS is not written from scratch. Like most software, it relies on a handful of external libraries — small pieces of code written by other developers that handle specific tasks so we do not have to reinvent the wheel. These libraries live inside the extension you install, and their health matters: an abandoned library means bugs get no fixes, known vulnerabilities go unpatched, and compatibility with future browser versions is not guaranteed.</p>
<p>Until now, TMS included two such libraries that were overdue for attention.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="dbjs--a-quietly-abandoned-dependency">db.js — a quietly abandoned dependency<a href="https://kb.marvellouscode.works/blog/tms-dependency-cleanup#dbjs--a-quietly-abandoned-dependency" class="hash-link" aria-label="Direct link to db.js — a quietly abandoned dependency" title="Direct link to db.js — a quietly abandoned dependency" translate="no">​</a></h2>
<p><strong>db.js</strong>, written by Aaron Powell, is a small wrapper around the browser's IndexedDB storage engine. TMS uses IndexedDB to remember your suspended tabs, saved sessions, favicons, and screenshot previews. db.js was responsible for every read, write, and query against that database.</p>
<p>The problem: development on db.js effectively stopped in 2021. The npm package has been frozen at version 0.15.0 for years. No bug fixes, no security patches, no updates for changes in browser behavior. We were shipping dead code — and dead code carries risk.</p>
<p>We replaced db.js with <strong><a href="https://github.com/jakearchibald/idb" target="_blank" rel="noopener noreferrer" class="">idb</a></strong>, the IndexedDB wrapper maintained by Jake Archibald (a Google engineer who literally helped write the browser storage specs). idb is:</p>
<ul>
<li class="">Actively maintained, currently at version 8</li>
<li class="">Widely used across the web platform ecosystem</li>
<li class="">Lean, well-tested, and licensed under ISC (permissive open source)</li>
</ul>
<p>From your perspective as a user, <strong>nothing changes</strong>. Your sessions, your suspended tabs, your settings — all of it is stored the same way in IndexedDB. The only difference is that the code that reads and writes your data is now backed by a healthy, modern library instead of an abandoned one.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="html2canvas--from-a-2020-release-candidate-to-a-stable-release">html2canvas — from a 2020 release candidate to a stable release<a href="https://kb.marvellouscode.works/blog/tms-dependency-cleanup#html2canvas--from-a-2020-release-candidate-to-a-stable-release" class="hash-link" aria-label="Direct link to html2canvas — from a 2020 release candidate to a stable release" title="Direct link to html2canvas — from a 2020 release candidate to a stable release" translate="no">​</a></h2>
<p>The second change is smaller in scope but still worth mentioning. <strong>html2canvas</strong>, the library TMS uses to generate the screenshot preview shown on suspended tab pages, was pinned at version <strong>1.0.0-rc.7</strong> — a <em>release candidate</em> from 2020. We were shipping pre-release software to everyone.</p>
<p>The library's author, Niklas von Hertzen, published the stable <strong>1.4.1</strong> release in 2022. This version includes several rendering fixes, better SVG support, and improved CORS handling. We updated to it.</p>
<p>For users who have the screenshot preview feature enabled in TMS settings, this may result in slightly more accurate previews on complex pages. For everyone else, there is no visible difference.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="an-open-question-for-the-community-do-you-use-full-page-screenshots">An open question for the community: do you use full-page screenshots?<a href="https://kb.marvellouscode.works/blog/tms-dependency-cleanup#an-open-question-for-the-community-do-you-use-full-page-screenshots" class="hash-link" aria-label="Direct link to An open question for the community: do you use full-page screenshots?" title="Direct link to An open question for the community: do you use full-page screenshots?" translate="no">​</a></h2>
<p>Here is where we need your input.</p>
<p>The screenshot preview in TMS has two modes, configurable in <strong>Settings → Preview</strong>:</p>
<ul>
<li class=""><strong>Viewport</strong> — captures only the visible portion of the page when you suspend it.</li>
<li class=""><strong>Full page</strong> — scrolls and renders the entire page content, even below the fold.</li>
</ul>
<p>html2canvas is the only reason TMS needs to ship a 200 KB library. The <strong>viewport</strong> mode does not actually need it at all — Chrome provides a native API (<code>chrome.tabs.captureVisibleTab</code>) that captures the visible area of a tab directly from the extension, with no third-party code required. Full-page screenshots, however, need html2canvas because no native browser API supports them.</p>
<p>So the question is: <strong>do you actually use full-page screenshots?</strong> If the vast majority of users either have previews disabled or use viewport-only mode, we could remove html2canvas entirely in a future release, replacing the viewport capture with the native Chrome API and dropping full-page support. The result would be a smaller, simpler, more maintainable extension.</p>
<p>We have opened a discussion on GitHub for exactly this:</p>
<p>👉 <strong><a href="https://github.com/gioxx/MarvellousSuspender/discussions/381" target="_blank" rel="noopener noreferrer" class="">Discussion #381 — Which screenshot preview mode do you use in TMS?</a></strong></p>
<p>If you have an opinion — whether you love the full-page preview or have never even turned it on — we would genuinely like to hear it. Community input is what drives these decisions.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="summary">Summary<a href="https://kb.marvellouscode.works/blog/tms-dependency-cleanup#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary" translate="no">​</a></h2>
<table><thead><tr><th>Library</th><th>Before</th><th>After</th><th>Why</th></tr></thead><tbody><tr><td>db.js</td><td>0.15.0 (2021, abandoned)</td><td>❌ Removed</td><td>Replaced by idb v8</td></tr><tr><td>idb</td><td>—</td><td>8.0.3</td><td>Modern IndexedDB wrapper, actively maintained</td></tr><tr><td>html2canvas</td><td>1.0.0-rc.7 (2020 RC)</td><td>1.4.1 (2022 stable)</td><td>Updated; future status depends on community feedback</td></tr></tbody></table>
<p>These changes will ship in the next TMS release. If you encounter any regressions with session storage, tab history, or screenshot previews after updating, please <a href="https://github.com/gioxx/MarvellousSuspender/issues" target="_blank" rel="noopener noreferrer" class="">open an issue on GitHub</a>.</p>
<p>Thank you for using TMS, and thank you — as always — for the patience you extend to a small team maintaining this project in their free time.</p>]]></content:encoded>
            <category>The Marvellous Suspender</category>
            <category>Road to TMS 9</category>
        </item>
        <item>
            <title><![CDATA[Road to TMS 9: automatic session backup, Drive integration, and what's new in the branch]]></title>
            <link>https://kb.marvellouscode.works/blog/road-to-tms9-session-backup</link>
            <guid>https://kb.marvellouscode.works/blog/road-to-tms9-session-backup</guid>
            <pubDate>Thu, 25 Jun 2026 23:00:00 GMT</pubDate>
            <description><![CDATA[The session-backup branch brings the most-requested feature in TMS history: automatic, scheduled backups of your sessions — locally or to Google Drive. Plus settings export/import, a new Backup page, a diagnostic overhaul, and several bug fixes.]]></description>
            <content:encoded><![CDATA[<p>If there is one thing TMS users have asked for more than anything else over the years, it is this: <em>please don't let me lose my sessions</em>. A browser profile wipe, a clean OS install, an accidental extension removal — and everything is gone. TMS has always saved sessions inside Chrome's storage, but Chrome's storage lives and dies with the browser profile.</p>
<p>The <code>feature/session-backup</code> branch changes that.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="automatic-session-backup">Automatic session backup<a href="https://kb.marvellouscode.works/blog/road-to-tms9-session-backup#automatic-session-backup" class="hash-link" aria-label="Direct link to Automatic session backup" title="Direct link to Automatic session backup" translate="no">​</a></h2>
<p>The headline feature is a new background module — <code>gsBackup.js</code> — that silently saves your current session as a JSON file on a schedule you control. No dialog, no confirmation prompt, no interruption. It just runs.</p>
<p>You configure it from the new dedicated <strong>Backup page</strong> (more on that below):</p>
<ul>
<li class=""><strong>Interval</strong>: 15 minutes, 30 minutes, 1 h, 2 h, 4 h, 8 h, or once a day at a specific time you choose.</li>
<li class=""><strong>Destination</strong>: your local Downloads folder (inside a <code>tms-backups/</code> subfolder) or your Google Drive.</li>
<li class="">TMS retains the <strong>10 most recent backups</strong> and automatically deletes older ones. No manual cleanup needed.</li>
</ul>
<p>One detail worth calling out: backup alarms are now anchored to real clock time, not to browser startup. If you set a 15-minute interval, backups always fire at :00, :15, :30, :45 — regardless of when you started Chrome. The daily option lets you pick a specific time of day; it will fire at that time every day, even if you restart the browser in between.</p>
<p>A <strong>"Backup now"</strong> button is also available directly in the popup when backup is enabled — so you can trigger an immediate save without opening the Backup page.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="google-drive-integration">Google Drive integration<a href="https://kb.marvellouscode.works/blog/road-to-tms9-session-backup#google-drive-integration" class="hash-link" aria-label="Direct link to Google Drive integration" title="Direct link to Google Drive integration" translate="no">​</a></h2>
<p>When you choose Drive as your destination, TMS authenticates silently via Chrome's <code>identity</code> API (OAuth 2.0, <code>drive.file</code> scope — access limited to files TMS itself creates) and uploads each backup to a visible <strong>"TMS Backups"</strong> folder in your Drive. Cleanup of old Drive backups (keeping the 10 most recent) is handled automatically, just like local backups.</p>
<p>If a scheduled backup fires while no Google account is connected — or if the token expires — TMS shows a <strong>red badge</strong> on the extension icon and a banner in the popup the next time you open it, so you notice the problem before you actually need a backup.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-dedicated-backup-page">A dedicated Backup page<a href="https://kb.marvellouscode.works/blog/road-to-tms9-session-backup#a-dedicated-backup-page" class="hash-link" aria-label="Direct link to A dedicated Backup page" title="Direct link to A dedicated Backup page" translate="no">​</a></h2>
<p>Previously, backup settings were buried at the bottom of the Options page. In TMS 9 they get their own first-class page, accessible directly from the sidebar on every settings screen.</p>
<p>The Backup page has two clear sections:</p>
<ul>
<li class=""><strong>Settings backup</strong> — export your extension settings to <code>tms-settings.json</code>, or import a previously saved file to restore them. The file is always overwritten on export — settings are not versioned, they are a single point-in-time snapshot. Useful after a reinstall, a machine migration, or just as a safety net before experimenting with settings. When Drive is connected, a "Save settings to Drive" button also appears here, uploading the same file to your TMS Backups folder.</li>
<li class=""><strong>Automatic session backup</strong> — the interval, destination, and Drive account controls described above.</li>
</ul>
<p><img decoding="async" loading="lazy" alt="TMS 9 Backup page — Settings backup section with Export/Import/Drive buttons, Automatic session backup with 30-minute interval and Google Drive selected, and Connected Account panel showing the linked Google account and TMS Backups folder" src="https://kb.marvellouscode.works/assets/images/tms9-backup-page-04ded526b34a55fee0a147c1afe7e1d3.webp" width="1905" height="993" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="wake-whitelisted-tabs">Wake whitelisted tabs<a href="https://kb.marvellouscode.works/blog/road-to-tms9-session-backup#wake-whitelisted-tabs" class="hash-link" aria-label="Direct link to Wake whitelisted tabs" title="Direct link to Wake whitelisted tabs" translate="no">​</a></h2>
<p>A smaller but handy addition: a new <strong>"Wake whitelisted tabs"</strong> action finds every suspended tab whose original URL matches your whitelist and unsuspends them all in one shot. It appears in the popup (below "Unsuspend all tabs") and next to the "Test whitelist" link in Options. If you regularly whitelist certain domains but sometimes find them suspended after a restart, this is the button you've been waiting for.</p>
<p><img decoding="async" loading="lazy" alt="TMS 9 popup — the new &amp;quot;Wake whitelisted tabs&amp;quot; and &amp;quot;Backup session now (Cloud)&amp;quot; entries visible alongside the standard actions" src="https://kb.marvellouscode.works/assets/images/tms9-popup-09c1c974d692d2a8d842ef90aa2b686c.webp" width="1284" height="391" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="diagnostic-page-overhaul">Diagnostic page overhaul<a href="https://kb.marvellouscode.works/blog/road-to-tms9-session-backup#diagnostic-page-overhaul" class="hash-link" aria-label="Direct link to Diagnostic page overhaul" title="Direct link to Diagnostic page overhaul" translate="no">​</a></h2>
<p>This one is more for power users and anyone who has ever had to file a bug report.</p>
<p>TMS's old debug page was effectively read-only and required DevTools access to extract anything useful. The redesigned <strong>Diagnostic page</strong> has a proper log viewer (colour-coded by level), a persistent log buffer that survives Service Worker restarts, and three action buttons: <strong>Refresh</strong>, <strong>Clear log</strong>, and <strong>Copy/Download report</strong>.</p>
<p>The downloadable report bundles the extension version, browser user-agent, a tab profiler snapshot, and the full log buffer into a single shareable text file. If you encounter a bug and open an issue on GitHub, this report gives us everything we need to diagnose it — no DevTools required on your end.</p>
<p>The "Capture verbose logs" toggle now persists to storage and wakes the Service Worker immediately when changed, so you don't need to restart Chrome to start capturing.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="bug-fixes-in-this-branch">Bug fixes in this branch<a href="https://kb.marvellouscode.works/blog/road-to-tms9-session-backup#bug-fixes-in-this-branch" class="hash-link" aria-label="Direct link to Bug fixes in this branch" title="Direct link to Bug fixes in this branch" translate="no">​</a></h2>
<p>Three fixes that ship alongside the new features:</p>
<p><strong>Grouped suspended tabs lost after Chrome restart.</strong> Chrome 149 introduced a bug (<code>crbug.com/522338670</code>) where tabs inside tab groups with non-<code>https://</code> URLs — including TMS suspended tabs — could be navigated to <code>chrome://newtab/</code> instead of being restored. TMS 8.1.4 already included a partial fix; this branch extends it: if the reinitialisation check detects that a suspended tab in a group has been navigated away, TMS creates a fresh tab with the correct suspended URL, places it back in the same group, and removes the broken one. No more "press Back to recover" workaround.</p>
<p><strong>Extension's own pages treated as regular tabs.</strong> TMS's internal pages (<code>options.html</code>, <code>about.html</code>, <code>debug.html</code>, etc.) were not matched by the <code>isBrowserInternalURL</code> check — which tested for <code>chrome:</code> but not <code>chrome-extension://</code> — so they could end up in the suspension queue and generate repeated failed content-script injection attempts. A dedicated <code>startsWith('chrome-extension://')</code> guard now catches them before any of that happens.</p>
<p><strong>Tab profiler showing "unknown" for whitelisted, pinned, and audible tabs.</strong> The profiler was short-circuiting when the content script did not respond and leaving the status as <code>unknown</code> instead of falling through to the correct status calculation. Whitelisted, pinned, audible, and active tabs now show their correct labels.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-next">What's next<a href="https://kb.marvellouscode.works/blog/road-to-tms9-session-backup#whats-next" class="hash-link" aria-label="Direct link to What's next" title="Direct link to What's next" translate="no">​</a></h2>
<p>The <code>feature/session-backup</code> branch is the last major piece of TMS 9. The branch is public at <a href="https://github.com/gioxx/MarvellousSuspender/tree/feature/session-backup" target="_blank" rel="noopener noreferrer" class=""><code>feature/session-backup</code></a> if you want to follow along with the commits — but read the warning below before you do anything else with it.</p>
<div class="theme-admonition theme-admonition-warning admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>warning</div><div class="admonitionContent_BuS1"><p>The <code>feature/session-backup</code> branch is development code. <strong>Do not install it as a side-loaded extension.</strong> It shares the same extension ID as the Chrome Web Store version — loading it locally would overwrite your production installation and could corrupt your sessions and settings. Wait for the official release.</p></div></div>]]></content:encoded>
            <category>The Marvellous Suspender</category>
            <category>Road to TMS 9</category>
        </item>
        <item>
            <title><![CDATA[Road to TMS 9: a new look for a new era]]></title>
            <link>https://kb.marvellouscode.works/blog/road-to-tms9-visual-redesign</link>
            <guid>https://kb.marvellouscode.works/blog/road-to-tms9-visual-redesign</guid>
            <pubDate>Wed, 24 Jun 2026 23:00:00 GMT</pubDate>
            <description><![CDATA[TMS 9 is coming, and before we ship it we want to bring you along for the ride. The first stop is a complete visual redesign — new design system, new fonts, new brand identity — and a peek at features already living on the feature branch.]]></description>
            <content:encoded><![CDATA[<p>TMS has been quietly getting better for years — new bugfixes, compatibility patches, a full Manifest V3 migration — but the extension's visual identity never kept up. The settings pages still looked like a relic of 2018. The popup was fine, but only barely. Nothing matched the <a href="https://marvellouscode.works/" target="_blank" rel="noopener noreferrer" class="">Marvellous Codeworks website</a>.</p>
<p>That changes with TMS 9.</p>
<p>This is the first in a series of posts we're calling <strong>Road to TMS 9</strong> — a chance to show you what's being built on the feature branches before it ships, explain the decisions behind the changes, and hear from you before things are set in stone. Think of it as development in the open.</p>
<p>Today: the visual redesign.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-design-system-from-scratch">A design system from scratch<a href="https://kb.marvellouscode.works/blog/road-to-tms9-visual-redesign#a-design-system-from-scratch" class="hash-link" aria-label="Direct link to A design system from scratch" title="Direct link to A design system from scratch" translate="no">​</a></h2>
<p>The most important change in TMS 9's interface is one you won't immediately see: a proper <strong>design token system</strong>.</p>
<p>Rather than scattering raw hex values and <code>px</code> literals across a dozen CSS files (which is exactly how TMS looked until now), we wrote <a href="https://github.com/gioxx/MarvellousSuspender/blob/feature/visual-redesign/src/css/tokens.css" target="_blank" rel="noopener noreferrer" class=""><code>tokens.css</code></a> — a single source of truth for every color, spacing step, type size, shadow, and animation duration in the extension. Every other stylesheet consumes these tokens. Change one token, the entire UI shifts consistently.</p>
<p>The color palette is built around <strong>OKLCH</strong> — a perceptually uniform color space that produces more predictable results across light and dark modes than the old <code>rgb()</code> / <code>hex</code> approach. The primary accent color is now the same cyan-blue used on marvellouscode.works, carrying the mascot's signature eye-glow right into the UI.</p>
<p>Light and dark mode are properly supported for the first time. The previous implementation layered hardcoded hex overrides inside <code>body.dark { … }</code> blocks — functional, but brittle. The token system drives both modes from the same cascade, and <code>prefers-color-scheme</code> is respected automatically. If you never touch the theme selector, the extension follows your OS.</p>
<p>One small but meaningful detail: <code>@media (prefers-reduced-motion: reduce)</code> sets all animation duration tokens to <code>0ms</code>. If you've told your OS you want less motion, TMS will honor that.</p>
<p><img decoding="async" loading="lazy" alt="TMS 9 Settings page — General section with Language and Theme selectors, brand header, and sidebar navigation" src="https://kb.marvellouscode.works/assets/images/tms9-settings-7aacecbed2f6a0d1b466a4b47b5cd420.webp" width="1905" height="993" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-fonts">New fonts<a href="https://kb.marvellouscode.works/blog/road-to-tms9-visual-redesign#new-fonts" class="hash-link" aria-label="Direct link to New fonts" title="Direct link to New fonts" translate="no">​</a></h2>
<p>TMS 9 ships two self-hosted variable fonts:</p>
<ul>
<li class=""><strong><a href="https://rsms.me/inter/" target="_blank" rel="noopener noreferrer" class="">Inter</a></strong> — the sans-serif workhorse for all body copy, labels, and form elements. No more system font lottery.</li>
<li class=""><strong><a href="https://www.jetbrains.com/lego/fonts/jetbrains-mono/" target="_blank" rel="noopener noreferrer" class="">JetBrains Mono</a></strong> — the monospace font used for version numbers, code-style strings, and button text. If you've used JetBrains IDEs or VS Code with this font, it'll feel right at home.</li>
</ul>
<p>Both are loaded via <code>@font-face</code> with <code>font-display: swap</code>, so they don't block rendering. Both ship under the SIL Open Font License — along with <a href="https://lucide.dev/" target="_blank" rel="noopener noreferrer" class="">Lucide</a>, which replaces the old custom icon font.</p>
<p><img decoding="async" loading="lazy" alt="TMS 9 About page — version info, credits section listing Inter, JetBrains Mono, Lucide, idb, and html2canvas" src="https://kb.marvellouscode.works/assets/images/tms9-about-cfe4055fd110c84d960735ad18ab2fe8.webp" width="1905" height="993" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="unified-page-identity">Unified page identity<a href="https://kb.marvellouscode.works/blog/road-to-tms9-visual-redesign#unified-page-identity" class="hash-link" aria-label="Direct link to Unified page identity" title="Direct link to Unified page identity" translate="no">​</a></h2>
<p>Every settings page in TMS — Options, About, Health, Shortcuts, Sessions — now opens with the same brand header: Suspendy Guy on the left, the extension name in monospace bold, the Marvellous Codeworks logo anchored to the right. Sidebar navigation is now a proper <code>&lt;nav&gt;</code> element. Each content area gets an eyebrow label that anchors it visually before the content starts.</p>
<p>It sounds like a small thing. In practice it makes the extension feel like a coherent product rather than five loosely-related pages that happened to ship together.</p>
<p><img decoding="async" loading="lazy" alt="TMS 9 Sessions page — full-width layout showing brand header, sidebar, in-page tab navigation, and session list" src="https://kb.marvellouscode.works/assets/images/tms9-sessions-bd6c5e961dbe6c4765fe7bd7cd3f412a.webp" width="1905" height="993" class="img_ev3q"></p>
<p>Even the bare pages — Tab Health is a good example — got the full treatment. Same header, same sidebar, same typography system, even when there's almost nothing on the page yet.</p>
<p><img decoding="async" loading="lazy" alt="TMS 9 Tab Health page — minimal content, same brand header and sidebar as every other page" src="https://kb.marvellouscode.works/assets/images/tms9-tab-health-3b83d2dcbde373a32933596992b3de35.webp" width="1905" height="993" class="img_ev3q"></p>
<p>The popup received the same treatment — a new brand bar at the top shows the mascot icon, the extension name, and the current version number. You always know what version you're running without opening the About page.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-features-already-on-the-branch">New features already on the branch<a href="https://kb.marvellouscode.works/blog/road-to-tms9-visual-redesign#new-features-already-on-the-branch" class="hash-link" aria-label="Direct link to New features already on the branch" title="Direct link to New features already on the branch" translate="no">​</a></h2>
<p>The redesign commit wasn't just cosmetic. Two features worth knowing about landed alongside it.</p>
<p><strong>Language override.</strong> TMS has always followed the browser's locale — if Chrome is set to Italian, TMS speaks Italian. TMS 9 adds a dropdown in General settings that lets you force a specific language regardless of what the browser reports. Useful if your browser is set to English but you'd rather read the extension in Italian (or vice versa). Implemented by <a href="https://github.com/gioxx/MarvellousSuspender/commit/b67f887" target="_blank" rel="noopener noreferrer" class="">fetching the chosen locale's <code>messages.json</code> at page load</a> and using it in place of Chrome's <code>i18n.getMessage()</code>.</p>
<p><strong>Tab strip context menu</strong> <em>(pending Chrome stable rollout)</em>. Chrome is adding support for <code>"tab"</code> as a context type in extension context menus — meaning TMS will be able to add entries to the right-click menu on the tab bar itself, not just on page content. The implementation is already live on the branch: Suspend/Unsuspend, Pause/Unpause, Never suspend domain, Never suspend URL, and the window/all-window variants. The Keyboard Shortcuts page already surfaces the note:</p>
<p><img decoding="async" loading="lazy" alt="TMS 9 Keyboard Shortcuts page — the note at the top confirms all actions are also available via the right-click context menu" src="https://kb.marvellouscode.works/assets/images/tms9-shortcuts-61680eea66cacab7e23d9eaf9dfa6f08.webp" width="1905" height="993" class="img_ev3q"></p>
<p>The catch is that Chrome hasn't shipped the tab strip UI yet (confirmed up to Chrome 149 at the time of writing). When it lands in stable, TMS 9 will support it automatically — no update needed on your end.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="under-the-hood">Under the hood<a href="https://kb.marvellouscode.works/blog/road-to-tms9-visual-redesign#under-the-hood" class="hash-link" aria-label="Direct link to Under the hood" title="Direct link to Under the hood" translate="no">​</a></h2>
<p>The visual branch also includes some housekeeping that users won't see but that keeps the codebase healthy:</p>
<ul>
<li class="">All PNG images (except toolbar icons, which Chrome requires as PNG) have been converted to WebP — saving up to 77% in bundle size on some assets.</li>
<li class="">The old custom Fontello icon font (6 glyphs, woff/woff2) has been replaced by a minimal <a href="https://lucide.dev/" target="_blank" rel="noopener noreferrer" class="">Lucide</a> SVG sprite, which is easier to maintain and extend.</li>
<li class="">The Italian locale received a thorough overhaul: ~45 strings that were still in English have been translated, and several grammatical issues have been fixed.</li>
</ul>
<p>The two main commits covering all of this are <a href="https://github.com/gioxx/MarvellousSuspender/commit/1260f94" target="_blank" rel="noopener noreferrer" class=""><code>1260f94</code></a> and <a href="https://github.com/gioxx/MarvellousSuspender/commit/b67f887" target="_blank" rel="noopener noreferrer" class=""><code>b67f887</code></a> on the <a href="https://github.com/gioxx/MarvellousSuspender/tree/feature/visual-redesign" target="_blank" rel="noopener noreferrer" class=""><code>feature/visual-redesign</code></a> branch, which is public if you want to follow along or try it yourself.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="next-in-the-series">Next in the series<a href="https://kb.marvellouscode.works/blog/road-to-tms9-visual-redesign#next-in-the-series" class="hash-link" aria-label="Direct link to Next in the series" title="Direct link to Next in the series" translate="no">​</a></h2>
<p>The visual redesign is one piece of the TMS 9 puzzle. The next post covers something that might seem less exciting but is arguably more important: <strong>replacing the extension's aging third-party libraries</strong> — one abandoned since 2021, one stuck on a 2020 release candidate. We'll also have a question for the community about a feature that may or may not survive into TMS 9.</p>
<p>If you have thoughts on the redesign — what you like, what doesn't work, what you'd change — <a href="https://github.com/gioxx/MarvellousSuspender/discussions" target="_blank" rel="noopener noreferrer" class="">open a discussion on GitHub</a>.</p>
<div class="theme-admonition theme-admonition-warning admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>warning</div><div class="admonitionContent_BuS1"><p>The <code>feature/visual-redesign</code> branch is development code, not a release build. <strong>Do not install it as a side-loaded extension.</strong> The branch deliberately shares the same extension ID as the Chrome Web Store version, which means loading it locally would overwrite your production installation and could corrupt your sessions and settings. The screenshots in this post are all you need — sit tight and wait for the official release.</p></div></div>]]></content:encoded>
            <category>The Marvellous Suspender</category>
            <category>Road to TMS 9</category>
            <category>Announcement</category>
        </item>
        <item>
            <title><![CDATA[TMS & Microsoft Edge: the Chromium tab group regression is hitting Edge users too]]></title>
            <link>https://kb.marvellouscode.works/blog/tms-tab-groups-edge-chromium-bug</link>
            <guid>https://kb.marvellouscode.works/blog/tms-tab-groups-edge-chromium-bug</guid>
            <pubDate>Tue, 16 Jun 2026 23:00:00 GMT</pubDate>
            <description><![CDATA[The same Chromium regression that broke suspended tabs inside tab groups on Chrome 149 is now causing issues for Microsoft Edge users as well. Here is what we know and what we are doing about it.]]></description>
            <content:encoded><![CDATA[<p>If you are using <strong>Microsoft Edge</strong> and noticed that your suspended tabs inside <strong>tab groups</strong> disappear or turn into blank New Tab pages after a browser restart, you are running into the same Chromium-level regression that <a class="" href="https://kb.marvellouscode.works/blog/tms-tab-groups-chrome-149-bug">first appeared in Chrome 149</a> — and it is now reaching Edge users too.</p>
<img src="https://kb.marvellouscode.works/img/suspendy-guy-oops.webp" alt="Suspendy Guy is not happy about this" style="float:right;margin:0 0 1rem 1.5rem;width:180px">
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-happened">What happened<a href="https://kb.marvellouscode.works/blog/tms-tab-groups-edge-chromium-bug#what-happened" class="hash-link" aria-label="Direct link to What happened" title="Direct link to What happened" translate="no">​</a></h2>
<p>Microsoft Edge is built on the Chromium engine, which means it inherits browser-level changes from the upstream Chromium project — including regressions. The change introduced around Chromium 149 that broke the tab group restore behavior for suspended tabs is now making its way into Edge builds.</p>
<p>As a result, Edge users are experiencing the same symptoms Chrome users saw earlier:</p>
<ul>
<li class="">Suspended tabs <strong>inside tab groups</strong> are silently discarded when the browser restarts.</li>
<li class="">Tabs <strong>outside tab groups</strong> are not affected and restore correctly.</li>
<li class="">The suspended tab URL (<code>chrome-extension://…</code> / <code>extension://…</code>) is apparently filtered out during session restore when inside a group.</li>
</ul>
<p>This is tracked in the dedicated GitHub issue <strong><a href="https://github.com/gioxx/MarvellousSuspender/issues/374" target="_blank" rel="noopener noreferrer" class="">#374</a></strong>, opened specifically for Edge. Issue <strong><a href="https://github.com/gioxx/MarvellousSuspender/issues/369" target="_blank" rel="noopener noreferrer" class="">#369</a></strong> — the original Chrome report — has also been reopened because of these lingering effects across the Chromium ecosystem.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="current-status">Current status<a href="https://kb.marvellouscode.works/blog/tms-tab-groups-edge-chromium-bug#current-status" class="hash-link" aria-label="Direct link to Current status" title="Direct link to Current status" translate="no">​</a></h2>
<p>To be clear about where things stand right now:</p>
<ul>
<li class="">The <strong>browser-side Chromium fix</strong> is <a href="https://chromium-review.googlesource.com/c/chromium/src/+/7933990" target="_blank" rel="noopener noreferrer" class="">under review</a> but has <strong>not yet landed in Chrome's stable channel</strong> — Chrome 149.0.7827.156 is still affected. The fix is expected sometime this weekend or early next week.</li>
<li class=""><strong>Edge will take even longer</strong>, as it follows its own release schedule on top of Chromium's.</li>
<li class=""><strong>TMS 8.1.4</strong> addressed the issue for Chrome users at the extension level, but some edge cases are still being investigated (see <a href="https://github.com/gioxx/MarvellousSuspender/issues/369" target="_blank" rel="noopener noreferrer" class="">#369</a>).</li>
<li class=""><strong>TMS 8.1.5</strong> is in active development and specifically targets the Edge regression. A fix has already been tested and looks solid — we expect a release candidate to be ready very soon.</li>
</ul>
<p>We are not waiting for the browser vendors to ship their fix. We are shipping our own.</p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>This is not TMS's fault</div><div class="admonitionContent_BuS1"><p>We want to be very clear: <strong>this regression was introduced by a change in the Chromium engine</strong>, not by anything TMS did. We are nonetheless doing everything we can to protect your tabs while the browser-side fix works its way through the release pipeline. We are sorry you are caught in the middle of this.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="temporary-workaround">Temporary workaround<a href="https://kb.marvellouscode.works/blog/tms-tab-groups-edge-chromium-bug#temporary-workaround" class="hash-link" aria-label="Direct link to Temporary workaround" title="Direct link to Temporary workaround" translate="no">​</a></h2>
<p>If you lost tabs, the manual recovery steps still apply:</p>
<ol>
<li class="">Open the tab group that now shows blank New Tab pages.</li>
<li class="">For each empty tab, click the <strong>browser Back button</strong> (top-left arrow) once.</li>
<li class="">The original suspended tab page should reappear.</li>
</ol>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>Preventing further losses in the meantime</div><div class="admonitionContent_BuS1"><p>Until TMS 8.1.5 is available, consider <strong>unsuspending tabs before restarting</strong> the browser, or temporarily moving important tabs <strong>out of tab groups</strong>.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-we-are-doing-about-it">What we are doing about it<a href="https://kb.marvellouscode.works/blog/tms-tab-groups-edge-chromium-bug#what-we-are-doing-about-it" class="hash-link" aria-label="Direct link to What we are doing about it" title="Direct link to What we are doing about it" translate="no">​</a></h2>
<ul>
<li class=""><strong>TMS 8.1.5</strong> is coming, with a targeted fix for Edge. Follow <a href="https://github.com/gioxx/MarvellousSuspender/pull/376" target="_blank" rel="noopener noreferrer" class="">PR #376</a> for progress.</li>
<li class="">We are tracking the Edge-specific report in <strong><a href="https://github.com/gioxx/MarvellousSuspender/issues/374" target="_blank" rel="noopener noreferrer" class="">issue #374</a></strong> — follow it for real-time updates.</li>
<li class="">Issue <strong><a href="https://github.com/gioxx/MarvellousSuspender/issues/369" target="_blank" rel="noopener noreferrer" class="">#369</a></strong> has been reopened to track lingering issues for Chrome users on TMS 8.1.4 as well.</li>
<li class="">The upstream Chromium fix (<a href="https://chromium-review.googlesource.com/c/chromium/src/+/7933990" target="_blank" rel="noopener noreferrer" class="">chromium-review.googlesource.com</a>) will eventually reach Edge too, but we are not relying on that timeline.</li>
</ul>
<p>We know how frustrating this is, especially after Chrome users already went through it. Thank you for your patience.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="references--links">References / Links<a href="https://kb.marvellouscode.works/blog/tms-tab-groups-edge-chromium-bug#references--links" class="hash-link" aria-label="Direct link to References / Links" title="Direct link to References / Links" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://kb.marvellouscode.works/blog/tms-tab-groups-chrome-149-bug">TMS &amp; Chrome 149: the original post</a></li>
<li class=""><a href="https://github.com/gioxx/MarvellousSuspender/issues/374" target="_blank" rel="noopener noreferrer" class="">GitHub issue #374 – Edge-specific tab group regression</a></li>
<li class=""><a href="https://github.com/gioxx/MarvellousSuspender/issues/369" target="_blank" rel="noopener noreferrer" class="">GitHub issue #369 – Original Chrome 149 report (reopened)</a></li>
<li class=""><a href="https://github.com/gioxx/MarvellousSuspender/pull/376" target="_blank" rel="noopener noreferrer" class="">PR #376 – TMS 8.1.5 Edge fix</a></li>
<li class=""><a href="https://chromium-review.googlesource.com/c/chromium/src/+/7933990" target="_blank" rel="noopener noreferrer" class="">https://chromium-review.googlesource.com/c/chromium/src/+/7933990</a></li>
</ul>]]></content:encoded>
            <category>Bug</category>
            <category>News</category>
            <category>The Marvellous Suspender</category>
            <category>Announcement</category>
        </item>
        <item>
            <title><![CDATA[The Marvellous Suspender 8.1.4 — Tab group restore fix for Chrome 149]]></title>
            <link>https://kb.marvellouscode.works/blog/tms-release-8-1-4</link>
            <guid>https://kb.marvellouscode.works/blog/tms-release-8-1-4</guid>
            <pubDate>Mon, 15 Jun 2026 23:00:00 GMT</pubDate>
            <description><![CDATA[A targeted fix release addressing the tab group restore regression introduced by Chrome 149, where suspended tabs inside tab groups were silently discarded after a browser restart.]]></description>
            <content:encoded><![CDATA[<p>A targeted fix release addressing the tab group restore regression introduced by Chrome 149, where suspended tabs inside tab groups were silently discarded after a browser restart.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-fixed">What's fixed<a href="https://kb.marvellouscode.works/blog/tms-release-8-1-4#whats-fixed" class="hash-link" aria-label="Direct link to What's fixed" title="Direct link to What's fixed" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="suspended-tabs-inside-tab-groups-restored-correctly-after-restart">Suspended tabs inside tab groups restored correctly after restart<a href="https://kb.marvellouscode.works/blog/tms-release-8-1-4#suspended-tabs-inside-tab-groups-restored-correctly-after-restart" class="hash-link" aria-label="Direct link to Suspended tabs inside tab groups restored correctly after restart" title="Direct link to Suspended tabs inside tab groups restored correctly after restart" translate="no">​</a></h3>
<p>Starting with Chrome 149, a change in the browser's session restore engine caused tabs with non-<code>https://</code> URLs — including TMS suspended tabs — to be skipped when restoring tab groups. This resulted in blank New Tab pages appearing in place of your suspended tabs after every restart.</p>
<p>TMS 8.1.4 works around the Chrome-side behavior and restores suspended tabs inside tab groups correctly again. Tabs outside tab groups were not affected and continue to work as before.</p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>If you used the <a href="https://github.com/Marvellous-Codeworks/back-grouped-tabs" target="_blank" rel="noopener noreferrer" class="">back-grouped-tabs</a> companion extension as a temporary workaround, you can safely remove it now that TMS includes a built-in fix.</p></div></div>
<hr>
<p><em>Full changelog on GitHub: <a href="https://github.com/gioxx/MarvellousSuspender/releases/tag/v8.1.4" target="_blank" rel="noopener noreferrer" class="">v8.1.4 release</a></em></p>
<p><em>Related: <a class="" href="https://kb.marvellouscode.works/blog/tms-tab-groups-chrome-149-bug">TMS &amp; Chrome 149: suspended tabs inside tab groups lost after restart</a></em></p>]]></content:encoded>
            <category>Release</category>
            <category>The Marvellous Suspender</category>
        </item>
        <item>
            <title><![CDATA[TMS & Chrome 149: suspended tabs inside tab groups lost after restart]]></title>
            <link>https://kb.marvellouscode.works/blog/tms-tab-groups-chrome-149-bug</link>
            <guid>https://kb.marvellouscode.works/blog/tms-tab-groups-chrome-149-bug</guid>
            <pubDate>Wed, 10 Jun 2026 23:00:00 GMT</pubDate>
            <description><![CDATA[If you are using Chrome 149 and noticed that your suspended tabs inside tab groups turn into blank New Tab pages after a browser restart, you are not alone — and it is not your fault.]]></description>
            <content:encoded><![CDATA[<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p><strong>2026-06-12</strong></p><ul>
<li class="">A companion extension — <a href="https://github.com/Marvellous-Codeworks/back-grouped-tabs" target="_blank" rel="noopener noreferrer" class="">back-grouped-tabs</a> — is now available as a temporary workaround while a proper fix for the Chrome bug is being developed. See the <a href="https://kb.marvellouscode.works/blog/tms-tab-groups-chrome-149-bug#companion-workaround-back-grouped-tabs" class="">new section below</a> for details.</li>
</ul><p><strong>2026-06-15</strong></p><ul>
<li class=""><strong>TMS 8.1.4</strong> has been submitted to the Chrome Web Store and is currently <strong>pending review</strong>. This version includes a fix for the tab group restore issue.</li>
<li class="">The Chrome team is also working on an official browser-side fix: the patch is under review at <a href="https://chromium-review.googlesource.com/c/chromium/src/+/7933990" target="_blank" rel="noopener noreferrer" class="">chromium-review.googlesource.com</a>. It's a race to see who gets there first!</li>
</ul><p><strong>2026-06-16</strong></p><ul>
<li class=""><strong>TMS 8.1.4 is now live on the <a href="https://chromewebstore.google.com/detail/the-marvellous-suspender/noogafoofpebimajpfpamcfhoaifemoa" target="_blank" rel="noopener noreferrer" class="">Chrome Web Store</a></strong>. The tab group restore issue is fixed — update TMS and you are good to go.</li>
<li class="">The <strong>back-grouped-tabs</strong> companion workaround is no longer needed. The repository remains available for anyone who still wants it, but you can safely remove the extension.</li>
</ul></div></div>
<p>If you are using Chrome 149 and noticed that your suspended tabs inside <strong>tab groups</strong> turn into blank New Tab pages after a browser restart, you are not alone — and it is not your fault.</p>
<img src="https://kb.marvellouscode.works/img/suspendy-guy-oops.webp" alt="Suspendy Guy is not happy about this" style="float:right;margin:0 0 1rem 1.5rem;width:180px">
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-happened">What happened<a href="https://kb.marvellouscode.works/blog/tms-tab-groups-chrome-149-bug#what-happened" class="hash-link" aria-label="Direct link to What happened" title="Direct link to What happened" translate="no">​</a></h2>
<p>Starting from <strong>Chrome 149</strong>, a change in the browser's tab group restore engine broke compatibility with suspended tabs managed by TMS. When Chrome restores a session after a restart, it now skips tabs whose URL does not start with <code>https://</code> inside tab groups. Since TMS suspended tabs use an internal <code>chrome-extension://…</code> URL, they are silently discarded instead of being restored.</p>
<p>Tabs <strong>outside</strong> tab groups are not affected and restore correctly as before.</p>
<p>The issue was <a href="https://github.com/gioxx/MarvellousSuspender/issues/369" target="_blank" rel="noopener noreferrer" class="">reported by users</a> shortly after Chrome 149 rolled out and confirmed by the TMS team. A member of the <strong>Chrome development team</strong> has acknowledged the problem and <a href="https://crbug.com/522338670" target="_blank" rel="noopener noreferrer" class="">filed an internal bug</a> to investigate whether the behavior change was intentional or an unintended side effect.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="temporary-workaround">Temporary workaround<a href="https://kb.marvellouscode.works/blog/tms-tab-groups-chrome-149-bug#temporary-workaround" class="hash-link" aria-label="Direct link to Temporary workaround" title="Direct link to Temporary workaround" translate="no">​</a></h2>
<p>If you lost tabs, there is a way to recover them without restoring a backup:</p>
<ol>
<li class="">Open the tab group that now shows blank New Tab pages.</li>
<li class="">For each empty tab, click the <strong>browser Back button</strong> (top-left arrow) once.</li>
<li class="">The original suspended tab page should reappear.</li>
</ol>
<p>This is tedious if you have many tabs, but it beats losing them permanently.</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>Preventing further losses in the meantime</div><div class="admonitionContent_BuS1"><p>Until a fix is available, consider <strong>unsuspending tabs before restarting</strong> Chrome, or temporarily moving important tabs <strong>out of tab groups</strong>.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-we-are-doing-about-it">What we are doing about it<a href="https://kb.marvellouscode.works/blog/tms-tab-groups-chrome-149-bug#what-we-are-doing-about-it" class="hash-link" aria-label="Direct link to What we are doing about it" title="Direct link to What we are doing about it" translate="no">​</a></h2>
<ul>
<li class=""><strong>TMS 8.1.4 is now available on the <a href="https://chromewebstore.google.com/detail/the-marvellous-suspender/noogafoofpebimajpfpamcfhoaifemoa" target="_blank" rel="noopener noreferrer" class="">Chrome Web Store</a>.</strong> It addresses the tab group restore issue directly — suspended tabs inside tab groups will no longer be discarded after a browser restart. Update TMS and the problem goes away.</li>
<li class="">The Chrome team also had an <a href="https://chromium-review.googlesource.com/c/chromium/src/+/7933990" target="_blank" rel="noopener noreferrer" class="">official fix under review</a> on the browser side; TMS shipped the fix first.</li>
</ul>
<p>We know how frustrating data loss is, and we are sorry you hit this. Thank you for your patience while we sort it out.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="companion-workaround-back-grouped-tabs">Companion workaround: back-grouped-tabs<a href="https://kb.marvellouscode.works/blog/tms-tab-groups-chrome-149-bug#companion-workaround-back-grouped-tabs" class="hash-link" aria-label="Direct link to Companion workaround: back-grouped-tabs" title="Direct link to Companion workaround: back-grouped-tabs" translate="no">​</a></h2>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>Workaround no longer needed</div><div class="admonitionContent_BuS1"><p><strong>TMS 8.1.4 is out and fixes the issue natively.</strong> If you have updated TMS, you can safely remove the back-grouped-tabs companion extension. The repository remains available for anyone who still wants to use it.</p></div></div>
<p>While the proper fix was in the works, a small companion extension was made available: <strong><a href="https://github.com/Marvellous-Codeworks/back-grouped-tabs" target="_blank" rel="noopener noreferrer" class="">back-grouped-tabs</a></strong>.</p>
<p>It does one thing: when Chrome restores a session and discards suspended tabs inside tab groups, this extension detects the affected tabs and navigates them back so the suspended page reappears — automatically, without you having to click the Back button on each one.</p>
<p>To install it, clone or download the repository and load it as an unpacked extension in Chrome (<code>chrome://extensions/</code> → enable Developer Mode → <strong>Load unpacked</strong>). The README covers everything you need to know.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="references--links">References / Links<a href="https://kb.marvellouscode.works/blog/tms-tab-groups-chrome-149-bug#references--links" class="hash-link" aria-label="Direct link to References / Links" title="Direct link to References / Links" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://chromium-review.googlesource.com/c/chromium/src/+/7933990" target="_blank" rel="noopener noreferrer" class="">https://chromium-review.googlesource.com/c/chromium/src/+/7933990</a></li>
<li class=""><a href="https://chromium-review.googlesource.com/c/chromium/src/+/7738373" target="_blank" rel="noopener noreferrer" class="">https://chromium-review.googlesource.com/c/chromium/src/+/7738373</a></li>
</ul>
<hr>
<p><em>Follow the original issue on GitHub: <a href="https://github.com/gioxx/MarvellousSuspender/issues/369" target="_blank" rel="noopener noreferrer" class="">#369 – Suspended tabs inside tab groups are lost after browser restart (Chrome 149)</a></em></p>]]></content:encoded>
            <category>Bug</category>
            <category>News</category>
            <category>The Marvellous Suspender</category>
            <category>Announcement</category>
        </item>
        <item>
            <title><![CDATA[Cutting the last thread to The Great Suspender]]></title>
            <link>https://kb.marvellouscode.works/blog/tms-detached-from-tgs-network</link>
            <guid>https://kb.marvellouscode.works/blog/tms-detached-from-tgs-network</guid>
            <pubDate>Tue, 21 Apr 2026 23:00:00 GMT</pubDate>
            <description><![CDATA[TMS has just been detached from The Great Suspender's fork network on GitHub. It's a small technical operation with a big symbolic meaning: the first official step towards Marvellous Codeworks walking its own path.]]></description>
            <content:encoded><![CDATA[<p><a href="https://github.com/gioxx/MarvellousSuspender" target="_blank" rel="noopener noreferrer" class="">The Marvellous Suspender</a> has been a fork since day one — <a href="https://gioxx.org/2021/01/18/the-marvellous-suspender-per-google-chrome/" target="_blank" rel="noopener noreferrer" class="">born in 2021</a> out of The Great Suspender, at a time when that project had been pulled from the Chrome Web Store and flagged as malware. TMS cleaned up what needed cleaning and gave orphaned users somewhere to go. Fair enough, that's exactly what a fork is for.</p>
<p>But five years later, TMS isn't a patched-up copy of someone else's abandoned code anymore. It's had a full Manifest V3 rewrite, a proper visual redesign, its own contributors, and — as of a few months ago — a home under the <a href="https://marvellouscode.works/" target="_blank" rel="noopener noreferrer" class="">Marvellous Codeworks</a> name. The GitHub fork relationship, though, hadn't changed: technically, <code>gioxx/MarvellousSuspender</code> was still listed as a fork of the original repository, tied to its network, its issues, its history.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="asking-github-to-cut-the-thread">Asking GitHub to cut the thread<a href="https://kb.marvellouscode.works/blog/tms-detached-from-tgs-network#asking-github-to-cut-the-thread" class="hash-link" aria-label="Direct link to Asking GitHub to cut the thread" title="Direct link to Asking GitHub to cut the thread" translate="no">​</a></h2>
<p>So I asked GitHub Support to detach it — a "Detach/Extract Fork" request, which pulls a repository (and its own child forks) out of the network it was born in and gives it a clean, independent history on GitHub's side. No more fork badge, no more shared network with the original project.</p>
<p>GitHub got back to me quickly:</p>
<p><img decoding="async" loading="lazy" alt="GitHub Support confirms the detach/extract fork request for gioxx/MarvellousSuspender" src="https://kb.marvellouscode.works/assets/images/github-support-detach-fork-d8ca2e49f9e6832d15ec6185a70c3018.webp" width="1348" height="368" class="img_ev3q"></p>
<blockquote>
<p>I have gone ahead to extract that fork for you. The repository <code>gioxx/MarvellousSuspender</code> and its child forks are now in a new network.</p>
</blockquote>
<p>Done. As of today, TMS no longer carries GitHub's official "forked from" label.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-it-matters">Why it matters<a href="https://kb.marvellouscode.works/blog/tms-detached-from-tgs-network#why-it-matters" class="hash-link" aria-label="Direct link to Why it matters" title="Direct link to Why it matters" translate="no">​</a></h2>
<p>This isn't a cosmetic change, and it isn't really about the label either. It's the first concrete, official move to stop treating TMS as an offshoot of something else and start treating it as what it actually is: a project with its own direction, maintained by Marvellous Codeworks.</p>
<p>It also isn't the last step. Right now <code>gioxx/MarvellousSuspender</code> still lives under my personal GitHub account. The plan is to move it — along with the rest of what makes up TMS — under the <a href="https://github.com/Marvellous-Codeworks" target="_blank" rel="noopener noreferrer" class="">Marvellous Codeworks organization</a> on GitHub, where other projects already live. We're aiming to get that done by the end of summer 2026.</p>
<p>Small steps, but each one makes it a little more true: TMS's future isn't tied to what it was forked from anymore. It's Marvellous Codeworks now.</p>]]></content:encoded>
            <category>The Marvellous Suspender</category>
            <category>Announcement</category>
        </item>
        <item>
            <title><![CDATA[The Marvellous Suspender 8.1.3 — Vivaldi fix]]></title>
            <link>https://kb.marvellouscode.works/blog/tms-release-8-1-3</link>
            <guid>https://kb.marvellouscode.works/blog/tms-release-8-1-3</guid>
            <pubDate>Mon, 22 Dec 2025 08:04:26 GMT</pubDate>
            <description><![CDATA[A targeted patch for Vivaldi users who were experiencing crashes related to a browser-specific API inconsistency.]]></description>
            <content:encoded><![CDATA[<p>A targeted patch for Vivaldi users who were experiencing crashes related to a browser-specific API inconsistency.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-fixed">What's fixed<a href="https://kb.marvellouscode.works/blog/tms-release-8-1-3#whats-fixed" class="hash-link" aria-label="Direct link to What's fixed" title="Direct link to What's fixed" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="vivaldi-getcontexts-workaround">Vivaldi <code>getContexts</code> workaround<a href="https://kb.marvellouscode.works/blog/tms-release-8-1-3#vivaldi-getcontexts-workaround" class="hash-link" aria-label="Direct link to vivaldi-getcontexts-workaround" title="Direct link to vivaldi-getcontexts-workaround" translate="no">​</a></h3>
<p>Vivaldi implements a non-standard version of the <code>chrome.runtime.getContexts</code> API that was causing TMS to throw an unhandled error. This release adds a workaround that detects and handles the inconsistency, restoring normal operation for Vivaldi users.</p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>This is the current stable release available on the Chrome Web Store. If you are on Vivaldi and experienced unexpected behavior after the 8.1.2 update, updating to 8.1.3 should resolve it.</p></div></div>
<hr>
<p>Special thanks to <strong>@wobondar</strong> for supporting the project! ❤️</p>
<p><em>Full changelog on GitHub: <a href="https://github.com/gioxx/MarvellousSuspender/releases/tag/v8.1.3" target="_blank" rel="noopener noreferrer" class="">v8.1.3 release</a></em></p>]]></content:encoded>
            <category>Release</category>
            <category>The Marvellous Suspender</category>
        </item>
        <item>
            <title><![CDATA[The Marvellous Suspender 8.1.2 — Session export, watermark, and UX fixes]]></title>
            <link>https://kb.marvellouscode.works/blog/tms-release-8-1-2</link>
            <guid>https://kb.marvellouscode.works/blog/tms-release-8-1-2</guid>
            <pubDate>Wed, 19 Nov 2025 14:21:59 GMT</pubDate>
            <description><![CDATA[A maintenance release with a handful of quality-of-life improvements to the session management page, the suspended tab watermark, and the update banner.]]></description>
            <content:encoded><![CDATA[<p>A maintenance release with a handful of quality-of-life improvements to the session management page, the suspended tab watermark, and the update banner.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-new-and-fixed">What's new and fixed<a href="https://kb.marvellouscode.works/blog/tms-release-8-1-2#whats-new-and-fixed" class="hash-link" aria-label="Direct link to What's new and fixed" title="Direct link to What's new and fixed" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="session-export-filename-includes-the-date">Session export filename includes the date<a href="https://kb.marvellouscode.works/blog/tms-release-8-1-2#session-export-filename-includes-the-date" class="hash-link" aria-label="Direct link to Session export filename includes the date" title="Direct link to Session export filename includes the date" translate="no">​</a></h3>
<p>When you export your session from the Session Management page, the downloaded file now includes the current date in its name. This makes it much easier to keep track of multiple backups without manually renaming files.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="suspended-tab-version-watermark">Suspended tab version watermark<a href="https://kb.marvellouscode.works/blog/tms-release-8-1-2#suspended-tab-version-watermark" class="hash-link" aria-label="Direct link to Suspended tab version watermark" title="Direct link to Suspended tab version watermark" translate="no">​</a></h3>
<p>The suspended tab page now displays the TMS version number as a subtle watermark. This small addition makes it easier to identify which version was running when users share screenshots in bug reports.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="update-banner-is-now-clickable">Update banner is now clickable<a href="https://kb.marvellouscode.works/blog/tms-release-8-1-2#update-banner-is-now-clickable" class="hash-link" aria-label="Direct link to Update banner is now clickable" title="Direct link to Update banner is now clickable" translate="no">​</a></h3>
<p>The "a new version is available" notification banner is now interactive — clicking it takes you directly to the release page instead of requiring you to navigate there manually.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="session-page-scroll-fix">Session page scroll fix<a href="https://kb.marvellouscode.works/blog/tms-release-8-1-2#session-page-scroll-fix" class="hash-link" aria-label="Direct link to Session page scroll fix" title="Direct link to Session page scroll fix" translate="no">​</a></h3>
<p>Links within the Session Management page no longer cause the page to jump back to the top when clicked.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="whitelist-test-button-refactored">Whitelist test button refactored<a href="https://kb.marvellouscode.works/blog/tms-release-8-1-2#whitelist-test-button-refactored" class="hash-link" aria-label="Direct link to Whitelist test button refactored" title="Direct link to Whitelist test button refactored" translate="no">​</a></h3>
<p>The "Test whitelist" function has been cleaned up internally for more reliable pattern matching.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="other-changes">Other changes<a href="https://kb.marvellouscode.works/blog/tms-release-8-1-2#other-changes" class="hash-link" aria-label="Direct link to Other changes" title="Direct link to Other changes" translate="no">​</a></h2>
<ul>
<li class="">Localization updates via Crowdin</li>
<li class="">Dependency bump: <code>js-yaml</code> patched for a security advisory</li>
</ul>
<hr>
<p><em>Full changelog on GitHub: <a href="https://github.com/gioxx/MarvellousSuspender/releases/tag/v8.1.2" target="_blank" rel="noopener noreferrer" class="">v8.1.2 release</a></em></p>]]></content:encoded>
            <category>Release</category>
            <category>The Marvellous Suspender</category>
        </item>
        <item>
            <title><![CDATA[The Marvellous Suspender 8.1.1 — Update detection fix]]></title>
            <link>https://kb.marvellouscode.works/blog/tms-release-8-1-1</link>
            <guid>https://kb.marvellouscode.works/blog/tms-release-8-1-1</guid>
            <pubDate>Mon, 20 Oct 2025 12:53:38 GMT</pubDate>
            <description><![CDATA[A focused patch release that fixes the annoying "new version available" banner showing up repeatedly even after TMS was already up to date.]]></description>
            <content:encoded><![CDATA[<p>A focused patch release that fixes the annoying "new version available" banner showing up repeatedly even after TMS was already up to date.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-fixed">What's fixed<a href="https://kb.marvellouscode.works/blog/tms-release-8-1-1#whats-fixed" class="hash-link" aria-label="Direct link to What's fixed" title="Direct link to What's fixed" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="update-banner-false-positives">Update banner false positives<a href="https://kb.marvellouscode.works/blog/tms-release-8-1-1#update-banner-false-positives" class="hash-link" aria-label="Direct link to Update banner false positives" title="Direct link to Update banner false positives" translate="no">​</a></h3>
<p>An issue introduced in 8.1.0 caused TMS to show the "a newer version is available" notification even when the extension had already been updated to the latest version. This has been resolved: the banner now correctly compares the installed version against the latest release and only appears when an actual update is available.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="other-changes">Other changes<a href="https://kb.marvellouscode.works/blog/tms-release-8-1-1#other-changes" class="hash-link" aria-label="Direct link to Other changes" title="Direct link to Other changes" translate="no">​</a></h2>
<ul>
<li class="">Additional internal fixes found during the update-detection review</li>
<li class="">Updated package dependencies and ESLint rules</li>
</ul>
<hr>
<p><em>Full changelog on GitHub: <a href="https://github.com/gioxx/MarvellousSuspender/releases/tag/v8.1.1" target="_blank" rel="noopener noreferrer" class="">v8.1.1 release</a></em></p>]]></content:encoded>
            <category>Release</category>
            <category>The Marvellous Suspender</category>
        </item>
        <item>
            <title><![CDATA[The Marvellous Suspender 8.1.0 — Tab Groups, automatic theme, and more]]></title>
            <link>https://kb.marvellouscode.works/blog/tms-release-8-1-0</link>
            <guid>https://kb.marvellouscode.works/blog/tms-release-8-1-0</guid>
            <pubDate>Mon, 13 Oct 2025 06:15:23 GMT</pubDate>
            <description><![CDATA[TMS 8.1.0 is a significant feature release. Tab Groups are now a first-class citizen, favicons are more reliable, and the suspended tab page can now follow your OS theme automatically.]]></description>
            <content:encoded><![CDATA[<p>TMS 8.1.0 is a significant feature release. Tab Groups are now a first-class citizen, favicons are more reliable, and the suspended tab page can now follow your OS theme automatically.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-new">What's new<a href="https://kb.marvellouscode.works/blog/tms-release-8-1-0#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="tab-group-support">Tab Group support<a href="https://kb.marvellouscode.works/blog/tms-release-8-1-0#tab-group-support" class="hash-link" aria-label="Direct link to Tab Group support" title="Direct link to Tab Group support" translate="no">​</a></h3>
<p>TMS will now <strong>save and restore your Tab Groups</strong> across version upgrades and session save/restore operations. Groups are preserved with their names and colors. This was the most requested feature since the MV3 rewrite.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="automatic-theme">Automatic theme<a href="https://kb.marvellouscode.works/blog/tms-release-8-1-0#automatic-theme" class="hash-link" aria-label="Direct link to Automatic theme" title="Direct link to Automatic theme" translate="no">​</a></h3>
<p>A new <strong>System</strong> option has been added to the theme selector in Settings → General. When selected, the suspended tab page follows your operating system's light/dark preference automatically. The existing Light and Dark options remain.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="more-suspend-intervals">More suspend intervals<a href="https://kb.marvellouscode.works/blog/tms-release-8-1-0#more-suspend-intervals" class="hash-link" aria-label="Direct link to More suspend intervals" title="Direct link to More suspend intervals" translate="no">​</a></h3>
<p>The "Suspend automatically after" dropdown now includes additional minute-level options, giving more fine-grained control over how quickly inactive tabs are suspended.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="favicon-reliability">Favicon reliability<a href="https://kb.marvellouscode.works/blog/tms-release-8-1-0#favicon-reliability" class="hash-link" aria-label="Direct link to Favicon reliability" title="Direct link to Favicon reliability" translate="no">​</a></h3>
<p>Several improvements to favicon fetching and caching make the icon shown on suspended tab pages more consistent, especially in Chromium-based browsers like Vivaldi.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="session-manager-shortcut">Session Manager shortcut<a href="https://kb.marvellouscode.works/blog/tms-release-8-1-0#session-manager-shortcut" class="hash-link" aria-label="Direct link to Session Manager shortcut" title="Direct link to Session Manager shortcut" translate="no">​</a></h3>
<p>A dedicated quick-access button to the Session Management page has been added to the extension popup, so you can reach your saved sessions without opening the full settings.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="other-fixes-and-changes">Other fixes and changes<a href="https://kb.marvellouscode.works/blog/tms-release-8-1-0#other-fixes-and-changes" class="hash-link" aria-label="Direct link to Other fixes and changes" title="Direct link to Other fixes and changes" translate="no">​</a></h2>
<ul>
<li class="">Removed <code>cookies</code> permission (no longer needed)</li>
<li class="">Fixed <code>TypeError: undefined</code> crash in tab queue handling</li>
<li class="">Removed leftover <code>console.log</code> from the content script</li>
<li class="">Added extension icon images to <code>web_accessible_resources</code> for Vivaldi compatibility</li>
<li class="">Various Crowdin localization updates</li>
</ul>
<hr>
<p><em>Full changelog on GitHub: <a href="https://github.com/gioxx/MarvellousSuspender/releases/tag/v8.1.0" target="_blank" rel="noopener noreferrer" class="">v8.1.0 release</a></em></p>]]></content:encoded>
            <category>Release</category>
            <category>The Marvellous Suspender</category>
        </item>
        <item>
            <title><![CDATA[The Marvellous Suspender 8.0.0.0 — Manifest V3]]></title>
            <link>https://kb.marvellouscode.works/blog/tms-release-8-0-0-0</link>
            <guid>https://kb.marvellouscode.works/blog/tms-release-8-0-0-0</guid>
            <pubDate>Mon, 28 Jul 2025 06:00:48 GMT</pubDate>
            <description><![CDATA[The biggest TMS update in years: a complete rewrite to Manifest V3. After a long wait and a lot of work by the community, the extension is now fully compatible with the modern Chrome extension platform.]]></description>
            <content:encoded><![CDATA[<p>The biggest TMS update in years: a complete rewrite to Manifest V3. After a long wait and a lot of work by the community, the extension is now fully compatible with the modern Chrome extension platform.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-changed">What's changed<a href="https://kb.marvellouscode.works/blog/tms-release-8-0-0-0#whats-changed" class="hash-link" aria-label="Direct link to What's changed" title="Direct link to What's changed" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="manifest-v3-migration">Manifest V3 migration<a href="https://kb.marvellouscode.works/blog/tms-release-8-0-0-0#manifest-v3-migration" class="hash-link" aria-label="Direct link to Manifest V3 migration" title="Direct link to Manifest V3 migration" translate="no">​</a></h3>
<p>The entire background processing layer has been rewritten as a <strong>service worker</strong> (<code>background.js</code>), replacing the persistent background page required by Manifest V2. This brings TMS in line with Google's current extension requirements and ensures continued availability on the Chrome Web Store.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-and-changed-permissions">New and changed permissions<a href="https://kb.marvellouscode.works/blog/tms-release-8-0-0-0#new-and-changed-permissions" class="hash-link" aria-label="Direct link to New and changed permissions" title="Direct link to New and changed permissions" translate="no">​</a></h3>
<p>The permission set has been updated to match what Manifest V3 requires and allows:</p>
<table><thead><tr><th>Permission</th><th>Why</th></tr></thead><tbody><tr><td><code>alarms</code></td><td>Replaces <code>setTimeout</code> for scheduling suspension — service workers cannot use timers across restarts</td></tr><tr><td><code>favicon</code></td><td>Replaces the deprecated <code>chrome://favicon/*</code> pattern</td></tr><tr><td><code>scripting</code></td><td>Replaces content scripts for detecting unsaved forms and scroll position</td></tr><tr><td><code>tabGroups</code></td><td>Enables saving and restoring tab group assignments</td></tr><tr><td><code>host_permissions</code> (<code>http://*/*</code>, <code>https://*/*</code>)</td><td>Required for the <code>scripting</code> API</td></tr></tbody></table>
<p>The <code>cookies</code> permission has been <strong>removed</strong> (scroll position migration from older versions is no longer needed).</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="other-improvements">Other improvements<a href="https://kb.marvellouscode.works/blog/tms-release-8-0-0-0#other-improvements" class="hash-link" aria-label="Direct link to Other improvements" title="Direct link to Other improvements" translate="no">​</a></h3>
<ul>
<li class="">Sanity checks added across tab logic to handle edge cases more gracefully</li>
<li class="">Tab group data is now included in session recovery storage</li>
<li class="">SVG page fix: <code>document.body</code> is no longer accessed on SVG tabs, preventing a TypeError</li>
<li class="">Various localization updates via Crowdin</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="minimum-chrome-version">Minimum Chrome version<a href="https://kb.marvellouscode.works/blog/tms-release-8-0-0-0#minimum-chrome-version" class="hash-link" aria-label="Direct link to Minimum Chrome version" title="Direct link to Minimum Chrome version" translate="no">​</a></h3>
<p>TMS 8.x requires <strong>Chrome 110 or later</strong>.</p>
<hr>
<p><em>Full changelog on GitHub: <a href="https://github.com/gioxx/MarvellousSuspender/releases/tag/8.0.0.0" target="_blank" rel="noopener noreferrer" class="">8.0.0.0 release</a></em></p>]]></content:encoded>
            <category>Release</category>
            <category>The Marvellous Suspender</category>
        </item>
        <item>
            <title><![CDATA[The Marvellous Suspender: V3 Migration, volunteer testers wanted! (Updated)]]></title>
            <link>https://kb.marvellouscode.works/blog/2025-06-24-the-marvellous-suspender-v3-migration-volunteer-testers-wanted</link>
            <guid>https://kb.marvellouscode.works/blog/2025-06-24-the-marvellous-suspender-v3-migration-volunteer-testers-wanted</guid>
            <pubDate>Mon, 23 Jun 2025 23:00:00 GMT</pubDate>
            <description><![CDATA[The post has been updated! (2025-07-05)]]></description>
            <content:encoded><![CDATA[<figure class="full-bleed"><img src="https://kb.marvellouscode.works/assets/images/2025-06-24-the-marvellous-suspender-v3-migration-volunteer-testers-71bcec39bfbb0e4af61444a46363d5ba.jpg" alt="Welcome back, TMS users!"></figure>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p>The post has been updated! (2025-07-05)</p><ul>
<li class="">I have included a note unambiguously stating that you will need to use only the 'src' folder to load the unpackaged extension into Chrome.</li>
<li class="">I have changed the links to the repository and the ZIP file to download. <strong>The PR has now been merged with the original repository</strong>!</li>
</ul></div></div>
<p>Had I lost hope? I'll admit it — yeah, pretty much completely.
So you can imagine how thrilled I was when I finally saw a light at the end of that tunnel.</p>
<p><a href="https://github.com/rkodey/" target="_blank" rel="noopener noreferrer" class="">Rob</a> is the guy behind <a href="https://github.com/rkodey/the-great-er-discarder-er" target="_blank" rel="noopener noreferrer" class="">The Great-<em>er</em> Tab Discarder</a>, itself a fork of an older, seemingly abandoned project — another extension born out of the need to fix a gap that often makes Chrome unusable in the long run (especially when you're juggling hundreds of open tabs).
When Rob took an interest in TMS and decided to take on the challenge of making it compatible with the more limited Manifest V3, I saw an opportunity. I reached out to him, and together with a third person from Google, we kicked off a group chat to start connecting the dots and try to make the leap.</p>
<p>The result? It's publicly available here: <a href="https://github.com/gioxx/MarvellousSuspender/pull/253" target="_blank" rel="noopener noreferrer" class="">github.com/gioxx/MarvellousSuspender/pull/253</a> (now merged with the original repository) — a pull request that includes a pretty much rewritten version of TMS for Manifest V3. A 1:1 migration of what's under the hood in the current TMS just isn't possible.</p>
<p>What we need now <strong>is a pool of users willing to test this new version of TMS</strong> — help us figure out what's still missing, what kinds of issues might come up across different environments, systems, and setups, and what needs to be fixed right away before we publish it on the Chrome Web Store.
Only then can we reach all users again and start the (long) journey toward improvements and new features, aiming to finally hit full feature parity — something we're still missing today.</p>
<p>A few quick but essential tips before taking the leap.
If you're thinking of joining the testing community for the new version of TMS, I strongly recommend you:</p>
<ul>
<li class=""><strong>Save the current state of your open tabs in Chrome</strong>.<br>
<!-- -->TMS (the version currently available) lets you create a full backup, which you can export and keep safe.</li>
<li class="">Wake up all your tabs (or pick and choose which ones you want to keep active in the browser — you can always reopen the others later). Try to streamline things as much as you can, so the transition to the new version of TMS is smoother.</li>
<li class="">Install the new version of TMS.<br>
<!-- -->Clone the <a href="https://github.com/gioxx/MarvellousSuspender" target="_blank" rel="noopener noreferrer" class="">repo</a> to your PC (or <a href="https://github.com/gioxx/MarvellousSuspender/archive/refs/heads/master.zip" target="_blank" rel="noopener noreferrer" class="">download the full ZIP</a> and extract it), enable Developer Mode in Chrome (<code>chrome://extensions/</code>), then hit the <strong>Load unpacked</strong> button and select the folder where you saved the files from the repo. <strong>You have to load only the src subfolder</strong>. At that point, you'll be running the new version of TMS — compatible with Google's Manifest V3 — and it'll be back to managing your tabs like before.</li>
</ul>
<p>What you'll see looks familiar — same interface you're used to, nothing seems to have changed. But under the hood, it's a whole different engine.</p>
<p>Just a quick reminder: using the <strong>Load unpacked</strong> option won't overwrite your current TMS installation.
Chrome treats the new Manifest V3-compatible version as a completely separate extension, so there's no need to uninstall your current TMS — both versions can run side by side.</p>
<p>That's why we suggest:</p>
<ul>
<li class="">Keep your current TMS installed, but set the automatic suspension to <strong>Never</strong>.</li>
<li class="">Set up the new version to handle tab suspension.</li>
</ul>
<p>This way, you'll be able — if you want — to wake up your older tabs and suspend them again using the new version.</p>
<div class="theme-admonition theme-admonition-warning admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>warning</div><div class="admonitionContent_BuS1"><p>The current limit for how many tabs the new version of TMS can actively manage at once is 500 (<strong><a href="https://github.com/gioxx/MarvellousSuspender/discussions/196#discussioncomment-13539002" target="_blank" rel="noopener noreferrer" class="">Work around Chrome's limit of 500 Alarms</a></strong>). This shouldn't affect how the extension works — it just means that if you have more than 500 active, unsuspended tabs open in your current session, it might take a bit longer for all of them to be processed and suspended properly.</p></div></div>
<p>Thanks a ton to everyone willing to test, break things, and share thoughts — this kind of support is what keeps open source alive and kicking.</p>
<p>:::info 🇮🇹 In italian, please!<br>
<!-- -->Ti ricordo che l'articolo originale è stato pubblicato - in italiano - sul mio blog, all'indirizzo <a href="https://gioxx.org/2025/06/24/the-marvellous-suspender-v3-beta/" target="_blank" rel="noopener noreferrer" class="">gioxx.org/2025/06/24/the-marvellous-suspender-v3-beta</a>
:::</p>]]></content:encoded>
            <category>Beta</category>
            <category>News</category>
            <category>The Marvellous Suspender</category>
        </item>
        <item>
            <title><![CDATA[The Great-er Tab Discarder 1.4.0]]></title>
            <link>https://kb.marvellouscode.works/blog/tgd-release-1-4-0</link>
            <guid>https://kb.marvellouscode.works/blog/tgd-release-1-4-0</guid>
            <pubDate>Tue, 03 Jun 2025 04:12:02 GMT</pubDate>
            <description><![CDATA[A polished release focused on the suspended-tab experience: favicon dimming, flexible restore options, popup improvements, and automatic options saving — plus a fix for suspended tabs that Chrome was blocking on direct load.]]></description>
            <content:encoded><![CDATA[<p>A polished release focused on the suspended-tab experience: favicon dimming, flexible restore options, popup improvements, and automatic options saving — plus a fix for suspended tabs that Chrome was blocking on direct load.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-changed">What's changed<a href="https://kb.marvellouscode.works/blog/tgd-release-1-4-0#whats-changed" class="hash-link" aria-label="Direct link to What's changed" title="Direct link to What's changed" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="suspended-tab-options">Suspended tab options<a href="https://kb.marvellouscode.works/blog/tgd-release-1-4-0#suspended-tab-options" class="hash-link" aria-label="Direct link to Suspended tab options" title="Direct link to Suspended tab options" translate="no">​</a></h3>
<p>Three new options for how suspended tabs look and behave:</p>
<ul>
<li class=""><strong>Favicon dimming</strong> — the favicon of a suspended tab is visually dimmed to distinguish it from active tabs at a glance</li>
<li class=""><strong>Restore by clicking anywhere on the page</strong> — no need to click a specific button; clicking anywhere on the suspended page resumes it</li>
<li class=""><strong>Restore by Reload</strong> — reloading the tab (keyboard shortcut or browser button) unsuspends it</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="bug-fixes">Bug fixes<a href="https://kb.marvellouscode.works/blog/tgd-release-1-4-0#bug-fixes" class="hash-link" aria-label="Direct link to Bug fixes" title="Direct link to Bug fixes" translate="no">​</a></h3>
<ul>
<li class=""><strong>Fixed:</strong> Suspended tabs being blocked by Chrome when opened directly — for example, by a session restore tool</li>
<li class=""><strong>Fixed:</strong> Suspended tab favicons not loading on initial browser launch. Note: favicons must be in the browser cache to display correctly until a local favicon cache is implemented in a future release.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="popup-improvements">Popup improvements<a href="https://kb.marvellouscode.works/blog/tgd-release-1-4-0#popup-improvements" class="hash-link" aria-label="Direct link to Popup improvements" title="Direct link to Popup improvements" translate="no">​</a></h3>
<p>The main extension popup now shows more at a glance:</p>
<ul>
<li class="">Count of <strong>Discarded</strong> and <strong>Suspended</strong> tabs currently open</li>
<li class="">Assigned <strong>keyboard shortcuts</strong> for quick reference</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="options-saving">Options saving<a href="https://kb.marvellouscode.works/blog/tgd-release-1-4-0#options-saving" class="hash-link" aria-label="Direct link to Options saving" title="Direct link to Options saving" translate="no">​</a></h3>
<p>Options are now <strong>saved automatically</strong> as you change them. The Save and Cancel buttons have been removed.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="internals">Internals<a href="https://kb.marvellouscode.works/blog/tgd-release-1-4-0#internals" class="hash-link" aria-label="Direct link to Internals" title="Direct link to Internals" translate="no">​</a></h3>
<p>Background code now uses ES modules for easier future integration and maintenance.</p>
<hr>
<p><em>Full changelog on GitHub: <a href="https://github.com/rkodey/the-great-er-discarder-er/releases/tag/v1.4.0" target="_blank" rel="noopener noreferrer" class="">v1.4.0 release</a></em></p>]]></content:encoded>
            <category>Release</category>
            <category>The Great-er Tab Discarder</category>
        </item>
        <item>
            <title><![CDATA[The Great-er Tab Discarder 1.3.0 — Suspending tabs]]></title>
            <link>https://kb.marvellouscode.works/blog/tgd-release-1-3-0</link>
            <guid>https://kb.marvellouscode.works/blog/tgd-release-1-3-0</guid>
            <pubDate>Sun, 27 Apr 2025 19:25:17 GMT</pubDate>
            <description><![CDATA[The biggest feature addition in TGD's history: Suspending tabs is now a first-class option alongside Discarding. If you've been using TMS alongside TGD, you may find you no longer need both.]]></description>
            <content:encoded><![CDATA[<p>The biggest feature addition in TGD's history: <strong>Suspending tabs</strong> is now a first-class option alongside Discarding. If you've been using TMS alongside TGD, you may find you no longer need both.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-changed">What's changed<a href="https://kb.marvellouscode.works/blog/tgd-release-1-3-0#whats-changed" class="hash-link" aria-label="Direct link to What's changed" title="Direct link to What's changed" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="tab-suspension">Tab Suspension<a href="https://kb.marvellouscode.works/blog/tgd-release-1-3-0#tab-suspension" class="hash-link" aria-label="Direct link to Tab Suspension" title="Direct link to Tab Suspension" translate="no">​</a></h3>
<p>TGD can now <strong>Suspend</strong> tabs in addition to Discarding them. Suspending keeps the tab visible with its title and favicon while freeing memory — the difference from Discarding is that the tab shows a dedicated suspended page rather than being silently unloaded by the browser.</p>
<ul>
<li class="">Suspend individual tabs from the extension popup or via keyboard shortcuts</li>
<li class="">Switch between automatic Suspending and Discarding in Settings — you choose which behaviour applies to idle tabs</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="customizable-suspended-tab-titles">Customizable suspended tab titles<a href="https://kb.marvellouscode.works/blog/tgd-release-1-3-0#customizable-suspended-tab-titles" class="hash-link" aria-label="Direct link to Customizable suspended tab titles" title="Direct link to Customizable suspended tab titles" translate="no">​</a></h3>
<p>Suspended tabs can now display a custom <strong>title prefix</strong> to distinguish them visually at a glance. Example prefixes: <code>💤</code> <code>🔴</code> <code>🟡</code> — plus a full range of color options.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="improved-tab-migration">Improved tab migration<a href="https://kb.marvellouscode.works/blog/tgd-release-1-3-0#improved-tab-migration" class="hash-link" aria-label="Direct link to Improved tab migration" title="Direct link to Improved tab migration" translate="no">​</a></h3>
<p>The migration UI has been upgraded: you can now view and individually select which eligible tabs to Migrate or Convert, rather than migrating everything at once.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="tiny-suspender-support">Tiny Suspender support<a href="https://kb.marvellouscode.works/blog/tgd-release-1-3-0#tiny-suspender-support" class="hash-link" aria-label="Direct link to Tiny Suspender support" title="Direct link to Tiny Suspender support" translate="no">​</a></h3>
<p><code>suspend.html</code> tabs from <strong>Tiny Suspender</strong> can now be migrated to TGD.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fixes">Fixes<a href="https://kb.marvellouscode.works/blog/tgd-release-1-3-0#fixes" class="hash-link" aria-label="Direct link to Fixes" title="Direct link to Fixes" translate="no">​</a></h3>
<ul>
<li class="">Tab migration logic has been improved to handle different suspended-tab URL formats more robustly, preventing migration loops.</li>
</ul>
<hr>
<p><em>Full changelog on GitHub: <a href="https://github.com/rkodey/the-great-er-discarder-er/releases/tag/v1.3.0" target="_blank" rel="noopener noreferrer" class="">v1.3.0 release</a></em></p>]]></content:encoded>
            <category>Release</category>
            <category>The Great-er Tab Discarder</category>
        </item>
        <item>
            <title><![CDATA[The Great-er Tab Discarder 1.2.2]]></title>
            <link>https://kb.marvellouscode.works/blog/tgd-release-1-2-2</link>
            <guid>https://kb.marvellouscode.works/blog/tgd-release-1-2-2</guid>
            <pubDate>Tue, 18 Mar 2025 03:44:07 GMT</pubDate>
            <description><![CDATA[A targeted fix for a regression in "Discard at startup" that caused tabs to be discarded during browser idle worker restarts — not just on actual browser startup.]]></description>
            <content:encoded><![CDATA[<p>A targeted fix for a regression in "Discard at startup" that caused tabs to be discarded during browser idle worker restarts — not just on actual browser startup.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-changed">What's changed<a href="https://kb.marvellouscode.works/blog/tgd-release-1-2-2#whats-changed" class="hash-link" aria-label="Direct link to What's changed" title="Direct link to What's changed" translate="no">​</a></h2>
<ul>
<li class=""><strong>Fixed:</strong> "Discard at startup" (again) — the previous fix in 1.2.1 did not cover the case where Chrome restarts idle service workers in the background. Tabs were being discarded unexpectedly as a result.</li>
</ul>
<hr>
<p><em>Full changelog on GitHub: <a href="https://github.com/rkodey/the-great-er-discarder-er/releases/tag/v1.2.2" target="_blank" rel="noopener noreferrer" class="">v1.2.2 release</a></em></p>]]></content:encoded>
            <category>Release</category>
            <category>The Great-er Tab Discarder</category>
        </item>
        <item>
            <title><![CDATA[The Great-er Tab Discarder 1.2.1]]></title>
            <link>https://kb.marvellouscode.works/blog/tgd-release-1-2-1</link>
            <guid>https://kb.marvellouscode.works/blog/tgd-release-1-2-1</guid>
            <pubDate>Sun, 16 Mar 2025 23:38:28 GMT</pubDate>
            <description><![CDATA[A small patch addressing a timing issue with "Discard at startup" and a layout cleanup on the tab migration page.]]></description>
            <content:encoded><![CDATA[<p>A small patch addressing a timing issue with "Discard at startup" and a layout cleanup on the tab migration page.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-changed">What's changed<a href="https://kb.marvellouscode.works/blog/tgd-release-1-2-1#whats-changed" class="hash-link" aria-label="Direct link to What's changed" title="Direct link to What's changed" translate="no">​</a></h2>
<ul>
<li class=""><strong>Fixed:</strong> "Discard at startup" would occasionally be skipped during browser startup due to a race condition</li>
<li class="">Rearranged the tab migration page for a simpler, cleaner layout</li>
</ul>
<hr>
<p><em>Full changelog on GitHub: <a href="https://github.com/rkodey/the-great-er-discarder-er/releases/tag/v1.2.1" target="_blank" rel="noopener noreferrer" class="">v1.2.1 release</a></em></p>]]></content:encoded>
            <category>Release</category>
            <category>The Great-er Tab Discarder</category>
        </item>
        <item>
            <title><![CDATA[The Great-er Tab Discarder 1.2.0]]></title>
            <link>https://kb.marvellouscode.works/blog/tgd-release-1-2-0</link>
            <guid>https://kb.marvellouscode.works/blog/tgd-release-1-2-0</guid>
            <pubDate>Mon, 10 Mar 2025 13:51:39 GMT</pubDate>
            <description><![CDATA[A round of fixes and a new migration source: Tab Suspender's park.html tabs can now be imported, and several popup/context-menu actions that had quietly broken are working again.]]></description>
            <content:encoded><![CDATA[<p>A round of fixes and a new migration source: Tab Suspender's <code>park.html</code> tabs can now be imported, and several popup/context-menu actions that had quietly broken are working again.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-changed">What's changed<a href="https://kb.marvellouscode.works/blog/tgd-release-1-2-0#whats-changed" class="hash-link" aria-label="Direct link to What's changed" title="Direct link to What's changed" translate="no">​</a></h2>
<ul>
<li class=""><strong>New:</strong> Migrate <code>park.html</code> tabs from <strong>Tab Suspender</strong> — one more extension you can leave behind cleanly</li>
<li class=""><strong>Fixed:</strong> "Pause discarding this tab" (previously "Don't discard this tab for now") — the action was not working; also renamed to better reflect what it actually does</li>
<li class=""><strong>Fixed:</strong> Several popup and context-menu actions that had stopped working after the Manifest V3 rewrite — options storage code was largely rewritten to address the root cause</li>
<li class=""><strong>New:</strong> Tab Groups are now optionally displayed on the Profiler page</li>
</ul>
<hr>
<p><em>Full changelog on GitHub: <a href="https://github.com/rkodey/the-great-er-discarder-er/releases/tag/v1.2.0" target="_blank" rel="noopener noreferrer" class="">v1.2.0 release</a></em></p>]]></content:encoded>
            <category>Release</category>
            <category>The Great-er Tab Discarder</category>
        </item>
    </channel>
</rss>