2.8.0
Quilltap v2.8.0 Release Notes
Highlights
SQLite-Only Architecture - Complete removal of MongoDB backend. Quilltap now runs on SQLite exclusively, dramatically simplifying deployment and reducing infrastructure requirements. Existing MongoDB installations can migrate using the standalone CLI tool.
Single-User Mode - Authentication system removed entirely. Quilltap operates as a single-user application, eliminating login flows, OAuth configuration, and session management complexity.
Platform-Native Data Storage - Data directories now follow OS conventions: ~/Library/Application Support/Quilltap on macOS, %APPDATA%\Quilltap on Windows, and ~/.quilltap on Linux.
Per-Chat Tool Management - Granular control over which LLM tools are available in each conversation, with hierarchical plugin and subgroup toggling.
Google Gemini 3 Support - Full support for Gemini 3 thinking models with proper SDK migration and native tool formatting.
Major Features
SQLite-Only Database Backend
- MongoDB support completely removed from codebase
- SQLite uses WAL mode for improved concurrent access
- Query translation layer converts MongoDB-style filters to SQL
- JSON column support for complex nested data
- Zod schema introspection generates SQLite DDL automatically
- Simplified Docker deployments—no external database container required
- Migration tool available as
npx @quilltap/mongodb-to-sqlitefor existing installations - All 25 repositories migrated to database abstraction layer
Single-User Mode
- All authentication code removed: OAuth, email/password, TOTP 2FA, trusted devices
- No sign-in pages, session management, or multi-user overhead
- Existing multi-user installations must run
npx ts-node scripts/migrate-to-single-user.tsbefore upgrading - Server fails to start if
AUTH_DISABLED=false(with migration instructions) - Migration script supports interactive user selection and
--dry-runmode - API keys re-encrypted during migration to match new user identity
Centralized Platform-Native Data Directories
- Single source of truth for all data paths via
lib/paths.ts - Platform-specific defaults:
- Linux:
~/.quilltap - macOS:
~/Library/Application Support/Quilltap - Windows:
%APPDATA%\Quilltap - Docker:
/app/quilltap(mounted from host)
- Linux:
- Directory structure:
<base>/data,<base>/files,<base>/logs QUILTTAP_DATA_DIRenvironment variable for custom locations- Automatic migration from legacy paths with
.MIGRATEDmarker files - Docker data persists on host filesystem by default
Per-Chat & Per-Project Tool Settings
- Enable/disable specific LLM tools per chat via "Tools" button in tool palette
- Hierarchical management: plugin-level, subgroup-level (MCP servers), and individual tool toggles
- Tri-state checkboxes for intuitive bulk control
- Project-level default tool settings inherited by new chats
- System message injected when settings change to notify LLM of available tools
request_full_contexttool remains always-enabled as safety valve- Tool re-injection optimization: tools sent to LLM every N messages (matching sliding window)
- New API endpoints for programmatic tool configuration
Google Plugin Overhaul
- BREAKING: Migrated from deprecated
@google/generative-aito new@google/genaiSDK v1.37.0 - Dynamic model listing via
ai.models.list()API - Native
functionResponsetool result format (no more text fallback) - Gemini 3 thinking model support with
thinkingBudget: 4096configuration - Proper extraction of thought summaries from response parts
- Schema sanitization removes unsupported JSON Schema fields
- Deprecation warnings for Gemini 2.0 models (retiring March 3, 2026)
API & Backend
Legacy Route Removal
- Deleted 157 deprecated API route stubs that returned 410 Gone
- All API access exclusively through
/api/v1/endpoints - Removed
movedToV1()helper function - Non-v1 routes retained:
/api/health,/api/plugin-routes/[...path],/api/themes/*
Plugin System Improvements
- Auto-upgrade npm-installed plugins at startup (non-breaking updates only)
- Breaking updates logged and displayed in new "Upgrades" tab
- Upgrade confirmation modal for breaking changes
- Plugin metadata enriched with repository, changelog, and npm links
PLUGIN_AUTO_UPDATE=falseenvironment variable to disable auto-upgrades- BREAKING: Per-user plugin installation removed; all plugins now site-wide only
- Migration script moves existing user plugins to site directory
MCP Plugin Enhancements
- Built-in tool collision detection prevents shadowing Quilltap tools
getBuiltinToolNames()added to@quilltap/plugin-utilsv1.3.0- Tools from MCP servers that would shadow built-ins get prefixed automatically
- Tool hierarchy exposed via
getToolHierarchy()for subgroup management
UI Improvements
Settings Redesign
- New
SettingsCardcomponent for consistent styling across all settings tabs - Chat Settings, Appearance Settings migrated to card-based layout
- Responsive grid layout with
qt-card-grid-autowrapper - Cards support badges, metadata grids, inline/footer actions, status messages
Theme System Enhancements
- Theme selector shows each theme name in its heading font for preview
- Custom fonts lazy-loaded when theme popout menu opens
- Rich interactive previews: expand theme cards to see actual UI elements
- Side-by-side light/dark mode previews for themes supporting both
- Scoped preview CSS prevents affecting page styling
Homepage Improvements
- Cards extend to fill available viewport height
- Section cards display as many items as fit without scrolling
- Characters section shows all non-NPC characters (not just favorites)
- 30/30/40 column widths in full-width mode
- Projects sorted by most recent activity (files, chats, or metadata)
- Recent chats sorted by last message time, not metadata modification
Typography & Theming
- New semantic typography system:
qt-page-title,qt-section-title,qt-card-title,qt-card-subtitle,qt-meta,qt-label,qt-helper,qt-body,qt-link,qt-action - Default theme shifted to warm slate-blue palette
- Light mode uses warm off-white background
- Dark mode has visible surface hierarchy (page → card → popover)
- Card shadows tuned for improved visibility in both modes
- Light/dark/system mode toggle added to themes menu in sidebar
Rains Theme Revision
- Claude-inspired aesthetic replacing muddy orange-brown
- Dark mode: clean charcoal with subtle warmth
- Light mode: refined warm parchment/cream
- Accent shifted from terracotta to orange-amber
- Nunito Sans font for user messages
- Higher contrast text for improved readability
Chat & Character Improvements
Character Page Enhancements
- Conversations tab shows project badges for chats in projects
- Conversations sorted by last message timestamp
- Chat header breadcrumb shows LLM-controlled character avatars with links
- Character cards on homepage use two-line descriptions
- NPCs moved from Settings to Characters page
- Favorite toggle fixed (was returning 405 error)
Image & File Handling
- Redesigned image modal character tagging UI
- Tagged characters list with avatar badge and set/remove controls
- Fixed avatar detection and state management bugs
- Physical description editor uses wide dialog matching page width
- PNG placeholder generation for character exports without avatars
Project Context
- Project instructions periodically re-injected during long conversations
- Configurable
projectContextReinjectInterval(default: 5 messages) - Ensures project context survives context compression
Provider Updates
OpenRouter
- SDK upgraded from 0.4.0 to 0.5.1
- Streaming refactored to use
callModel()withgetTextStream() - Bypass SDK's callModel when tools present (JSON Schema compatibility)
General
- Zod upgraded from v3 to v4
- Native
z.toJSONSchema()replaceszod-to-json-schemadependency - Updated ZodError.errors → ZodError.issues across codebase
Removals
Mobile UI Support
- App now targets tablet and desktop viewports only (minimum 768px)
- Deleted mobile-specific components: MobileToolPalette, MobileParticipantDropdown
- Removed hamburger menu, mobile sidebar overlay, off-canvas behavior
- ParticipantSidebar always visible
Sync Functionality
- Removed sync UI from Tools page
- Removed
/api/v1/sync/API routes - Removed sync libraries, repositories, and documentation
- Migration drops sync-related database tables
Legacy Features
- Removed legacy
lib/images.ts(replaced bylib/images-v2.ts) - Removed pre-v2.7.0 migrations (minimum upgrade path now v2.7.0 → v2.8+)
- Removed MongoDB-specific migration code
- Removed excessive debug logging (~11,300 lines)
Testing
New Test Coverage
- sillytavern-png-placeholder.test.ts (21 tests): PNG placeholder generation
- plugin-upgrader.test.ts (19 tests): Plugin upgrade system
- builtin-tools.test.ts (27 tests): Built-in tool collision detection
- tool-settings.test.ts (20 tests): Per-chat/per-project tool hierarchies
- theme-system.test.ts (25 tests): Theme selection and preview generation
- single-user-migration.test.ts (34 tests): Single-user migration scenarios
- llm-logging.service.test.ts (12 tests): LLM logging behavior
- llm-logs-api.test.ts (13 tests): LLM logs API routes
- tools-api.test.ts (2 tests): Tools API endpoints
- session-api.test.ts (2 tests): Session API for single-user mode
- prompt-templates-api.test.ts (14 tests): Prompt templates API
- Database abstraction (239 tests): Config, query translator, schema translator
Bug Fixes
Critical
- SQLite boolean values in WHERE clauses now convert to 0/1
- SQLite undefined values convert to null (prevents binding errors)
- SQLite nested field queries within JSON arrays work correctly
- API key re-encryption migration handles undecryptable keys gracefully
- Mount point path migration handles tilde-prefixed paths
- User-controlled characters show "Queue" button, not "Nudge"
UI
- Chat user message text visible on blue background
- Duplicate avatar in streaming message indicator removed
- Sidebar shows correct count of non-project chats
- Image profile form shows Google API keys correctly
- Character default image profile saves to database
- API key creation modal closes and refreshes properly
Provider
- OpenRouter streaming tool calls detected (camelCase handling)
- Google plugin empty responses from thinking models fixed
- Rains theme font loading on nested routes fixed
Refactoring
Code Quality
- Dead code cleanup via knip analysis (21 files, unused dependencies)
- Removed excessive logging from codebase (31 debug calls)
- Code quality improvements and qt-* class migration
- Hot reload state persistence via global namespace for all registries
CSS Migration
- Settings pages converted to qt-* semantic classes
- CreateProjectDialog converted to qt-* classes
- Multiple components migrated from raw Tailwind to semantic tokens
Documentation
- Updated DATABASE_ABSTRACTION.md for SQLite-only architecture
- Updated DEPLOYMENT.md with Docker plugin management
- Removed "PNG not yet implemented" note from API.md
- Updated all documentation to reflect single-user mode
Breaking Changes Summary
- MongoDB removed — Must migrate using CLI tool before upgrading
- Authentication removed — Multi-user installations must run migration script
- Google SDK changed — Plugin uses new
@google/genaiSDK - Per-user plugins removed — All plugins now site-wide only
- Mobile UI removed — Minimum viewport width is 768px
- Minimum upgrade path — v2.7.0 required before upgrading to v2.8.0