Sign up

Simon Willison's Weblog

Not verified No WebSub updates Supports Webmention Not yet validated

Author
Simon Willison
Public lists
Featured
Fetched

Simon Willison's Weblog Supports Webmention

Quoting Kenton Varda

After struggling for years trying to figure out why people think [Cloudflare] Durable Objects are complicated, I'm increasingly convinced that it's just that they sound complicated.

Feels like we can solve 90% of it by renaming DurableObject to StatefulWorker?

It's just a worker that has state. And because it has state, it also has to have a name, so that you can route to the specific worker that has the state you care about. There may be a sqlite database attached, there may be a container attached. Those are just part of the state.

Kenton Varda

Tags: kenton-varda, sqlite, cloudflare

Simon Willison's Weblog Supports Webmention

Introducing EmbeddingGemma

Introducing EmbeddingGemma

Brand new open weights (under the slightly janky Gemma license) 308M parameter embedding model from Google:

Based on the Gemma 3 architecture, EmbeddingGemma is trained on 100+ languages and is small enough to run on less than 200MB of RAM with quantization.

It's available via sentence-transformers, llama.cpp, MLX, Ollama, LMStudio and more.

As usual for these smaller models there's a Transformers.js demo (via) that runs directly in the browser (in Chrome variants) - Semantic Galaxy loads a ~400MB model and then lets you run embeddings against hundreds of text sentences, map them in a 2D space and run similarity searches to zoom to points within that space.

Screenshot of The Semantic Galaxy web application interface showing a semantic search tool with a left sidebar containing "Your Dataset" with sample text "The sun peeked through the clouds after a drizzly" and a blue "Generate Galaxy" button, below which is text "Galaxy generated with 106 points. Ready to explore!" followed by "Search Results" listing various text snippets with similarity scores to the search term "pelican riding a bicycle" such as "The cyclist pedaled up the steep hill... 0.491", "It was so hot that even the birds sou... 0.446", etc. The main area shows a dark starfield visualization with white dots representing semantic clusters and text snippets floating as labels near the clusters.

Tags: google, ai, embeddings, transformers-js, gemma

Simon Willison's Weblog Supports Webmention

Highlighted tools

Any time I share my collection of tools built using vibe coding and AI-assisted development (now at 124, here's the definitive list) someone will inevitably complain that they're mostly trivial. A lot of them are! Here's a list of some that I think are genuinely useful and w...

Simon Willison's Weblog Supports Webmention

Beyond Vibe Coding

Beyond Vibe Coding Back in May I wrote Two publishers and three authors fail to understand what “vibe coding” means where I called out the authors of two forthcoming books on "vibe coding" for abusing that term to refer to all forms of AI-assisted development, when Not all A...

Simon Willison's Weblog Supports Webmention

gov.uscourts.dcd.223205.1436.0_1.pdf

gov.uscourts.dcd.223205.1436.0_1.pdf Here's the 230 page PDF ruling on the 2023 United States v. Google LLC federal antitrust case - the case that could have resulted in Google selling off Chrome and cutting most of Mozilla's funding. I made it through the first dozen pages ...

Simon Willison's Weblog Supports Webmention

Making XML human-readable without XSLT

Making XML human-readable without XSLT

In response to the recent discourse about XSLT support in browsers, Jake Archibald shares a new-to-me alternative trick for making an XML document readable in a browser: adding the following element near the top of the XML:
<script
  xmlns="http://www.w3.org/1999/xhtml"
  src="script.js" defer="" />

That script.js will then be executed by the browser, and can swap out the XML with HTML by creating new elements using the correct namespace:

const htmlEl = document.createElementNS(
  'http://www.w3.org/1999/xhtml',
  'html',
);
document.documentElement.replaceWith(htmlEl);
// Now populate the new DOM

Tags: browsers, javascript, rss, xml, xslt, jake-archibald

Simon Willison's Weblog Supports Webmention

Rich Pixels

Rich Pixels

Neat Python library by Darren Burns adding pixel image support to the Rich terminal library, using tricks to render an image using full or half-height colored blocks.

Here's the key trick - it renders Unicode ▄ (U+2584, "lower half block") characters after setting a foreground and background color for the two pixels it needs to display.

I got GPT-5 to vibe code up a show_image.py terminal command which resizes the provided image to fit the width and height of the current terminal and displays it using Rich Pixels. That script is here, you can run it with uv like this:

uv run http://tools.simonwillison.net/python/show_image.py \
  image.jpg

Here's what I got when I ran it against my V&A East Storehouse photo from this post:

Terminal window. I ran that command and it spat out quite a pleasing and recognizable pixel art version of the photograph.

Tags: ascii-art, cli, python, ai, generative-ai, llms, uv, vibe-coding, gpt-5, rich

Simon Willison's Weblog Supports Webmention

August 2025 newsletter

I just sent out my August 2025 sponsors-only newsletter summarizing the past month in LLMs and my other work. Topics included GPT-5, gpt-oss, image editing models (Qwen-Image-Edit and Gemini Nano Banana), other significant model releases and the tools I'm using at the moment.

If you'd like a preview of the newsletter, here's the July 2025 edition I sent out a month ago.

New sponsors get access to the full archive. If you start sponsoring for $10/month or more right now you'll get instant access to the August edition in my simonw-private/monthly GitHub repository.

If you've already read all 85 posts I wrote in August the newsletter acts mainly as a recap, but I've had positive feedback from people who prefer to get the monthly edited highlights over reading the firehose that is my blog!

Tags: newsletter

Simon Willison's Weblog Supports Webmention

Introducing gpt-realtime

Introducing gpt-realtime Released a few days ago (August 28th), gpt-realtime is OpenAI's new "most advanced speech-to-speech model". It looks like this is a replacement for the older gpt-4o-realtime-preview model that was released last October. This is a slightly confusing r...

Simon Willison's Weblog Supports Webmention

Cloudflare Radar: AI Insights

Cloudflare Radar: AI Insights Cloudflare launched this dashboard back in February, incorporating traffic analysis from Cloudflare's network along with insights from their popular 1.1.1.1 DNS service. I found this chart particularly interesting, showing which documented AI cr...

Simon Willison's Weblog Supports Webmention

Claude Opus 4.1 and Opus 4 degraded quality

Claude Opus 4.1 and Opus 4 degraded quality Notable because often when people complain of degraded model quality it turns out to be unfounded - Anthropic in the past have emphasized that they don't change the model weights after releasing them without changing the version nu...

Simon Willison's Weblog Supports Webmention

Quoting Benj Edwards

LLMs are intelligence without agency—what we might call "vox sine persona": voice without person. Not the voice of someone, not even the collective voice of many someones, but a voice emanating from no one at all.

Benj Edwards

Tags: benj-edwards, ai-personality, generative-ai, ai, llms

Simon Willison's Weblog Supports Webmention

Talk Python: Celebrating Django's 20th Birthday With Its Creators

Talk Python: Celebrating Django's 20th Birthday With Its Creators

I recorded this podcast episode recently to celebrate Django's 20th birthday with Adrian Holovaty, Will Vincent, Jeff Triplet, and Thibaud Colas.

We didn’t know that it was a web framework. We thought it was a tool for building local newspaper websites. [...]

Django’s original tagline was ‘Web development on journalism deadlines’. That’s always been my favorite description of the project.

Tags: adrian-holovaty, django, python, podcast-appearances

Simon Willison's Weblog Supports Webmention

The perils of vibe coding

The perils of vibe coding I was interviewed by Elaine Moore for this opinion piece in the Financial Times, which ended up in the print edition of the paper too! I picked up a copy yesterday: From the article, with links added by me to relevant projects: Willison thinks the...

Simon Willison's Weblog Supports Webmention

Lossy encyclopedia

Since I love collecting questionable analogies for LLMs, here's a new one I just came up with: an LLM is a lossy encyclopedia. They have a huge array of facts compressed into them but that compression is lossy (see also Ted Chiang). The key thing is to develop an intuition f...

Simon Willison's Weblog Supports Webmention

Python: The Documentary

Python: The Documentary

New documentary about the origins of the Python programming language - 84 minutes long, built around extensive interviews with Guido van Rossum and others who were there at the start and during the subsequent journey.

Tags: computer-history, guido-van-rossum, python, youtube

Simon Willison's Weblog Supports Webmention

V&A East Storehouse and Operation Mincemeat in London

We were back in London for a few days and yesterday had a day of culture. First up: the brand new V&A East Storehouse museum in the Queen Elizabeth Olympic Park near Stratford, which opened on May 31st this year. This is a delightful new format for a museum. The building...

Simon Willison's Weblog Supports Webmention

Quoting Bruce Schneier

We simply don’t know to defend against these attacks. We have zero agentic AI systems that are secure against these attacks. Any AI that is working in an adversarial environment—and by this I mean that it may encounter untrusted training data or input—is vulnerable to prompt injection. It’s an existential problem that, near as I can tell, most people developing these technologies are just pretending isn’t there.

Bruce Schneier

Tags: prompt-injection, security, generative-ai, bruce-schneier, ai, llms, ai-agents

Simon Willison's Weblog Supports Webmention

Piloting Claude for Chrome

Piloting Claude for Chrome Two days ago I said: I strongly expect that the entire concept of an agentic browser extension is fatally flawed and cannot be built safely. Today Anthropic announced their own take on this pattern, implemented as an invite-only preview Chrome ex...

Simon Willison's Weblog Supports Webmention

Will Smith’s concert crowds are real, but AI is blurring the lines

Will Smith’s concert crowds are real, but AI is blurring the lines

Great piece from Andy Baio demonstrating quite how convoluted the usage ethics and backlash against generative AI has become.

Will Smith has been accused of using AI to misleadingly inflate the audience sizes of his recent tour. It looks like the audiences were real, but the combined usage of static-image-to-video models by his team with YouTube's ugly new compression experiments gave the resulting footage an uncanny valley effect that lead to widespread doubts over the veracity of the content.

Tags: andy-baio, ai, generative-ai, ai-ethics

Simon Willison's Weblog Supports Webmention

Agentic Browser Security: Indirect Prompt Injection in Perplexity Comet

Agentic Browser Security: Indirect Prompt Injection in Perplexity Comet The security team from Brave took a look at Comet, the LLM-powered "agentic browser" extension from Perplexity, and unsurprisingly found security holes you can drive a truck through. The vulnerability w...

Simon Willison's Weblog Supports Webmention

Static Sites with Python, uv, Caddy, and Docker

Static Sites with Python, uv, Caddy, and Docker Nik Kantar documents his Docker-based setup for building and deploying mostly static web sites in line-by-line detail. I found this really useful. The Dockerfile itself without comments is just 8 lines long: FROM ghcr.io/astral...

Simon Willison's Weblog Supports Webmention

Spatial Joins in DuckDB

Spatial Joins in DuckDB Extremely detailed overview by Max Gabrielsson of DuckDB's new spatial join optimizations. Consider the following query, which counts the number of NYC Citi Bike Trips for each of the neighborhoods defined by the NYC Neighborhood Tabulation Areas poly...

Simon Willison's Weblog Supports Webmention

too many model context protocol servers and LLM allocations on the dance floor

too many model context protocol servers and LLM allocations on the dance floor Useful reminder from Geoffrey Huntley of the infrequently discussed significant token cost of using MCP. Geoffrey estimate estimates that the usable context window something like Amp or Cursor is ...

Simon Willison's Weblog Supports Webmention

Quoting The Bluesky Team

Mississippi's approach would fundamentally change how users access Bluesky. The Supreme Court’s recent decision leaves us facing a hard reality: comply with Mississippi’s age assurance law—and make every Mississippi Bluesky user hand over sensitive ...

Simon Willison's Weblog Supports Webmention

DeepSeek 3.1

DeepSeek 3.1 The latest model from DeepSeek, a 685B monster (like DeepSeek v3 before it) but this time it's a hybrid reasoning model. DeepSeek claim: DeepSeek-V3.1-Think achieves comparable answer quality to DeepSeek-R1-0528, while responding more quickly. Drew Breunig poi...

Simon Willison's Weblog Supports Webmention

ChatGPT release notes: Project-only memory

ChatGPT release notes: Project-only memory The feature I've most wanted from ChatGPT's memory feature (the newer version of memory that automatically includes relevant details from summarized prior conversations) just landed: With project-only memory enabled, Chat...

Simon Willison's Weblog Supports Webmention

Quoting potatolicious

Most classical engineering fields deal with probabilistic system components all of the time. In fact I'd go as far as to say that inability to deal with probabilistic components is disqualifying from many engineering endeavors. Process engineers for example have to account ...

Simon Willison's Weblog Supports Webmention

Quoting Matt Garman

I was at a leadership group and people were telling me "We think that with AI we can replace all of our junior people in our company." I was like, "That's the dumbest thing I've ever heard. They're probably the least expensive employees you have, they're the most leaned into your AI tools, and how's that going to work when you go 10 years in the future and you have no one that has built up or learned anything?

Matt Garman, CEO, Amazon Web Services

Tags: ai-ethics, careers, generative-ai, aws, ai

Simon Willison's Weblog Supports Webmention

Quoting Mustafa Suleyman

Simply put, my central worry is that many people will start to believe in the illusion of AIs as conscious entities so strongly that they’ll soon advocate for AI rights, model welfare and even AI citizenship. This development will be a dangerous turn in AI progress and dese...