tag:webdev.shared.arty.name,2011:index.atomЗаписи о веб-разработке, рекомендованные Артемием ТрегубенкоАртемий Трегубенко[email protected]https://arty.name2026-03-15T20:55:42+00:00https://nesbitt.io/2026/03/15/guided-meditation-for-developers.html2026-03-15T20:55:43Z2026-03-15T20:55:43ZAndrew NesbittGuided Meditation for Developers
<p>Find a comfortable position. Close your laptop halfway, so the screen light softens but the fan noise continues.<sup id="fnref:1"><a href="https://nesbitt.io/2026/03/15/guided-meditation-for-developers.html#fn:1" class="footnote" rel="footnote" role="doc-noteref">1</a></sup> That hum is your anchor. You will return to it throughout this practice.</p>
<p>Take a deep breath in. Hold it. Now run <code class="language-plaintext highlighter-rouge">npm install</code>. Breathe out slowly as 1,247 packages are added. Do not look at the output. You are not ready.</p>
<h2 id="body-scan">Body scan</h2>
<p>We will begin with a body scan. Bring your attention to the top of your head. Notice any tension you are holding there. This is where you store your awareness of packages that have not been updated in three years but still work. Let it soften. Those packages do not need you right now. They are dormant, the way a perennial is dormant. The roots are still in the ground. There is nothing for you to do until spring, and spring may never come, and that is also part of the garden.</p>
<p>Move your attention to your forehead. This is where you hold the memory of every major version bump that removed the one function you actually used. The migration guide was six pages long and the first step was “update your mental model.” Breathe into that space. Release it. You have already updated your mental model. You updated it when you pinned to the previous version and moved on.</p>
<p>Now bring awareness to your jaw. You are clenching it. You have been clenching it since the last time you saw <code class="language-plaintext highlighter-rouge">ERESOLVE unable to resolve dependency tree</code>. Unclench. The tree will not resolve faster because your jaw is tight. The tree may not resolve at all. That is also acceptable. We are practising acceptance today.</p>
<p>Feel your shoulders. They have been raised since you read the GitHub issue titled “Is this project still maintained?” posted fourteen months ago with no response. Lower them. The maintainer may be on a goat farm in Portugal. The maintainer may be the goat. You cannot control this. Release your shoulders and release the maintainer.</p>
<p>Your hands are hovering over the keyboard. Notice which keys your fingers are drawn to. If they are drawn to the up arrow and enter, you are about to re-run a command that has already failed. This is not mindfulness. This is <code class="language-plaintext highlighter-rouge">while true</code>. Gently place your hands in your lap.</p>
<h2 id="breathing-exercise">Breathing exercise</h2>
<p>We will now practise a breathing technique calibrated to the dependency lifecycle.</p>
<p>Breathe in for four seconds. This represents the planting season, when the package is new and everything works and the README has a row of green badges and the soil is warm.</p>
<p>Hold for seven seconds. This represents the long growing season, when issues accumulate faster than they are closed and the CI badge turns grey because the service it was hosted on has itself been abandoned. The plant is alive but nobody is watering it. Weeds are moving in. You can see them in the issue tracker.</p>
<p>Breathe out for eight seconds. This represents the harvest and rot, when a blog post titled “Why We Moved Away From X” appears on Hacker News and the comment thread is 400 messages long and the top comment is “I said this would happen two years ago” with no link to the original prediction.</p>
<p>Repeat this cycle. In for four. Hold for seven. Out for eight. If you lose count, that is fine. Counting is implemented differently across locales and your breathing may be lexicographically sorted.</p>
<h2 id="visualisation">Visualisation</h2>
<p>Close your eyes. You are standing in a garden. This is your project. You planted some of what grows here, chose it carefully, read the labels, checked the light requirements. But most of what you see was not planted by you. It arrived as seeds carried inside other plants, hidden in the root ball of a package you selected for its flowers without thinking about what it would bring with it. This is transitive dependency. Every garden has it. You are not a bad gardener. You are a gardener.</p>
<p>Walk deeper into the garden, past the border plants you recognise and tend. Past the mid-layer shrubs whose names you have seen in your lockfile but never looked up. Keep walking until you reach the back fence, where the growth is dense and tangled and the packages are maintained by a single person in a different timezone whose GitHub profile picture is a sunset from 2016.</p>
<p>Look down. The soil here smells faintly of sulfur. This is normal. The sulfur is coming from a transitive dependency six levels deep that pulls in a native binding to a C library that was last updated during the Obama administration. The binding works. Nobody knows why. Its roots have grown into your foundation in ways that would be unwise to investigate. Sit with this. Breathe. Every garden has something growing behind the shed that you have decided not to identify.</p>
<p>Now, from this place of stillness, I want you to visualise a yellow advisory banner. It says <code class="language-plaintext highlighter-rouge">3 moderate severity vulnerabilities</code>. Do not open your eyes. Do not run <code class="language-plaintext highlighter-rouge">npm audit fix</code>. The fix will update a package that will break a peer dependency that will cascade through your lockfile like pulling a weed whose roots have wrapped around everything else in the bed. You know this because you have done it before. Instead, observe the advisory. Let it be. Moderate severity means someone could theoretically exploit a ReDoS in a markdown parser if they controlled the input and had four hours and very specific motivations. This is not your concern today.</p>
<h2 id="mantra">Mantra</h2>
<p>Repeat after me, silently, in the voice of your internal monologue:</p>
<p><em>I accept the packages I cannot update.</em></p>
<p><em>I accept the breaking changes I cannot predict.</em></p>
<p><em>I accept that <code class="language-plaintext highlighter-rouge">node_modules</code> is larger than my application and always will be. The undergrowth is always larger than the tree.</em></p>
<p><em>I accept that the package I depend on depends on a package that depends on a package whose maintainer closed all issues with the message “I am mass-closing issues. If your issue is still relevant, please re-open it,” and then transferred the repository to an organisation with no other public repositories.</em></p>
<p>Breathe.</p>
<p><em>I accept that <code class="language-plaintext highlighter-rouge">--legacy-peer-deps</code> is not a solution. It is a coping mechanism. I am at peace with my coping mechanisms.</em></p>
<p><em>I accept that somewhere in my lockfile there are two versions of the same package and they are both wrong. Two plants with the same name that fruit differently. I will not dig them up today.</em></p>
<h2 id="letting-go">Letting go</h2>
<p>You carry your dependency tree with you when you leave your desk. You carry it into the shower, where you think about whether that package you added last week is still maintained. You carry it to bed, where you wonder if the lockfile you committed on Friday will still resolve on Monday. You carry it to dinner with friends, where you do not mention it, but it is there, a background process consuming resources, never quite idle.</p>
<p>Notice this. You are anxious about code that is not running. You are worried about packages that are sitting in a registry, unchanged, doing nothing. The vulnerability you read about on Tuesday has not been exploited. The deprecation warning you saw has no deadline. The package whose maintainer went quiet is still working, today, right now, exactly as it was when you chose it. Nothing has happened. You are holding tension for things that have not happened yet and may never happen.</p>
<p>Put the garden down. You are not in the garden right now. The garden does not need you at midnight. The weeds will not grow faster because you are thinking about them. The frost will not come sooner because you are watching the forecast. Your dependency tree is a text file on a server and it will be the same text file tomorrow morning.</p>
<p>Breathe in. You are not on call for your lockfile.</p>
<p>Breathe out. The packages can wait. They have always been waiting. That is all they do.</p>
<h2 id="guided-acceptance-the-six-dependency-griefs">Guided acceptance: the six dependency griefs</h2>
<p><strong>Version conflict.</strong> Two packages in your tree require different major versions of a third package. You cannot have both. You cannot have neither. You can have one if you alias the other, which means your application will ship two copies and they will not share state and something will break at runtime in a way that no type checker or linter will catch. Observe this situation. Do not try to fix it. It was not introduced by a person. It was introduced by time. Time moved the versions apart the way two branches of the same tree grow in different directions, slowly and without malice, until they are reaching for different light entirely and you are the trunk expected to feed them both.</p>
<p><strong>Abandonment.</strong> A package you depend on has stopped growing. The last commit was a Dependabot PR that was never merged. The README still says “PRs welcome!” in a way that now reads as historical document rather than invitation. You could fork it. You could tend the fork. You could become the person whose GitHub profile picture is a sunset, who mass-closes issues, who gets emails from strangers asking why the leaves are brown. Sit with this. The package gave you what it could for as long as it could. Send it gratitude. Let it decompose. The nutrients will feed the next thing that grows in that spot.</p>
<p><strong>The phantom dependency.</strong> Your application works in development but fails in CI because you are relying on a package that you never declared as a dependency. It is installed because another package depends on it, and your package manager hoists it to a location where your code can reach it, and you imported it eighteen months ago without realising it wasn’t yours to import. You have been eating fruit from your neighbour’s tree, the branch that overhangs your side of the fence, and now your neighbour has cut the branch. The phantom dependency is a lesson in impermanence. Acknowledge it. Plant your own. Or don’t. Either way you are choosing a form of suffering, and choosing is itself a practice.</p>
<p><strong>The security advisory that does not apply.</strong> You have received a security advisory for a vulnerability in a package you use. The vulnerability is in a function you do not call, in a code path you do not exercise, in a scenario that requires an attacker to control a YAML parser’s input while running as root on a machine that accepts unsigned certificates over an unauthenticated HTTP endpoint. The advisory is marked Critical. Your security dashboard is red. Your compliance team has opened a ticket. The fix requires upgrading to a version that drops support for the Node.js version you are running in production. Breathe in. This is suffering caused by metrics. A garden inspector has told you that one of your plants is on a list of invasive species in a country you do not live in. The metric says you are insecure. You are not insecure. You are measured.</p>
<p><strong>The merge conflict in the lockfile.</strong> Two branches have grown toward the same light and met in the middle. You and a colleague both updated dependencies, and now the lockfile has 4,000 lines of conflict markers. You will not read them. Nobody reads them. The lockfile is not meant to be read by humans, which is why git insists on showing it to you in a format designed for humans to resolve. This is a tangled vine that cannot be unknotted, only severed and replanted. Run <code class="language-plaintext highlighter-rouge">git checkout HEAD -- package-lock.json</code> and then <code class="language-plaintext highlighter-rouge">npm install</code> and let the tree grow back from your side. Your colleague’s changes will need to be re-resolved. This feels wasteful. It is wasteful. Gardening is mostly waste. Seeds that don’t germinate, cuttings that don’t take, entire seasons of growth pulled up because something else needed the space. Release the guilt. Delete the conflict. Begin again.</p>
<p><strong>The everything update.</strong> It has been eight months since you last tended your dependencies. You have been meaning to. The longer you wait the harder it gets, and the harder it gets the longer you wait, and this recursion has no base case. Today you run <code class="language-plaintext highlighter-rouge">npm outdated</code> and the output is longer than your application. Thirty-seven packages have new major versions. The changelogs reference other changelogs. The migration guides assume you completed the previous migration guide. You are four migrations behind. This is the garden you left over winter. The gate is stuck. The paths are overgrown. Something has built a nest in the trellis. Observe the fear. Name it. It is called “I am going to spend three days on this and my application will behave exactly the same when I am done.” That is correct. It will behave exactly the same. That is the practice. Maintenance is a meditation on impermanence disguised as wasted effort. The garden does not look different after you weed it. But you were there. Your hands were in the soil. That is enough.</p>
<h2 id="closing">Closing</h2>
<p>Bring your awareness back to your breath. Back to the hum of your laptop fan. Notice that it is louder now. Something in your <code class="language-plaintext highlighter-rouge">node_modules</code> has triggered a post-install script that is compiling a native module. Or mining something. You cannot know which from the sound alone, and knowing would not change the sound. Listen to the gentle sound of endless blocks being chained together. Let it run. You agreed to this when you ran <code class="language-plaintext highlighter-rouge">npm install</code>. You agree to it every time. Whatever is happening in that process is happening now, and it will finish when it finishes, and what will be will be.</p>
<p>When you are ready, open your eyes. Open your laptop fully. Look at your terminal. If there are warnings, let them scroll past. They have always been scrolling past. You have always been here, in this garden, between <code class="language-plaintext highlighter-rouge">npm install</code> and the next breaking change, tending what you can and accepting what you cannot.</p>
<p>Go gently. The growing season is long and the soil does not care about your deadlines.</p>
<hr>
<p><em>This meditation was tested on Node.js 18, 20, and 22. Results may vary on earlier versions due to a breaking change in the <code class="language-plaintext highlighter-rouge">--harmony-weakrefs</code> flag that affects garbage collection of abandoned inner peace. If you experience dizziness, ensure your lockfile is committed and try again after clearing your module cache.</em></p>
<div class="footnotes" role="doc-endnotes">
<ol>
<li id="fn:1">
<p>If you have a fanless Mac, <a href="https://www.youtube.com/watch?v=qXGFOC-8418">this website</a> will provide a suitable imitation. Match the volume to whatever feels grounding. <a href="https://nesbitt.io/2026/03/15/guided-meditation-for-developers.html#fnref:1" class="reversefootnote" role="doc-backlink">↩</a></p>
</li>
</ol>
</div>
https%3A%2F%2Fnesbitt.io%2Ffeed.xml-39e01c9afb98e5c2c8c4a3e5a09be1652026-03-15T20:55:43ZAndrew Nesbitthttps://tinybase.org/2026-03-11T22:47:34Z2026-03-11T22:47:34ZTinyBase 8.0: A Reactive Data Store for Local-First Apps
<span class="mainlink"></span> — A reactive data store and sync engine that can be used as the entire backend for many types of app. It can stand alone or <a target="_blank" href="https://javascriptweekly.com/link/181844/web">integrate with all sorts of things</a> like cloud storage, client-side stores, SQL databases, etc. <a target="_blank" href="https://javascriptweekly.com/link/181845/web">v8.0</a> adds a middleware feature and the ability to store objects and arrays in its ‘cells’.
https%3A%2F%2Fcprss.s3.amazonaws.com%2Fjavascriptweekly.com.xml-d4f8f8a98d9eed2b139bbbadeda384d12026-03-11T22:47:34ZJavascriptWeeklyhttps://github.com/webpro-nl/unbarrelify/2026-03-05T18:01:39Z2026-03-05T18:01:39ZUnbarrelify: Barrel File Removal Tool for JavaScript
<span class="mainlink"></span> — From the creators of <a target="_blank" href="https://nodeweekly.com/link/181574/web">Knip</a>, a barrel file removal tool for JS/TS projects (ESM-only).
https%3A%2F%2Fcprss.s3.amazonaws.com%2Fnodeweekly.com.xml-731aa134563a24230be9b6afc56921982026-03-05T18:01:39ZNodeWeeklyhttps://hacks.mozilla.org/2026/02/making-webassembly-a-first-class-language-on-the-web/2026-03-03T20:51:35Z2026-03-03T20:51:35ZMaking WebAssembly a First-Class Citizen on the Web
<span class="mainlink"></span> — WASM has come a long way but remains tricky to work with on the Web, with even performing a <code>console.log</code> requiring a lot of glue code. Ryan makes the case that the <a target="_blank" href="https://javascriptweekly.com/link/181480/web">WebAssembly Component Model</a> could change this by letting modules bind directly to browser APIs, load directly from <code>script</code> tags, and more.
https%3A%2F%2Fcprss.s3.amazonaws.com%2Fjavascriptweekly.com.xml-3f7e6ba1870af644c35d7cf8ecd582a52026-03-03T20:51:35ZJavascriptWeeklyhttps://www.mnot.net/blog/2026/02/13/no?li2026-02-13T19:18:58Z2026-02-13T19:18:58ZBruceThe Power of ‘No’ in Internet Standards
by Mark Nottingham, who’s being Doing Standards for so long he used to travel to work by stegosaurus
https%3A%2F%2Fbrucelawson.co.uk%2Ffeed%2Fatom%2F-54bd5dcb89be8cb27c2eece5d59a315a2026-02-13T19:18:58ZBruce Lawsonhttps://shud.in/thoughts/build-bulletproof-react-components2026-02-13T19:10:56Z2026-02-13T19:10:56ZBuilding Bulletproof React Components
<span class="mainlink"></span> — Ten production-tested patterns to ensure your components survive the gauntlet of portals, transitions, hydration, being used server-side, and other modern React features. An elegant, no-nonsense guide from the co-creator of <a href="https://swr.vercel.app/">SWR</a> and creator of Vercel’s <a href="https://github.com/vercel-labs/agent-skills/tree/main/skills/react-best-practices">React Best Practices</a> skill.
https%3A%2F%2Fcprss.s3.amazonaws.com%2Freact.statuscode.com.xml-a39d6edde22ce62c4988b9c9c6f56eba2026-02-13T19:10:56ZReactStatushttps://npmx.dev/2026-02-10T21:45:08Z2026-02-10T21:45:08Znpmx: A New npm Registry Package Browser
<span class="mainlink"></span> — A smooth, fast way to browse packages on the <a target="_blank" href="https://javascriptweekly.com/link/180448/web">official npm registry</a>. It’s certainly fast, smooth, and you see more info up front and center - check out <a target="_blank" href="https://javascriptweekly.com/link/180449/web">the <code>axios</code> page</a> for example. <em>“We’re not replacing the npm registry, but instead providing an elevated developer experience through a fast, modern UI.”</em>
https%3A%2F%2Fcprss.s3.amazonaws.com%2Fjavascriptweekly.com.xml-e789c0b70f06a4f259e067005193c3752026-02-10T21:45:08ZJavascriptWeeklyhttps://lyra.horse/blog/2025/12/svg-clickjacking/2025-12-13T21:26:21Z2025-12-13T21:26:21ZBruceSVG Cickjacking
– “Clickjacking is a classic attack that consists of covering up an iframe of some other website in an attempt to trick the user into unintentionally interacting with it. It works great if you need to trick someone into pressing a button or two, but for anything more complicated it’s kind of unrealistic. I’ve discovered a new technique that turns classic clickjacking on its head and enables the creation of complex interactive clickjacking attacks, as well as multiple forms of data exfiltration.”
https%3A%2F%2Fbrucelawson.co.uk%2Ffeed%2Fatom%2F-4b7f816c512669721077debd3ecc9e7f2025-12-13T21:26:21ZBruce Lawsonhttps://inside.java/2025/12/03/applet-removal/2025-12-13T13:25:40Z2025-12-13T13:25:40ZBruceSo Long and Thanks for All the Applets
– So farewell, Java Applets: “The entire java.applet package has been removed from JDK 26, which will release in March 2026.”
https%3A%2F%2Fbrucelawson.co.uk%2Ffeed%2Fatom%2F-9eaac87ff8c074c35df505ee4486c8a22025-12-13T13:25:40ZBruce Lawsonhttps://adventures.nodeland.dev/archive/noop-functions-vs-optional-chaining-a-performance/?utm_source=ECMAScript.news&utm_medium=Weekly+Newsletter&utm_campaign=2025-11-052025-11-08T21:08:42Z2025-11-08T21:08:42ZNo-op functions vs. optional chaining in JavaScript: performance deep divehttps%3A%2F%2Ffeeds.feedburner.com%2FEsnextNews-3db4d4aca67977f58d0691f00a7f81ba2025-11-08T21:08:42ZES.next Newshttps://jakearchibald.com/2025/present-and-future-of-progressive-image-rendering/2025-10-31T20:02:26Z2025-10-31T20:02:26ZBruceThe present and potential future of progressive image rendering
– Jank Architect compares JPEG XL and AVIF. TL;DR: AVIF is better.
https%3A%2F%2Fbrucelawson.co.uk%2Ffeed%2Fatom%2F-373bbf670daa062310c89148f3b8f9e92025-10-31T20:02:26ZBruce Lawsonhttps://www.lorenstew.art/blog/10-kanban-boards2025-10-31T19:37:29Z2025-10-31T19:37:29ZI Built the Same App 10 Times: Evaluating Frameworks for Mobile Performance
<span class="mainlink"></span> — When targeting mobile devices, small bundle sizes and quick rendering times are key, so Loren wanted to see how different approaches compared. Marko, SolidStart, SvelteKit, Qwik, Nuxt, Next.js and more are all under the spotlight here.
https%3A%2F%2Fcprss.s3.amazonaws.com%2Fjavascriptweekly.com.xml-0dc35da916466d2733e271a2c7c6f0002025-10-31T19:37:29ZJavascriptWeeklyhttps://github.com/lirantal/npm-security-best-practices2025-10-07T18:34:57Z2025-10-07T18:34:57ZAwesome npm Security Best Practices
<span class="mainlink"></span> — Web security expert Liran Tal has put together a handy set of best practices to consider when working with the npm ecosystem, whether or not you’re using the canonical <code>npm</code> tool. Plenty of good advice here.
https%3A%2F%2Fcprss.s3.amazonaws.com%2Fnodeweekly.com.xml-3698bd186bfde0e16f590f3206623d692025-10-07T18:34:57ZNodeWeeklyhttps://github.com/bodadotsh/npm-security-best-practices2025-10-01T20:45:14Z2025-10-01T20:45:14ZNPM Security Best Practices
<span class="mainlink"></span> — An extensive list of best practices, techniques, and ideas to consider for making your use of the npm packaging ecosystem and its tooling more secure.
https%3A%2F%2Fcprss.s3.amazonaws.com%2Fjavascriptweekly.com.xml-dc69110bab1f7a36440655fef8b4ee8f2025-10-01T20:45:14ZJavascriptWeeklyhttps://blog.cloudflare.com/capnweb-javascript-rpc-library/2025-09-29T12:45:30Z2025-09-29T12:45:30ZCap'n Web: A New RPC System for Browsers and Web Servers
<span class="mainlink"></span> — A ‘spiritual sibling’ to <a target="_blank" href="https://javascriptweekly.com/link/174878/web">Cap’n Proto</a>, an RPC protocol created by one of the same authors. However, <em>Cap’n Web</em>’s underlying serialization is human-readable, focused on integrating well with JS runtimes, and works over HTTP, WebSocket, and <code>postMessage()</code> out-of-the-box.
https%3A%2F%2Fcprss.s3.amazonaws.com%2Fjavascriptweekly.com.xml-bddff586672c434ddcb91b08826f8df42025-09-29T12:45:30ZJavascriptWeeklyhttps://www.lorenstew.art/blog/react-won-by-default2025-09-17T18:09:58Z2025-09-17T18:09:58Z'React Won by Default – And It's Killing Frontend Innovation'
<span class="mainlink"></span> — An opinionated React thought-piece that’s provoked much discussion this week by poking at the downsides and inertia caused by ‘the React-by-default mindset.’ And we thought people said React was moving too quickly..? 😅
https%3A%2F%2Fcprss.s3.amazonaws.com%2Freact.statuscode.com.xml-a7aeab30534a6ac390c8adc49e9f6a122025-09-17T18:09:58ZReactStatushttps://sightlessscribbles.com/posts/20250724/2025-08-08T23:33:52Z2025-08-08T23:33:52ZBruceThe ‘Accessibility’ link is a Lie: My Adventures in Weaponizing Corporate Virtue Signalinghttps%3A%2F%2Fbrucelawson.co.uk%2Ffeed%2Fatom%2F-23c7fd761af0e97906f3ff51653748082025-08-08T23:33:52ZBruce Lawsonhttps://www.jonoalderson.com/conjecture/its-time-for-modern-css-to-kill-the-spa/2025-08-08T23:12:11Z2025-08-08T23:12:11ZBruceIt’s time for modern CSS to kill the SPA
– An SEO consultant writes “Use modern server rendering. Use actual pages. Animate with CSS. Preload with intent. Ship less JavaScript. Build like it’s 2025 – not like you’re trapped in a 2018 demo of Gatsby. You’ll end up with faster sites, happier users, and fewer regrets.”
https%3A%2F%2Fbrucelawson.co.uk%2Ffeed%2Fatom%2F-3626cba558508f901fbdfbefe09216ff2025-08-08T23:12:11ZBruce Lawsonhttps://buttondown.com/whatever_jamie/archive/the-many-many-many-javascript-runtimes-of-the-last-decade/2025-07-30T12:15:50Z2025-07-30T12:15:50ZThe Many, Many, Many JavaScript Runtimes of the Last Decade
<span class="mainlink"></span> — A meaty article (which took a year to put together) covering the myriad of JavaScript runtimes and engines both past and present, from obvious picks like Node.js to cloud platforms and lesser known ‘honorable mentions’. This is a great summary to round out your JS ecosystem knowledge.
https%3A%2F%2Fcprss.s3.amazonaws.com%2Fnodeweekly.com.xml-03e107859933b83a00fd69bca8bad6a42025-07-30T12:15:50ZNodeWeeklyhttps://queue.acm.org/detail.cfm?id=37461712025-07-18T23:06:13Z2025-07-18T23:06:13ZWebAssembly: Yes, But for What?
<span class="mainlink"></span> — Writing for ACM Queue, one of the contributors to multiple JavaScript and WebAssembly (WASM) implementations shares a good roundup of where WebAssembly is being used, both in the browser and server-side, and how it’s gradually finding its way into seemingly everything.
https%3A%2F%2Fcprss.s3.amazonaws.com%2Fjavascriptweekly.com.xml-c942b97006fec0673f4b5fee5643062d2025-07-18T23:06:13ZJavascriptWeekly