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
-
Added validated JSON export and import for Conversation character schedules. Imports load as unsaved drafts, preserve the existing schedule until explicitly saved, and move restored routines to the current week (#4414).
-
Added Z.AI as a native Image Generation service with GLM-Image and CogView 4 models, model-aware aspect-ratio sizing, authenticated native requests, and safe local storage of returned image URLs (#4350).
-
Added compact multi-selection and bulk deletion to Professor Mari's chat history, including a single destructive confirmation and automatic replacement when the active chat is removed (#4353).
-
Added Character-ID macros such as
{{V1StGXR8_Z5jdHi6B-myT}}for loading another card's context into the system prompt without its greetings or example dialogue, while still applying normally activated attached lorebooks (#4336). -
Added selection and one-click condensation of multiple ordered chat summaries into a single summary entry (#4334).
-
Added a visibility toggle for reimported embedded Character lorebooks so they remain linked, active, and editable without cluttering general lorebook searches and selectors (#4333).
-
Added Illustrator-style image connection, reference-image, appearance, and prompt controls to custom agents whose result type is Image Prompt (#4337).
-
Added Recent as the default chat sort, based on last-message activity, while Newest and Oldest now use chat creation dates (#4341).
-
Added a single-shot animation director to Roleplay Gallery Animate. The selected Prompt Model now plans motion, camera behavior, supported dialogue, sound effects, ambience, and an ending hold from the exchange behind the Illustrator image, while the existing image remains frame zero and Game Storyboard behavior stays unchanged. Its duration-aware instructions are editable under Settings > Generations > Video Generation Prompt Overrides with
${durationSeconds}support (#4311). -
Added an external-only Full page access compatibility mode for legacy Browser Extensions such as WeatherTweaker. The safe opaque-origin Worker remains the default; page-level code requires both External Extension gates, explicit exact-hash approval with a dedicated high-risk disclosure, and fresh approval after every code, CSS, or permission change. Pre-sandbox
marinara.extensionv1 packages without an explicit capabilities field are classified into this review flow instead of silently failing in the Worker (#4319). -
Added Browser Personal Extension API version 5 with read-only active chat and Character identifiers, plus separately reviewable permissions for bounded snapshots of the active Character cards and selected Persona. Extensions such as Notepad can keep per-chat or per-Character state and display active profile context without gaining access to messages, full libraries, undeclared fields, chat metadata, DOM, database, network, or mutation operations (#4316).
-
Added per-agent context controls for custom agents, allowing each agent to request only the chat history, Character, Persona, lorebook, summary, Author's Note, tracker, and recalled-memory context it needs (#4305).
-
Added Markdown preview toggles to Character, Persona, and lorebook text fields, and rendered formatted card text in library detail views (#4306).
-
Added the Simplified Chinese documentation language pack, covering all 124 in-app guides (developer docs included) in natural Simplified Chinese (simplified characters only, the Chinese SillyTavern community's established terms such as 世界书 and 角色卡, one term and one CJK-Latin spacing convention per concept so search always matches, product names kept in Latin script), with English UI control names preserved for following instructions against the interface and Chinese sidebar category labels in the docs viewer. Select it under Settings → General → Documentation Language via Download & Replace (#4435).
-
Added the Korean documentation language pack, covering all 123 in-app guides (developer docs included) in natural Korean (the 합니다체 register standard in Korean software, one transcription and one spacing per term so search always matches, product names kept in Latin script with correct particle attachment), with English UI control names preserved for following instructions against the interface — glossed to match the app's Korean UI translation where a shipped string exists — and Korean sidebar category labels in the docs viewer. Select it under Settings → General → Documentation Language via Download & Replace (#4374).
-
Added the Japanese documentation language pack, covering all 123 in-app guides (developer docs included) in natural Japanese (the polite です・ます register standard in Japanese software, one katakana spelling per term and half-width Latin and digits everywhere so search always matches, product names kept in Latin script), with English UI control names preserved for following instructions against the interface and Japanese sidebar category labels in the docs viewer. Select it under Settings → General → Documentation Language via Download & Replace (#4345).
-
Added the Russian documentation language pack, covering all 123 in-app guides (developer docs included) in natural Russian (the "вы" address of mainstream Russian software with gender-neutral phrasing, product names kept in Latin script and undeclined so search always matches, standard Cyrillic loanword declension), with English UI control names preserved for following instructions against the interface and Russian sidebar category labels in the docs viewer. Select it under Settings → General → Documentation Language via Download & Replace (#4281).
-
Added the Polish documentation language pack, covering all 123 in-app guides (developer docs included) in natural Polish (informal address with gender-neutral phrasing, product names kept undeclined so search always matches, standard Polish loanword declension), with English UI control names preserved for following instructions against the interface and Polish sidebar category labels in the docs viewer. Select it under Settings → General → Documentation Language via Download & Replace (#4235).
-
Added an optional radial-gauge layout for Persona and Character tracker stats, with editable icons, percentage readouts, subtle low-stat warnings, and improved featured-card spacing and thought placement.
-
Added the Brazilian Portuguese documentation language pack, covering all 123 in-app guides (developer docs included) in natural Brazilian Portuguese ("você", Brazilian vocabulary and current orthography), with English UI control names preserved for following instructions against the interface and Portuguese sidebar category labels in the docs viewer. Select it under Settings → General → Documentation Language via Download & Replace. The tutorial's language suggestion now also matches region-suffixed locales, so a pt-BR interface proposes the pt-br guides on first run (#4229).
-
Added the French documentation language pack, covering all 123 in-app guides (developer docs included) in natural standard French with informal address, English UI control names preserved for following instructions against the interface, and French sidebar category labels in the docs viewer. Select it under Settings → General → Documentation Language via Download & Replace (#4191).
-
Added the German documentation language pack, covering all 123 in-app guides (developer docs included) in natural standard German with informal address, English UI control names preserved for following instructions against the interface, and German sidebar category labels in the docs viewer. Select it under Settings → General → Documentation Language via Download & Replace (#4157).
-
Added a Documentation Language selector under Settings → General and at the end of the first-time tutorial. Languages ship as downloadable packs from the repository's
docs-i18nbranch: Download & Replace fetches the selected language into the data folder with per-file integrity verification and live progress, then removes the previous language's pack, so installs carry only one language and checkouts carry none. Guides without a translation open in English with anENbadge, the in-app docs search works in the active language, the choice survives every update path, the first start after an update automatically refreshes the pack when its translations changed, and a Fix documentation failsafe verifies, re-downloads, or resets a broken pack. Forks and mirrors can pointDOCS_I18N_BASE_URLat their own copy of the branch (#4100). -
Added the first documentation language pack: Spanish, covering all 123 in-app guides (developer docs included) in neutral international Spanish, with UI control names kept in English so instructions can be followed against the English interface. Contributor docs now require keeping every language pack on
docs-i18nin step when guides change (#4100). -
Added rotating daily, weekly, or monthly automatic full backups under Settings → Advanced → Backup & Export, with the latest run and failure state shown in the UI (#4071).
-
Added a Retry action to Game Mode character-sheet editing. It regenerates only the selected Persona or party member from their card and the current campaign history, keeps the result as an unsaved draft for review, and preserves the original sheet unless the user saves (#4048).
-
Added a compact New Chat launcher to Home that explains Conversation, Roleplay, and Game before opening the selected mode's existing setup wizard (#4058).
-
Added a Roleplay Illustrator image connection override in Chat Settings, separate from the prompt-writing connection and with the Illustrator Agent's configured image model as its fallback (#4057).
Changed
- Matched the Read how this agent works action to the install, update, and uninstall button typography and styling in Download Agents.
- Made Noodle and NoodleR switch to their existing mobile layouts whenever the center pane falls below the desktop width, including when sidebars reduce the available space on a desktop device.
- Standardized resource-panel sorting controls on the shared width used by the Chats tab, so the Lorebooks selector no longer expands beyond neighboring tabs.
- Made the empty No messages yet chat hover preview inherit the configured app accent instead of the default theme's fixed lavender-pink.
- Kept World Maps navigation inside the Agents tab and Chat Settings by removing its dedicated launchers from the Chats sidebar and top bar.
- Advanced the stable release identity to v2.4.0 across the Engine, PWA manifest, Windows installer, Android bootstrap APK, update checks, Home release link, and Professor Mari's What's New announcement. Android uses
versionName2.4.0withversionCode41so it updates over every previously published APK. - Removed the retired Visual Novel mode identifier and its remaining compatibility branches from active schemas, runtime routing, UI labels, imports, and current documentation; Marinara's supported modes are now consistently Conversation, Roleplay, and Game (#4368).
- Capitalized the native language names in the Settings → General → Language dropdown (Español, Français, Polski, Português (Brasil), Русский) to match the Documentation Language selector (#4191).
- Renamed reusable Chat Settings Presets to Settings Profiles throughout Chat Settings, Roleplay quick setup, import/export, localization, and documentation. The word preset now identifies prompt presets in these flows, while existing exported profile files remain importable.
- Added a Post/Impersonate quick toggle to CYOA choices and kept centered choices clear of the Tracker panel.
- Tracker panels now appear as soon as their matching tracker agents are active, allowing starting data to be entered before the first agent run.
- Refined Impersonate with server-backed prompt templates shared across browsers, read-only built-in previews, full-view editing, and a direct link to Quick Replies settings.
- Made the Game dynamic-image prompt timeout configurable with
GAME_DYNAMIC_IMAGE_PROMPT_TIMEOUT_MS, retaining 45 seconds as the default and accepting values from 10 seconds to 1 hour (#4052). - Made Game session conclusions prepare the next playable arc with refreshed goals, quest seeds, pressure clocks, factions, and named NPCs so the following session does not inherit a stale scenario plan (#4059).
Security
- Updated the production web server, static-file serving, request client, archive, image-processing, HTML-sanitization, MCP transport, and supporting transitive dependencies to their patched releases; the shipped dependency graph now passes the production vulnerability audit with no known advisories.
- Required normal authorization for proxy-forwarded Docker traffic by default while retaining
REQUIRE_AUTH_FOR_DOCKER_PROXY=falseas an explicit legacy opt-out for fully trusted upstream clients. Direct same-host Docker bridge/gateway traffic remains compatible withBYPASS_AUTH_DOCKER. - Pinned bundled llama.cpp, MLX, and uv runtime inputs to reviewed revisions and release assets with repository-owned sizes and SHA-256 digests, and locked every MLX Python dependency to hash-verified packages. Downloads now fail before extraction or execution when their content differs, cancellation remains effective between retries, and installed runtime stamps force explicit Engine-reviewed upgrades instead of following upstream
latestormain. - Bounded NovelAI ZIP image decompression to 64 MiB, rejected oversized declared output before inflation, and required actual output to match the archive metadata so malformed or highly expanding provider responses fail safely.
- Imported webhook functions now arrive disabled with hidden chat context access removed. The Functions panel shows the destination origin and requested privileges so users can inspect the full configuration before deliberately enabling it.
- Restricted private generated-image result URLs to the configured provider's exact scheme, hostname, and port. Public CDN results remain supported, while redirects from a trusted local image provider can no longer reach another private service.
Fixed
-
Updated Professor Mari's official Agent knowledge and public catalog counts to cover all 31 downloadable packages, including Long-Term Memory and Storyboard, and corrected her package-update guidance to match the user-confirmed update flow.
-
Kept Noodle and NoodleR navigation, search, stage-profile, and bulk-create icons on their blue and pink mode accents, and made lorebook entry-type descriptions inherit editor chrome text instead of the default pink foreground (#4417).
-
Corrected several Korean interface strings surfaced by the Korean documentation review: stale character-card update items are now labeled 오래됨 instead of the self-contradictory 적용 불가 (the modal lets you override and apply them), the Mini Mari setting keeps the product name in Latin script, Custom Sources follows the 사용자 지정 convention, the regenerate concept is unified on 재생성 across ten strings, the Verbosity parameter reads 상세도, and the release labels use the 릴리스 spelling (#4376).
-
Made Name Prefix carry each responding character's identity into post-processing Agent prompts in multi-character Roleplay while keeping rewrite agents' raw response text unchanged (#4351).
-
Painted submitted Roleplay user messages before waiting for message-query cancellation, removing the multi-second gap between pressing Send and seeing the local message (#4357).
-
Made every Agent Run Interval count both user and assistant messages, including custom Agents, Illustrator, Lorebook Keeper, Card Evolution Auditor, About Me Keeper, Narrative Director Secret Plot maintenance, and Roleplay Storyboards (#4360).
-
Stopped PR description edits, CodeRabbit comments, and non-owner reviews from recreating the outside-contributor approval gate while retaining refreshes for base changes and approval-relevant SpicyMarinara reviews (#4361).
-
Isolated desktop and mobile Playwright servers and fixture data, made help tooltips non-blocking, kept focused mobile composers open during history scrolling, and aligned appearance and Tracker smoke checks with live application state so the complete browser sweep no longer fails from cross-project mutations or stale assertions (#4343).
-
Built the shared workspace before
pnpm dev:serverand documented the rebuild-and-restart boundary for shared source changes (#4327). -
Removed Windows child-process calls that combined argument arrays with
shell: true, eliminating Node.js DEP0190 warnings from startup, updates, native dependency repair, and client builds (#4332). -
Stopped generic OpenAI-compatible connections from inheriting
reasoning_effortfor unknown models, added an explicit Off option that sendsnone, and made the Advanced Parameters toggle omit reasoning fields entirely (#4335). -
Skipped corrupt or undecodable Noodle timeline images before captioning and multimodal generation, allowing the refresh to continue with text instead of forwarding invalid bytes to the model (#4310).
-
Added the missing delete action for generated scene videos in the Chat Gallery, including destructive confirmation, pinned-view cleanup, and removal of only the selected video file and metadata (#4314).
-
Made Professor Mari honor requests for only the last N chat messages or messages after a displayed post number, with range-aware pagination that no longer broadens those requests into whole-chat reads (#4308).
-
Trimmed leading and trailing whitespace from Character names when cards are saved or imported (#4303).
-
Made Memory Recall discard superseded message revisions and inject only the current edited message text (#4304).
-
Made the right-side Character and Persona searches use the same creator, version, notes, profile fields, tags, and Unicode-safe matching as their full libraries, so author searches no longer discard valid results (#4299).
-
Made Dynamic LLM Prompt generation for Game backgrounds read the latest completed GM turn as its primary scene source for both scene-analysis and Gallery requests, instead of merely rewriting the deterministic fallback prompt (#4300).
-
Corrected small factual defects in the guides found during translation review: the Text & Scale chat-text section now says four controls (not three), the chat-backgrounds save-location list now says three settings (not two), a link to the Card Browser guide no longer uses the tab's pre-rename "Browser" title, and six occurrences across five quoted button labels (Search models…, Creating backup…, Switching…, Checking…, Refreshing…) now use the same ellipsis character the app actually renders, so copying them into the docs search matches the interface. Mirrored across every language pack on
docs-i18n(#4282). -
Made
CHAT_GENERATION_TIMEOUT_MSgovern the time-to-first-byte budget for background generation as well, so a slow local model no longer fails the Noodle timeline refresh withHeadersTimeoutError/ "fetch failed" after a fixed five minutes. The default stays at five minutes; raise the variable to give slow local models more room (#4174). -
Documented the Documentation Language control in the settings overview guide (in English, Spanish, and German), and made the Fix documentation toast report what actually happened — pack re-downloaded, guides reset to English, or leftovers cleaned up — instead of always claiming a reset (#4158).
-
Rendered indented code fences correctly in the shared markdown renderer: a fence nested inside a list item (as in several developer guides) previously never closed and showed its
```markers as literal text in the docs viewer, and list-nested code no longer renders or copies phantom leading spaces (#4100). -
Replaced the unsafe built-in Clean HTML (Outgoing Prompt) regex with a validator-safe tag cleaner and migrated unchanged legacy defaults, restoring HTML and group-speaker-tag cleanup for Immersive HTML and Agent prompt history without overwriting customized scripts (#4101).
-
Streamed native profile and full-backup ZIP exports to disk with bounded JSONL table shards, preventing large libraries from failing with
Invalid string lengthwhile preserving preview/import compatibility and archive integrity checks (#4064). -
Included the live Character or Persona card as the first, explicitly labelled current revision in version history; saved revisions now show stable sequence numbers and second-precision edit times (#4040).
-
Made Conversation composer chrome focus the real text field, kept mobile thinking controls clear of participant names, and repaired the downloadable Calls surface's mobile participant labels and seven-button control rail (#4053, #4054).
-
Removed checked marks from unselected Character and Persona multi-select controls (#4055).
-
Enforced case-insensitive, globally unique public Noodle handles across Personas and Characters, including deterministic suffixes for auto-created profiles and reconciliation of older collisions (#4056).
-
Routed Krea models through OpenRouter's dedicated Images API while retaining image-only modality detection for every current
krea/model (#4061). -
Rewrote incomplete legacy UI-settings blobs with newly synced preferences, preserving an explicitly disabled Game Text Effects setting across staging updates (#4062).