Generators
- Generator LLM (GGML) — the llama.cpp runtime is updated to b11192.
- Generator Sound Recorder — AI Noise Suppression is available on iOS, Android, and tvOS. If it cannot load, recording continues without it and a warning is reported.
- Generator Realtime Transcription / VAD — the beginning of each utterance is no longer cut off, and traditional VAD segments start and end where speech actually begins and ends.
- Generator TCP — reconnecting while the previous connection is closing works, and ending a connection while it is connecting cancels it.
- Generator UDP / TCP Server — Bind and Start can be retried after a failed bind, such as when the port is in use.
- Generator HTTP Server — a malformed chunked request body is rejected instead of being misread.
- Generator GraphQL — a failed setup no longer prevents later setups from connecting.
- Generator Serial Port — each attachment starts with an empty receive buffer, so leftover data no longer corrupts the first frame or Regex Match.
Bricks
- Bricks using the initiative cache behavior (Image, Lottie, Rive, Chart, Slideshow): changing the source no longer keeps showing the previously cached file.
- Brick Chart — changing the theme URL quickly no longer applies an older theme, and removing the theme URL clears the theme.
- Brick Generative Media — a slower result for a replaced prompt no longer overwrites the current media or ends loading early.
- Brick Sketch — Export Image fails or times out correctly when the Brick is removed or saving stalls, and no longer writes the file twice.
Data and events
- Data Calculation — a color scale command with an empty or invalid color list returns empty instead of stopping the rest of the calculation.
Fixes
- iOS / Android: Activity Log screenshots capture every attached screen, mark regions that cannot be captured, and no longer leave temporary files after a failed capture.
- iOS / tvOS: a device that is still bound no longer returns to the binding screen after restarting. Temporary storage errors are retried and binding information is recovered. See device binding.
- Android: long-pressing MENU on the remote opens the BRICKS system menu again.
- Android: the Network IP address System Properties value on Ethernet no longer changes to
0.0.0.0shortly after startup.
Desktop
- The changes listed above also apply to Desktop Foundation, except those marked iOS or Android.
- Generator Sound Recorder — new Voice Enhancement options: Voice Filter, with adjustable gain, for clearer, more even speech, and AI Noise Suppression to remove background noise. Both are off by default.
Backward compatibility
- This release maintains compatibility with Launchers from v2.21, v2.22, v2.23, v2.24, and v2.25.
Generators
- Generator LLM (GGML) — the llama.cpp runtime is updated to b11010.
- Generator Realtime Transcription — Max Results in Memory defaults to 100 detailed slice results and Max Prompt Slices to 3, and both are configurable. Result Text and the end Event keep the complete transcript regardless, so use
ON_TRANSCRIBEto save every detailed result. - Generator Realtime Transcription / SoundRecorder — stopping during startup, or issuing overlapping stops, releases the recording correctly without disrupting a newer one.
- Generator STT (ONNX) / VAD (ONNX) / TTS —
load()returns true after a successful model load. - Generator STT (GGML) / VAD (GGML) — a request made while an audio file is still downloading no longer starts an overlapping inference job.
- Generator File — a setup failure triggers the initialization-error Event, and the completion of an older transfer no longer prevents its replacement from being stopped.
- Generator GraphQL / Data Bank — changing the connection settings ignores the stale results, and a pending Data Bank update or removal cannot affect the replacement connection.
- Generator SQLite — changing the database during initialization opens the selected database instead of keeping the previous one.
- Generator MQTT — connections made with different credentials remain separate.
- Generator WebSocket / MCP / BRICKS Buttress connections — changing the transport settings, a repeated connect, and a reconnect all close the old connection without leaving a duplicate.
- Generator TCP — ending a connection while its certificate is being prepared prevents it from connecting later.
- Generator Web Crawler — an HTTP failure reports an error instead of treating the error page as a successful result.
- Generator Vector Store — an XLSX cell containing several rich-text runs keeps all of its text during document parsing.
Data and events
- Persisted Data survives repeated application restarts instead of reverting to its initial values.
- Actions waiting on Data stop when their source is removed, so a late Action or canvas change no longer runs.
Fixes
- Application loading: removing a Subspace no longer interrupts loading, or asset and font preloading.
- An upload from an application reports an HTTP failure instead of claiming success.
- Android: Generator STT (GGML) — experimental Whisper Hexagon NPU acceleration on supported Snapdragon devices, 8 Gen 1 and newer. Turn on Model Use GPU to use it.
- iOS / Android: Generator BLE Central / BLE Peripheral — disconnecting or stopping during setup prevents a delayed connection Event, or advertising, from an obsolete operation.
- Android: Bluetooth — a granted location permission is recognized correctly on Android 11 and earlier.
- Android: Generator Serial Port — a repeated Attach Action no longer leaves a duplicate connection or data listener.
- iOS: Generator LLM (Apple) — stopping a streamed completion no longer fails when buffered text arrives afterward.
DevTools
- A selector combining ancestor, child, or sibling relationships finds the matching Brick even when the nearest candidate does not match the complete selector. See local debugging.
Desktop
- The changes listed above also apply to Desktop Foundation, except those marked iOS or Android.
- Generator STT (GGML) — select
snapdragonin Accel Variant for Whisper Hexagon NPU acceleration on supported Qualcomm Linux arm64 hardware. - Brick Lottie — changing the source ignores the delayed download and errors from the previous animation.
- Open URL — a waiting Action receives the result or failure of opening an external URL.
- Generator MQTT — username and password authentication is sent correctly.
Backward compatibility
- This release maintains compatibility with Launchers from v2.21, v2.22, v2.23, v2.24, and v2.25.
Generators
- Generator SoundPlayer — an unrelated setting change no longer restarts an audio download. A waiting playback call finishes on end, stop, or replacement, including after a pause and resume.
- Generator Question — the Yes/No labels and images appear when confirmation is required. Closing, stopping, or replacing a question ends the waiting scripts, and a pause and resume preserves the pending answer.
- Generator Information —
show()returns true on confirmation and false when the dialog is closed or replaced, so a script waiting on a loading dialog no longer hangs. - Generator script controls —
SoundPlayer.stop(),SoundRecorder.start(), andVAD (Traditional).init()work as documented. - Generator STT (GGML) / VAD (GGML) —
load()returns true after a successful model load, including when an already loaded model is reused. - Generator TTS — automatic speech generation reports a synthesis failure through the error Event.
- Generator LLM (MLX) — a tool call returned by BRICKS Buttress reaches the completion result and the finished Event.
- Generator HTTP Server — a STOP followed immediately by a START restarts the server. A request-processing failure returns an error and triggers the error Event, instead of leaving clients waiting.
- Generator Vector Store — document parsing recognizes a file whose extension is uppercase or mixed case, such as
.PDFand.DOCX.
Bricks
- Brick Items — a transform or post-transform script failure includes its message in the error Event and the Outlet.
- Brick SVG — changing the source URL no longer lets a late response replace the current image with the previous one.
Data and expressions
- Script dates — an ISO or RFC date preserves its date and time zone, matching the Data Calculation commands, and an explicit parsing format is respected.
- AI filters — stopping and restarting a filter ignores the late results and errors from the cancelled run.
- AI filter / MCP search — rebuilding an application, documentation, or media search replaces the stale results without duplicates. A media search follows the current application, a failed preparation can be retried, and an empty media result is readable.
Fixes
- Model, media, and font downloads: a failed or interrupted transfer is no longer reused as a completed file, so a later attempt can recover without clearing the cache.
- Preloaded applications: a failed or overlapping save no longer causes an old application configuration to be reused.
- iOS / Android: Brick Camera — a background recording failure triggers the recording-error Event. Removing the Brick cancels the recording and releases the scripts waiting for it.
- iOS / Android: Generator Thermal Printer — turning barcode text off works on Star and TSC printers, and an ESC/POS printer can be reinitialized with automatic status updates disabled.
- iOS / Android / tvOS: Generator MCP Server — a failed session setup or request returns an error instead of hanging, and a disconnected client is cleaned up.
- Android: Generator LLM (Qualcomm AI Engine) — changing the model, the chipset, or the custom model URL loads the selected bundle, instead of reusing the first downloaded model.
DevTools
- A client connects regardless of the capitalization of its connection headers. See local debugging.
Desktop
- The changes listed above also apply to Desktop Foundation, except those marked iOS, Android, or tvOS.
- Animation — a completion Event fires again, allowing the subsequent Actions to run. Restarting an animation ignores the previous run’s late completion.
- Brick Map — supplying an API key after an empty or failed attempt displays the map without a reload.
- Generator LLM (Qualcomm AI Engine) — changing the model, the chipset, or the custom model URL loads the selected bundle, instead of reusing the first downloaded model.
Backward compatibility
- This release maintains compatibility with Launchers from v2.21, v2.22, v2.23, v2.24, and v2.25.
Bricks
- Brick Slideshow — the Play, Pause, Next, and Previous Actions control photo and video slides alike, including stepping through manually while paused.
jumpToIndexreturns false when the requested slide cannot be selected. - Brick Rive — script controls honor the animation, state-machine, input, and text options, and return whether the control could be applied.
- Brick SVG — legacy rendering keeps shapes that sit between multiple
styleblocks, and applies the styles from all of them rather than the first.
Automations
- A Brick press step supports a long press, Items entries included. It fires the configured long-press Event without also firing a normal press. See automations.
Generators
- Generator LLM (OpenAI) — a streamed function-call Event carries the complete arguments and fires exactly once, including when the provider sends the call in its final chunk or omits the tool-call finish reason.
- Generator File — stopping one upload or download by ID or index leaves the other transfers running. Starting a specific file reports that file’s index in its progress, completion, and error Events.
- Generator Media Flow — allowlists and blocklists apply to the file list, the Outlets, and downloads. Changing a filter or the selected source takes effect immediately instead of waiting for the next fetch. See Media.
- Generator WebSocket — replacing a connection reports the old one’s close before the new one’s open, so a delayed Event from the old connection cannot mark the new connection closed.
- Generator HTTP — a
Content-Typeheader name is matched regardless of capitalization, so form and text request bodies are encoded correctly. - Generator MCP Server — a listed resource whose URL contains spaces or is otherwise noncanonical can be read back, and a slow tool call keeps its own HTTP stream alive instead of being disconnected as idle.
- Generator SoundPlayer — the playing Outlet is updated before the playback-start Event, and audio that fails to start is no longer reported as playing.
Data and expressions
- Script expressions — callback-local keys such as
list[i]andresult[id]work again. A rejected expression reports the reason through a script error or the Event log instead of silently producing no result. - Data Calculation — a collection callback finishes correctly for a sparse array, and for an object carrying a
lengthfield, instead of repeating callbacks or returning mismatched results. - AI filters — a missing provider API key is reported by name, instead of another provider’s key being sent in its place.
- Channels and remote Data updates — a name such as
constructorortoStringno longer breaks a subscription or Data initialization. - Animation — an Event with no animation reports completion once, which stops the repeated completion dispatches and the update loop they drove.
Fixes
- Device status: overlapping status changes are written in order, avoiding conflicting writes and a stale response overwriting a newer state.
- Local Sync — a delayed acknowledgement no longer leaves a connection permanently unable to send. See Local Sync.
- iOS: Generator BLE Peripheral — custom 128-bit service and characteristic UUIDs are preserved, so nearby devices discover and use the intended services.
- iOS: Generator STT (GGML) / Realtime Transcription — the English-only Tiny and Base Whisper models use the matching English encoder when Core ML acceleration is on.
DevTools
- Simulated arrow, Enter, Escape, and other non-text keys reach Keyboard Generators and Scene3D scripts. A key command also reports whether the runtime accepted it. See local debugging and BRICKS CLI.
- Console capture distinguishes retained history from output produced during the capture. Capturing live output only, and clearing the retained history, make it possible to judge the current run on its own.
Desktop
- The changes listed above also apply to Desktop Foundation, except those marked iOS.
- Generator STT (GGML) / Realtime Transcription — stopping a Whisper transcription returns the partial result and ends the running task, instead of waiting indefinitely.
Backward compatibility
- This release maintains compatibility with Launchers from v2.21, v2.22, v2.23, v2.24, and v2.25.
Generators
- Generator LLM (GGML) — llama.cpp runtime bumped to b10645.
- Generator STT (GGML) / Realtime Transcription — whisper.cpp runtime updated.
- Generator TTS — a clip cancelled while its audio was still loading no longer plays anyway while reporting itself as playing. A Generator TTS (GGML) synthesis cancelled while its context was being prepared now stops, instead of running to completion on a context about to be released.
- Generator MQTT — a client that cannot be created at all — the native client rejecting, or a URL the connection library refuses — reports through the error Event and Outlet like every other connection failure, instead of a broker that silently never connects.
Data and expressions
- Script expressions —
undefined,NaN, andInfinityresolve as JavaScript values everywhere. Inside an array or object literal they no longer throw, andNaN === NaNis false as in JavaScript. A statement that writes to a member (a.x = 2,a.x++,r[0]--), wherever it appears, runs as real JavaScript instead of throwing or silently dropping the write. - Data Calculation — the list-taking color commands (
COLOR_AVERAGE,COLOR_LIMITS,COLOR_BEZIER_COLORS,COLOR_BEZIER_VALUE) given an empty, missing, or unparsable list, andSTRING_TEMPLATE_LITERALS/STRING_BASE64_ENCODEgiven a null or non-string subject, degrade instead of discarding the whole calculation batch. A node with no outgoing links no longer breaks lock-list creation for the whole graph.
Files and downloads
- Model downloads — a multi-gigabyte file, a 17.5 GB GGUF model for example, is no longer killed as stalled and restarted from zero. Liveness is judged by bytes landing on disk rather than progress events alone, the short native read timeout no longer cuts a transfer, the integrity check of an existing large file scales its deadline with the file size instead of re-downloading on every sync, and concurrent downloads are bounded so queued ones are not reported as stalled.
- Runtime cache — a retry-on-failure count given as a string, fraction, or negative number no longer retries a failed download forever.
Fixes
- Fonts: a font family or variant named after an object built-in (
constructor,toString, and the rest) is skipped like any other unknown font, instead of crashing font resolution. - iOS and tvOS: the system menu no longer offers System Setting. Only Android can open device settings, so the tap did nothing.
DevTools
- The MCP and MCP SSE endpoints are deprecated and will be removed in 2.26, and the DevTools page now shows a notice. Use CDP —
bricks devtools— instead. See local debugging.
Desktop
- The llama.cpp and whisper.cpp runtime bumps, and the Generator TTS, Generator MQTT, script expression, Data Calculation, model download, runtime cache, and font fixes above, also apply to Desktop Foundation.
Improvements
- Other performance and stability improvements.
Backward compatibility
- This release maintains compatibility with Launchers from v2.21, v2.22, v2.23, v2.24, and v2.25.
Generators
- Generator TTS (ONNX) — the Chatterbox voice models, including Chatterbox Multilingual, are supported both on-device and offloaded to a BRICKS Buttress server, with the ONNX Runtime inference backend updated to 1.27.0. Verified to produce speech for English and Chinese input.
- Generator TTS — pointing the speaker embed or reference audio at a different URL actually downloads the new voice. The file was cached under a fixed name, so the first voice ever downloaded for a model kept being served.
- Generator LLM (GGML) — llama.cpp runtime bumped to b10588.
- Generator LLM (OpenAI / Anthropic) — stopping a streamed completion reports it as interrupted. The finished Event carries a new Interrupted field, and the scripting result carries
interrupted: truewith acancelledfinish reason, instead of presenting the truncated answer as the model finishing on its own. - Generator Iterator — a linked step of 0 or below no longer hangs the runtime; it falls back to 1 with a logged error. The reported INDEX also matches the rotation actually applied when the start is fractional or larger than the data.
- Generator Vector Store — an unusable chunk size — 0, cleared, or negative, from the property, an insert Action, or the scripting API — no longer grows memory until the app dies with PROCESSING stuck on. The configured or default size is used and the substitution is logged.
- Generator HTTP — replacing an SSE connection no longer clears the live stream’s parser, which left the response Outlets publishing
undefinedon a stream that was still open. - Generator WebRTC — a replaced data channel detaches its listeners, so its late close no longer silently blocks every later channel send or fires a ghost channel-close Event.
Data and layout
- Data Calculation — a math or color command receiving an unusable value, typically a connected node that has not produced one yet, degrades to undefined instead of throwing the whole calculation batch away and leaving every update in it stale.
- Brick Items — a cleared, zero, negative, or fractional per-line count or page size, reachable through linked values, lays out like the unset default instead of producing broken frames, no items, a staggered grid, or uneven pages.
Fixes
- Activity Log: Data update events are recorded again. Array-shaped updates were silently dropped since v2.25.0; the fix lands on both the device and the server, so devices still on an earlier build resume producing rows once the server is updated.
- A viewport change that arrives while the app is still loading is applied once loading finishes, instead of being lost.
- Android: WebView-based bricks such as Sketch accept touch and pen input again. Strokes were cancelled after the first move, and Boox stylus strokes with the barrel button held were dropped.
Desktop
- The Generator TTS (ONNX) Chatterbox support, the llama.cpp runtime bump, and the Generator TTS, LLM, Iterator, Vector Store, HTTP, WebRTC, Data Calculation, Brick Items, Activity Log, and viewport fixes above also apply to Desktop Foundation.
Improvements
- Other performance and stability improvements.
Backward compatibility
- This release maintains compatibility with Launchers from v2.21, v2.22, v2.23, v2.24, and v2.25.
Generators
- Generator TTS (GGML) — rebuilt on llama.cpp b10335. Nine voice-model families are now supported on every platform: OuteTTS, Chatterbox, CSM (Sesame), Qwen3-TTS, BlueMagpie (Barbet), MOSS-TTSD, MOSS-TTS-Realtime, NeuTTS, and Soprano. The family is detected from the model, and each backbone pairs with its own codec / vocoder GGUF. Verified to produce speech matching the input text: CSM 1B, Chatterbox Multilingual, BlueMagpie Barbet-1B, Qwen3-TTS 0.6B, and OuteTTS 1.0.
- Generator TTS (GGML) — synthesis can be offloaded to a BRICKS Buttress server, so a device can speak without downloading the model. It stays local when the server cannot serve the configured family, instead of returning audio that doesn’t say the requested text.
- Generator HTTP Server — a second server-level event, an error after a close or a shared port closing, no longer crashes the app.
- Generator HTTP — the SSE event-log details Outlet keeps updating after the first event.
- Generator LLM — a session saved under a custom key stays in the sessions Outlet even when auto-save declines the same prompt.
- Generator MCP — notifications on the in-app client link are no longer answered, matching the JSON-RPC contract.
Scene3D
- Object updates can animate. The update-object Action takes an Animate (ms) that eases position, rotation, scale, and opacity, matching the camera’s easing, so fades and transitions no longer need a hand-written per-frame script. Objects with undeclared starting values animate from the renderer defaults.
- Primitives — box, sphere, plane, and friends — can carry an image texture, covering the album-art, thumbnail, and video-wall cases with no glTF model needed.
- Scripts can emit values to the app. A script mutation can carry
__emit, which fires the on-script-emit Event, so in-scene input such as key presses can drive Data and the rest of the app. Script__variablesalso survive declared reflows. - Raycast picking can be triggered from an Action and from automations, firing the object-click Event exactly as a real tap would.
- A partially declared vector keeps its per-axis defaults —
scale: {x: 2}renders as[2, 1, 1]— and a model loader that fails immediately reports an error instead of crashing the scene.
Data and expressions
- Script expressions: callback bodies —
map,filter, and friends — validate and run as real JavaScript, so a callback usingMathor an object literal no longer fails. Unsafe keys reached through destructuring patterns are rejected. - Persist storage: stored strings round-trip exactly.
'123','null', and' 1 'come back as written instead of being parsed into numbers, null, or rewritten. - Data: an update carrying no value clears a string Data to empty instead of storing the literal text “undefined”, which was persisted and replicated to every subscribed device.
- Data Calculation:
COLLECTION_DROPalso drops object properties, not just array entries. - Animations: values linked to a Property Bank resolve again on nested-Subspace items and in dynamic animations, instead of failing the whole Subspace render.
Files and downloads
- Split-model downloads: a shard whose hash arrives under its type name —
md5orsha256— keeps it, so an intact, already-downloaded shard passes the integrity check instead of downloading again on every launch. Paired with the Generator re-save fix under BRICKS Controller. - Office documents: numeric Excel cells keep their full value — 19.99 is no longer read as 19.
Fixes
- A device with a launch test or schedules configured but no viewport frame runs them again. The automation was silently skipped while BRICKS Controller kept showing it as configured.
- Ending a viewport override restores the app’s own layout, not the previously overridden one.
- Audio recording at sample rates above 48 kHz gets a correctly sized buffer.
- Camera and microphone permissions: a component with audio disabled no longer clears the microphone permission another component needs.
- Brick Items: item Events fire for items on pages after the first.
Desktop
- Windows: packaged builds ship real Windows native bindings. Previous packages carried Linux-built binaries for some modules, which crashed the app at launch. See installation.
- Web launcher (Virtual Device / Web TV): a device without a viewport frame runs its launch test and schedules again.
- The Generator TTS (GGML), Scene3D, script expression, persist storage, Data, animation, and other fixes above also apply to Desktop Foundation.
Improvements
- Other performance and stability improvements.
Backward compatibility
- This release maintains compatibility with Launchers from v2.21, v2.22, v2.23, v2.24, and v2.25.
Media Flow
- A download is bounded by how long it stalls rather than by total elapsed time, so a large file on a slow link is no longer cancelled mid-transfer, while a genuinely wedged transfer is still stopped and reported as an error. See Media.
- A storage sync can no longer wedge forever. A lost native call is now bounded by a watchdog, so the download file URLs Outlet no longer stays empty for the rest of the app’s life — observed on devices running many Media Flow generators, with no error logged anywhere.
- Queued fetches are cancelled when the generator is refreshed or finalized.
- Newly uploaded files that are never transcoded — audio, PDF, and generic files — now trigger a refetch, so they appear without a manual refresh.
- Log lines are tagged with the Media Box name and id and cover fetch, subscription, and storage-sync milestones, so several Media Flow generators in one config are distinguishable.
Generators
- Generator Assistant — an attached file is indexed with its real content. Every file added to an assistant was stored as a single empty chunk, so citations could only ever match empty text, while the file still appeared in the list and the token count still looked right.
- Generator Assistant — removing one file no longer wipes the whole attachment list, and adding a file no longer drops the attachments from the other session. The documented
chunkSizeoption oninsertFileis honoured, and is also available as a generator property. - Generator Vector Store — content added with Insert Content appears in the file list, instead of the list staying stale — empty on a fresh store — no matter how many documents were indexed.
- Generator MQTT Broker — refreshing an app releases the broker port instead of leaving it bound for the rest of the process’s life, a failed bind is retried with backoff, and broker errors report their real message instead of
undefined. - Generator MCP Server — the connected remotes Outlet updates when a Streamable-HTTP client connects and when sessions are cleared, continuation requests are authenticated, and a session key belonging to another client is rejected.
- Generator HTTP — request and response headers are redacted in the log panel, so credentials no longer end up in logs.
Data calculations
STRING_INDEX_OFsearching backwards starts from the end of the string by default, instead of returning-1unless the match sat at the very beginning.- A command node whose command name is unknown is skipped instead of failing the calculation.
Files and downloads
- Office documents: an Excel cell with mixed formatting, or a Japanese cell with a furigana guide, no longer shifts every shared string after it — the tail of such a sheet was unreadable with no error raised — and archive extraction is bounded.
- Downloads enforce their configured size limit while streaming, not only from the declared content length.
DevTools
- A device still using the old documented default DevTools passcode is rotated to a unique one on upgrade; a passcode you set yourself is left untouched. See local debugging.
- The DevTools server rejects oversized request headers and bodies and times out a stalled request, instead of holding the connection open.
- A DevTools frontend asset whose download fails no longer leaves a truncated file behind, so the inspector loads on the next attempt.
Android
- The sideloaded APK no longer ships the Google Play build’s JS bundle, which has the self-updater removed — apps installed from the CDN can update themselves again. See installation.
Desktop
- Web — a camera capture reports the size of the image it actually produced. Every web capture returned an undefined width and a NaN height through the picture-taken Outlet, its Event values, and the script return value.
- The Media Flow download deadlines, storage-sync watchdog, fetch cancellation, non-transcoded file refresh, and tagged logs listed above also apply to Desktop Foundation.
- The Generator Assistant, Vector Store, MQTT Broker, MCP Server, HTTP header redaction, Data Calculation, Office document, and download size limit fixes listed above also apply to Desktop Foundation.
Fixes
- The bundled Weather example no longer carries a default API key.
Improvements
- Other performance and stability improvements.
Backward compatibility
This release maintains compatibility with Launchers from v2.21, v2.22, v2.23, v2.24, and v2.25.Generators
- Generator LLM (GGML) — the llama.cpp runtime moves to b10156, with cross-turn KV cache reuse for recurrent / hybrid / SWA models, new state-cache budget and checkpoint controls, and multimodal state-file fixes.
- Generator Vector Store — the GGML embedding model and tokenizer can be offloaded to a BRICKS Buttress server, so a device can index and search documents without downloading either GGUF.
- Queueing — Generator HTTP Server gains request queueing with a queue limit and timeout (over-limit requests answer
503), and the TCP, TCP Server, UDP, WebSocket, MQTT, MQTT Broker, Serial Port, WebRTC, and BLE Central generators gain message queueing. All of it is off by default. - Generator HTTP Server — a request line split across packets is handled instead of closing the connection with no response, route-level SSE content types are honoured so those streams stay open and can be ended, oversized request lines and declared chunk sizes are rejected up front, and multipart uploads stay inside the request’s own upload directory.
- Generator BLE Central — changing
retainTimeat runtime now applies to the discovered device list, and BLE Peripheral no longer leaks a native handle when it starts while the generator is finalizing. - Generator WebRTC — concurrent negotiation shares one in-flight media creation, with ownership kept per generator.
- Generator Inquiry — resuming a saved inquiry seeds the resumed prompt with its own value instead of the first prompt’s default.
- Actions targeting a missing or finalized generator are reported in the log panel instead of being dropped silently.
Brick Items
- A numeric data key (
id: 1, the most common shape) is now used for item identity, so per-item Brick state follows the datum instead of its row position.
Animations
- Forced animations reach instances evaluated before the flag was set, and
VARIABLE#dynamic animation ids resolve against the target Brick.
Data calculations
- Standard datetime strings parse correctly — ISO 8601 week, ordinal, and basic forms plus sub-millisecond precision, and RFC 2822 with a named zone such as
GMT, which was previously read as local wall-clock time. - Datetime updates no longer fabricate the current time.
- Subspace Tick countdowns no longer restart on every Property Bank update in the Subspace.
Local Sync
- Delivery order is preserved across latency compensation, a self-contained packet no longer corrupts the next one, queued deliveries stop once the client is closed, and a forced leader promotion is revalidated when its timer fires so two devices cannot both lead. See Local Sync.
Automation
- Simulating a press on an Items row resolves that row’s state groups, so a test can no longer press a control the user cannot. See automations.
- Screenshots are confined to their output directory.
iOS
- Preloaded model files are found in the on-device cache again, so Generator LLM / STT / TTS no longer re-download their weights on every cold start.
Android
- Smaller app download — the Property Bank worker bundle is compressed, and the QNN build targets arm64 only.
Desktop
- Web — spring animations play as real springs on the browser compositor instead of being silently flattened into a linear tween.
- Web — a Map Brick draws its configured path as soon as the map instance is created.
- Web —
OPEN_URLaccepts only safe URL schemes. - The Generator LLM (GGML) runtime bump, Generator Vector Store offloading, generator queueing, and the Generator HTTP Server fixes listed above also apply to Desktop Foundation.
- The Brick Items numeric data keys, animation fixes, Generator Inquiry resume, Data Calculation datetime parsing, Local Sync delivery, and Automation fixes listed above also apply to Desktop Foundation.
Fixes
- Preload and file sync keep downloaded assets inside their destination directory, and a rejected filename no longer wedges every later sync.
- The bundled example configs no longer carry an embedded OpenAI TTS key.
Improvements
- Other performance and stability improvements.
Backward compatibility
This release maintains compatibility with Launchers from v2.21, v2.22, v2.23, v2.24, and v2.25.Breaking changes
COLOR_RGBAbuilds from 0–255 RGB channels — the Data Calculation commandCOLOR_RGBA(red, green, blue, alpha)now reads the RGB channels as 0–255, matching its name and round-tripping withCOLOR_TO_RGBA. Alpha stays 0–1. Channels were previously treated as 0–1 GL values and clamped, soCOLOR_RGBA(128, 128, 128)used to produce white and now produces gray. Review configs that relied on the old behavior.
Brick Scene3D
- New Brick — real-time 3D scenes, rendered with WebGPU and Three.js on native and React Three Fiber on web. tvOS support is experimental.
- A declarative scene schema covers objects, lights, camera, controls, background, and fog, plus GLB models, HDR environment maps, post-processing effects, node overrides, and animation mixers.
- A rich action API (
addObject,setCamera,lookAt,playAnimation,raycast,screenshot) and a per-frame script hook drive custom motion.
Brick Items
- Scroll mode — the new
overflowMode: scrollrenders items that overflow the Brick frame in a real scroll view with virtualized (lazy) mounting, so only items near the viewport are mounted. The defaultpaginationbehavior is unchanged. - Scroll actions target an offset, index, item, the start, or the end, and new scroll and end-reached events support lazy data loading, alongside offset, progress, at-start, and at-end outlets.
- On TV, focus-driven scrolling keeps the focused item mounted and visible.
Generators
- Generator STT (GGML) and Realtime Transcription — NVIDIA Parakeet TDT 0.6B v3 (GGUF) joins Whisper as a second engine on iOS, tvOS, Android, desktop, and web, and through BRICKS Buttress remote inference. Four quantizations of
parakeet-tdt-0.6b-v3(q4_0, q4_k, q8_0, and f16) download directly from the officialggml-org/parakeet-GGUFrepository, and custom models are supported. - Generator App State — a new Generator with paired background and foreground events and a Current State outlet (
active,inactive,background), on every platform. Web and desktop map it to page visibility. - Generator Thermal Printer — a new
castlesdriver for Castles Saturn PDA devices on Android, covering the Saturn 1000 built-in printer and the Saturn 7000 WiFi printer. - Generator HTTP Server — route methods can now run JS Sandbox scripts with script members, the same pattern as MCP Server, and there is a dedicated methods editor.
Document parsing
parseDocumentnow extracts PDF text on iOS, tvOS, and Android, so you can index PDFs into Generator Vector Store directly on the device.
Local debugging
- The on-device DevTools server (CDP and MCP) is now enabled by default, with workspace-scoped access. Workspace members can debug in-workspace devices without sharing a passcode, and an explicitly set passcode still works. See local debugging.
Data calculations
- Script calculations now compile to a single script command node (
script_map), written alongside the old form so older runtimes keep working. - Command dispatch is serialized, so a stateful calculation no longer reads a value one step behind, and numeric conversion preserves
nullandNaNinstead of collapsing them to 0.
Web
- Brick standby and entrance animations, and config-driven animations, now run on the Web Animations API and therefore the browser compositor, staying smooth while the main thread is busy.
Automation
- A new
execute_items_actionmethod drives per-item actions in automated tests.
Improvements
- Other performance and stability improvements.
Backward compatibility
This release maintains compatibility with Launchers from v2.21, v2.22, v2.23, and v2.24.Generators
- Generator LLM (GGML) bumps the llama.cpp runtime to b9982 and adds optional separate GGUF draft models for speculative decoding, with draft GPU-layer and cache controls.
- Generator VAD (GGML) resolves built-in models during preload, and Generator TTS (VITS) accepts default options.
- Generator LLM (ONNX) multimodal inference accepts batches of string prompts.
- MQTT Broker enforces configured authentication, and targeted File downloads no longer start every file.
Data Calculation
- Data Calculation and
PROPERTY_BANK_EXPRESSIONnow exposeencodeURI,decodeURI,encodeURIComponent, anddecodeURIComponent.
Networking
- BLE Peripheral characteristic writes now populate the Last Write Outlet.
- HTTP Server rejects malformed negative or fractional request sizes.
- Local Sync restores cross-device latency compensation and safely handles malformed or out-of-window packets.
Brick & media fixes
- RichText custom fonts work when
font-familyis not the first inline declaration, and Chart option overrides no longer alter source data. - Configs with deleted Subspaces or null map entries load safely, and removed Camera/WebView Bricks no longer receive later Actions.
MCP
getDocumentationincludes Brick Properties and Event/Action property details.
Android
- Update progress remains valid when the download size is unavailable.
Desktop
- The Generator, Data Calculation, Networking, and Brick/media fixes listed above also apply to Desktop Foundation.
- The MCP
getDocumentationfix also applies to Desktop Foundation.
Backward compatibility
This release maintains compatibility with Launchers from v2.20, v2.21, v2.22, v2.23, and v2.24.Text Brick
- Text Brick now supports independent top, left, right, and bottom padding controls.
Property Bank & Data Calculation
PROPERTY_BANK_EXPRESSIONnow supports statement bodies with branching, loops, early returns, and top-level await; member access on empty strings, zero, and false also evaluates correctly.- Data-node Events expose their triggering value as
DATA_VALUEfor use in connected Actions. - Data Bank handles unfetched properties and early subscription updates, persisted values reset when configured initial values change, manual calculations wait for prior updates, and Data Calculation coercion functions return primitive values correctly.
Generators
- HTTP honors explicit falsy body/timeout overrides, HTTP Server handles bodyless multipart requests and non-string SSE responses, TCP/TCP Server decode base64 before framing, WebRTC returns data-channel payloads and retains early ICE candidates, and GraphQL subscriptions close correctly.
Brick & media fixes
- Text Input clear/full-fill behavior, legacy SVG style priority and color mapping, multi-clip Video repeat, Slideshow reset auto-advance, cached list files, Iterator empty numeric ranges, WebCrawler missing attributes, Information missing content, and superseded Sound Player loads.
Transcription & TTS
- Realtime Transcription preserves final ON_END results, OuteTTS v2 reads numbers and prototype-named words correctly, and LLM tool-call parsing keeps valid calls beside null entries.
Automation
- Automation runs tolerate Bricks still mounting at startup and respect active switch/state-group pressability.
Improvements
- Other stability improvements.
Desktop
- Text Brick four-side padding, statement-bodied and async property expressions, and
DATA_VALUEon data-node Events also apply to Desktop Foundation. - The Generator, Data Calculation, Data Bank, Property Bank, Brick/media, transcription, OuteTTS, LLM tool-call, automation, and other runtime fixes listed above also apply to Desktop Foundation.
- Other Desktop Foundation stability improvements.
Backward compatibility
This release maintains compatibility with Launchers from v2.20, v2.21, v2.22, v2.23, and v2.24.Video
- Video Brick now supports inline subtitles and SRT/WebVTT subtitle files, subtitle styling, events-only subtitle mode, and cue enter/exit events.
Generators
- Generator HTTP now emits response and error events with response body, status, headers, and SSE details.
- File append with multiple files now honors
targetDirectory, Question skip re-evaluates downstream conditions using the skipped answer, Tick rejects invalid or sub-millisecond intervals, Vector Store handles zero-limit searches without failing, and programmatic confirm cancellation removes the dialog.
Generator LLM
- MLX: Llama tool calls emitted from text are returned as a flat tool-call array.
Data Calculation
- Data Calculation and Property Bank sandbox fixes: lexical variables can shadow context names, overlapping async runs restore host globals correctly, stale or unknown commands fall back safely, and command removal tolerates nodes without in/out ports.
Runtime & config sync
- Same-title app revisions refresh correctly, entitlement-filtered configs stay filtered after viewport changes, in-memory subspace delete-all no longer wipes other subspaces, and launcher init handles missing device lookup responses.
DevTools
- WebView query-selector expression errors now surface as errors instead of leaving script calls pending, and DevTools round-trips BigInt arguments in
Runtime.callFunctionOn.
Audio & TTS
- Bert-VITS2 Mandarin tones, Chinese large-number reading, English integer / large-number reading in OuteTTS, and long numeric IDs no longer crash synthesis.
Activity Log
- Activity Log caps oversized Property Bank update values and records dropped oversized events instead of repeatedly failing.
Desktop
- Linux windows can be dragged from the top strip again, including around interactive controls.
- The Linux installer now installs the
bricks-launchercommand name and adds the install directory to shell PATH when needed. - The Video Brick subtitle support, Generator HTTP response events, WebView query-selector, DevTools, Data Calculation, Property Bank, config-refresh, storage, Activity Log, TTS, and runtime fixes above also apply to Desktop Foundation.
Improvements
- Other stability improvements.
Backward compatibility
Compatible with applications published for v2.20, v2.21, v2.22, v2.23, and v2.24.Generators
- The Generator HTTP Server can now be driven from scripts, including status, start / stop, custom responses, temp-file cleanup, and stream ending.
- TCP Server LF/CRLF framing no longer drops characters or buffers extra frames, Serial Port reprocesses complete EDC frames left in the buffer, MQTT rejects undefined publish payloads instead of sending
"undefined", and Iterator handles empty or out-of-range object data without crashing. - WebCrawler keeps its previous response when an HTTP selector finds no match, and WebRTC renegotiation no longer skips the first negotiation.
Generator LLM
- Phi-4 and Mistral tool calls parse single-bracket closings correctly, LLM sessions read the correct token field, and auto-session files are pruned more reliably.
Canvas & events
- Brick Sketch events now include the current sketch state, making drawing workflows easier to automate and replay.
- Dynamic Animation resolves VARIABLE# values from test data.
Data Bank & configs
- Routed receiver hit / not-hit events now use the receiver’s own rules, linked-module and sparse-config operations are more tolerant of optional maps, Data Bank fetches handle empty or missing results, and SQLite switches databases when the backing property changes during init.
Audio & TTS
- Multi-channel audio downmix is restored, OuteTTS v3 no longer mutates speaker prompts, and tiny numeric values render correctly in text conversion.
DevTools
- DevTools frontend / log streams handle open failures more reliably, and selector matching now accepts whitespace in
:nth-child(An+B)formulas.
Activity Log
- Activity Log buffers recover after an ENOSPC drop-retry.
Desktop
- Device info now reports the correct home volume and OS version.
- Native workers wait until initialization completes before receiving commands, reducing startup races for slow model / audio workers.
- Creating an app from a freshly bound device no longer fails when screen details haven’t arrived yet.
- DevTools selector and stream-opening fixes, plus the Generator, Data Bank, Property Bank, Dynamic Animation, and runtime fixes above, also apply to Desktop Foundation.
Improvements
- Other stability improvements.
Backward compatibility
Compatible with applications published for v2.20, v2.21, v2.22, v2.23, and v2.24.Data Calculation
- Many commands now return correct results in edge cases — including COLLECTION_INCLUDES (matches objects / arrays by value), COLLECTION_REDUCE, Union, Max / Min / Mean / Sum / GCD, OBJECT_MAP_KEYS / OBJECT_MAP_VALUES, XOR, STRING_REPLACE (honors the regex toggle, passes text through on no match), integer conversion, IS_DATETIME, the Root command, and color scale gamma.
- Async functions and methods keep
thisandarguments, async arrow functions withawaitnow run, Concat no longer adds empty entries for unconnected inputs, and connections are kept when a shared data node wires different ports across maps.
Generators
- Iterator Last / Previous / negative-start fixes, the Tick generator keeps a value mapped to
0/ empty string /false, and MQTT message events expose the body as GENERATOR_MQTT_PAYLOAD / payload.
State groups
- Switch overrides now run the correct event automation, apply to the rendered canvas, and survive a force canvas change; a disabled (commented) state group no longer blocks later ones.
Canvas & events
- Change Canvas works when a canvas title contains regex characters, a single-item Canvas Set loops back to itself,
resetPopup’s default “all” dismisses every open popup, sibling item brick events are no longer dropped, one-time channel subscriptions no longer tear down others, and Dynamic Animation evaluates only the brick-target parameter.
Data Bank & assets
- A removed Data Bank property no longer reappears from cache, read-only routed values are no longer overwritten, Items paging honors page bounds, file uploads send the correct extension, and Rive files and nested Items default images preload reliably.
Media
- Video actions are a safe no-op when there is no source, Media Flow’s Reset cache action also clears cached box metadata, audio auto-cut no longer counts buffer padding as audio, and on-device vision inference works for image-only input.
Fixes
- Importing a brick snapshot restores position and size, vertical Text bricks no longer freeze on a small box or extreme letter spacing, on-device tool calling no longer corrupts character classes, the simulator Logs panel is restored, native audio recordings write an accurate WAV header, and config sync is more reliable when packets arrive out of order.
Desktop
- Fixed a race in the embedded web view where messages sent to a page could be lost before it finished loading, especially for fast-loading pages.
- Desktop file writes no longer corrupt binary data passed as ascii-encoded byte arrays.
- The Data Calculation, generator, canvas, event, automation, and runtime fixes above also apply to Desktop Foundation.
Improvements
- Other stability improvements.
Backward compatibility
Compatible with applications published for v2.20, v2.21, v2.22, v2.23, and v2.24.DevTools
- Storage inspection — DevTools Storage inspection now covers System storage, Data Bank stores, Generator cache, and Generative Media cache with readable values for CLI clients.
Fixes
- Property Bank — PROPERTY_BANK_EXPRESSION errors now explain unsupported statement patterns, such as
if/for/whileblocks or destructuring, instead of surfacing a vague runtime failure. - iOS apps running on Mac now report Mac device names instead of iPad names.
Desktop
- Embedded web views no longer duplicate events after re-rendering.
Improvements
- Other stability improvements.
Backward compatibility
Compatible with applications published for v2.20, v2.21, v2.22, v2.23, and v2.24.Generator
- Generator Apple STT — contextual strings can bias recognition toward product terms and project-specific phrases, and Apple STT can now serve as a Realtime Transcription transcriber.
- Generator Sound Recorder — Web and Desktop microphone capture can customize echo cancellation, noise suppression, and auto gain control.
DevTools
- Less cluttered by default — panels and toolbar controls that aren’t useful for inspecting bricks are now hidden.
- Connections are more resilient during disconnects and stale socket shutdowns.
- Simulated taps respect disabled pressable bricks and ignore stale tap races.
Desktop
- Generator Apple STT — Desktop Foundation now supports Apple speech recognition on macOS 26+.
Fixes
- Property Bank — stale update locks now auto-release after a timeout, so a failed earlier update no longer blocks later updates.
Improvements
- Other performance and stability improvements.
Backward compatibility
Compatible with applications published for v2.20, v2.21, v2.22, v2.23, and v2.24.Generator
- Generator LLM (GGML) — bumped
llama.cppruntime to b9309. - Generator Assistant — guardrails now use Jinja templates, expose conversation history, support structured tool args, and allow a custom
redactReplacementstring. The before-LLM / after-LLM hooks now skip tool-result continuations and tool-call-only responses. - Generator LLM / Speech Inference / Reranker / VAD / TTS — shared local model contexts track each generator instance independently, so releasing one Generator no longer breaks another that uses the same model.
Web Preview / DevTools
- DevTools CDP connections are more resilient: server startup retries transient port-probe failures, stale client events are ignored after reconnects, and CLI errors explain when another DevTools session replaced the connection.
- Web Preview DevTools prints connection guidance and
usage()examples when the Runtime console opens. - Simulated keyboard input from DevTools / preview automation no longer throws when the underlying platform reports the key event synchronously.
Desktop
- Web debug panel — the tab selector opens as a context menu instead of forcing a TV-style tab strip.
- Web SerialPort — closes wait for the active reader loop before closing, avoiding locked-stream errors.
Fixes
- Sound Recorder — overlapping recording fragments no longer clear an active file while finalizing a previous fragment.
- Voice transcription — listeners register correctly when transcription starts.
- Property Bank — command initialization falls back to default values for missing data-node entries instead of crashing the runtime.
- Subspace rendering — dangling Brick references are skipped instead of crashing when a Canvas item points at a deleted Brick.
Improvements
- Other performance and stability improvements.
Backward compatibility
Compatible with applications published for v2.20, v2.21, v2.22, v2.23, and v2.24.Bricks
- Brick RichText — opt-in
renderMarkdownprop renders Markdown content through the existing render-html pipeline (lazy-loads the parser on first use).
Generator
- Generator LLM (GGML) — bumped
llama.cppruntime to b9254 and exposed MTP (multi-token prediction) speculative decoding parameters. - Generator VAD (Traditional) —
processFloat32is now a public method so realtime detection no longer throws when fed chunks from a sound recorder. - Generator LLM / Speech Inference — clear stale BRICKS Buttress context on
releaseContextso the next request reinitializes instead of failing with “Context not initialized”.
Desktop
- Linux AppImage — auto-install
libfuse2on systems that shiplibfuse2t64, soft-failing if the install can’t complete.
Web Preview
- Sandboxed CDP
Runtime.evaluate— Console commands run in a nullified-globals UnsafeEval scope matching the launcher’s DevTools server, so DevTools probes can no longer reach the host iframe’sdocument/window. - Preview-invoke automation — handle the config-readiness race so a preview render started from an agent tool no longer flashes a half-initialized canvas.
DevTools
- Console exception output no longer duplicates the error class line above the stack frames.
tvOS
- Restore the Applications list.
Fixes
- Skip dangling
animationIdreferences insetupAnimations(mirroring the v2.24.4 reducer guard) so saved configs with deleted or renamed animations no longer crash the React subtree.
Improvements
- Other performance and stability improvements.
Backward compatibility
Compatible with applications published for v2.20, v2.21, v2.22, v2.23, and v2.24.Bricks
- Pressable bricks — standby-transition wraps no longer capture taps when the brick has no press events, matching the v2.24.3 fall-through behavior.
Generator
- Generator Assistant — configurable guardrails with pattern or LLM-based safety checks at four hook points (
before-llm,after-llm,before-tool,after-tool), withblock/redact/log-onlyactions and built-in default safety policies. - Generator STT (GGML) — updated
whisper.cppruntime. - AI Filter — cloud model lineup refreshed (Claude Sonnet 4.6 + Haiku 4.5, Gemini 3.1 Pro + 3 Flash preview, GPT-5.5 + 5.4 Mini/Nano).
Desktop
- DevTools frontend prefetch on the desktop launcher no longer fails to load.
- Generator LLM (MLX) — registered in the desktop / Web Preview generator maps for BRICKS Buttress-only access (native MLX is iOS / tvOS-only).
- Web Preview screenshots: prevent text clipping at element boundaries.
Fixes
- Skip invalid
hit_regexentries (e.g. PCRE-only inline flags) instead of crashing Data Bank initialization. - Skip dangling animationId references in the event reducer instead of crashing application preview at startup.
Improvements
- Faster preload startup: parallelize per-file existence checks.
- Other performance and stability improvements.
Backward compatibility
Compatible with applications published for v2.20, v2.21, v2.22, v2.23, and v2.24.Bricks
- Brick Image — filtered image rendering with color matrix support. Available on iOS, Android, and Desktop.
- Brick Rect — bricks without configured press events no longer capture taps; they fall through to bricks underneath instead of being intercepted by an inert Touchable.
Desktop
- Native window drag replaces the drag-area overlay; the top strip can overlap UI without swallowing clicks on underlying buttons.
- macOS app menu adds an Open System Menu item.
Generator
- Generator LLM (GGML): bump llama.cpp runtime to b9084.
Improvements
- Other performance and stability improvements.
Backward compatibility
Compatible with applications published for v2.20, v2.21, v2.22, v2.23, and v2.24.Highlights
- Brick Sketch (Preview) — new drawing canvas with Apple Pencil pressure support, undo/redo/eraser/color/thickness toolbar, configurable initial state, and image export. See the core reference. Available on iOS, Android, and Desktop (Apple Pencil pressure on iOS).
- Self-hosted DevTools frontend — DevTools UI is now served over HTTP for LAN inspection, since Chrome’s hardened
devtools://CSP no longer permits non-loopback WebSocket connections. See local debugging. - Realtime Transcription / Speech Inference language detection — Generator Realtime Transcription and Speech Inference export the detected language as new Outlets and event payloads.
Improvements
- Other performance and stability improvements.
Backward compatibility
Compatible with applications published for v2.20, v2.21, v2.22, v2.23, and v2.24.Highlights
- DevTools CDP integration — inspect BRICKS applications from Chrome DevTools, Puppeteer, or Playwright via Chrome DevTools Protocol (CDP). Network panel covers HTTP, SSE, WebSocket, MQTT, and file downloads across iOS, Android, Desktop, and Web Preview; DOM panel exposes the Brick component tree with CSS selectors (
:pressable,:editable,:hidden); Input supports press and text input; Storage offers read-only inspection of system storage, Data Bank, and generator cache. See Local debugging. - Generator LLM (MLX) — native support — native on-device LLM/VLM inference on Apple Silicon (iOS 17+ / tvOS) with streaming completion, model loading/release, and tokenize/detokenize. Previously available only via BRICKS Buttress.
- Rect blur effects — new blur properties on Rect (
blurEnabled,blurVariant,blurType,blurAmount), including progressive blur and Liquid Glass variants on iOS. Works across iOS, tvOS, Android, and Web (View fallback). - Stable graduation — Brick GenerativeMedia, Brick Rive, Generator Realtime Transcription, Generator VAD Inference, and Generator Vector Store are now production-ready. See the core reference.
Breaking changes
- Android minimum SDK raised to 26 — Android 8.0 (API 26) is now the minimum supported version.
- Generator STT (GGML):
transcribeRealtimeremoved — use Generator Realtime Transcription (now stable) instead.
Improvements
- Generator LLM (GGML): bump llama.cpp runtime to b8827
- Activity Log: periodic screenshot capture and upload
- Brick Items: preserve post-transform standby during recomputes
- Star printer: update native integration with reliability improvements
- Annotate RNBlobUtil stream errors with per-call-site context for better diagnostics (Desktop)
- Fix Preload stall on Preparing when sync fails before result fires
- Other performance and stability improvements