1.17.0
·
107 commits
to release
since this release
Immutable
release. Only release title and notes can be modified.
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,/buttonswith placeholders, tooltips, icons /imaginenow supportsgalleryargument/bgcolrebuilt for full theme palette generation using color theory
Removals
- Removed deprecated commands:
/lockand/bind(aliased to/persona-lock) - Deprecated
formatparameter for message-sending commands (usereturn)
Extensions
For developers
- Added extension lifecycle hooks via manifest declarations
- Exported
SlashCommandEnumValueandgenerateRawData - 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_CHANGEDTTS_JOB_STARTEDTTS_AUDIO_READYTTS_JOB_COMPLETE
Vector Storage
- Ollama: Migrated to
/api/embedwith 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
enableThoughtSignaturessetting - 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
isValidImageUrlagainst nullishavatar_urlinputs by @Copilot in #5172 - Guard
isValidImageUrlagainst nullishavatar_urlinputs (#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
allowEscapeCloseoption 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
- @SenatusSPQR1 made their first contribution in #5164
- @malformed-c made their first contribution in #5156
- @xavisavvy made their first contribution in #5122
- @YKDZ made their first contribution in #5171
- @SpicyMarinara made their first contribution in #5188
- @wbruna made their first contribution in #5178
- @GERNOMA made their first contribution in #5208
- @shifusen329 made their first contribution in #5221
- @tgies made their first contribution in #5231
- @Sanitised made their first contribution in #5229
- @hcsum made their first contribution in #5243
- @Roland4396 made their first contribution in #5259
- @MakksSh made their first contribution in #5274
- @Reisenbug made their first contribution in #5246
- @GentleBurr made their first contribution in #5307
- @DN2331 made their first contribution in #5318
- @xz-dev made their first contribution in #5309
- @allo- made their first contribution in #5344
- @Syferus made their first contribution in #5349
- @egirlmilkers made their first contribution in #5323
Full Changelog: 1.16.0...1.17.0