Thanks to visit codestin.com
Credit goes to github.com

Skip to content

1.17.0

Choose a tag to compare

@Cohee1207 Cohee1207 released this 28 Mar 17:24
· 107 commits to release since this release
Immutable release. Only release title and notes can be modified.
e3f4166

SillyTavern 1.17.0

Note: Requires Node.js 20 or higher.
Need to update Node? See: https://docs.sillytavern.app/installation/updating/node/

Backends

  • Claude: Added adaptive thinking support mapped from Reasoning Effort (opt-in via config)
  • OpenRouter: Added provider filtering based on selected model
  • OpenRouter: Deactivated reasoning toggle with minimal reasoning effort now disables thinking (model-dependent)
  • OpenRouter: Added interleaved reasoning forwarding for tool-call continuations
  • SiliconFlow: Added API endpoint selection (Global / China)
  • xAI: Removed deprecated web search toggle
  • Synchronized model lists (GPT, Claude, GLM, Gemini, Grok Imagine)

Improvements

  • Swipe Picker: New interface to browse, jump, branch, and delete swipes
  • Backgrounds: Added virtual folders with grid view, breadcrumbs, and thumbnails
  • UI: New splash screen design during app initialization
  • World Info: Renaming can optionally relink lorebooks across all characters
  • World Info: Unified chat, character and persona link buttons behavior (click to load, shift-click or long press to open a menu)
  • Tags: Added automatic cleanup of orphaned folder tags
  • Thumbnails: Improved APNG detection for thumbnail generation
  • Tokenization: Token estimation now uses byte length of a string
  • Gallery: Added a shortcut to extensions ("Magic Wand") menu.
  • a11y: Added support for system-wide reduced motion and high contrast preferences
  • Reasoning: Added a new "Think XML" template without newlines in tags
  • Server: Added isomorphic-git as an alternative backend for installing extensions
  • Server: Added optional gzip compression for large request payloads
  • Server: Added config for disallowing full data backups
  • Server: Clear error messaging for port conflicts during startup
  • Server: Auto-create data root in standalone mode if not exists
  • Build: Improved webpack cache management to prevent stale caches

Macros

  • New macro engine enabled by default for new installs
  • Added:
    • {{charFirstMessage}} / {{greeting}} (with optional indexing for alternate greetings)
    • {{maxContextTokens}}, {{maxResponseTokens}}
    • {{allChatRange}}: provides the range of the entire chat for commands that accept ranges
  • Fixed {{summary}} prioritization of UI memory content

STscript

New Commands

  • Character management: /char-create, /char-update, /char-get, /char-delete, /char-duplicate, /tag-import
  • Generation control: /swipe, /regenerate
  • Reasoning block control: /reasoning-collapse, /reasoning-expand, /reasoning-toggle
  • Array utilities: /array-wrap, /array-unwrap
  • Loader: /loader-wrap, /loader-show, /loader-hide, /loader-stop

Enhancements

  • Extended /input, /popup, /buttons with placeholders, tooltips, icons
  • /imagine now supports gallery argument
  • /bgcol rebuilt for full theme palette generation using color theory

Removals

  • Removed deprecated commands: /lock and /bind (aliased to /persona-lock)
  • Deprecated format parameter for message-sending commands (use return)

Extensions

For developers

  • Added extension lifecycle hooks via manifest declarations
  • Exported SlashCommandEnumValue and generateRawData
  • Extensions can now process streamed text during tool-call chains
  • Popup System:
    • Added textarea support
    • Added placeholders, tooltips, icons
  • Action Loader:
    • New reusable loading overlay system
    • Supports stacking, toasts, and STscript integration
  • Added events:
    • PERSONA_CHANGED
    • TTS_JOB_STARTED
    • TTS_AUDIO_READY
    • TTS_JOB_COMPLETE

Vector Storage

  • Ollama: Migrated to /api/embed with batch support
  • SiliconFlow: Added as embeddings provider
  • Google: Added gemini-embedding-2-preview

Image Generation

  • Overriden image dimensions via the slash command are preserved for swiped images
  • Manual prompt refinement: edit or discard saved negative prompt and resolution

Bug Fixes

  • Fixed sanitization of chat import names
  • Fixed secrets being present in data backups when not intended
  • Fixed user data paths validation in route handlers
  • Fixed Claude multipart text block parsing (non-streaming)
  • Fixed tokenizer requests requiring model name (llama.cpp)
  • Fixed embedding requests for custom API paths (llama.cpp, vLLM)
  • Fixed stop string message clean-up for Chat Completion
  • Fixed OpenRouter cache-at-depth logic to exclude system messages
  • Fixed OpenRouter not respecting enableThoughtSignatures setting
  • Fixed OpenRouter payload field name (input_video β†’ video_url)
  • Fixed KoboldCpp DRY sequence stringification
  • Fixed KoboldCpp and Tabby tokenization counting a BOS token
  • Fixed Escape key closing non-dismissable popups (double tap Escape to override)
  • Fixed tag visibility persistence in Tag Management
  • Fixed priority of closing side panels with Escape keys
  • Fixed APNG image format detection in thumbnail handling
  • Fixed duplicate image-generation toasts
  • Fixed tool-call error handling and reporting
  • Fixed typo in KoboldAI instruct template (OUPUT β†’ OUTPUT)

Community updates

  • Chore: Add code formatting conventions as eslint rules by @Cohee1207 in #5158
  • Chore: enable brace-style eslint check by @Cohee1207 in #5159
  • Fix/Remove non-samplers from sampler selection by @leandrojofre in #5163
  • Fix NanoGPT prompt caching for anthropic/claude-* model IDs by @SenatusSPQR1 in #5164
  • Overhaul /bgcol: Oklch color space, full palette generation, save as new theme by @Copilot in #5162
  • Fix koboldcpp dry sequence stringification by @malformed-c in #5156
  • feat: add prefers-reduced-motion and prefers-contrast media queries by @xavisavvy in #5122
  • Add Textarea Support to Popup Custom Inputs by @Wolfsblvt in #5167
  • Guard isValidImageUrl against nullish avatar_url inputs by @Copilot in #5172
  • Guard isValidImageUrl against nullish avatar_url inputs (#5172) by @Cohee1207 in #5173
  • i18n: Comprehensive update and refactor for Simplified Chinese (zh-CN) by @YKDZ in #5171
  • Add gallery argument to /imagine command by @bal-spec in #5168
  • Add {{maxContext}}, {{maxResponse}} macros and {{maxPromptTokens}} alias by @Copilot in #5176
  • Add gemini-3.1-pro-preview to Google AI Studio and Vertex model lists… by @SpicyMarinara in #5188
  • Add gemini-3.1-pro-preview to caption settings by @SpicyMarinara in #5190
  • Update zh-CN translations by @Tosd0 in #5180
  • Fix APNG thumbnail handling and improve animated format detection by @Vibecoder9000 in #5113
  • Feat/Export SlashCommandEnumValue for extensions through getContext by @leandrojofre in #5191
  • build llama.cpp embedding url path by appending instead of overwriting by @wbruna in #5178
  • OpenRouter interleaved reasoning forwarding for tool-call continuations by @ZhenyaPav in #5160
  • Preserve image dimensions when generating swipe images by @Copilot in #5205
  • feat(openrouter): disable reasoning if Request model reasoning is off and effort is minimum by @Brioch in #5079
  • Open router provider filter by @GERNOMA in #5208
  • Add PERSONA_CHANGED event by @Copilot in #5218
  • Background Folders by @Vibecoder9000 in #5187
  • Fix tag hide/show toggle in Tag Management not persisting by @Copilot in #5226
  • Use Ollama /api/embed endpoint for vector embeddings by @shifusen329 in #5221
  • Remove open bogus folder tags that don't have any entities assigned by @Cohee1207 in #5225
  • Add unit tests for pure functions in src/util.js by @tgies in #5231
  • fix: skip system messages in OpenRouter cacheAtDepth calculation by @tgies in #5230
  • Support for isomorphic-git as an alternative git backend, part 1 by @Sanitised in #5229
  • Claude: map Reasoning Effort to adaptive thinking config by @Cohee1207 in #5219
  • Implement {{charFirstMessage}} / {{greeting}} macro with alternate greeting indexing and substitution by @Copilot in #5220
  • Enable experimental macro engine by default (for new users) by @Wolfsblvt in #5234
  • Add gpt-5.3-chat-latest model support by @SpicyMarinara in #5241
  • Remove xAI web search capability by @equal-l2 in #5255
  • Group add to background folder by @Vibecoder9000 in #5237
  • add Slash commands regenerate and swipe by @hcsum in #5243
  • Split generateRaw into two functions exposing generateRawData by @Kristyku in #5249
  • Implement extension manifest hooks for lifecycle events by @Copilot in #5261
  • feat: optionally gzip large save uploads with fallback by @Roland4396 in #5259
  • Use string byte length for token guesstimation by @Cohee1207 in #5267
  • fix: prioritize UI memory content for {{summary}} macro resolution by @Pavdig in #5268
  • feat: Add gemini-embedding-2-preview in google vectorization models by @MakksSh in #5274
  • feat: add array-wrap and array-unwrap commands by @Cohee1207 in #5277
  • fix: update non-streaming parsing for Claude multi-parts by @Cohee1207 in #5278
  • Fix typo in KoboldAI.json: "OUPUT" β†’ "OUTPUT" by @Copilot in #5282
  • Chat lorebook click unify by @Reisenbug in #5246
  • Add reasoning-collapse, reasoning-expand, reasoning-toggle slash commands with range support by @Copilot in #5296
  • ci: Split PR checks and PR manager workflows by @Cohee1207 in #5300
  • Intellectual Webpack cache management by @Cohee1207 in #5295
  • Fix AICC direct link import parsing by @GentleBurr in #5307
  • Character CRUD Slash Commands by @Wolfsblvt in #5306
  • fix(openrouter): respect gemini.thoughtSignatures setting for message … by @DN2331 in #5318
  • Remove long deprecated STscript commands and parameters by @Wolfsblvt in #5312
  • feat(tts): emit events and track messageId for third-party integrations by @xz-dev in #5309
  • Add Action Loader Module with Stacking Support and STscript Commands by @Wolfsblvt in #5311
  • Extend Popup System with Placeholder, Tooltip, and Icon Support (+ those in slash commands) by @Wolfsblvt in #5322
  • fix: remove deprecated xAI grok-2-image-1212 model by @xz-dev in #5334
  • Correct input_video to video_url in embedOpenRouterMedia() by @cloak1505 in #5331
  • Fix: Prevent Escape Key from Closing Non-Dismissable Popups by @Wolfsblvt in #5327
  • feat: add SiliconFlow.cn chat completion and embedding support by @xz-dev in #5316
  • Filter out inapplicable stop strings for Chat Completion by @DeclineThyself in #5337
  • Deprecate legacy loader and migrate all callsites to action-loader system with informative toasts by @Wolfsblvt in #5326
  • Fix missing model name in tokenize requests for llama.cpp (fixes #4962) by @allo- in #5344
  • Add allowEscapeClose option to popup class for Escape key behavior override by @Wolfsblvt in #5340
  • Handle port conflicts during server startup by @Syferus in #5349
  • Renaming a lorebook now re-links itself to cards using it (with a confirmation prompt) by @egirlmilkers in #5323
  • Fix vLLM vector embeddings URL construction to preserve custom API path prefixes by @Copilot in #5350
  • Fix npm audit (yaml, picomatch) by @Cohee1207 in #5354
  • feat: add finalizeIntermediaryMessage by @xz-dev in #5333
  • feat(ui): add interface to manage message swipe history by @awaae001 in #5304
  • CI: SHA hash pin dependencies in Actions by @Cohee1207 in #5358
  • Update release version to 1.17.0 and fix audit in dependencies by @Cohee1207 in #5359
  • fix: conditionally include secrets in user data backup by @Cohee1207 in #5360
  • Add glm-5.1 to models list by @Cohee1207 in #5361
  • Fix async file deletion bugs in assets endpoint by @tgies in #5363
  • 1.17.0 by @Cohee1207 in #5368

New Contributors

Full Changelog: 1.16.0...1.17.0