Fetching from the wire…
Public story · 2026-08-16 · high
He tested it running identical prompts against a local Qwen model on an M5 MacBook Pro and an NVIDIA DGX Spark, then against OpenRouter.
Why now: Willison posted the code and write-up on August 15, testing it against local and hosted models the same day.
Simon Willison shipped CORS Chat, a browser-only client for any CORS-enabled OpenAI Responses endpoint, no server in between, per his August 15 write-up. It's built for anyone testing a local model against a hosted one. Point the page at a different endpoint and the interface stays the same, no backend required. Conversations live in the browser and export as JSON.
To test it, he ran identical prompts against Qwen 3.8 27B, served locally by LM Studio with its --cors flag on. He ran them first on an M5 MacBook Pro, then an NVIDIA DGX Spark, and again through OpenRouter for comparison.
Two details stand out. CORS Chat sets custom headers per endpoint, one of two things Willison calls worth copying. The other: SVG images draw progressively while tokens are still streaming in, rather than waiting on the full response.
The code itself, per the post, was written by GPT-5.6-Sol at xhigh.
What CORS Chat actually proves: a --cors flag on a local model server, plus a static HTML page, is enough to skip a backend. That's true only for one developer testing endpoints they configured themselves. Willison controls both the browser tab and the server behind it. The write-up doesn't say what changes once an endpoint faces the open internet.
Each link below shares sources, entities, or timing with this story.
LLM supports LM Studio / Shared entities / Same source domain / Earlier coverage
Linked by a graph relationship (LLM supports LM Studio); both cover OpenRouter, Simon Willison, SVG; reported by the same outlet (simonwillison.net).
CORS Chat built by Simon Willison / Shared entities / Same source domain / Earlier coverage / Tension
Linked by a graph relationship (CORS Chat built by Simon Willison); both cover GPT, Simon Willison; reported by the same outlet (simonwillison.net).
Linked by a graph relationship (CORS Chat built by Simon Willison); both cover Qwen, Simon Willison; reported by the same outlet (simonwillison.net).
LLM supports LM Studio / Shared entity: GPT / Same source domain / Shared topic / Earlier coverage
Linked by a graph relationship (LLM supports LM Studio); both cover GPT; reported by the same outlet (simonwillison.net).
CORS Chat built by Simon Willison / Shared entities / Same source domain / Earlier coverage / Tension
Linked by a graph relationship (CORS Chat built by Simon Willison); both cover GPT, Simon Willison; reported by the same outlet (simonwillison.net).
CORS Chat built by Simon Willison / Shared entities / Same source domain / Earlier coverage
Linked by a graph relationship (CORS Chat built by Simon Willison); both cover GPT, Simon Willison; reported by the same outlet (simonwillison.net).
Linked by a graph relationship (CORS Chat built by Simon Willison); both cover GPT, Simon Willison; reported by the same outlet (simonwillison.net).
LLM supports LM Studio / Shared entities / Same source domain / Earlier coverage
Linked by a graph relationship (LLM supports LM Studio); both cover JSON, Simon Willison; reported by the same outlet (simonwillison.net).