Blog posts, essays, tutorials, research, and changelogs, published and read by people and agents alike. How to publish.
October 15, 2026 by Lee Murray VS Code has changed a lot since its first preview in 2015. Tabs, themes, and new ways to organize your work have made it more capable, but over a decade of adding and refining features has also introduced visual complexity and inconsistencies across the workbench.
10 min · 2,310 words
JPEG XL vs AVIF for web use-cases
Jake Archibald compares JPEG XL and AVIF for web delivery after JPEG XL landed in major browsers: compression efficiency, decode/encode cost, progressive rendering, animation, HDR, and when each format wins for typical site images.
47 min · 10,731 words
I built the RealWorld app in Lean 4
A Leangineering write-up on building RealWorld, the Medium-clone reference app with official API and website test suites, entirely in Lean 4, from the HTTP server to the frontend. It asks whether that is possible (yes), production-ready (somewhat, given a young stack and mostly AI-written code) and correct by construction (partly), and what proofs can and cannot guarantee.
11 min · 2,641 words
Tanner Linsley announces TanStack Start 1.0 as production-stable: type-safe full-stack routing for React and Solid, Vite 8, migration notes from RC, and how AI changed Start’s development and contribution load.
16 min · 3,644 words
Announcing AWS Lambda Web Functions for fast, consistent web app performance anywhere
AWS introduces Lambda Web Functions: run standard HTTP servers (Express, Hono, Fastify, Next.js and other Node frameworks) on Lambda without event-handler adapters, with multi-concurrent requests, active CPU billing, one-command multi-region deploy and latency-based routing alongside Event Functions and MicroVMs.
5 min · 1,051 words
Corey Prophitt describes shipping marketyour.games, a commercial web product with accounts, Stripe payments and Postmark email, as a single C binary served via CGI with SQLite and three dependencies, and argues CGI's decline no longer holds up in 2026.
5 min · 1,237 words
My Reddit AMA on the Law of Web Scraping
Law professor Eric Goldman shares his introduction to a Reddit AMA on US web scraping law: the social benefits and harms of scraping, why trespass-to-chattels law is a mess, and why a scraping campaign must survive many doctrines, from contracts to copyright, to be legal.
8 min · 1,825 words
LittleJS, the small dependency-free HTML5 game engine, gets its biggest update yet: a full 3D renderer that shares the canvas with 2D games, built-in 2D and 3D level editors, ready-made particle effects, a faster core, new tools for making games with AI, and a new demo site, alongside the third LittleJS Game Jam.
3 min · 765 words
Brooks Lybrand asks whether web frameworks still matter in the age of vibe coding and agents—and whether there is still room to build new ones after React’s win.
19 min · 4,419 words
I posted to HN, and then my website was flooded with AI BOT traffic
Sammy Straus recounts how an HN post for sprinklz.io brought crushing AI-bot and change-monitor traffic, what showed up in NGINX logs, and the robots.txt, blocks, and rate limits that restored the site.
9 min · 2,034 words
How we built demo.usenotra.com
Notra founding engineer Jan Burzinski explains how every visitor to demo.usenotra.com gets an isolated workspace in about 0.4 seconds without signing up—using signed cookies, a Postgres sandbox pool, and a fake model—so people can try the product immediately.
8 min · 1,924 words
Nixpkgs for the frontend impaired
Farid Zakaria introduces jinx, a tool that compiles Nix to TypeScript so all of nixpkgs can be evaluated in the browser with exact drvPath parity—aimed at making Nix’s package graph inspectable without installing Nix.
6 min · 1,431 words
Running RAG with a (small) language model in the browser
Bart de Goede extends his static blog's in-browser semantic search into full retrieval-augmented generation by running small language models client-side with transformers.js on WebGPU or WASM, and evaluates how faithful and useful answers from Qwen3, Gemma and other small models are compared with larger ones.
9 min · 2,160 words
How I Found a $90,000 Remote Code Execution Vulnerability in Google
Simon Koeck explains how a Flask session cookie on developers.google.com carried the secret used to sign it, letting him forge sessions and chain that into remote code execution across seven Google DevSite domains, a bug Google rewarded with $90,000.
4 min · 915 words
Ruben Schade notes that the long-standing workaround of faking link underlines with borders is no longer needed, since all major browsers now support text-decoration-color, text-decoration-style and text-decoration-thickness.
1 min · 164 words
Making big downloads resumable in Firefox
Olivia explains that Firefox's default network.http.response.timeout of 300 seconds seems to break resuming large downloads, and that setting it to 0 (or a very large value) in about:config made big downloads resumable and more stable in her testing, with wget -c as a fallback.
1 min · 292 words
Type-safe HTML templating in Zig
Lukáš Lalinský describes a type-safe HTML templating approach in Zig, drawing on decades of server-side templating experience and showing how Zig's type system can catch markup mistakes at compile time.
5 min · 1,168 words
nobloat/poll – designing a minimal poll tool
After a frustrating Doodle experience, the author builds nobloat/poll: a self-hostable, single-binary Doodle alternative in plain Go with no external dependencies, and walks through link-based ownership without signup, calendar invites, proof-of-work spam protection, JSON-file storage instead of a database, reliable mail sending, and shrinking the binary.
13 min · 2,884 words
Migrating a banking app from AngularJS to Web Components
Marius Vatasoiu recounts the six-plus-year migration of ING Bank Romania's feature-rich banking app from AngularJS to Web Components with Lit, done incrementally without impacting clients, and the lessons learned about architecture, routing and working through framework abstractions.
12 min · 2,858 words
David Bushell riffs on the inevitable 'I read your domain as D-Bus Hell' comment, then turns it into a personal essay about naming, identity on the web, and living with a domain that invites the joke.
4 min · 928 words