{"id":687,"date":"2026-09-15T13:00:47","date_gmt":"2026-09-15T13:00:47","guid":{"rendered":"https:\/\/abrarqasim.com\/blog\/tailwind-scrollbar-utilities-v4-3-and-the-shopify-acquisition\/"},"modified":"2026-09-15T13:00:47","modified_gmt":"2026-09-15T13:00:47","slug":"tailwind-scrollbar-utilities-v4-3-and-the-shopify-acquisition","status":"publish","type":"post","link":"https:\/\/abrarqasim.com\/blog\/tailwind-scrollbar-utilities-v4-3-and-the-shopify-acquisition\/","title":{"rendered":"Tailwind Scrollbar Utilities in v4.3, and the Shopify News"},"content":{"rendered":"<p>Short version for the impatient: Tailwind CSS is not going anywhere, the v4.3 scrollbar utilities let you delete a file you&rsquo;ve been copy-pasting between projects for years, and if you were about to buy Tailwind Plus for a client build, that door closed on September 9th. If you want the details, read on.<\/p>\n<p>I found out about the Shopify news the same way I find out about most things, which is a client forwarding me a headline with the message &ldquo;should we be worried?&rdquo; This particular client has three storefront-adjacent marketing sites on Tailwind, and I built all of them. So I had a vested interest in the answer being no. I spent a chunk of Wednesday evening reading the announcement, then the v4.3 changelog I had somehow skipped in May, and then I did the thing I always end up doing, which is opening one of those client repos and looking for stuff I could delete.<\/p>\n<p>I deleted 41 lines. This post is about those 41 lines, and about what the acquisition does and doesn&rsquo;t change for people like me who ship Tailwind to paying clients.<\/p>\n<h2 id=\"what-adam-wathan-actually-said\">What Adam Wathan actually said<\/h2>\n<p>The <a href=\"https:\/\/tailwindcss.com\/blog\/tailwind-is-joining-shopify\" rel=\"nofollow noopener\" target=\"_blank\">announcement post<\/a> is short and worth reading in full rather than through my summary. The parts that matter for anyone with Tailwind in production:<\/p>\n<p>The framework stays MIT-licensed. Wathan&rsquo;s wording is that nothing changes with Tailwind CSS or any of the other open source projects, and that the team continues to lead them with Shopify&rsquo;s support. Headless UI and Heroicons fall under that same umbrella.<\/p>\n<p>The commercial side is being wound down. Existing Tailwind Plus and ui.sh customers keep access. New sign-ups are closed. That last line is the one that actually affects freelancers, and I&rsquo;ll come back to it.<\/p>\n<p>The stated reason is that Wathan wanted the framework developed in service of a real product rather than a template business. You can be cynical about acquisition posts (I usually am), but this one lines up with something he&rsquo;s been saying in podcasts for years, so I&rsquo;m inclined to take it at face value.<\/p>\n<p>Shopify&rsquo;s own stake is not small either. The post says Tailwind is used to style ChatGPT, X, Cloudflare, Reddit, and Shopify itself, and that the package is installed over 110 million times a week. A company that depends on a library that heavily has an obvious incentive to keep it maintained. That&rsquo;s a different situation from an acquirer buying a project it doesn&rsquo;t use.<\/p>\n<h2 id=\"what-it-changes-for-client-work-less-than-the-headline-suggests\">What it changes for client work (less than the headline suggests)<\/h2>\n<p>Here is my honest read after a few days of sitting with it.<\/p>\n<p>For the framework itself, nothing changes this year. The npm package, the Vite plugin, the PostCSS plugin, the new webpack loader, all still there, all still MIT. I&rsquo;m not adding a line to any client contract about this.<\/p>\n<p>For Tailwind Plus, it changes a lot, and quietly. I&rsquo;ve used Plus as a shortcut on at least a dozen client projects. Buying a license and adapting a marketing block is faster than designing one from scratch, and clients don&rsquo;t care where the starting point came from. With sign-ups closed, that shortcut is gone for anyone who didn&rsquo;t already have a license. If you have one, keep the account alive. If you don&rsquo;t, you&rsquo;re back to designing sections yourself or paying for a different component library, and most of the alternatives are either React-only or noticeably worse.<\/p>\n<p>For the ecosystem, the thing I&rsquo;m actually watching is the release cadence. The v4.2 improvements came out of the Partners Program with Netflix and Vercel. Under Shopify, the pressure will come from Shopify&rsquo;s storefront and admin teams instead. That&rsquo;s fine, and arguably better, because those teams build the kind of dense, data-heavy UI that stresses a utility framework more than a marketing site does. But it does mean the roadmap will lean toward what Shopify needs. I&rsquo;m not sure yet whether that&rsquo;s good or bad for the average agency build. I&rsquo;ll know in a year.<\/p>\n<p>And for the &ldquo;is Tailwind dead&rdquo; question my client was really asking: no. A project that ships 110 million weekly installs and just got a corporate maintainer is closer to the opposite of dead. The thing that died is the template business, and most people who search that phrase weren&rsquo;t paying for templates anyway.<\/p>\n<h2 id=\"the-41-lines-i-deleted-scrollbar-styling-before-v43\">The 41 lines I deleted: scrollbar styling before v4.3<\/h2>\n<p>Every client project I&rsquo;ve touched since about 2019 has had a file called something like <code>scrollbars.css<\/code>. It looks like this, more or less, and I&rsquo;d bet you have one too:<\/p>\n<pre><code class=\"language-css\">\/* scrollbars.css - copied between projects since forever *\/\n.nice-scroll {\n  scrollbar-width: thin;\n  scrollbar-color: #0369a1 #e0f2fe;\n}\n\n.nice-scroll::-webkit-scrollbar {\n  width: 8px;\n  height: 8px;\n}\n\n.nice-scroll::-webkit-scrollbar-track {\n  background: #e0f2fe;\n}\n\n.nice-scroll::-webkit-scrollbar-thumb {\n  background-color: #0369a1;\n  border-radius: 4px;\n}\n\n.nice-scroll::-webkit-scrollbar-thumb:hover {\n  background-color: #075985;\n}\n\n.hide-scroll {\n  scrollbar-width: none;\n  -ms-overflow-style: none;\n}\n\n.hide-scroll::-webkit-scrollbar {\n  display: none;\n}\n\n.stable-gutter {\n  scrollbar-gutter: stable;\n}\n<\/code><\/pre>\n<p>Then in the markup:<\/p>\n<pre><code class=\"language-html\">&lt;div class=&quot;nice-scroll stable-gutter overflow-auto max-h-96&quot;&gt;\n  &lt;!-- long list --&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n<p>Two problems with this. First, the colours are hardcoded hex values that drift out of sync with the Tailwind theme the moment a client asks for a palette change. I&rsquo;ve fixed exactly that bug three separate times. Second, the <code>::-webkit-scrollbar<\/code> pseudo-elements and the standard <code>scrollbar-color<\/code> property fight each other in some Chromium versions, and the way they resolve that fight changed around Chrome 121. I got a bug report once where the thumb was the right colour but the track was white, and it took me an embarrassing amount of time to work out that both rule sets were applying.<\/p>\n<h2 id=\"the-same-thing-in-tailwind-v43\">The same thing in Tailwind v4.3<\/h2>\n<p>The <a href=\"https:\/\/tailwindcss.com\/blog\/tailwindcss-v4-3\" rel=\"nofollow noopener\" target=\"_blank\">v4.3 release post<\/a> added first-party utilities for <code>scrollbar-width<\/code>, <code>scrollbar-color<\/code>, and <code>scrollbar-gutter<\/code>. Here&rsquo;s the same component with the CSS file deleted:<\/p>\n<pre><code class=\"language-html\">&lt;div class=&quot;scrollbar-thin scrollbar-thumb-sky-700 scrollbar-track-sky-100\n            scrollbar-gutter-stable overflow-auto max-h-96&quot;&gt;\n  &lt;!-- long list --&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n<p>The hidden-scrollbar variant is <code>scrollbar-none<\/code>. The gutter utilities are <code>scrollbar-gutter-auto<\/code>, <code>scrollbar-gutter-stable<\/code>, and <code>scrollbar-gutter-both<\/code>. The colour utilities take the normal opacity modifier, so <code>scrollbar-thumb-slate-900\/60<\/code> works the way you&rsquo;d expect.<\/p>\n<p>The part I care about most is that the colours are now theme tokens. When the client changes their brand blue, <code>sky-700<\/code> gets swapped in <code>@theme<\/code> once and the scrollbars follow. That&rsquo;s the bug I&rsquo;d fixed three times, gone.<\/p>\n<p>What you don&rsquo;t get: the <code>::-webkit-scrollbar<\/code> pseudo-elements. Tailwind is only emitting the standard properties. That means you lose the ability to set an explicit pixel width or a thumb border-radius. <code>scrollbar-width: thin<\/code> is whatever the browser thinks thin is. On my Mac with overlay scrollbars it barely matters; on a Windows laptop with a mouse it&rsquo;s a visible difference from the 8px rounded thumb my old CSS produced. I kept the old file on one project because the design spec called for a specific radius and the client would notice. On the other two I deleted it and nobody has said a word.<\/p>\n<p>If you still need the pixel-level control, you can keep a tiny <code>@utility<\/code> in your CSS and layer it on top:<\/p>\n<pre><code class=\"language-css\">@utility scrollbar-rounded {\n  &amp;::-webkit-scrollbar {\n    width: 8px;\n    height: 8px;\n  }\n  &amp;::-webkit-scrollbar-thumb {\n    border-radius: 4px;\n  }\n}\n<\/code><\/pre>\n<p>That&rsquo;s six lines instead of 41, and none of them contain a colour.<\/p>\n<h2 id=\"the-v42-bits-id-missed\">The v4.2 bits I&rsquo;d missed<\/h2>\n<p>Because the v4.3 post is, by the team&rsquo;s own admission, also the v4.2 post they forgot to write, I caught up on a few other things at the same time.<\/p>\n<p>The dedicated webpack loader is the one with a real number attached. The team measured 932ms with <code>@tailwindcss\/postcss<\/code> versus 429ms with <code>@tailwindcss\/webpack<\/code> on their own docs site under Next.js and Turbopack. That&rsquo;s the compile step only, and your project won&rsquo;t be their docs site, but if you&rsquo;re on Next.js it&rsquo;s a one-line dependency swap. I wrote about the <a href=\"https:\/\/abrarqasim.com\/blog\/turbopack-chunking-nextjs-16-3-the-two-thirds-guess-i-never-questioned\" rel=\"noopener\">Turbopack chunking changes in Next.js 16.3<\/a> recently, and this loader stacks on top of that because Turbopack runs webpack loaders through its compatibility layer.<\/p>\n<p>The logical property utilities matter if you ship anything with Arabic or Hebrew content, which for me, working out of Dubai, is most projects. <code>mbs-6<\/code> and <code>pbe-8<\/code> for block-start and block-end spacing, <code>inset-s-0<\/code> and <code>inset-e-4<\/code> for logical positioning. The old <code>start-*<\/code> and <code>end-*<\/code> utilities still work but are deprecated in favour of <code>inset-s-*<\/code> and <code>inset-e-*<\/code>. I have a find-and-replace queued for that.<\/p>\n<p>Four new neutral palettes: mauve, olive, mist, taupe. I&rsquo;ve used mist once already. It&rsquo;s slightly cooler than slate without going full blue, and it made a dashboard look less like every other dashboard.<\/p>\n<p>And <code>font-features-[\"tnum\"]<\/code> for OpenType features that don&rsquo;t have their own utility. You should still use <code>tabular-nums<\/code> for the common case, but the escape hatch is nice for stylistic sets.<\/p>\n<h2 id=\"what-id-actually-do-this-week\">What I&rsquo;d actually do this week<\/h2>\n<p>If you&rsquo;re on a Tailwind project right now, three things, in order of how long they take.<\/p>\n<p>Run <code>npm install tailwindcss@latest<\/code> and check what version you land on. If you were on 4.1 you&rsquo;ve skipped two releases and you&rsquo;ll want to read the changelog before the upgrade rather than after.<\/p>\n<p>Grep your CSS for <code>::-webkit-scrollbar<\/code>. Every hit is a candidate for deletion. Decide per component whether you need the pixel radius or whether <code>scrollbar-thin<\/code> is good enough, and don&rsquo;t keep the file out of sentiment.<\/p>\n<p>If you have a Tailwind Plus account, log in and confirm it&rsquo;s still active. If you don&rsquo;t, and you were relying on it as a starting point for client sections, start looking at alternatives now rather than mid-project. I&rsquo;ve been comparing a few for my own <a href=\"https:\/\/abrarqasim.com\/work\" rel=\"noopener\">agency work<\/a> and I&rsquo;ll write that up once I&rsquo;ve shipped something with one of them.<\/p>\n<p>The acquisition is a good outcome for a project that a lot of us depend on. It&rsquo;s a slightly worse outcome for people who liked buying templates. I&rsquo;m in both groups, and on balance I&rsquo;ll take it.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tailwind Labs joined Shopify on September 9th. What that changes for client work, plus the v4.3 scrollbar utilities that let me delete 41 lines of CSS.<\/p>\n","protected":false},"author":2,"featured_media":686,"comment_status":"","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"rank_math_title":"","rank_math_description":"Tailwind Labs joined Shopify on September 9th. What that changes for client work, plus the v4.3 scrollbar utilities that let me delete 41 lines of CSS.","rank_math_focus_keyword":"tailwind scrollbar","rank_math_canonical_url":"","rank_math_robots":"","footnotes":""},"categories":[137,45],"tags":[37,764,38,762,763,369,370],"class_list":["post-687","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-css","category-programming","tag-css","tag-freelance","tag-frontend","tag-scrollbar","tag-shopify","tag-tailwind-css-2","tag-tailwind-v4-2"],"_links":{"self":[{"href":"https:\/\/abrarqasim.com\/blog\/wp-json\/wp\/v2\/posts\/687","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/abrarqasim.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/abrarqasim.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/abrarqasim.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/abrarqasim.com\/blog\/wp-json\/wp\/v2\/comments?post=687"}],"version-history":[{"count":0,"href":"https:\/\/abrarqasim.com\/blog\/wp-json\/wp\/v2\/posts\/687\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/abrarqasim.com\/blog\/wp-json\/wp\/v2\/media\/686"}],"wp:attachment":[{"href":"https:\/\/abrarqasim.com\/blog\/wp-json\/wp\/v2\/media?parent=687"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/abrarqasim.com\/blog\/wp-json\/wp\/v2\/categories?post=687"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/abrarqasim.com\/blog\/wp-json\/wp\/v2\/tags?post=687"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}