#751 — September 5, 2025 |
|
JavaScript Weekly |
![]() |
Mediabunny: A Complete Media Toolkit for JavaScript — Supporting both browsers and Node.js, this library lets you read, write and convert popular media file formats (e.g. MP4, MP3, and more) without needing to lean on dependencies like FFmpeg. You can make thumbnails, extract metadata, write code that gets converted into a video, and more. GitHub repo. Vanilagy |
Why Do Browsers Throttle JavaScript Timers? — Did you know the zero in Nolan Lawson |
![]() Boost Coding Productivity with AI-Assisted Tools & Agents — Join Steve Kinney for this course looking at how best to harness AI for faster, higher-quality code. Learn how Cursor and Claude Code can be used to handle project plans, carry out inline edits, and perform larger background tasks — all adhering to the guidelines you set. Frontend Masters sponsor |
Ripple: A New, In-Development TypeScript UI Framework — A new framework aiming to take the best parts of React, Solid and Svelte, and combine them into a single package. Notably, it comes from someone who worked on React and Svelte, as well as author of Lexical and Inferno, so it’s worth a look. There’s more info on the GitHub repo. Dominic Gannaway |
IN BRIEF:
|
Product for Engineers Newsletter — Build better products, not just better code. Learn how to build features users love. Subscribe for free PostHog sponsor |
RELEASES:
|
📖 Articles and Videos |
![]() |
Google Chrome Turns 17: A History — A fantastic walkthrough of Chrome’s origins and its evolution over the years. Addy looks at key milestones (multi-process architecture for example), security, its steps into the world of AI, and more. Addy Osmani |
💡 On the topic of Chrome, Top Chrome APIs Every Developer Should Try covers a variety of Chrome-only JavaScript APIs, most of which I wasn't aware of. |
Lean for JavaScript Developers — A comprehensive introduction to Lean, a theorem prover and language for creating formally verified code that Dan Abramov has really been getting into recently. “I’ve never written code alongside proofs like this before. Have you?” Dan Abramov |
AI Writes Code. Wallaby MCP Makes Sure It Actually Works — Give your AI agent live execution data, coverage, and real-time insights to generate tests and code with confidence. Wallaby Team sponsor |
Getting Accurate Text Lengths with Sangeeth Sudheer |
Making XML Human-Readable Without XSLT — Jake gets niche, but sets JavaScript to good use here. Jake Archibald |
📄 Stress-Testing Biome's 📄 How to Optimize Third Party Scripts with Web Workers and Partytown Jakub Andrzejewski 📄 Redux without React: State Management in Vanilla JS Moritz Kröger 📄 Functional Custom Elements the Easy Way Ginger (Piccalilli) |
🛠 Code & Tools |
![]() |
Peaks.js 4.0: UI Component for Interacting with Audio Waveforms — A project originally spawned from the BBC’s R&D department, Peaks renders audio waveforms to a canvas element and allows scrolling, zooming, and the sort of things you might otherwise see in an audio editor. LGPL licensed. Chris Needham et al. |
💡 There are other options in this space too, including the newly released Waveform Renderer 1.0 (complete with interactive demo) which is entirely focused on waveform rendering, as well as Wavesurfer.js. |
Redux Toolkit 2.9: The 'Batteries-Included' Toolset for Redux — The long-standing toolset for working with Redux for state management gets a performance update with a rewrite of RTK Query’s subscription and polling systems, automatic aborting of in-flight requests when a cache entry is removed, and more. Mark Erikson |
react-window 2.0: Render Large Lists of Data Quickly — A component library for rendering large lists of data quickly and without the performance problems that often go along with that. There are several examples to check out, and React 18 is now required. (Tanstack Virtual is another option to consider in this space.) Brian Vaughn |
|
|
✉️ From the Inbox |
For a variety of reasons – not least taking a vacation in August (oops!) – I have a backlog of fantastic submissions from people that I want to share separately: |
![]() |
|