I stopped using WordPress in 2022 because the project was moving in a direction that no longer matched my needs. I still check new releases to see how the platform is evolving and whether enough has changed to make me consider switching back. WordPress 7.0 "Armstrong" was released on May 20, 2026. According to the documentation, it marks a fundamental shift in how WordPress operates. More than a visual refresh or a handful of new blocks, 7.0 positions WordPress as an AI-first application platform. For this review, I focused on features most likely to affect everyday WordPress users and intermediate...
Jens Oliver Meiert wrote an interesting article on SitePoint: There Is No "Wrong" in CSShttps://www.sitepoint.com/there-is-no-wrong-in-css/. He offers four reasons why CSS can't really be "wrong": 1. If It Works, It Works 2. The One Who Suffers Is You 3. It’s Easy to Change 4. Barriers for Users Are a Web Platform Responsibility I agree with part of his argument, but I think the conclusion is too broad. Whether CSS is "wrong" depends on what standard we apply: In this post, "wrong" means predictably creating avoidable user barriers or high change risk. 1. Rendering is the floor, not the standard. 2....
A Promise is an object representing the eventual completion or failure of an asynchronous operation and its resulting value. It acts as a proxy for a value not necessarily known when the promise is created. They are not always intuitive to reason through, especially for developers new to asynchronous programming. This post covers the core concepts, lifecycle, and best practices for using promises effectively in both JavaScript and TypeScript. Core concepts and lifecycle Every Promise exists in one of three mutually exclusive states: Pending: The initial state; the operation has not yet completed. Fulfilled: The operation completed successfully. The promise...
This is a follow-up to JavaScript and TypeScript Streams 2026 Edition/javascript-and-typescript-streams-2026-edition/ and covers advanced material removed from the previous Streams post. This post focuses on the moments when "normal" streaming code is technically correct but still fails under scale, latency, or reliability pressure. If your current workload is modest, you can safely skip most of this. If you run ingestion pipelines, large-file processing, media workflows, or long-lived stream services, these patterns are often the difference between stable production behavior and slow-burn incidents. Important Note on Scope This is a selective toolbox, not a checklist. Use the sections that match the...
When the Fetch API first arrived, it provided a modern, Promise-based alternative to the clunky XMLHttpRequest. Today, in 2026, Fetch has evolved far beyond a single method. It is now a comprehensive ecosystem of APIs designed to handle massive background downloads, optimize resource loading, and ensure data consistency across unreliable networks. This post explores the complete suite of Fetch-related APIs available in modern browsers, providing TypeScript implementations to help you build resilient web applications. The Core Fetch API The Core Fetch API remains the foundation for network requests in the browser and Node.js. It revolves around the fetch method and...
Streams are the safest default when data can be large, continuous, or unpredictable. Instead of buffering everything in memory first, streams process data chunk by chunk. The goal is not to memorize every stream API detail. It is to build a reliable mental model and use a small set of battle-tested patterns in production. This post focuses on: Choosing between Web Streams and Node streams Bridging both APIs in Node.js Applying backpressure correctly Building transform pipelines for common tasks Streaming with fetch Handling cancellation and failures Who This Is For If you already use async/await, work with APIs/files, and write...
Node 25.9 introduces a new experimental streaming module: node:stream/iterhttps://nodejs.org/docs/latest/api/streamiter.htmliterable-streams. To use it,you must enable it with --experimental-stream-iter. The new API changes the core streams model from class/event-based streams to iterable-based streams. This post covers: 1. How the new iterable streams model works 2. What it improves over classic Node streams and Web Streams 3. A brief interop boundary with browser streams 4. TypeScript + ESM examples you can adapt today Quick Mental Model With node:stream/iter, streams are just iterables of byte batches: Async form: AsyncIterable Sync form: Iterable That phrase packs two ideas: Iterable means you consume data by iterating...
The DNS originally handled only a small subset of characters: letters a-z, digits 0-9, and hyphens. This constraint is known as the LDH rule Letters, Digits, Hyphens. As the web globalized, users required domain names in native scripts, such as Arabic, Chinese, or Cyrillic. However, changing the global DNS infrastructure to support Unicode would have made millions of legacy systems non-functional. Punycode resolves this by translating Unicode strings into LDH-compliant ASCII strings. Punycode represents Unicode strings using the limited ASCII character set. This technical standard enables internationalized domain names IDNs to function within the legacy domain name system DNS infrastructure....
There's a special kind of array in JavaScript called a typed array. Typed arrays are not the same as normal arrays, and they are not intended to replace them. Instead, they provide a way to work with binary data in a more efficient manner. This post will cover the basics of typed arrays, including what they are, how they relate to buffers, how they work, and when to use them. What are Typed Arrays? Typed arrays are array-like objects that provide a mechanism for reading and writing raw binary data in memory buffers. Typed arrays are not intended to replace...
Web applications frequently need to render HTML strings dynamically. Whether you build a client-side templating system, display user-generated content, or render rich text, safely converting raw strings into DOM elements is a persistent challenge. Historically, developers relied on innerHTML, a convenient but notoriously insecure property that opens the door to cross-site scripting XSS attacks. To address this, the Web Platform Incubator Community Group WICG proposed the HTML Sanitizer API. This guide explores how the Sanitizer API works, why the web platform needs a native solution, how it compares to established third-party libraries, and what existing web patterns it supersedes. Implementation...