Skip to content

v2.4.3

Latest

Choose a tag to compare

@github-actions github-actions released this 18 Aug 21:00
34442e2

Important

Android APK notice: The APK is a Termux bootstrap + WebView shell, not a native Android server build. It opens an already-running local Marinara server, and on first launch it can download Termux from F-Droid, hand it to Android's installer, and start Marinara through Termux after Android permission prompts. Follow the Android wrapper guide if Android blocks the bootstrap handoff.

Added

  • Lorebook Update agents can now optionally assign an integer injection order when creating or updating entries. Omitting it keeps the existing/default order, and approval review preserves the value through editing and commit. When creating a custom agent, the prompt editor now previews the complete response shape for the selected result type, including optional fields (#5225).
  • Added NanoGPT as a Video Generation connection with live model discovery, text- and image-to-video requests, asynchronous status polling, connection tests, and Game/sprite generation support (#5218).
  • The Game Mode narration box can now be collapsed to a slim handle, so the scene art, map, or running Experience behind it is visible without leaving the game. The choice is a saved preference that persists across chats and sessions, and the readability scrim and stacked segment log fold away with it. The box reopens itself whenever your text input is on screen, so it can never leave you unable to take your turn; anything else it is holding — narration still to read, a generation that failed, a combat that could not start — raises an indicator on the handle instead, one click from reading it. Capability API 1.13 lets a game-surface Experience request a temporary collapse for a cutscene without touching your saved preference (#5209).
  • Character and Persona cards now start at version 1.0, automatically increase their version when saved edits change the card, and provide an enabled-by-default switch that can pause automatic versioning and revision snapshots without deleting existing history (#5202).
  • Beholder's Roleplay host now sends the active Persona and a name-keyed current-state object on every call, accepts both delta responses and legacy full snapshots, and safely merges deltas into the last valid full state before saving it (#5204).
  • Expanded Simplified Chinese UI localization across nearly the entire app, with the normal English fallback retained for newer strings that have not yet been translated (#5201).
  • Roleplay chats with active Tracker agents now expose an opt-in Attach Lorebooks to Trackers setting, which forwards the exact lorebook entries activated for the main response to automatic and manually retriggered Tracker prompts while leaving Author Notes attached (#5197).
  • Professor Mari (and every other connection) now survives proxy rate limits (#5183): a rate-limit response — HTTP 429, 529, or 503 with Retry-After — now pauses and automatically resumes the same request, honoring Retry-After with capped exponential backoff, instead of aborting the task the way Mari's up-to-13 back-to-back tool-call rounds previously did on a proxy capped at, say, five messages per minute. A new optional per-connection Max Requests Per Minute cap (Settings → Connections; 0 = unlimited, round-trips through connection import/export) proactively paces bursty callers so the limit is not exceeded in the first place, and the pause is surfaced as a "paused, resuming in Ns" status instead of a silent wait. Professor Mari also no longer discards the workspace steps she already completed when a request ultimately fails, and local-sidecar connections get a larger JSON command-protocol repair budget that no longer consumes her command-round budget, so a small local model can fumble the tool-call format a few times without starving the actual task.
  • Added Beholder as an official downloadable, Roleplay-only physical-state Agent. It tracks clothing by body slot, held items, wounds, missing parts, bare slots, and species; validates and carries its full snapshot into the next turn; and exposes the latest state plus Agent setup in a native Chat Settings drawer (#5188, Pasta-Devs/Marinara-Agents#401).
  • Echo Chamber now exposes an editable message delay in its Agents editor, and extensions can update the same messageDelaySeconds agent setting instead of relying on hardcoded reveal timing (#5177).
  • Persona cards can now be referenced by copied ID with {{persona-21-character-card-ID}}, resolving the card name in place and adding its authored fields and eligible attached lorebook context to the prompt (#5171).
  • Added Assistant Reasoning Prefill alongside the existing visible assistant prefill: compatible OpenAI-style endpoints can now continue hidden reasoning from reasoning_content on a partial assistant message, while visible-only prefills keep their existing request shape.
  • Game music is now context-bound (#5161): instead of generating a throwaway 30-second clip from a fresh mood prompt nearly every turn, each map area and each encounter tier (common, miniboss, boss, special — classified by the encounter generator) gets ONE persistent instrumental composition (default 2 minutes), generated lazily on first visit or first encounter into the game-assets music library under music/area/<slug>/ and music/tier/<tier>/, where the Game Assets panel can audition, rename, or replace it like any other track. Deterministic scoring now always selects music — tier track in combat, area track elsewhere, the bundled state library as the floor — and keeps the current track while it still fits, so music changes when the context changes, never mid-scene. The scene analyzer no longer writes free-text music prompts (on-demand sound effects are unchanged).
  • Added first-class Audio connections: a new "Audio" provider type in Settings → Connections carries the speech backend (ElevenLabs, OpenAI-compatible, PocketTTS, xAI Voice), base URL, API key, model, default voice, and per-connection Game sound-effects / music capability toggles, with category-scoped default and fallback selection like image and video connections. TTS speech, voice/model discovery, and Game Mode audio generation now resolve through the audio connection (explicit pick → category default → fallback), the Game Setup wizard gains an audio-connection picker with per-game sound-effect and music toggles that gray out when no capable connection exists, and a one-time boot migration turns an already-configured legacy TTS settings blob into an equivalent default audio connection — the blob keeps serving playback knobs (speed, stability, extractor settings) and remains the fallback for setups without audio connections, a blob whose master TTS toggle was off migrates to no connection at all, and default-resolution keeps honoring that master toggle (only an explicitly requested connection bypasses it), so an upgrade never re-enables TTS on its own and existing installs keep working unchanged (#5146; docs follow-up: #5156).
  • Added capability API 1.12: spatial transition capability events (spatial_transition_committed, spatial_transition_rejected, and the spatial_context_refresh nudge) are now also addressed to the game-owning Experience package, so an Experience that sent a travel command learns the outcome the moment the host does instead of inferring it from later state reads. Transitions rejected on either silent HTTP path — the pre-stream owner-turn commit or the standalone REST commit, previously plain HTTP errors with no event at all, a gap that affected World Maps too — now synthesize a spatial_transition_rejected event carrying the error code, and only on definitive evidence: inconclusive failures (a network error that may have lost a successful commit) deliver the untyped refresh nudge instead of a fabricated verdict (#5143).
  • Added a host-run structured generation call for game-surface Experiences: POST /api/game/:chatId/experience-generation runs one bounded, non-streaming JSON call on the chat's GM connection with package-supplied instructions and an optional JSON schema (forwarded as provider-native structured output where supported), gated on the chat's stamped Experience, rate-limited in the one-shot-call class, serialized per chat, and answering truncation with an actionable error before the tolerant parser can repair a cut-off reply into a silently incomplete document (#5135).
  • Consolidated local regression commands around the filesystem-discovered Node lane: pnpm regression and pnpm regression:node now collect all 121 Node regressions with one shared build, pnpm regression:ui owns the separate Playwright lane with pnpm smoke:ui retained as a compatibility alias, and pnpm test checks the installer layout before the Node-only lane. Retained focused commands use exact runner filters, and 61 package-script aliases were removed without deleting regression files (#5132).
  • Grouped 31 clear-owner Launcher, Mari, Professor Mari, and Noodle regressions into domain directories while preserving all 121 automatically discovered files and stable focused commands. The move also ensures three file-backed regression fixtures close their databases before removing owned temporary storage (#5132).
  • Every image and video generation path now runs under a process-wide concurrency ceiling — default 4, configurable with MARINARA_MEDIA_GENERATION_CONCURRENCY (0 disables it) — enforced inside the generators themselves, so while the ceiling is enabled a batch can no longer stampede a local ComfyUI/SwarmUI GPU or fan out unbounded requests against a paid provider (setting the limit to 0 opts out and restores the old unbounded behavior). Batch/automatic work never occupies the last slot ahead of interactive requests, waits are bounded by default (MARINARA_MEDIA_GENERATION_WAIT_TIMEOUT_MS; 0 waits indefinitely) so saturation fails loudly instead of hanging, and fallback-connection retries reuse the original request's slot (#5097).
  • Added host-owned GET/PUT /api/game/:chatId/experience-state routes so a game-surface Experience package can store its world state in the engine's per-message game_engine_state table instead of chat metadata: saves are scoped to the chat's stamped Experience (experience:<id> rows — invisible to turn-games, protected from turn-game start/resign wipes, and never able to shadow an active turn-game), anchored to the visible message so swiping or branching back to an earlier narration rewinds the world (a brand-new swipe continues from the latest save until the Experience writes one of its own), bounded per save, and pruned to the newest 100 anchors per chat (#5102).
  • Game checkpoints now capture every active engine-state blob (turn-games and Experiences) by value when the checkpoint is created and restore from that copy, replacing the timestamp re-lookup that silently restored stale or no state for any game that rewrites a single anchor in place — including in-place turn games like Tic-Tac-Toe and Rock-Paper-Scissors (#5102).
  • Added Inventory Tracker as an official downloadable Roleplay Agent, with separate currency, equipped, and carried-item lists; compact quantities; editable HUD and Tracker Panel grids; per-cell locks; retry support; and committed prompt context (#5105, Pasta-Devs/Marinara-Agents#361).
  • Added POST /api/sprites/pixelize: deterministic pixel-art post-processing for AI-generated images — nearest-kernel downscale to a target cell size, palette quantization against a supplied ramp, binary alpha, and a wrap-around seam score reporting tileability — so probabilistic model output can sit beside authored pixel art; identical input always produces identical bytes (#5096).
  • Character sprite-sheet generation accepts an optional styleProfileId so a bake can target a specific image style profile instead of always compiling against the user's active one; an absent field keeps today's resolution exactly, and unknown ids degrade the same way the gallery path degrades (#5095).
  • Added capability API 1.11 Experience combat seam: game-surface packages receive combatActive (true the instant the built-in combat UI mounts, unlike the lagging narrative scene state), the effective combatStyle, and requestCombat() — which routes into the same encounter-generation pass as the manual Start Combat button, minus the confirm dialog; packages still cannot supply combatants or combat state (#5094).
  • Added capability API 1.10 package assets: an Agent package manifest may declare contributions.assets.paths, and the Engine serves those image and JSON files over /api/capability-packages/<id>/assets/<path> with per-request hash verification, a passive content-type allowlist, and cheap ETag/304 revalidation — so a package (for example a Game experience) can ship tilesets and sprite atlases instead of inlining art into its client bundle (#5091).
  • Agent package client bundles and assets now carry strong ETags derived from their manifest hashes and answer revalidations with 304 Not Modified, so an unchanged package no longer re-downloads in full on every app load (#5082).
  • Let Professor Mari read your chat history: attach a chat from the composer's attach menu — sharing all, a range, or the last N messages — so Mari can see your roleplay and give grounded feedback, with a Context Viewer to review and remove what's attached to free up tokens (#5073).
  • Added visible, one-click copy controls for lorebook and lorebook-entry IDs in their editors (#5085).
  • Expanded Haptic Feedback to Conversation, Roleplay, and Game with capability-aware device descriptions, the full 0.0-1.0 intensity range, every Intiface output type, and named patterns for scalar and positional pumping actions.
  • Added an optional Roleplay speaker extractor for TTS autoplay that uses a dedicated connection to queue narration and exact dialogue with assigned character voices, stable Random NPC Voices fallbacks, and optional emotion cues.
  • Added an on-demand Advanced Settings storage optimizer that scans for old, unreferenced avatar images and deletes them only after an explicit confirmation (#5039).
  • Roleplay now releases Swipe, Continue, and the composer as soon as a reply is durably saved while its non-rewriting post-processing agents finish against that exact message and swipe in the background; overlapping runs keep independent progress state (#5155).
  • Added the official v2.4.3 What's New message to the Home experience, including the Inventory Tracker overview and screenshots.
  • Added {{addnumvar::name::value}} for numeric variable addition without changing {{addvar}} string concatenation (#5024).
  • Added a Personal Extension authoring guide with importable Browser and Server examples, package/API references, lifecycle guidance, and troubleshooting (#5026).

Fixed

  • APK-managed Android setup no longer opens a separate localhost browser that asks the user to paste Marinara's private local-access secret, and its self-authenticating WebView/session routes no longer fail CSRF when Android reports an opaque Origin: null; null remains rejected for every other unsafe API route. The generated credential stays automatic inside the app, and releases now publish a stable one-click APK download asset alongside the versioned file (#5222; docs follow-up: #5223).
  • Game Mode no longer replaces a matching Character-library portrait when recovering a missing scene background or retrying a failed portrait load (#4746).
  • Character-created Conversation reactions can now be removed directly by clicking their chip on desktop or long-pressing it on mobile, without discarding the user's own matching reaction (#5216).
  • Character example dialogue now falls back into the Character Info marker when a prompt preset has no dedicated Dialogue Examples marker; presets that include a disabled Dialogue Examples marker continue to omit it intentionally.
  • Preserved Long-Term Memory recall in Roleplay chats when a custom preset's agent marker cannot be matched, using a logged fallback injection instead of silently dropping the selected memories.
  • Roleplay speaker extraction now prints the connection's raw response when debug mode is enabled, supplies the current reply's character as the fallback for ambiguous lines, and lets harmless label formatting such as Maukie: or Maukie [chuckle] resolve to the character's assigned voice instead of Random NPC Voice (#5210).
  • Termux session logging now starts before update checks, dependency repair, and builds, so launcher-stage crashes create the same timestamped diagnostic log as server-stage crashes; it starts only after restrictive log permissions are confirmed, flushes before exit, reports logging failures, and preserves the server's own exit status (#5208).
  • Automatic card versioning now preserves imported nonnumeric version labels instead of resetting them to 1.0 on the next content edit (#5202).
  • Active Roleplay summaries now form a leading system block when no prompt preset is selected, matching the existing fallback used when a preset omits its Chat Summary marker (#5196).
  • Stale file-storage writer leases on macOS now survive VPN and virtual-interface changes: new leases use the stable platform identity instead of hashing the currently visible network adapters, and existing v1 leases from the same Mac are reclaimed after their PID exits instead of blocking startup (#5194).
  • Custom lorebook-writing agents now support a configurable Read Behind depth, keep each delayed run attached to the assistant reply it processed, and avoid duplicate work when the newest reply is swiped. Lorebook Keeper's mobile Backfill controls now stack inside their settings card instead of overflowing it (#5191).
  • The staging update-channel warning now follows the active theme accent color instead of always rendering in amber (#5184).
  • Character avatar uploads now reject path-like character IDs before constructing their storage filename, keeping uploaded files confined to the avatar directory even when a malformed route parameter is supplied (#5181).
  • The Inventory Tracker section now appears for installs whose synced UI settings were saved before the section existed. The cross-device settings blob overwrote the locally migrated panel order on every load, and trackerPanelSectionOrder was the one tracker preference that blob never re-normalized on the way in, so the section stayed invisible until the panel was reordered by hand. Ingest now normalizes both the section order and the collapsed-section map and writes the corrected value back, so the stale order does not survive to re-arrive on another device. Any tracker section added in future would have hit the same gap.
  • Inventory Tracker entries edited by hand now get the same treatment as agent output. Tracker Panel and HUD edits wrote rows straight to state, skipping name trimming, duplicate merging, the quantity clamp, and the rule that keeps equipped gear out of carried inventory — so a value the agent could never emit could still be typed in. Equipping a carried item now moves it in a single write instead of leaving it in both lists, and the same rules are enforced on the server, which previously accepted any playerStats payload unchecked.
  • The Agent Suite JSON editor now reports malformed Inventory Tracker rows instead of accepting them. It only checked that the three keys were arrays, so a row without a name was stored as-is; validating first also avoids silently normalizing a hand-written group down to an empty list.
  • Gallery routes now serve valid raster images with the format detected from their bytes, so generated Noodle images stored with a mismatched .png extension render instead of returning 404 (Pasta-Devs/Marinara-Agents#392).
  • Opening the immutable Universal Preset no longer creates duplicate presets; its editor now offers an explicit Create editable copy action instead (#5142).
  • Gallery files now use the image format detected from their decoded bytes, preventing JPEG output advertised as PNG from being stored under a broken .png name (#5147).
  • Support Diagnostics now reports the Engine host OS separately from the browser OS, including correct iPadOS detection for desktop-class iPad user agents (#5157).
  • SillyTavern-style setvar, getvar, addvar, incvar, and decvar macros now persist independently in each chat across turns and restarts, with numeric addvar and returned increment/decrement values matching their compatible semantics (#5158).
  • Roleplay speaker-extractor emotion cues now remain inline as one or more bracketed indicators within the exact dialogue—such as [irritated] ... [sigh]—instead of being collapsed into a separate tone field (#5159).
  • Performance diagnostics now feature-detect the browser's longtask observer support before registering it, avoiding the unsupported-entry console warning (#5160).
  • Roleplay Spotify search now paginates requests in provider-safe batches of ten, and Music DJ restores an enabled context-repeat setting even when Spotify's immediate playback verification lags (#5163, #5165).
  • Large manual backups now prepare as a short-lived server job before Safari opens the completed ZIP stream, avoiding long idle download requests that Safari could terminate (#5164).
  • The Termux launcher now preserves timestamped server logs across Android process restarts and documents Android battery-optimization exclusions, making otherwise silent host-level terminations diagnosable (#5154).
  • Game Mode's Spotify Music DJ no longer fails deterministically for the artist and generic-search sources on apps subject to Spotify's February 2026 GET /search limit reduction (Development Mode apps, capped at 10 results per request; Extended Quota Mode apps kept the old behavior): the candidate pool's default of 50 was passed straight through, producing a 400 on every request for affected apps. Search now paginates in pages of 10 up to the requested pool size — safe under both quota modes — and a transient failure on a later page returns the results already collected instead of discarding them (#5163).
  • Professor Mari now wires up the preset variables she creates: her authoring guidance and worked example make her drop a variable's {{variableName}} macro into a prompt section, so a choice block she adds actually changes the assembled prompt instead of leaving the user a picker that does nothing (#5080).
  • Preserved omitted Inventory Tracker groups, kept equipped items out of carried inventory after lock merging and name normalization, clamped oversized quantities, and migrated existing Tracker Panel layouts to show the new section (#5125).
  • Kept launcher update snapshots small by excluding downloaded model caches and sidecar runtimes, while continuing to preserve user content and recovery backups (#5124).
  • Explained in the Windows launcher that non-Git installations cannot use automatic updates or commit-based stale-build checks, while version-based validation still runs (#5123).
  • Kept active characters in individual Conversation group chats responsive when another selected character is away, while preserving the away character's own configured delay and mention shortcut (#5122).
  • Reordered Storyboard Agent settings around separate Roleplay and Game Mode active flows, showed planning and provider-formatting stages in runtime order, kept setup visible, exposed image-aware Step 3 overrides in both chat editors, nested complete prompt collection editors inside their numbered stages, renamed the Stage 4 passthrough formatter, changed the default animation duration to 5 seconds, and hid animation-only controls for still-image defaults (#5120).
  • Added newly shipped built-in prompt choices to existing Storyboard agent configurations after package updates while preserving saved overrides, custom prompts, and current selections (#5118).
  • Kept valid Gallery images visible on Windows when canonical paths differ only by drive-letter or directory casing, without weakening traversal and symlink containment checks (#5099).
  • Made vectorized lorebook recall use model-appropriate query/document formatting, prioritize recent user turns, and reject incompatible stored vector spaces with useful debug diagnostics (#5104).
  • Added a server-side pre-execution authorization gate that binds Professor Mari workspace mutations to an explicit excerpt from the active user request, while retaining Keep/Restore as a second line of defense (#5093).
  • Honored each image style profile's selected prompt grammar for character avatars, portraits, and sprites instead of silently forcing compact tags (#5083).
  • Game checkpoints now capture and restore the turn-game engine state, so loading a checkpoint rewinds an active turn-game (UNO, Chess, Poker, Eight Ball) along with the story and map instead of leaving it on its post-checkpoint state (#5077).
  • Routed Game Mode time-advance and weather-update through the queued per-chat metadata patch path so they no longer silently revert a concurrent metadata write, which could permanently lock World Map movement as a stale definition (#5076).
  • Restored docked Tracker layout so the Roleplay transcript and composer resize beside the panel on either desktop edge instead of being covered by it (#5071).
  • Restored docked Tracker gutter scaling so the panel and all of its contents fit beside the centered Roleplay chat on either desktop edge without moving the transcript, composer, or scrollbar (#5071).
  • Expanded SwarmUI and ComfyUI LoRA strength controls from -2..2 to -100..100 so slider LoRAs can use their required weights (#5072).
  • Regex bundle imports now retain scripts flagged by the pattern-safety heuristic and show a warning instead of reporting those entries as skipped.
  • Kept NanoGPT Illustrator generation within its 4 MB reference-upload limit, preferred immediate hosted-result downloads, and hardened base64 fallback parsing so successful images are stored instead of rendering as broken output (#5058).
  • Kept Windows launcher updates from failing while protecting data by excluding the generated capability-package node_modules junction from update snapshots (#5052).
  • Prevented stopped or terminal-disconnected dev sessions from leaving nested server and client processes behind, and reused an already healthy local server on repeat launches instead of failing on its storage writer lease (#5062).
  • Started TTS autoplay as soon as assistant text is finalized instead of waiting for Illustrator, trackers, summaries, or other non-rewriting agents; active message-rewrite agents such as Prose Guardian and Continuity Checker still finish first (#5059).
  • Made the Roleplay speaker extractor's structured-output request compatible with Responses API providers that require the input message itself to mention json (#5059).
  • Kept long Roleplay speaker-extractor readings complete by packing narration into normal-sized requests, generating queued clips serially, and stopping visibly on a failed clip instead of silently skipping parts of the message (#5059).
  • Gave each character voice assignment its own roomy stacked controls, removed hollow trailing dropdown controls, and kept empty character guidance on semantic theme colors.
  • Improved Tracker Panel readability by giving long custom values more room to wrap and making the side control read as a neutral action instead of a selected mode (#3470).
  • Preserved complete Storyboard animation prompts through planning, image-aware refinement, and final video prompt persistence instead of silently clipping them at generic 1,200- and 650-character summary limits (#5041).
  • Let combat buff skills target allies and debuff skills target enemies, with accurate type labels and descriptions in both combat layouts (#5040).
  • Registered Slurp's package-owned storage tables so its standalone Creator feed can persist without touching legacy NoodleR data (#5049, Pasta-Devs/Marinara-Agents#348).
  • Left-aligned generated Conversation selfies with their message text on desktop instead of centering them in the message body (#5042).
  • Treated a literal CSRF_TRUSTED_ORIGINS=null as an unset value so it no longer prevents Marinara Engine from opening (#5030).
  • Stopped removed or disabled Example Dialogue markers from silently injecting character examples into prompts (#5031).
  • Restored persona creation through Professor Mari by supplying the persona reference-image default expected by storage validation (#5033).
  • Kept supported placement settings when importing character-scoped SillyTavern regexes that also contain unsupported placements, with a warning for the ignored values (#5036).
  • Capped game auto-checkpoints to the newest five per trigger type (session start/end, combat start/end, and the rest) so a long campaign no longer duplicates every captured tracker, map, and engine-state snapshot into unbounded memory and ever-larger checkpoint shard rewrites; your own manual checkpoints are never pruned (#5110).
  • Kept the caret at the chosen insertion point when typing quotes or apostrophes in expanded Character and Persona text editors (#4656).
  • Prevented multiple Marinara processes from silently overwriting a shared local data directory; stale diagnostic counts are repaired without hiding stored rows (#5013).
  • Let Termux recover its app-private storage lease after an Android restart instead of blocking launch on an exited process (#5029).
  • Omitted runtime Agent prompt sections when their Agent produced no output (#5023).
  • Presented iPad sidebars as full-width overlays in landscape as well as portrait by widening the mobile-shell breakpoint to cover newer iPad Pro 13" widths and requiring a touch-only pointer, so sidebars are no longer cramped on landscape iPads while hybrid touch laptops keep their desktop layout (#5034).

Changed

  • Split Game narration formatting, visual helpers, and tag parsing into focused chunks, reducing the main GameSurface chunk below the restored 500 KiB budget (#5215).
  • Coding-agent contributors now follow a Ponytail-inspired minimalism ladder that favors reuse, platform capabilities, and the smallest correct implementation without weakening safety or validation requirements (#5186).
  • Project validation now checks the maintained TypeScript and TSX source tree with Prettier before linting and building, so formatting drift is rejected by the same pnpm check command used in pull-request CI (#5181).
  • The Inventory Tracker panel now flows its entries as wrapping pills across the full panel width, with the quantity shown as ×N only when it is above one. The previous layout split the panel into three fixed columns and reserved a quantity cell on every row, so at the widest setting each column was around 95 px and item names truncated — while a group holding two rows sat mostly empty. The panel also establishes its own container context, so it now lays out identically in the docked sidebar and the HUD popover instead of differing between them (#5125).
  • Advanced the stable release identity to v2.4.3 across the Engine, Home page, PWA manifest, Windows installer, Android bootstrap metadata, update checks, README, and release references. Android uses versionName 2.4.3 with versionCode 44 so it updates over every previously published APK.
  • Removed the shared 1 MiB JavaScript field limit from Browser and Server Personal Extensions while preserving their separate archive, CSS, storage, request, and sandbox boundaries (#5025).