Skip to content

2.8.0

Choose a tag to compare

@csebold csebold released this 01 Apr 06:51
· 2561 commits to main since this release
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-sqlite for 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.ts before upgrading
  • Server fails to start if AUTH_DISABLED=false (with migration instructions)
  • Migration script supports interactive user selection and --dry-run mode
  • 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)
  • Directory structure: <base>/data, <base>/files, <base>/logs
  • QUILTTAP_DATA_DIR environment variable for custom locations
  • Automatic migration from legacy paths with .MIGRATED marker 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_context tool 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-ai to new @google/genai SDK v1.37.0
  • Dynamic model listing via ai.models.list() API
  • Native functionResponse tool result format (no more text fallback)
  • Gemini 3 thinking model support with thinkingBudget: 4096 configuration
  • 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=false environment 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-utils v1.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 SettingsCard component for consistent styling across all settings tabs
  • Chat Settings, Appearance Settings migrated to card-based layout
  • Responsive grid layout with qt-card-grid-auto wrapper
  • 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() with getTextStream()
  • Bypass SDK's callModel when tools present (JSON Schema compatibility)

General

  • Zod upgraded from v3 to v4
  • Native z.toJSONSchema() replaces zod-to-json-schema dependency
  • 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 by lib/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

  1. MongoDB removed — Must migrate using CLI tool before upgrading
  2. Authentication removed — Multi-user installations must run migration script
  3. Google SDK changed — Plugin uses new @google/genai SDK
  4. Per-user plugins removed — All plugins now site-wide only
  5. Mobile UI removed — Minimum viewport width is 768px
  6. Minimum upgrade path — v2.7.0 required before upgrading to v2.8.0