---
title: "It's time to go ESM-only"
publication: "JavaScript Weekly"
issue: 723
published_at: "2025-02-14"
canonical_url: "https://javascriptweekly.com/issues/723"
---

Plus we celebrate Lea Verou's work, add 'copy code' buttons to our pages, and drool over GitHub's font updates. |        

#​723 — February 14, 2025 

[Read on the Web](https://javascriptweekly.com/issues/723)  

Together with [![AWS\](https://res.cloudinary.com/cpress/image/upload/c_fill,g_auto,e_trim,w_700/e_make_transparent/co_white,e_outline:10/v4cjjkcunep8a0x8edt9.png)](https://fnf.dev/4hYjO22)   

JavaScript Weekly 

[![\](https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/lobuc80xxqp4gb8f7eg3.jpg)](https://lea.verou.me/blog/2025/style-observer/)  

[Style Observer: A Library to Observe CSS Property Changes](https://lea.verou.me/blog/2025/style-observer/) — Lea Verou is a developer who’s easy to admire because whenever she sets out to solve a problem, the results are always fully formed with no cut corners. So it goes with this ‘exhaustively tested’ JS library for observing changes to CSS properties which deftly handles lots of browser quirks. See [the project homepage](https://observe.style/) for more. (TIL there’s a `.style` TLD!) 

Lea Verou   

💡 Lea has [many other projects](https://lea.verou.me/projects/) to check out, including [Color.js](https://colorjs.io/) which similarly nails the whole process of handling and manipulating colors in JS and the browser.  [![\](https://res.cloudinary.com/cpress/image/upload/c_limit,w_480,h_480,q_auto/copm/61fd5e47.png)](https://fnf.dev/4hYjO22) 

[Build Better with AWS, Using Tips and Tools from the Developer Center](https://fnf.dev/4hYjO22) — Get hands-on with DevOps, Data & ML, and Generative AI. Use any language, level up your skills. Connect with like-minded devs all over the world on AWS Communities. [The AWS Developer Center](https://fnf.dev/4hYjO22) has everything you need in one place. Don’t miss out! 

AWS sponsor   

[Why to Move On to 'ESM-Only'](https://antfu.me/posts/move-on-to-esm-only) — The march to using ES modules has been going on for years, but if you’re still holding out, there’s probably a good reason why? However, while you can maintain packages supporting _both_ ESM and CommonJS, Anthony thinks it’s time to go ‘ESM only’ and explains why. 

Anthony Fu   

💡 On that topic, Sarah Gooding writes [about `require(esm)` being backported and stable on Node.js 20](https://socket.dev/blog/require-esm-backported-to-node-js-20) which makes the transition even easier to justify.  

**IN BRIEF:** 

- 🤔 Developer industry analyst Kate Holterhoff asks ["Is npm enough?" and questions why there are so many attempts](https://redmonk.com/kholterhoff/2025/01/30/is-npm-enough/) to replace or extend npm in the JS package registry space.
- 📱 The React Native team has [a roundup of what happened at the most recent contributor summit.](https://reactnative.dev/blog/2025/02/03/react-native-core-contributor-summit-2024) Must read for React Native devs.
- [The Popover API is _now_ considered a 'baseline' browser feature](https://web.dev/blog/popover-baseline) with broad support across all major browsers.
- 🤖 Reader Ishan Anand has been working on implementing GPT2 (a precursor to OpenAI's current offerings) entirely in the browser to power [some interesting browser-based spreadsheet data processing experiments.](https://spreadsheets-are-all-you-need.ai/gpt2/)   

**RELEASES:** 

- [Node.js v23.8.0 (Current)](https://nodejs.org/en/blog/release/v23.8.0) and [Node.js v22.14.0 (LTS)](https://nodejs.org/en/blog/release/v22.14.0)
- [Node.js v20.18.3 (LTS)](https://nodejs.org/en/blog/release/v20.18.3) – The backporting of import attributes and JSON modules is now stable.
- [pnpm 10.3](https://github.com/pnpm/pnpm/releases/tag/v10.3.0) – The fast, efficiency-focused package manager adds a `strict-dep-builds` option to exit with a non-zero exit code if any dependencies have unreviewed build scripts.
- [Pixi.js 8.8](https://github.com/pixijs/pixijs/releases/tag/v8.8.0) – Fast, flexible 2D WebGL renderer.
- [Astro 5.3](https://astro.build/blog/astro-530/), [Prettier 3.5](https://prettier.io/blog/2025/02/09/3.5.0), [Electron 34.2](https://github.com/electron/electron/releases/tag/v34.2.0)  

📒 Articles & Tutorials 

[![\](https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/lnlqvx33nqatwo0inw5v.jpg)](https://whitep4nth3r.com/blog/how-to-build-a-copy-code-snippet-button/)  

[How and Why to Build 'Copy Code' Buttons](https://whitep4nth3r.com/blog/how-to-build-a-copy-code-snippet-button/) — A commonly encountered way to give readers easier access to source shared on the Web. David Bushell has [an interesting followup](https://dbushell.com/2025/02/14/copy-code-button/) reflecting on his own experiences implementing the same feature. 

Salma Alam-Naylor   

[The RegExp Escaping ECMAScript Proposal](https://2ality.com/2025/01/regexp-escape.html) — `RegExp.escape()` is a function to create an escaped version of a supplied text that matches itself when used as, or in, a regular expression. Axel has also written [an implementation in plain JS](https://gist.github.com/rauschma/63b824c69a45900abbd09f7d12b895f4#file-regexp-escape-mjs) to get a feel for how it works. 

Dr. Axel Rauschmayer   

[Build a Next.js Sign-Up Form with React Hook Form](https://go.clerk.com/uFaDGMi) — Features progressive enhancement, dynamic validation, and secure password handling with Argon2. 

Clerk sponsor   

[How to Start a React Project in 2025](https://www.robinwieruch.de/react-starter/) — While there are many ways to start a React project, Robin examines the pros and cons of a few popular approaches. 

Robin Wieruch   

[Learning How to Build Modern Web Extensions](https://chenhuijing.com/blog/learning-web-extensions/#%F0%9F%8E%99) — It’s easy to run into outdated docs when building extensions. Lucky for us, Hui has been through the process and shares some tips. 

Hui Jing   

[Testing 10 JavaScript Frameworks on Their HTML Defaults](https://meiert.com/en/blog/javascript-framework-html-defaults/) — Using a JavaScript framework is now ‘the way’ for many Web site developers, but how do the popular options fare at producing valid, error free HTML? 

Jens Oliver Meiert   

📄 [Using `Intl.DurationFormat` for Localized Durations](https://www.raymondcamden.com/2025/02/13/using-intldurationformat-for-localized-durations) Raymond Camden 

📄 [How to Refactor Code with GitHub Copilot](https://github.blog/ai-and-ml/github-copilot/how-to-refactor-code-with-github-copilot/) Anthony Grutta (GitHub) 

📄 [Using RxDB as a Database in a Vue.js Application](https://rxdb.info/articles/vue-database.html) RxDB 

📄 [Supporting Pasting Files into the Browser](https://docs.fileber.com/blog/pasting-files-into-browser) Fileber  

🛠 Code & Tools 

[![\](https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/xi9zwkvukskgqoxx7y4q.jpg)](https://ohmjs.org/)  

[Ohm: A Parsing Toolkit for JavaScript and TypeScript](https://ohmjs.org/) — It’s been a few years since we covered this project and it’s come along a lot. It’s a library for building PEG-based parsers you can use in interpreter, compilers, analysis tools, etc. and you can even [play with its grammar online.](https://ohmjs.org/editor/) 

Warth, Dubroy, et al.   

[Start Selling to Enterprise Faster with WorkOS](https://workos.com/?utm_source=cpjs&utm_medium=newsletter&utm_campaign=q12025) — Add SSO, SCIM, and RBAC to your B2B SaaS app in minutes—not months. 

WorkOS sponsor   

[Human Regex: Human-Friendly Regular Expression Builder with English Syntax](https://github.com/rajibola/human-regex) — After 8 years of Perl, regexes are my friend, but _most_ developers aren’t big fans? This library offers a natural, fluent approach. [Magic Regexp](https://regexp.dev/) and [Super Expressive](https://github.com/francisrstokes/super-expressive) are alternatives to consider. 

Ridwan Ajibola   

[Svader: Create GPU-Rendered Svelte Components](https://github.com/sockmaster27/svader) — [The examples](https://svader.vercel.app/) are a good way to get a feel for what this offers. 

Holger Dal Mogensen   

[web-worker 1.5: Consistent Web Workers for the Browser and Node](https://github.com/developit/web-worker) — Want to publish npm modules that use Web Workers and that work in both Node and client-side? In Node, it works as a web-compatible Worker implementation atop `worker_threads`. In the browser, it’s an alias for `Worker`. 

Jason Miller   

[The React Data Table I Always Wanted](https://www.openstatus.dev/blog/data-table-redesign) — A look into a particularly fast and clean _shadcn/ui_-based data table component ([GitHub repo](https://github.com/openstatusHQ/data-table-filters)). [See a live demo.](https://data-table.openstatus.dev/infinite) 

Maximilian Kaske      

📰 Classifieds   

[Telling the Bit story: Celebrating 10 Years of Composability](https://bit.dev/blog/telling-the-bit-story-celebrating-10-years-of-composability/?utm_source=JavaScriptWeekly&utm_id=19&utm_medium=newsletter). Ran Mizrahi reveals how Bit shifted from development stagnation to exponential progress using Composability. 

--- 

🤯 Pfft, vehicle data is a joke without [CarsXE](https://api.carsxe.com/?utm_source=Cooper+Press&utm_medium=email&utm_campaign=Cooper-press-feb-14). API goes brrrrr. VIN decoding, plate lookup, market value reports. [Get Serious!](https://api.carsxe.com/?utm_source=Cooper+Press&utm_medium=email&utm_campaign=Cooper-press-feb-14) 

--- 

[Meticulous automatically creates and maintains an E2E UI test suite with zero developer effort](https://www.meticulous.ai?utm_source=javascript_weekly&utm_campaign=february14th). Relied on by 1000s of orgs, including Lattice, Bilt Rewards and many more. 

--- 

Other PDF SDKs promise a lot — then break at scale. [Nutrient’s SDK doesn't, handling billion-page workloads for over 10k devs](https://www.nutrient.io/sdk?utm_campaign=issue-723-JW-2025-02-14&utm_source=cooperpress&utm_medium=sponsoring) — meaning you don’t have to debug PDFs.      

- [Kaluma 1.2](https://github.com/kaluma-project/kaluma) – Tiny JavaScript runtime for the RP2040 (Raspberry Pi Pico).
- [bcrypt.js 3.0](https://github.com/dcodeIO/bcrypt.js) – Optimized bcrypt in pure JS. Even in the browser.
- [Jasmine 5.6](https://github.com/jasmine/jasmine/blob/main/release_notes/5.6.0.md) – Testing framework for browsers & Node.
- 🤖 [Midscene.js 0.11](https://github.com/web-infra-dev/midscene) – Let AI be your browser operator.  

🔠 And a little typography bonus 

[![\](https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/n8wrmadr5rxl7vjx82u2.jpg)](https://github.com/githubnext/monaspace/releases/tag/v1.200)   

[GitHub Extends Its _Monaspace_ Font Family](https://github.com/githubnext/monaspace/releases/tag/v1.200) — [Monaspace](https://monaspace.githubnext.com/) is a fantastic set of monospaced fonts from GitHub targeted at coding use cases. Its new [v1.2 release](https://github.com/githubnext/monaspace/releases/tag/v1.200) ups the ante by including [Nerd Fonts](https://www.nerdfonts.com/) support and symbols, new box drawing glyphs, characters, character variants, ligatures, and more. 

GitHub         

Published by [Cooperpress](https://cooperpress.com/) and edited by [Peter Cooper](https://twitter.com/cooperx86) 

'JavaScript' is a trademark of Oracle Corporation in the US
We are not endorsed by or affiliated with Oracle. 

[Change your email address](https://javascriptweekly.com/edit_subscription/*|UID|*) or [stop getting this newsletter](https://javascriptweekly.com/leave/*|UID|*). 

© Cooper Press Ltd · Fairfield Enterprise Centre, Louth, LN11 0LS, United Kingdom
