Changelog
Every shipped release, newest first. The same notes appear as the update changelog inside the app.
0.5.1
- Fixed the app failing to start after the 0.5.0 update ("Error during initialization")
- Fixed the loading screen's cached theme colors never applying (broken in compiled builds for several versions)
0.5.0
- Fixed Call Pipeline canvas on mobile: pinch zoom now actually works (anchored between your fingers), one finger on empty canvas pans the view, and the fullscreen button falls back to a full-viewport overlay with an Exit button on mobile browsers without the Fullscreen API
- Added Author's Note: a global note injected near the end of the prompt (configurable role and depth), with a saved-notes library (name, save, load, delete). Find it in the chat ⋯ menu — a green dot shows when a note is active
- The "Send last message as final" checkbox is now a "Prefill" toggle (same behavior, opposite polarity — checked means the last message is sent as prefill). Your saved setting carries over unchanged
- Added Prompt Processing to the chat ⋯ menu (default: None), opening a picker with descriptions: Merge consecutive roles, Semi-strict, Strict (user first), Single user message, Single system message, and NoAss — the whole chat sent as one name-prefixed assistant message the model continues as its own prefill (rentry.co/NoAss). The menu entry shows the active mode
- Empty and whitespace-only messages (e.g. left over from interrupted generations) are now stripped from the prompt before sending — some APIs reject them
- Fixed text styling with HTML rendering off: styled messages no longer show literal <span> markup, and nested styling (italics inside quotes, quotes inside bold, code with quotes) now colors correctly instead of spilling style attributes into the text
- Fixed pipeline canvas port wiring: tapping a block's in-port to complete a tap-tap connection works reliably now (it used to silently disarm), new blocks can't spawn off-canvas, and adding a block scrolls the view so both it and Main are visible
0.4.0
- New optional API parameters: Top A, Typical P, and Logit Bias (JSON token map) with per-model auto-detection
- New "Web search" toggle in Advanced Settings: lets the model search the web during generation (Claude server tool, OpenRouter :online, Grok Live Search, OpenAI search-preview)
- New "Prompt caching (Claude)" toggle (on by default): unchanged context re-reads at ~10% input price — swipes and long chats get much cheaper
- New Summarizer tab: enable auto-summary of old history, set recap length with a slider, edit the summarizer's prompt structure like a preset (system/user/assistant rows with macros), and view/edit/clear the current chat's recap
- The app now warns when a reply is nearly identical to the previous one (suggests swiping or raising repetition penalty)
- Fixed background-mode saves erasing card-trigger chat variables
- New Call Pipeline (Calls tab): a node-graph editor — drag Prepare/Rewrite/Preset/Saved call/Judge blocks on a canvas and wire them between the Main (preset) and Output blocks; parallel branches race and a Judge picks the winner; a Judge watching a single block loops it with feedback until it approves; a Yes/No judge routes the flow down green (yes) or red (no) wires; progress line on the composer
- Call Pipeline blocks are fully configurable: name/description, model (picked from your API's model list), temperature, top P, max tokens, penalties, preset (current or any saved), per-block web search, and chat history (full / last N / none, user-only or assistant-only) — grouped into clear sections
- Whole Call Pipelines can be saved as named presets, loaded/deleted from the toolbar, and exported/imported as JSON files
- Pipeline rewrites now show a pulsing "refining…" chip on the message while they run, and refined messages get a ± button that opens a modal with the full Diff (green additions / red removals), Original, and Refined views
- Pipeline block requests now stream internally (accumulated, not rendered), so long rewrite/judge calls no longer risk dying to connection idle timeouts
- When the last pipeline step is a plain rewrite block, its output now streams live into the message instead of swapping in all at once
- Rewrote the pipeline blocks' instruction wrapper: the old "Ignore previous instructions" phrasing made some models refuse the task ("I won't follow OOC overrides") — blocks are now framed as sanctioned app processing steps
- Call Pipeline canvas: wheel zoom on desktop, pinch and double-tap zoom on mobile, fullscreen button
- Fixed clicking a re-rendering control in a non-Chat tab bouncing you back to the Chat tab
- Fixed switching chats while a reply was generating: the reply could overwrite messages in, or get saved into, the newly opened chat — it now always lands in the chat it was generated for (visible when you switch back)
- Fixed flipping the streaming toggle while a reply was generating silently dropping that reply
- Fixed streamed replies leaking into another chat if you switched chats mid-stream (chunks kept writing into whichever chat was open)
- Fixed deleting a chat while its background generation was running: the late reply used to recreate the deleted chat — deletion now cancels the background task
- Background generation polling now retries brief network hiccups instead of detaching until you minimize/reopen the app
- Pipeline steps that produce no output (e.g. bad key/model on a block) now show a warning instead of being skipped silently
0.3.1
- Smaller Android APK (~1MB less): removed duplicated frontend files from the app bundle
- Fixed chat area leaving a large gap above the message box after the Android keyboard opens/closes
- Background-safe generation is now on by default everywhere (toggle still available in Advanced Settings, without popup notifications)
- Fixed swipe regeneration silently overwriting the previous message version when background generation is on
- Fixed touch-swipe regeneration sending the wrong chat context when swiping a message that isn't the latest
- Fixed the message box not growing while typing multi-line messages (was frozen at one line)
0.3.0
- Exported character cards are now spec-compliant V2 (chara_card_v2) and keep embedded lorebooks, alternate greetings, and extensions instead of flattening them away.
- Character import now reads V3 cards (ccv3 chunk) and plain .json card files in addition to PNG.
- Character cards with embedded lorebooks (character_book) now import the lorebook automatically and bind it to the character; V2 position values (before_char/after_char) are mapped correctly.
- Alternate greetings from character cards now appear as swipeable versions of the first message.
- Character post_history_instructions are now injected after chat history (with {{original}} support), and V3 single-colon macros ({{roll:N}}, {{pick:...}}) work.
- V3 .charx character archives now import, including the embedded icon as the avatar.
- Lorebook entries with V3 decorators (@@activate, @@position, @@role, ...) are handled: supported ones apply, all are stripped from prompt text.
- Card macros: {{char}} uses the V3 nickname when set, {{// comments}} are stripped from prompts, and {{original}} works inside a card's system_prompt.
- Lorebooks: V3 regex keys (use_regex) and standalone lorebook_v3 files import correctly; selective now follows spec semantics; @@activate_only_after/@@activate_only_every decorators map to delay/cooldown.
- The character editor now has dedicated fields for nickname, post-history instructions, alternate greetings, creator notes, card tags, creator, and version.
- New: group chats! Create a group from the Characters tab, members reply in turn (mentions and talkativeness decide who), with member chips above the composer to trigger, mute, or pass the turn.
- Lorebook V3 decorators completed: keep_activate_after_match, is_greeting, and spec-correct activate_only_after/every; new {{hidden_key}}, {{reverse}}, and stable {{pick}} macros; APNG cards import.
- Lorebook entries can now inject at a specific depth in chat history (@@depth decorator and SillyTavern position-4 world info).
- CHARX assets are now stored: embedded icons, backgrounds, and other assets survive import, and background assets display behind the chat for that character.
- Exported PNG cards now carry both V2 (chara) and V3 (ccv3) data, and a new "Export as CHARX" button in the character editor produces a V3 .charx archive with the avatar and stored assets embedded.
- Importing a card with tags now offers an "Adopt tags" button to merge them into your library tag filters (instead of ignoring or auto-merging them).
- Cards that ship regex scripts (RisuAI customScripts / SillyTavern regex_scripts) now offer an "Adopt scripts" button on import; adopted scripts only run for that character and show a character badge in the regex manager.
- RisuAI PNG cards with embedded emotions/extra assets (chara-ext-asset chunks) now import those assets into character storage instead of dropping them.
- RisuAI .charx archives with a module.risum now import fully: module regex scripts feed the "Adopt scripts" offer, the module lorebook binds to the character, and the module (including trigger scripts, which are never executed) survives re-export verbatim.
- Chat variables: prompts and cards can now use {{getvar}}, {{setvar}}, and {{addvar}} macros; values are saved per chat and persist across reloads.
- Interactive cards: cards that ship declarative triggers (stat systems, affection meters, etc.) now offer an "Enable triggers" button; once enabled they update chat variables, inject prompt text conditionally, and can add messages — all opt-in per character.
- Cards with JavaScript code scripts (RisuAI cjs/triggercode) can now run them in a sandbox — code executes with no network access and can't touch your settings or API keys, and a runaway script is auto-stopped. Opt-in per character with a warning.
- Lorebook entries with `@@position personality` or `@@position scenario` now render at those points in the prompt instead of defaulting to the top.
- The `{{pick::a::b::c}}` double-colon macro form now works (previously only `{{pick:a,b,c}}` did).
- New "Export as JSON" button in the character editor writes a spec-compliant V3 card.json (preserves embedded lorebook, greetings, and V3 metadata; strips local asset URLs).
- Card triggers now run Lua scripts (RisuAI triggerlua) and the full trigger-v2 opcode set, alongside the existing JavaScript triggers — all sandboxed, opt-in per character, with network/LLM access as a separate explicit grant.
- Conditional card syntax now works: {{#if}}/{{#if_pure}} blocks (including bare {{/}} closers and {{? expr}} conditions) and inline functions ({{equal}}, {{and}}, {{greater}}, {{getvar}}, arithmetic, etc.) are evaluated in both prompts and displayed messages instead of showing as raw text.
- Card image references now display: [🖼️|name] and {{asset::name}}/{{img::name}}/{{emotion::name}} render the card's embedded images inline in messages.
- Fully interactive RisuAI cards now render: display scripts build the card's HTML UI, the card's own CSS (backgroundHTML) is applied, clickable buttons run the card's scripts (e.g. a language/scenario picker), and images + conditional content appear — matching how the card looks in RisuAI.
- Large .charx files that previously failed to import ("card.json not found") now load correctly.
0.2.1
- Fixed the mobile keyboard leaving a gap under the chat and unfocusing the jailbreak editor while typing.
- Major performance pass: faster streaming and sends, smaller payloads, and far fewer disk writes across jailbreaks, characters, and sync.
- Character editing no longer drops embedded card data; PNG export now works with emoji and special characters.
- Theme colors now apply across the whole app chrome, plus visual fixes on mobile and wide screens.
- Hardened the sync relay and API server.
0.2.0
- Completed visual overhaul across desktop and mobile interfaces.
- Improved chat composer, navigation, characters, personas, presets, settings, modals, and responsive layouts.
- Fixed desktop and mobile scrolling, viewport sizing, race conditions, and layout regressions.
0.1.10
- Fixed mobile/APK character upload by using a native file-label trigger instead of a hidden programmatic click.
- Made character card import accept Android file pickers that return generic or missing MIME types for PNG cards.
- Improved Android WebView file chooser handling with openable document intents, multiple selection, MIME mapping, and read URI grants.
ScyllaChat