Recent releases
Release notes for the unreleased changes and the current and previous llamadart minor, with a link to the full changelog for older releases.
This page keeps the unreleased changes and the current and previous minor
releases. Notes for every older release are in
CHANGELOG.md.
For upgrade planning, combine this page with the Upgrade Checklist. For breaking changes, validate against the exact release tag notes.
0.19.4#
- Keep default WebGPU bridge assets at
v0.1.83(unchanged from 0.19.3). -
Add tool calling to LiteRT-LM Web through
LlamaBackend.withTextHistory()on@litert-lm/core@0.19.0:createreturns the model's tool calls and takes tool results in the next request, andsupportsToolCallingreports whether the loaded runtime reads tool declarations;ToolChoice.requiredandparallelToolCallsstill throwLlamaUnsupportedException. Replies cut off atmaxTokensor the context size now end with finish reasonlength, and automatic tool loops (sendWithTools,completeWithTools) run when a load probe finds that the runtime reports per-turn token counts; a reply that ends exactly atmaxTokensalso reportslength(#1790, #919). -
Document that LiteRT-LM Web
generate()wraps the prompt in one user turn of the bundle's chat template, because@litert-lm/core@0.19.0has no raw streaming route (#1863). -
Make native LiteRT-LM errors more specific: a failed chat send on the C API 1.0 runtime names the unadaptable bundle template or
ModelParams.chatTemplate, as the legacy runtime does; an argument error from the worker isolate keepsLlamaArgumentException.name; and the raw-prompt refusal says whether the prompt is empty or holds only the model's start token (#1868, #1861). -
When the prompt opened no thought, take a thought only at the start of the reply, as llama.cpp does: any other thinking tag, such as a
</think>before any<think>, a later<think>or a second</think>, is now content in generic, Llama 3, GLM 4.5, Kimi K2, LFM2, Laguna, Granite, MiniCPM5, Mistral Nemo, Apertus, Hunyuan V3 and DeepSeek R1, V3.2 and V4 replies, and after the start of a Hermes or Qwen3-Coder XML reply. The stream used to depend on how the reply was chunked and could repeat text as both content and reasoning. MiniMax M3 does the same: a<mm:think>after leading whitespace or later in the reply, and a</mm:think>after text, stay content (#1865, #1887). -
Parse Qwen3-Coder XML replies (Qwen3-Coder, Qwen3.5, StepFun3.5-Flash) as llama.cpp does: text from the first
<tool_call>on that is not a valid call, such as an invalid call or text after the calls, is dropped instead of kept as content; only the first call counts withoutparallelToolCalls; Qwen3-Coder replies have no reasoning; and StepFun3.5-Flash with thinking off ends its thought at</think>or<tool_call>. WithToolChoice.required, these replies may think and write text before their calls instead of having to start with<tool_call>, so one that spendsmaxTokensfirst ends withlengthand no call, and a Qwen3-Coder call that leaves out the first<tool_call>is now a tool call (#1531). -
Start Seed-OSS tool calls only at a
<seed:tool_call>followed by a line break, as llama.cpp does, in both the parser and the tool-call grammar: a scope such as<seed:tool_call><function=is now content, and a call after it is still found. An unknown tool or a missing required argument still parses as a call; Seed-OSS requests refuseToolDefinition.fromJsonSchematools, so validate the tool name and arguments before running a call (#1542).
Runtime baseline: native llama.cpp v0.9.0 and Web use upstream v0.9.0@cd959bae99ff4bed22bef2604f45241c09bbb8c8; native LiteRT-LM uses
v0.19.1-2 and stable-diffusion uses v0.3.0-3. Web LiteRT-LM uses @litert-lm/core@0.19.0. Manifest SHA-256:
ae6f488408672f9ba28d8f9e664a2b85f4e12048f290e259e18dd0b750c038e5.
0.19.3#
-
Ship the 0.19.2 changes below, which never reached pub.dev: pub.dev rejected the 0.19.2
CHANGELOG.mdas larger than 256 KiB, so notes for releases before 0.10.0 moved to the changelog archive. - Keep default WebGPU bridge assets at
v0.1.83(unchanged from 0.19.1). -
Fix
dart run llamadart:doctor_native --runtime litert_lmon macOS reportingASSET_NOT_DECLAREDfor a working runtime: it now checks the runtime the build hook keeps in its cache and reportstarget_source: build_hook_cache(#1855). -
Send the prompt unchanged from native LiteRT-LM
generate(), like other backends, instead of wrapping it in the bundle's chat turn, socreate()requests that fall back to a rendered prompt are no longer templated twice. A prompt that already starts with the model's start token, such as Gemma's<bos>, no longer gets a second one; an empty prompt throwsLlamaArgumentException; and pre-1.0 runtime overrides without the conversation template setter refuse rawgenerate()withLlamaUnsupportedException(#1853). -
Report the template native LiteRT-LM renders, such as the embedded Qwen3.5 or Gemma bundle template, in
getMetadata()['tokenizer.chat_template']andengine.chatTemplate(...), whosetokenCountmatches the runtime's prefill for Gemma 4 and Qwen3.5. Format detection and parsing keep the file-name template, now reported asllamadart.chat_template.parsing, so code that detects the format fromtokenizer.chat_templateshould read that key first. Native JSON Schema chat now refuses bundles whose text chats the runtime renders with its own template, matching generation (#1836). - Fix native LiteRT-LM chat failing with "Failed to apply template" on a bundle whose chat template concatenates message content as a string; llamadart now adapts such a template on the bundled C API 1.0 runtime too (#1867).
-
Keep the start of a tag a finished reply ends in, such as
</thiwhen generation stops mid-tag, in an unended thought's reasoning, as llama.cppv0.9.0does; it used to be dropped (#1531). -
Keep a
</think>that comes before any<think>in a Hermes, Qwen3-Coder XML or DeepSeek V3 reply as content, with every thinking tag after it, when the prompt opened no thought (such as Qwen3 with thinking on), as llama.cpp does. The result used to depend on how the stream was chunked and could repeat the text before the tag as both content and reasoning (#1858).
Runtime baseline: native llama.cpp v0.9.0 and Web use upstream v0.9.0@cd959bae99ff4bed22bef2604f45241c09bbb8c8; native LiteRT-LM uses
v0.19.1-2 and stable-diffusion uses v0.3.0-3. Web LiteRT-LM uses @litert-lm/core@0.19.0. Manifest SHA-256:
ae6f488408672f9ba28d8f9e664a2b85f4e12048f290e259e18dd0b750c038e5.
0.19.2#
Not published: pub.dev rejected the upload because CHANGELOG.md exceeded its 256 KiB limit. Its changes ship in 0.19.3.
0.19.1#
- Keep default WebGPU bridge assets at
v0.1.83(unchanged from 0.19.0). -
Adopt native LiteRT-LM
v0.19.1-2, which reports LiteRT linked in process; the C API is unchanged. Linux and Windows native embeddings needv0.19.1-2or later, the bundled runtime: an explicit olderLLAMADART_LITERT_LM_LIB_DIRruntime, includingv0.19.1-1, is refused withLlamaUnsupportedException, where customv0.19.0andv0.19.1runtimes used to crash (#1367). -
Stop bundling and loading the unused prebuilt
libLiteRt(about 7 to 9 MB) in Linux and Windows LiteRT-LM apps, whose runtime links LiteRT in; an olderLLAMADART_LITERT_LM_LIB_DIRruntime still loads thelibLiteRtit ships with (#1815). -
Refuse LiteRT-LM GPU on Linux when every Vulkan device is a software rasterizer such as Mesa llvmpipe, where small models could return wrong text:
ComputeDevice.gputhrowsLlamaUnsupportedExceptionat load, and a GPU hint underComputeDevice.autoruns on the CPU with a warning (#572). -
Fix native LiteRT-LM
disposefailing with "worker stopped before native cleanup was confirmed" when cleanup outlasts 5 s, such as releasing a freshly written CPU weight cache on Linux ext4;freeTimeoutnow bounds only the wait for native teardown to start (#1814). -
Fix model cache
clear,removeandpruneon Windows failing with "Access is denied" when another process or isolate was deleting the same entry at that moment (#1821). -
Release all three Apple runtime companions at
0.19.1with a Flutter floor of>=3.38.6, the first Flutter whose Dart (3.10.7) satisfies theirsdk: ^3.10.7; Flutter 3.38.0 to 3.38.5 could not resolve them (#1834). The LiteRT-LM companion pinsv0.19.1-2and requires core0.19.1.
Runtime baseline: native llama.cpp v0.9.0 and Web use upstream v0.9.0@cd959bae99ff4bed22bef2604f45241c09bbb8c8; native LiteRT-LM uses
v0.19.1-2 and stable-diffusion uses v0.3.0-3. Web LiteRT-LM uses @litert-lm/core@0.19.0. Manifest SHA-256:
ae6f488408672f9ba28d8f9e664a2b85f4e12048f290e259e18dd0b750c038e5.
0.19.0#
-
Add native llama.cpp speech output for LFM3-Audio, Soprano, Chatterbox Turbo, Chatterbox Multilingual and Pocket TTS (
Lfm3AudioTtsAdapter,SopranoTtsAdapter,ChatterboxTtsAdapter,PocketTtsAdapter), with predefined voice selection (TextToSpeechRequest.voice,TextToSpeechCapabilities.voices) and Chatterbox and Pocket speaker-reference cloning. LFM3-Audio and Soprano need llamadart-nativev0.8.0and Chatterbox and Pocketv0.9.0; older runtimes refuse them withLlamaUnsupportedException(#1615, #1783). -
Adopt native llama.cpp
v0.9.0: ARM64 CPU F16 dot products of large values no longer overflow to inf or NaN (llamadart-native#174), and Qwen3-TTS sampling applies the GGUF's suppress tokens. -
Aligned default WebGPU bridge assets to
v0.1.83on the same upstream llama.cpp as native, so Web Qwen3-TTS also applies the GGUF's suppress tokens (llama-web-bridge#211). -
Adopt native LiteRT-LM
v0.19.1-1(upstream LiteRT-LMv0.19.1); the C API is unchanged. - Support LiteRT-LM native CPU embeddings on Linux x64, Linux arm64 and Windows x64 (#1367), and fix the crash at the first LiteRT-LM GPU decode on Linux x64 and Windows x64 (#1795).
- Fix LiteRT-LM text-only or audio-only turns that failed with "Image history requires a vision encoder." after an image turn on the same engine (#1781).
-
Move Web LiteRT-LM to
@litert-lm/core@0.19.0; WebGPU loads keep the runtime's default backend, so standard.litertlmbundles load there. Web embeddings, tool loops, media and custom templates stay unsupported. In Safari 27, GPU text, history and the chat app pass; on CPU, the runtime's compat build can leave Qwen3 0.6B thinking through its whole token budget (#1025, #1802). -
Support
microBatchSizeabove 8, media (with the image encoder on the CPU), speculation and embeddings for native Qwen3.5 on Android Vulkan with the bundled runtime; runtimes older than ggml0.28.0(llamadart-nativev0.8.0) keep the text-only restriction (#948). - Pair all three Apple runtime companions at
0.19.0with matching native binaries.
Runtime baseline: native llama.cpp v0.9.0 and Web use upstream v0.9.0@cd959bae99ff4bed22bef2604f45241c09bbb8c8; native LiteRT-LM uses
v0.19.1-1 and stable-diffusion uses v0.3.0-3. Web LiteRT-LM uses @litert-lm/core@0.19.0. Manifest SHA-256:
ae6f488408672f9ba28d8f9e664a2b85f4e12048f290e259e18dd0b750c038e5.
0.18.0#
- Fix synthesized speech playback in the macOS chat example.
-
Add shared
LlamadartEngine<C>lifecycle management and eager text/chat and Decision tasks with events, completion and request-scoped cancellation. - Parse LFM2 tool arguments against their schemas, preserve unescaped inner quotes in required JSON string arguments (#1609), honor explicit parallel requests, keep reasoning non-executable and expose unfinished calls as separate diagnostics.
- Apply supported native/Web lazy tool grammars and Web prompt penalties with explicit capability checks and unchanged ordinary grammar defaults.
-
Adopt native LiteRT-LM
v0.19.0and C API 1.0 with legacy compatibility, tagged Android pointer support, validated settings and typed unsupported-path errors. - Preserve LiteRT-LM workers and model caches after unsettled native cleanup; reject incomplete runtime overrides and document process-restart recovery and unsupported text LoRA.
- Keep cached models reusable, visible and removable after cache-root moves, including iOS app updates (#1741).
-
Adopt llama.cpp
v0.8.0-3for speculative rollback and model-creation ownership fixes, retaining the genuine nextn query while retiring the unused embedding query; isolate native bundle caches from older apps, verify Apple framework identity and report missing Windows speculative helpers. - Restrict unqualified Android Vulkan Qwen3.5 combinations to bounded ordinary text; refuse larger micro-batches, media, speculation and embeddings (#948).
-
Adopt stable-diffusion
v0.3.0-3for original SD checkpoint containers while retaining the SDXS tiny-decoder policy and iOS full-VAE Metal restrictions. - Reinitialize native LiteRT-LM image-chat engines after cancellation before reusing them (#1749).
- Keep future LiteRT-LM SwiftPM pin syncs aligned with macOS app-bundle runtime discovery.
- Request optional Android vendor OpenCL access in the chat example and document LiteRT-LM GPU setup and CPU fallback.
-
Document Safari 27 LiteRT-LM Web GPU support, required
require-corpisolation and hidden-tab termination during large model loads (#1025). -
Aligned default WebGPU bridge assets to
v0.1.82with bounded preallocation for large wasm32 model writes. - Pair all three Apple runtime companions at
0.18.0with matching native binaries.
Runtime baseline: native llama.cpp v0.8.0-3 and Web use upstream v0.8.0@8642541b255bfb5dc39cd351a178be09013a55d6; native LiteRT-LM uses
v0.19.0 and stable-diffusion uses v0.3.0-3. Web LiteRT-LM stays @litert-lm/core@0.18.0. Manifest SHA-256:
fda19e047aba5a511020854437cc89e2f53e2f67f5f6cf5fec336faef3a6c362.