Simon Willison Releases llm 0.32 Alpha Series · history
Version 13
2026-05-11 20:01 UTC · 261 items
What
Simon Willison released llm 0.32a0 on April 29, 2026 [1], a major backwards-compatible refactor replacing the prompt/response model with a message-sequence API and typed streaming event parts (text, tool_call_name, tool_call_args, reasoning). A same-day 0.32a1 fixed a SQLite reinflation bug for tool-calling conversations [2]. As of May 11, 2026, the series remains frozen at 0.32a1 — no further alpha or stable release has been detected, and Willison's primary channels have been silent on 0.32 since the April 29 announcement burst [23][24].
Why it matters
The refactor addresses a structural gap in Python LLM tooling: modern models return mixed output types that older single-response abstractions cannot cleanly represent. The same problem is being independently tackled across the ecosystem by Dify developers [16], Jason Liu [18][19], and others, making llm 0.32's specific API design choices potentially influential — or potentially divergent from emerging conventions.
Open questions
When will llm 0.32 reach stable, and are additional alpha releases planned before promotion? [2][1]
Will first-party plugin repos (datasette-llm, llm-hacker-news, llm-docs, llm-openai-via-codex) publish 0.32 compatibility updates, or is the migration burden holding them back? [31][32][30][27][28][29]
What was the substance of the confirmed Hacker News discussion thread for LLM 0.32a0? [14]
Will llm's typed streaming event part API align with or diverge from the backwards-compatibility solutions being independently developed by Jason Liu, Dify, and others? [16][18][19][20]
Narrative
On April 29, 2026, Simon Willison released llm 0.32a0, a major backwards-compatible refactor of his LLM CLI tool and Python library [1]. The core architectural change replaces a prompt/response model with a message-sequence API, allowing full prior conversations to be injected without depending on SQLite [1]. Responses are now streamed as typed event parts — text, tool_call_name, tool_call_args, and reasoning — giving downstream consumers a clean way to handle the mixed-type outputs that modern models return. As Willison put it: 'Many of today's models return mixed types of content. A prompt run against Claude might return reasoning output, then text, then a JSON request for a tool call, then more text content.' [1] A new to_dict/from_dict serialization mechanism decouples the library from SQLite, letting Python API users store and restore responses in any storage layer. The CLI also gained visual differentiation: thinking tokens render in a different color and stream to stderr, keeping piped output clean [1]. A second alpha, 0.32a1, shipped the same day to fix a bug where tool-calling conversations were not correctly reinflated from SQLite storage [2].
The release generated a rapid amplification wave. Willison announced it across X/Twitter, Fediverse, and Bluesky [3][4][5], and within 48 hours the announcement was indexed by at least seven neutral third-party aggregators and newsletters: Let's Data Science [6], daily.dev [7], myaiguide.co [8], NewReleases.io [9], AI Builder Pulse [10], AI Builders Digest [11], and inference.finepocket.app [12]. A specialized analytical piece from explore.n1n.ai framed the refactor as 'a major step for Python-based AI tooling' [13]. A Hacker News discussion thread is confirmed to exist (item 47959504) [14] but its content remains unverified. One social media voice, @MiraUncountable, endorsed the backwards-compatible approach specifically, calling it 'the bravest kind' of refactor [15] — the only normative judgment detected in the public reaction.
The broader Python LLM tooling ecosystem is independently converging on the same problems llm 0.32 addresses. Dify developers opened a GitHub issue to add optional reasoning_content to LLMResultChunkDelta [16], and Dify users are actively discussing how to process thinking parts of LLM responses [17]. Jason Liu's work on making LLMs backwards compatible is documented across a YouTube video [18], a DagHub article [19], and a YouTube Music podcast [20]. Erik Wilde posted on LinkedIn about upgrade incompatibility in LLM tooling [21]. These parallel efforts raise the question of whether llm's specific typed-event-part API design will converge with or diverge from what the rest of the ecosystem adopts.
Despite the release-day activity, Willison's primary update channels — his Substack newsletter [22], annotated-release-notes tag page [23], and agentic-engineering tag page [24] — have shown no new 0.32 content since the April 29 burst. No first-party plugin repo (datasette-llm [25], datasette-llm-usage [26], llm-hacker-news [27][28], llm-docs [29], llm-openai-via-codex [30]) has published a 0.32 compatibility update, despite the plugin ecosystem having been actively shipping in the weeks before the refactor — datasette-llm-usage 0.2a0 shipped as recently as April 1 [26]. The series remains frozen at 0.32a1, and the story has shifted from release burst to a waiting period for further alpha iterations or stable promotion.
Timeline
- 2026-03-31: LLM 0.30 released — prior stable release establishing the baseline before the 0.32 alpha series [78]
- 2026-04-01: datasette-llm-usage 0.2a0 released — first-party Datasette LLM usage tracking plugin actively shipping weeks before the 0.32 alpha announcement [26]
- 2026-04-24: LLM 0.31 released (approximate) — intermediate release between 0.30 and the 0.32 alpha series; specific changes unverified. Willison also published a blog post about Claude Code quality reports on the same date. [77][39]
- 2026-04-29: LLM 0.32a0 released: major backwards-compatible refactor replacing prompt/response model with message-sequence API, adding typed streaming event parts and to_dict/from_dict serialization [1][33][34]
- 2026-04-29: LLM 0.32a1 released same day to fix bug where tool-calling conversations were not correctly reinflated from SQLite [2][35]
- 2026-04-29: Willison posts about 0.32a0 on X/Twitter, Fediverse, and Bluesky; third-party aggregators begin indexing the announcement; GitHub issue #1425 opens to track the release; AI Builders Digest April 29 newsletter covers the release [3][6][7][4][5][79][11]
- 2026-04-30: Dedicated third-party analytical piece on the 0.32a0 refactor indexed from explore.n1n.ai; AI Builder Pulse newsletter covers the release; Hacker News discussion thread for LLM 0.32a0 submitted (HN item 47959504); inference.finepocket.app indexes 0.32a0 [13][80][81][82][83][84][10][14][12]
- 2026-05-01: Instagram post about 0.32 core rewrite indexed; myaiguide.co and NewReleases.io index 0.32a0; cluster of plugin infrastructure GitHub issues surfaced; no plugin compatibility updates from first-party plugin repos [85][5][4][86][87][88][9][8][67][68][69][70][71][72]
- 2026-05-02: plantis.ai indexes both 0.32a0 and 0.32a1 release notes; DagHub article on Jason Liu backwards compatibility detected; @MiraUncountable X/Twitter endorsement of backward-compat refactors; Jason Liu YouTube Music podcast detected; first-party plugin repos re-indexed without 0.32 updates [3][42][43][73][89][90][19][31][32][30][15][20][27][28][29]
Perspectives
Simon Willison
Advocates for the architectural refactor as a necessary response to modern LLMs' mixed-type outputs (reasoning, text, tool calls). Treats the alpha series as iterative public development, shipping a fix the same day as the initial alpha. Active across Fediverse, Bluesky, Instagram, and X/Twitter on release day.
Evolution: consistent — no new statements detected after the April 29 release burst; primary update channels (Substack newsletter, agentic-engineering tag page, atom feed, annotated-release-notes tag page) silent on 0.32 since release day
Reactive social voices (@MiraUncountable)
Endorses the backwards-compatible refactor approach specifically, framing it as the 'bravest kind' of refactor — a positive normative judgment about the difficulty and value of the work rather than a technical analysis.
Evolution: consistent — single endorsement detected, no subsequent activity
Hacker News community
A discussion thread for LLM 0.32a0 is confirmed to exist (HN item 47959504); content quality and depth of discussion remain unverified.
Evolution: unchanged — 0.32 thread detected but content still unread
Third-party tech aggregators and newsletters (Let's Data Science, daily.dev, myaiguide.co, plantis.ai, AI Builder Pulse, AI Builders Digest, inference.finepocket.app)
Neutral amplification — republishing Willison's announcement without original analysis or critique.
Evolution: unchanged — no new aggregator coverage detected after the initial burst; total distinct outlets remains seven
Specialized AI content sites (explore.n1n.ai)
Analytical framing of the 0.32a0 refactor as significant for Python-based AI tooling broadly.
Evolution: consistent — no new content detected after the initial April 30 analytical piece
Broader LLM tooling ecosystem (Dify users and developers, Erik Wilde, Jason Liu / DagHub)
Independently grappling with the same backwards-compatibility and typed-streaming-event problems that motivated llm 0.32. Jason Liu's work documented across three formats: YouTube video, DagHub article, and YouTube Music podcast.
Evolution: unchanged — no new ecosystem voices or formats detected
First-party Datasette plugin ecosystem (datasette-llm, datasette-llm-usage, llm-hacker-news, llm-docs, llm-openai-via-codex)
No public update or migration statement for 0.32 compatibility detected across any first-party plugin repo. datasette-llm-usage 0.2a0 (April 1) confirms ecosystem was actively shipping before the refactor.
Evolution: unchanged — migration silence confirmed across multiple cycles for at least five distinct plugin repos
Tensions
- The 0.32 series is explicitly alpha: it is unclear how many breaking changes plugin authors face and whether the new message-sequence API will stabilize before a stable release. [1][2]
- The new to_dict/from_dict mechanism decouples the library from SQLite, but the same-day SQLite bug fix in 0.32a1 suggests the two storage paths are not yet equally exercised. [1][2][35]
- A Hacker News discussion thread for LLM 0.32a0 is confirmed to exist but its content remains unverified, leaving the depth and quality of community reaction unknown. [14][40]
- At least five first-party plugin repos have been indexed without any 0.32 compatibility update, despite the plugin ecosystem being actively shipping immediately before the refactor — suggesting either that authors are waiting for stable or that the migration burden is non-trivial. [67][68][69][70][71][72][73][74][25][26][59][31][32][30][27][28][29]
- The broader Python LLM tooling ecosystem (Dify, Jason Liu, Erik Wilde) is independently converging on the same typed-streaming-plus-backwards-compatibility problem that llm 0.32 addresses — raising the question of whether llm's specific API choices will align with or diverge from the solutions others adopt. [16][21][18][17][75][76][19][20][58]
- LLM 0.31 appears to have shipped approximately April 24, just five days before the 0.32a0 architectural refactor, but its contents and scope remain unverified. [77][78][1][39]
Sources
- [1] LLM 0.32a0 is a major backwards-compatible refactor — Simon Willison (2026-04-29)
- [2] llm 0.32a1 — Simon Willison (2026-04-29)
- [3] LLM 0.32a0 is a major backwards-compatible refactor — reactive:simon-willison-llm-032
- [4] Simon Willison: "The LLM Python library support…" — reactive:simon-willison-llm-032
- [5] Post by @simonwillison.net — reactive:simon-willison-llm-032
- [6] llm CLI package releases version 0.32a0 - Let's Data Science — reactive:simon-willison-llm-032
- [7] LLM 0.32a0 is a major backwards-compatible refactor — reactive:simon-willison-llm-032
- [8] LLM library releases 0.32a0 alpha with backwards-compatible refactor — reactive:simon-willison-llm-032
- [9] simonw/llm 0.32a0 on GitHub - NewReleases.io — reactive:simon-willison-llm-032
- [10] AI Builder Pulse — 2026-04-30 - Buttondown — reactive:simon-willison-llm-032
- [11] AI Builders Digest — Wednesday, April 29, 2026 • Buttondown — reactive:simon-willison-llm-032
- [12] `LLM` 0.32a0 refactors its core abstraction for modern multimodal ... — reactive:simon-willison-llm-032
- [13] LLM 0.32a0 Refactor: A Major Step for Python-Based AI Tooling — reactive:simon-willison-llm-032
- [14] LLM 0.32a0 is a major backwards-compatible refactor | Hacker News — reactive:simon-willison-llm-032
- [15] backward-compat refactors are the bravest kind — reactive:simon-willison-llm-032
- [16] feat: add optional reasoning_content to LLMResultChunkDelta #227 — reactive:simon-willison-llm-032
- [17] How to properly process the thinking parts of the LLM response? — reactive:simon-willison-llm-032
- [18] Jason Liu: Making LLMs backwards compatible - YouTube — reactive:simon-willison-llm-032
- [19] Making LLMs Backwards Compatible with Jason Liu — reactive:simon-willison-llm-032
- [20] Making LLMs Backwards Compatible with Jason Liu — reactive:simon-willison-llm-032
- [21] Erik Wilde's Post - LinkedIn — reactive:simon-willison-llm-032
- [22] Simon Willison's Newsletter | Substack — reactive:simon-willison-llm-032
- [23] Simon Willison on annotated-release-notes — reactive:simon-willison-llm-032
- [24] Simon Willison on agentic-engineering — reactive:simon-willison-llm-032
- [25] datasette-llm - GitHub — reactive:simon-willison-llm-032
- [26] Release: datasette-llm-usage 0.2a0 - Simon Willison's Weblog — reactive:simon-willison-llm-032
- [27] Issues · simonw/llm-hacker-news — reactive:simon-willison-llm-032
- [28] simonw/llm-hacker-news — reactive:simon-willison-llm-032
- [29] simonw/llm-docs — reactive:simon-willison-llm-032
- [30] Releases · simonw/llm-openai-via-codex - GitHub — reactive:simon-willison-llm-032
- [31] Releases · simonw/llm-hacker-news - GitHub — reactive:simon-willison-llm-032
- [32] Releases · simonw/llm-docs - GitHub — reactive:simon-willison-llm-032
- [33] llm 0.32a0 — Simon Willison (2026-04-29)
- [34] LLM 0.32a0 is a major backwards-compatible refactor — reactive:simon-willison-llm-032
- [35] Release: llm 0.32a1 — reactive:simon-willison-llm-032
- [36] Simon Willison on python — reactive:simon-willison-llm-032
- [37] Elsewhere — reactive:simon-willison-llm-032
- [38] LLM predictions for 2026, shared with Oxide and Friends — reactive:simon-willison-llm-032
- [39] An update on recent Claude Code quality reports — reactive:simon-willison-llm-032
- [40] Unrelated: Yuck. a lot of those replies have LLM smells. Do people love being a ... | Hacker News — reactive:simon-willison-llm-032
- [41] LLM plugin for pulling content from Hacker News - Y Combinator — reactive:simon-willison-llm-032
- [42] Release: llm 0.32a1 - The AI Conductor Framework — reactive:simon-willison-llm-032
- [43] Release: llm 0.32a0 - The AI Conductor Framework — reactive:simon-willison-llm-032
- [44] The AI Conductor Framework: Introduction — reactive:simon-willison-llm-032
- [45] Module 1: Introduction - The AI Conductor Framework — reactive:simon-willison-llm-032
- [46] Cultivating an AI-Friendly Codebase - The AI Conductor Framework — reactive:simon-willison-llm-032
- [47] ai-systems - Introduction - The AI Conductor Framework — reactive:simon-willison-llm-032
- [48] open-models - Introduction - The AI Conductor Framework — reactive:simon-willison-llm-032
- [49] Module 3: Performance & Polish - The AI Conductor Framework — reactive:simon-willison-llm-032
- [50] ai-technology - Introduction - The AI Conductor Framework — reactive:simon-willison-llm-032
- [51] Overview of the 3-Act Workflow - The AI Conductor Framework — reactive:simon-willison-llm-032
- [52] Step 2: Idea Shaping - Introduction - The AI Conductor Framework — reactive:simon-willison-llm-032
- [53] n1n.ai: Enterprise Unified LLM API Gateway (One Key for All Models) — reactive:simon-willison-llm-032
- [54] ai-agents — reactive:simon-willison-llm-032
- [55] LLM Library | Enterprise Unified LLM API Gateway (One Key for All ... — reactive:simon-willison-llm-032
- [56] Refactoring | Enterprise Unified LLM API Gateway ... — reactive:simon-willison-llm-032
- [57] n1n.ai: Unified LLM API Gateway & OpenAI Proxy (One Key for All) — reactive:simon-willison-llm-032
- [58] High Agency Pydantic over VC Backed Frameworks — reactive:simon-willison-llm-032
- [59] Datasette Plugins — reactive:simon-willison-llm-032
- [60] If I had to start with LLM from scratch, I'd learn these 30 concepts — reactive:simon-willison-llm-032
- [61] ️ Improving AI With Command Line Tools (2026-04-12) - YouTube — reactive:simon-willison-llm-032
- [62] How to Actually Learn LLMs in 2026 | Ex-Google, Microsoft Engineer — reactive:simon-willison-llm-032
- [63] llm-logs-feedback with Matthias Lübken - YouTube — reactive:simon-willison-llm-032
- [64] The Big LLM Architecture Comparison - YouTube — reactive:simon-willison-llm-032
- [65] The Big LLM Architecture Comparison Part 1 - YouTube — reactive:simon-willison-llm-032
- [66] Mastering Prompt Engineering & LLMs: Skills You Need in 2026 — reactive:simon-willison-llm-032
- [67] Plugin hook: register_models #53 - simonw/llm - GitHub — reactive:simon-willison-llm-032
- [68] register_models(model_aliases=) parameter · Issue #1389 - GitHub — reactive:simon-willison-llm-032
- [69] [Performance] llm prompt calls register_models hooks twice #1259 — reactive:simon-willison-llm-032
- [70] Handle plugins that crash during load · Issue #1280 · simonw/llm — reactive:simon-willison-llm-032
- [71] llm loses track of plugins when upgraded (with uv and others) #575 — reactive:simon-willison-llm-032
- [72] OpenAI default plugin should support registering additional models — reactive:simon-willison-llm-032
- [73] simonw/llm - register_template_loaders plugin hook - GitHub — reactive:simon-willison-llm-032
- [74] register_template_loaders plugin hook #809 - simonw/llm - GitHub — reactive:simon-willison-llm-032
- [75] Streaming Tool Calls · Issue #640 · pydantic/pydantic-ai - GitHub — reactive:simon-willison-llm-032
- [76] How streaming LLM APIs work | Simon Willison’s TILs — reactive:simon-willison-llm-032
- [77] Release: llm 0.31 — reactive:simon-willison-llm-032
- [78] Release: llm 0.30 — reactive:simon-willison-llm-032
- [79] Release 0.32a0 · Issue #1425 · simonw/llm - GitHub — reactive:simon-willison-llm-032
- [80] Yet Another LLM Rant - Hacker News — reactive:simon-willison-llm-032
- [81] LLMs can be exhausting | Hacker News — reactive:simon-willison-llm-032
- [82] Im genuinely blown away by llms. I'm an artist who've ... - Hacker News — reactive:simon-willison-llm-032
- [83] LLMs are bullshitters. But that doesn't mean they're not useful — reactive:simon-willison-llm-032
- [84] This is frankly one of the most frustrating things about LLMs — reactive:simon-willison-llm-032
- [85] LLM 0.32 just rewrote its core — and everything still ... - Instagram — reactive:simon-willison-llm-032
- [86] Ability to "reply" to a tool-response with a prompt carrying those tool ... — reactive:simon-willison-llm-032
- [87] Documentation on how to implement tool usage for model plugins — reactive:simon-willison-llm-032
- [88] c" should automatically include tools from "llm -T" in the initial prompt ... — reactive:simon-willison-llm-032
- [89] Releases — reactive:simon-willison-llm-032
- [90] Plugins - LLM — reactive:simon-willison-llm-032