About a month ago
- The proposal period for Interop 2027 closed in late September, which means the Interop team is now in the process of working through all the proposals and ultimately deciding which will be taken on next year. Part of that process is looking at “developer signals”, which is a...
- For the second time, Firefox made a page that lets you rank the Interop 2027 features that you care about. Interop is an effort by multiple companies involved in shaping the web to make the platform more interoperable. This is your very low-effort option to contribute to the...
- My notes from this talk by Alexander Petros at Big Sky DevCon 2026. Alex starts by noting how “modernize” used to mean something along the lines of “update this thing that was made before I was born”. But now “modernize” means something more like “update this thing from 5-10...
about 1 month ago
- There’s a new web platform feature flighting in Chromium called Declarative Partial Updates. This proposal adds a new <?marker> element which enables out-of-order streaming of content. Rather than the traditional way of building the HTML you need on the server, or sending JSON...
- Most of this month we spent at the Polish seaside, with family and friends, chilling at the Baltic Sea, playing cards, grilling fresh fish and enjoying a poor internet connection. The rest of the month I spent trying to understand the madness that happened at work during my...
3 months ago
- I made a smol client-side syntax highlighter that uses the CSS Custom Highlights API called MicroLighter. I’ll talk about why I made it in a bit but first I wanted to… ahem… highlight… some of the features. Zero-dependencies ~2kb minifed+gzipped Uses CSS ::highlight(token-name),...
- I wanted to see how difficult it would be to add Go's defer statement to the TypeScript compiler, but by the time I finished I was convinced it probably shouldn't exist.In Go, the defer statement delays the execution of a function until the surrounding function finishes. It's...
- End of July? Seriously? Feels like yesterday when I celebrated New Year’s Eve, and all of a sudden it is the end of July. Can we all slow down a little, please? Not a little. Slow down! You, time, the world. Pretty please! I’m in a good mood today, but not in a good one to write...
- Some teams force-reload their single-page web apps (SPAs) every few hours just to clear the memory the app leaked. A Playwright soak test finds the leak instead....
- CodePen v2 is now released! Because I co-host a podcast with Chris I’ve had an up-close perspective at this monumental effort over the last five years. I know how much work has gone into this release and I applaud the team for hitting the finish line. At the crux of the new...
4 months ago
- The reason I write more Go than JavaScript nowadays is not because there is anything wrong with the language, but because I’m tired of the ecosystem. The language on its own is really good, it is the first programming language that I became productive with and I’m still...
- For decades, one of the most notoriously-challenging problems on the web has been sticking one element to another element, for things like tooltips and nested menus. The CSSWG has decided to provide a first-class solution to this problem, and it’s pretty friggin’ cool! In this...
- I made some updates to my notes blog, including a change to how my “Shuffle” feature worked. Figured I’d blog about it. Shuffle? On a Blog? At the time of this writing, I have 974 “notes” that I’ve published. For fun, I have a “shuffle” button that digs up a random note from the...
- I learned about the sys.stdout.isatty() method in Python which allows you to detect if your code is running in a terminal. For example:Pythonimport sys if sys.stdout.isatty(): print("This program is running in a terminal!") else: print("This program is running somewhere else,...
5 months ago
- A developer guide to the Gemini Interactions API, text generation, streaming, multi-turn chat, multimodal inputs, structured output, tool use, managed agents, and background execution from a single endpoint....
- Today we launched a new plugin for Datasette, datasette-apps, with this launch announcement post on the Datasette project blog. That post has the what, but I’m going to expand on …
- Gradient shaderPlanted: May 2026Status: seedIntended Audience: Creative coders and front-end developers with a basic understanding of WebGL shaders.How to create an organic gradient animation using a WebGL shader. If you're new to shaders, check out this note. What we'll make:...
6 months ago
- There are a bunch of JavaScript animation libraries out there, and you might have wondered whether there’s a performance cost compared to traditional CSS transitions and keyframe animations. In this blog post, we’ll compare the same animation across several different strategies...
- Safari and Firefox change how big sites render based on the domain. TikTok, Netflix, Instagram… even SeatGuru. Chrome doesn’t. Why is that?...
- I’ve been posting about how you can make lots of HTML pages and leverage navigations over in-page, JS-dependent interactions. Now I’m gonna post another example. On my icon sites, I have a little widget that allows you to resize the icons you’re looking at. Previously, I...
- I wrote about building websites with LLMs — (L)ots of (L)ittle ht(M)l page(s) — and I think it’s time for a post-mortem on that approach: I like it. I’ve tweaked a few things from that original post but the underlying idea is still the same, which I would describe as: Avoid...
- I have complex feelings about Generative AI but one area I find myself weirdly bullish on is small language models (SLMs) in the browser which are available in Chrome and Edge behind an experimental flag. I know, I know. I know. AI in the browser reeks of a product manager...
- A practical use case for rendering HTML+CSS to a canvas, an emerging API being previewed in Chrome....
7 months ago
- LlamaIndex have a most excellent open source project called LiteParse, which provides a Node.js CLI tool for extracting text from PDFs. I got a version of LiteParse working entirely in …
Rows per page