Skip to content

v2.2.0 — Security vulnerability — do not install; update to v2.3.4.

Choose a tag to compare

@github-actions github-actions released this 12 Jul 15:09
a0113e5

Caution

Security vulnerability — do not install; update to v2.3.4.

This vulnerable release is retained only for provenance. Its uploaded artifacts have been removed. Do not downgrade to this version.


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 Noodle, Marinara's fake social network and the headline feature of v2.2.0: invited characters and optional random users can create posts, nested replies, polls, images, likes, reposts, mentions, and notifications on a persistent generated timeline; personas can participate directly; automatic and manual refreshes support scheduling and social-memory carryover into Conversation, Roleplay, and Game; and the responsive mobile shell provides profile navigation, search, settings, notifications, and pinned bottom navigation.
  • Added long-term Noodle timeline recall: refreshes can now sample up to three posts older than 48 hours so characters may naturally remember, revisit, or interact with past activity.
  • Added native multimodal Noodle timeline context: refresh models can inspect images attached to recent posts and comments, with deterministic post/reply labels, bounded image inputs, and an automatic text-only fallback for models that reject vision content.
  • Added optional Noodle image captioning with a selectable vision connection so text-only timeline models can understand images attached to posts and replies (#3505).
  • Added prefix-matched @handle suggestions to Noodle post and reply composers, with click, touch, and keyboard insertion.
  • Added first-class custom fields and hide controls to World State and Present Character trackers, including inline editing, lock-aware persistence, tracker-agent updates, and matching displays in the Tracker Panel and Roleplay HUD (#3518).
  • Added per-agent manual scheduling for Roleplay tracker agents, so selected trackers can be excluded from automatic post-turn runs and triggered from the HUD without forcing the whole tracker suite into manual mode (#3522).
  • Added batch editing for selected Lorebook entries, letting one boolean setting such as recursion, case sensitivity, whole-word matching, vector exclusion, or enabled state be applied to thousands of entries in one atomic update (#3513).
  • Added Discord-style standard emoji shortcodes and Conversation autocomplete, so names such as :crying: render as Unicode emoji and :cry… suggestions appear alongside custom emoji (#3515).
  • Added server-backed extension storage APIs and client/server runtime helpers so installed extensions can persist validated, size-limited settings across devices (#3524).
  • Added a message-scoped Game state endpoint so extensions and integrations can retrieve the exact stored snapshot for a selected chat message and swipe (#3526).
  • Documentation search in the in-app docs viewer now highlights every occurrence of the active query in the opened guide, result titles, and snippets, and opens each result at its first highlighted match.
  • Added visible Game setup progress with an elapsed timer and indeterminate progress bar while the Game Master builds the initial world, plus live phase labels during the first turn (#3495).
  • Added an Initial Game Setup section to Game Mode Session History so players can review, copy, or download a .txt file containing the complete setup that created a successful campaign, including preferences, prompt choices, visual/storyboard options, safe model descriptors, and effective generation parameters without credentials or local IDs.
  • Added per-turn Peek Prompt actions to Game Mode Logs and History Above Dialogue Box, opening the exact cached prompt that was actually sent for that historical GM turn.
  • Added read-only replay for completed Game Mode sessions from Session History, including click-through narration, stored presentation cues, and deterministic choice forks that only permit the option selected during the original session (#3465).
  • Added a selectable Comic Page Video prompt for storyboard clips that interprets comic and manga panels as duration-aware ordered animation beats without changing the shared Game Video Prompt.
  • Added an Anime Episode presentation for Game Mode with coordinated Anime Game Prompt, Comic Page Animation, and Comic Page Video defaults; setup-time keyframe targeting; a {{gameStoryboardKeyframeCount}} GM macro; and independent storyboard prompt selectors that keep Anime Episode Director plus Anime Game Video available as the alternative still-shot combination.
  • Added GLM-5.2 to custom OpenAI-compatible connection model choices, including its 1M context and 128K output limits.
  • Added OpenAI GPT-5.6 Sol/Terra/Luna model support, including the gpt-5.6 Sol alias, a gpt-5.6-sol-pro pro-mode alias, Responses API routing, GPT-5.6 max reasoning effort mapping, and reuse of the existing Exclude Past Reasoning toggle for GPT-5.6 reasoning context.
  • Added a configurable source picker (⚙️) for the Conversation "about me" AI-write, in both the character-card editor and the in-chat profile popout: choose which of the card fields (description, personality, scenario, backstory, appearance), the Convo behavior directive, the character's lorebook entries (with per-entry selection in the card editor), and recent chat context feed the draft. Defaults to personality only.
  • Added Professor Mari suggestion chips and guided creation follow-ups so Home Mari and legacy Mari chats can surface color-coded quick replies for step-by-step creation, editing, and contextual next actions.
  • Added a Revert control to the about-me editor (card editor and in-chat popout) to undo a manual or AI-write change, and an emoji picker in the about-me editor.
  • Added an optional per-character toggle to declare a character's Convo display name on its card in the prompt, so the model can map the display name to the right card in group chats.
  • The Convo display name is now shown as the sender label above messages in Conversation (read live, so renames reflect immediately), not only in the prompt and the profile popout.
  • Added Poker (No-Limit Texas Hold'em) as a Conversation-mode table game for 2-8 players: seeded fair dealing, full no-limit betting with all-ins and side pots, showdown hand ranking with natural-language labels, and multi-hand sessions with a rotating dealer button, optional blind escalation, an optional hand limit, and player-paced "Next hand" breaks between hands.
  • Added a selectable poker dealer: choose the silent house dealer or seat any chat character as the croupier, who announces hand starts, flop/turn/river reveals, showdowns, and blind increases in their own voice and personality — narration only, with dealing always seeded and fair.
  • Poker joins the [poker] Conversation command family alongside [uno] and [chess], with a /poker slash command, natural-language launcher, per-chat command toggle, and a setup modal for players, dealer, and stakes.
  • Added 8-Ball Pool as a one-on-one Conversation-mode table game with a real 2D physics simulation: you aim and shoot for real — drag to aim with a guide line and ghost-ball preview, set power on a slider, and watch every shot play out with animated ball motion, collisions, cushion bounces, and pocket drops. Characters pick from an engine-computed shot menu (direct pots, bank shots, and safeties) in personality — daredevils take the showoff bank, tacticians play safe — and their choice is executed through the same physics with skill-based aim accuracy. Fouls (scratches and wrong-ball-first contact) give ball-in-hand with tap-to-place cue placement, slop counts, alternate breaks, and race-to-N matches with player-paced racks.
  • Added a selectable 8-ball announcer: seat any chat character as the pool-hall commentator, who calls the break, group assignment, fouls, great shots, and rack wins in their own voice — narration only, never affecting the rules.
  • 8-ball joins the [eightball] Conversation command family, with a /8ball slash command (alias /pool), natural-language launcher, per-chat command toggle, and a setup modal for the opponent, announcer, match length, and who breaks.

Changed

  • Updated UNO bot instructions and Wild tool guidance to expose the bot's remaining color counts and prefer its strongest held color instead of reflexively repeating the active color (#3512).
  • Changed random and exact Noodle participant selection to prioritize directly involved accounts, then accounts absent from the previous refresh, while retaining recently active accounts as a fallback when the pool is small (#3505).
  • Changed post-processing orchestration so Prose Guardian, Continuity Checker, and Immersive HTML share a dedicated rewrite call that is isolated from tracker batches, and hid the legacy About Me Keeper from the manually addable Agents library.
  • Changed Noodle's generated-image quota from a daily cap to Images/refresh, applied independently to every manual and automatic timeline refresh while preserving each user's saved limit.
  • Added a separate Comic Page Animation storyboard prompt with clip-duration panel budgets, causal panel order, continuity guidance, and timed motion direction while preserving the original Comic Page illustration prompt.
  • Refined comic storyboard animations from output review: Gemini Omni now receives complete untruncated prompt components, six-second pages may use a simple third beat without overcrowding, animation pages minimize lettering and repeated cast members, full-page establishes cannot reveal later consequences early, and clips reserve a final hold.
  • Changed storyboard videos to play once and hold on their final frame instead of looping. Background mode now starts each story beat's clip once with sound, lets narration display while it plays, waits before narration auto-advances, and exposes replay, play/pause, and mute controls in the desktop and mobile game toolbar.
  • Removed the obsolete Visual Novel coming-soon tab and grouped legacy/imported Visual Novel chats under Roleplay while preserving their schema, importer, and achievement compatibility; Game dialogue layout labels now use Dialogue Box wording.
  • Updated Noodle timeline guidance so characters may naturally be rude, petty, confrontational, revive grudges, form rivalries, and stir up interpersonal drama when it fits their established personalities and relationships.
  • Restyled Noodle around the Klusek blue logo asset, replacing the always-visible settings column with a profile-triggered drawer and a more Twitter-like central feed.
  • Updated Noodle image prompt generation so character posts may request either character-focused images or in-character memes when image generation is enabled.
  • Updated Noodle timeline generation guidance so characters and random users know they may occasionally create and vote in polls and naturally use Unicode emoji in posts and replies; when random users are enabled, they may also very occasionally post clearly fictional parody ads or absurd fake crypto scams.
  • Updated Noodle settings so selected character folders can be bulk-invited directly, and automated refreshes can be disabled by setting refreshes per day to 0.
  • Updated Noodle posts with edit/delete actions for every post, toggleable likes/reposts, a confirmed timeline reset control, multi-character image references, and automatic character-gallery saves for generated character post images.

Fixed

  • Fixed the root recovery screen hydrating the legacy default pink before the selected app accent could mount; crash details, borders, focus rings, and recovery actions now inherit the saved chroma color, and remaining old pink application-chrome fallbacks use semantic accent tokens.

  • Added an actionable startup warning when the compiled client is missing, identifying the expected build path and the pnpm build command instead of silently serving only the API (#3529).

  • Fixed Illustrator defaulting to the Background prompt in new and existing Roleplay chats after the staging update; normal Illustration is restored as the default, affected stored agent configs are repaired once, and explicit per-chat Background choices remain intact (#3517).

  • Fixed the Windows uninstaller deleting current-layout user data under packages/server/data; uninstall now asks before application cleanup, safely preserves and restores retained data, supports the legacy root data folder, and removes the current win directory instead of a stale path (#3484).

  • Fixed semantic Lorebook search being unreachable for ordinary keyed entries; vector similarity now acts as the documented fallback when keyword matching misses while retaining score thresholds, maximum results, filters, and probability gates (#3511).

  • Fixed partially speaker-prefixed Conversation replies rendering their leading model text as narration beneath the user's message; the leading block now inherits the saved assistant character while edit and reaction attribution remain aligned (#3514).

  • Fixed Conversation and other non-assembled generation paths silently disabling reasoning when the UI showed the default Maximum effort; shared and server runtime defaults now agree while an explicit disabled value remains respected (#3498).

  • Fixed Noodle accounts repeatedly interacting with the same post or replying to their own comments without new involvement, while still allowing a return after an explicit tag or direct reply; also fixed profile validation errors rendering as [object Object] (#3505).

  • Fixed pending persona portrait focus and zoom changes being lost when a tab was refreshed or closed before the debounce completed by flushing the save on pagehide with a keepalive request (#3506).

  • Fixed Conversation replies leaking combined date-and-time and speaker prefixes such as [11.07 15:53] Character: Hello!; single and individual replies now store and display only Hello!, while merged group speaker boundaries remain intact.

  • Fixed Lorebook Overview sections briefly rearranging after Save by handing the editor the authoritative PATCH response before clearing its dirty state; Professor Mari-created lorebooks now normalize categories and advanced numeric settings so later manual edits, including Global changes, can be saved.

  • Fixed Roleplay streaming collapsing into the completed response when post-processing agents started, final response cleanup changed an already-painted prefix, the provider closed immediately after tracker work, or the browser tab lost visibility; authoritative cleanup now preserves typewriter progress, the live buffer remains authoritative through agent work, background tabs pause instead of flushing, held rewrites stream their final rewritten response before the durable message takes over, bottom-follow scrolling tracks the rewrite's committed DOM growth, and rewritten messages retain a persistent shield toggle for comparing the original and edited versions.

  • Fixed editing the preceding user message during Roleplay generation temporarily rendering the saved assistant response beside its live streaming presentation.

  • Fixed Text to Speech treating quotes inside generated HTML attributes and CSS as dialogue; markup is now removed before dialogue extraction, non-speech code/style blocks are discarded, and explicit speaker tags continue to route proper dialogue to the correct voice.

  • Fixed desktop sidebars stuttering over dense Roleplay transcripts by replacing continuous width animation with compositor-only transform and opacity motion, retaining panel content between visits, and performing each center-layout resize only once.

  • Fixed Noodle setting controls reverting to an earlier snapshot by serializing saves, keeping the edited value optimistic while the request completes, and returning the value re-read from persistent storage.

  • Preserved stored votes on older Noodle polls when manual or automatic refresh hydration briefly returns an incomplete interaction snapshot.

  • Fixed persona-authored Noodle comments bumping their target posts to the top of the timeline; a post now moves up only when another account directly responds to the active persona's comment.

  • Fixed failed Noodle image generations leaving a visible image prompt in place of the missing picture; Noodle now retries the image provider once, then publishes a clean text-only post if the second attempt also fails and clears orphan prompts from earlier failed posts.

  • Fixed provider concurrency-limit failures being reduced to generic agent errors or omitted from generation guidance; affected toasts now identify the concurrency limit and include the provider's message.

  • Fixed new Roleplay chats opening without character greetings because initial character assignment inserted a hidden join notice before greeting seeding (#3472).

  • Fixed the regex safety validator rejecting linear delimiter-bounded field patterns such as ([^|]+)\|([^|]+)\|([^|]+) as polynomial backtracking risks while retaining rejection of overlapping broad-unbounded chains (#3471).

  • Fixed failed Game Mode Lorebook Keeper runs leaving no obvious recovery path: Session History now surfaces the failure immediately, keeps its background status fresh, and provides a dedicated Retry Lorebook Keeper action.

  • Fixed Game Mode status readouts written as standalone <...> lines being sanitized into empty narration steps, and removed segments made empty by display regex or macro processing.

  • Fixed Background storyboard playback state leaking between keyframes, which could rapidly pause, restart, or appear to fast-forward animations.

  • Fixed Grok CLI subscription requests failing to spawn (E2BIG / "Argument list too long") on long or multibyte-heavy transcripts by delivering the prompt via --prompt-file instead of a single inline -p argument; with the transport limit gone, an explicitly configured Max Context Window is now honored instead of being silently capped at 32k (the conservative 32k default is unchanged).

  • Fixed Text to Speech source switching discarding the previous provider's encrypted API key, endpoint, model, voice assignments, and provider parameters; each source now restores its own saved profile when selected again (#3467).

  • Fixed desktop Noodle emoji, custom emoji, and sticker insertions always appending to the end of post and reply drafts instead of replacing the active selection at the caret.

  • Fixed example dialogue <START> sentinels being escaped as &lt;START&gt; in XML-wrapped prompts while continuing to escape arbitrary imported markup (#3441).

  • Fixed Conversation About Me and Noodle avatars ignoring saved crop settings, and restored custom emoji rendering in Noodle profile bios (#3443).

  • Fixed structured Game and Noodle generations being rejected when a model wraps an otherwise valid JSON object or array in thinking, metadata, or other stray text.

  • Fixed GPT-5.6 Sol rejecting Noodle timeline/profile generation by supplying strict JSON schemas with additionalProperties: false at every object level and placing an explicit JSON instruction in Responses API input messages.

  • Fixed native Z.AI GLM-5.2 connections using legacy thinking parameters; Marinara now sends the documented thinking.type and compatible reasoning_effort values while preserving JSON mode on Z.AI endpoints.

  • Expanded every standard emoji picker from a hand-curated subset to the complete Unicode Emoji 17.0 base catalog, including science emoji such as 🧪 plus the previously missing travel, activity, object, symbol, animal, and flag groups.

  • Fixed Quick Replies' Post only action saving recognized slash commands as ordinary messages; known commands now execute normally while unknown slash-prefixed text can still be posted.

  • Moved Quick replies from Advanced settings to General -> Input & Editing, and clarified that image prompt review is a global generation preference rather than a Game-only option.

  • Fixed manual Noodle timeline refreshes bypassing Expose image prompts before sending; generated Noodle images now present their final positive and negative prompts for editing before provider submission.

  • Fixed character-assigned lorebooks failing validation when duplicated from the Lorebooks pane, while preserving their assignment and vector-search settings (#3433).

  • Fixed the Noodle reply image picker separator inheriting a pink chrome accent instead of using Noodle blue.

  • Fixed character-authored Noodle comments being read-only; their edit and delete controls now use the same flow as persona comments, while generated random-user comments remain protected.

  • Fixed custom and imported preset variables disabling Confirm Choices when a valid blank-valued option was selected (#3429).

  • Fixed turn-game bot table talk and dealer announcements leaking the model's chain-of-thought into chat when the connected model emits inline reasoning (e.g. a leading <think> block): narration now strips inline reasoning like the main generation pipeline, falls back to the factual event line when the output was all reasoning, and gets a larger output budget so reasoning models can still land the spoken line (#3427).

  • Fixed comma-separated lorebook activation-key input so pasted key lists are trimmed, split, and deduplicated into individual keys (#3422).

  • Fixed grouped Conversation reactions on mobile by keeping each speaker's reaction button visible and removing the ambiguous whole-block reaction target (#3424).

  • Fixed generated and uploaded Game assets being misclassified as native merely because they lived below a bundled-assets folder, restoring move and delete actions for user-owned files (#3425).

  • Fixed local git installs being unable to switch release channels from Settings unless general browser-applied updates were enabled; deliberate loopback channel switches now work while ordinary and remote update safety gates remain intact (#3426).

  • Completed Noodle's automatic timeline refresh scheduling: daily refresh times are now distributed across persisted local-day windows, survive restarts, collapse overdue slots into one catch-up refresh, retry safely after failures, and update an open Noodle timeline automatically.

  • Fixed PocketTTS voice refresh so built-in and custom voices returned by the provider /v1/voices endpoint are listed, including custom voices identified by URL/path fields (#3410).

  • Fixed Conversation Call live-mic input so Local Whisper/provider media submissions cannot queue unbounded speech segments and lock the call UI behind repeated "too many requests" failures (#3411).

  • Fixed Game Mode reputation widget updates accepting generated action descriptions longer than 50 characters, preventing scene-analysis reputation updates from failing on natural-language actions (#3409).

  • Fixed the v2.1.1 auto-update build regression by resolving the stale TypeScript errors that broke the server/client build during update (#3401).

  • Fixed the chat-specific about-me override being lost on reload or refetch — the popout read chat metadata without parsing it, so the override reset to the card default and, on save, could drop other characters' overrides.

  • Fixed the about-me AI-write failing on "thinking" models (e.g. Gemini 3.x) that spent the entire output budget on reasoning and returned no content; the output ceiling was raised and reasoning effort lowered.

  • Fixed the about-me source picker listing only "linked" lorebooks — a character whose lorebook is embedded now sees and can select its entries.

  • Fixed the Conversation participant-profiles block labeling the persona as "the user," which nudged some models toward sycophancy; the persona is now presented as just another participant.

  • Fixed the about-me profile popout on mobile (now a full-height sheet so the keyboard and emoji picker no longer overlap the field) and its overflow on desktop when the source panel is opened.

  • Fixed help tooltips stacking — opening one now closes any other.

Additional release scope

Added

  • Added Conversation-mode profiles for characters and personas: a separate Convo display name, an "about me" profile (editable by hand or drafted by an AI-write button), and a Convo behavior directive with configurable insertion strategy, all Conversation-mode-only and never sent to the model in Roleplay, Visual Novel, or Game mode (#3368).
  • Added per-chat "about me" overrides (Discord per-server-profile style): click a participant's avatar in Conversation mode to view their effective profile and set, edit, or clear a chat-specific override that supersedes their default about-me in that conversation.
  • Added the opt-in About Me Keeper Conversation agent that lets characters keep their own about-me current on a configurable cadence, updating either their public card profile through the existing approval flow or a private, chat-specific one, and the opt-in update_about_me command so a character can update its own about-me in character mid-turn.
  • Extended card CSS theming so the Conversation about-me profile popout is customizable from a character's or persona's Creator Notes (new mari-about-me-* hooks documented in the Card CSS Theming Guide), and personas can now ship creator-notes CSS for their popout.
  • Added Grok 4.5 to the xAI / Grok model list and made new xAI connections default to it.
  • Added Conversation prompt relocation macros for auto-inserted context: {{context}}/{{status}}, {{commands}}, {{reactRules}}, {{memories}}, and {{lorebook}}.
  • Added a TTS cache export control in Text to Speech settings so generated cached voice clips can be downloaded from IndexedDB.
  • Added a Roleplay Chat Summary maximum output size setting under Summary Connection, defaulting to 4096 tokens for manual and automatic summaries.
  • Added a connected-chat shortcut to Game mode so connected Conversation and Game chats can switch back and forth like Conversation/Roleplay links.
  • Added a scene prompt setup dialog for user- and character-initiated scenes, remembering POV, tense, and optional prompt wishes for the next scene generation.

Changed

  • Bumped release metadata to v2.2.0 across packages, the PWA manifest, README release pointer, Windows installer sources, Android APK metadata, and the home-page-visible app version.
  • Android versionName is 2.2.0 with versionCode 32.
  • Tagged releases now attach a clearly named, versioned source ZIP alongside the Windows installer and Android bootstrap APK, in addition to GitHub's automatic source archives.
  • Reworked Settings with search-first navigation, compact pinned controls, fixed top-level categories, and finer section shortcuts for faster navigation.
  • Updated the default Illustrator prompt rules so generated image prompts carry available character builds, clothing/outfits, and appearance details instead of relying on the image model to infer them.
  • Changed custom Roleplay Chat Summary prompts to apply globally across roleplay chats instead of only the currently open chat.

Fixed

  • Fixed manual agent retry/rerun requests so only agents currently added to the chat can be resolved, preventing removed agents from being prompted by stale retry requests.
  • Fixed agent prompt assembly so the required output format is appended to the terminal user message after chat history using the selected chat prompt preset wrapper (<output_format>, ## Output Format, or raw text).
  • Fixed non-Quest agents receiving active quest progress in current game-state context while keeping compact quest state available to the Quest Tracker when it is active.
  • Fixed Roleplay/VN chat branching so tracker snapshots copy to the branch instead of only copying Game Mode snapshots (#3385).
  • Fixed Lorebook Keeper approval previews and commits so updates to existing entries keep the existing text and include newFacts alongside proposed replacement content (#3384).
  • Fixed the mobile Characters panel Load more footer so it no longer overlaps or blocks the last character cards (#3383).
  • Fixed generated TTS playback so clips created while the tab is hidden or unfocused wait for the tab to return instead of being dropped (#3382).
  • Fixed prompt identity fallback so card fields referenced by macros are not duplicated, and fields can be intentionally suppressed by placing their macro in the prompt template (#3380, #3377).
  • Fixed Game Mode world setup lorebook generation so per-chat disabled lorebooks and hidden Game Lorebook Keeper books are excluded (#3376).
  • Fixed active lorebook controls so a pinned lorebook that is also active via persona, character, or global scope can still be disabled in the current chat (#3375).
  • Fixed Conversation command reminders so preset wrap format None no longer emits a literal <commands> XML wrapper (#3378).
  • Fixed roleplay streaming recovery so parallel agent events are deferred until the main assistant stream finishes, preventing late agent updates from replacing the streamed message.
  • Fixed the recovery/error page so Internal Server Error uses the configured chat chrome text color instead of a hard-coded pink.
  • Fixed Conversation Calls on Chromium browsers by allowing same-origin microphone, camera, and screen-capture access in the server permissions policy instead of blocking the browser permission prompt.
  • Fixed the Roleplay setup wizard's Use Settings Presets shortcut so system "joined the chat" notices no longer block seeding the selected character's first message (#3392).
  • Fixed Conversation-mode prompt assembly so the user's visible status and activity are always included in context unless the persona is set to Invisible, even when a relocated context macro is configured but not present after prompt resolution.