2.5.0
Quilltap v2.5.0 Release Notes
Highlights
Multi-Instance Sync - Bidirectional synchronization between Quilltap instances with API key authentication, real-time progress tracking, and conflict resolution.
AI Character Wizard - Multi-step wizard for AI-assisted character creation and editing with vision support for physical description generation.
Native Export/Import - Full-featured .qtap export/import system with selective entity export, conflict detection, and resolution strategies.
Replaced NextAuth - Migrated from NextAuth to Arctic + custom JWT session management for lighter, more flexible authentication.
Major Features
Bidirectional Sync API
- Sync characters, personas, chats, memories, tags, and templates between Quilltap instances
- API key authentication for secure cross-instance sync through firewalls
- Real-time progress bar showing current phase, item being synced, and running counts
- Sync direction control: bidirectional, push-only, or pull-only
- Force Full Sync option to pull/push all data regardless of timestamps
- Automatic entity order enforcement to ensure dependencies exist before dependents
- File and message content included in sync with streaming for large files
- Reset Sync State button for troubleshooting
AI Wizard for Character Creation
- Multi-step wizard modal on New/Edit Character pages
- Profile selection with vision-capable detection for image analysis
- Physical description source options: existing data, upload image, gallery, or skip
- Generates: title, description, personality, scenario, example dialogues, system prompt
- Physical descriptions saved with all prompt levels (short/medium/long/complete/full)
Native Quilltap Export/Import
- Export wizard: select entity type → choose scope → optional memory inclusion → download .qtap
- Import wizard: preview entities with conflict detection → choose strategy → import
- Three conflict strategies: skip, overwrite, or duplicate
- Post-import reconciliation updates all foreign key relationships
- Supports: Characters, Personas, Chats, Roleplay Templates, Connection/Image/Embedding Profiles, Tags
API Key Import/Export
-
AES-256-GCM encryption with user passphrase
-
HMAC signature for integrity verification
-
Preview keys before importing
-
Duplicate handling: skip, replace, or rename
Authentication & Security
Replaced NextAuth with Arctic + Custom JWT
- Removed next-auth dependency entirely
- Added Arctic library for OAuth 2.0 flows with PKCE support
- Custom JWT session management using jose library
- Session tokens derived from ENCRYPTION_MASTER_PEPPER
- Removed NEXTAUTH_URL and NEXTAUTH_SECRET environment variables
- Added optional BASE_URL environment variable
Auth Environment Variable Clarification
-
AUTH_DISABLED=truecompletely bypasses auth and auto-logs in -
New
OAUTH_DISABLEDenv var hides OAuth buttons but keeps credentials login -
New
AUTH_UNAUTHENTICATED_USER_NAMEenv var configures display name
User Experience
New Profile Page (/profile)
- Edit display name, email, and profile avatar
- View read-only account details (user ID, creation date, etc.)
- Manage 2FA and trusted devices
- Accessible from user menu dropdown
Manual Chat Rename
- "Rename" button in tool palette (desktop and mobile)
- ChatRenameModal for custom titles or re-enabling auto-naming
- Dynamic browser tab title shows chat name
Multi-Character Chat Pause
- Pause button in participant sidebar (desktop) and message header (mobile)
- Pressing stop while streaming also pauses auto-responses
- Pause state survives page reload
Auto-Associate API Keys
- When importing/creating keys, automatically links profiles that need them
- Background association check on settings tab navigation
- Toast notifications show which profiles were linked
Visual Warnings for Missing API Keys
-
Connection, image, and embedding profiles show "
⚠️ No API Key" badge -
Warnings in dropdowns throughout settings and chat configuration
Plugin System
Plugin-Provided Roleplay Templates
- New
ROLEPLAY_TEMPLATEplugin capability - Plugins define templates via
roleplayTemplateConfigin manifest.json - Migrated "Quilltap RP" template to
qtap-plugin-template-quilltap-rpplugin
Plugin Version Display Fix
-
Plugin list now displays package.json version instead of manifest.json
Theming & Styling
New qt-* Utility Classes
- Background utilities:
qt-bg-surface,qt-bg-surface-alt,qt-bg-card,qt-bg-muted - Status backgrounds with opacity:
qt-bg-primary/N,qt-bg-warning/N, etc. - Border utilities:
qt-border,qt-border-primary,qt-border-warning, etc. - Text utilities:
qt-text-secondary,qt-text-warning,qt-text-info,qt-text-success
Tag Visual Styles on Tags
-
Tag styles (emoji, colors, formatting) now stored directly on each Tag
-
Migration moves existing styles from ChatSettings to individual Tags
-
Automatic backup/restore with tags
Bug Fixes
-
OAuth redirects now use BASE_URL for correct domain behind reverse proxies
-
Attach file button in chat now opens file picker correctly
-
Chat composer textarea resizes properly after message submission
-
Sending message while paused no longer auto-resumes turn manager
-
Focus returns to textarea after AI response completes
-
Platform-aware keyboard shortcuts (Cmd on macOS, Ctrl on Windows/Linux)
-
Navbar avatar loads correctly from /api/files
-
Backup restore now correctly remaps entity relationships
-
FormActions component renders submit button when using type="submit"
-
Memories sync correctly from remote servers
-
File content sync uses stored S3 key correctly
-
Memory attribution improved in multi-character chats
-
Sync progress polling stops when sync completes
Infrastructure
Dependency Upgrades
- Next.js 16.0.5 → 16.1.1 (Turbopack caching, CVE patches)
- MongoDB driver 6.21.0 → 7.0.0 (requires Node.js 20.19+)
- bcrypt 5.1.1 → 6.0.0 (40 fewer dependencies)
- @openrouter/sdk 0.2.11 → 0.3.10
- Now requires Node.js 22+
E2E Test Infrastructure
-
TestUserHelper for consistent test user management
-
/api/auth/delete-accountendpoint for test cleanup -
Serial Playwright execution to avoid race conditions
Refactoring
Settings Forms to Modals
- API Keys, Image Profiles, Embedding Profiles, Connection Profiles now use modals
- Lists always visible instead of hidden when form is open
Draft Message Persistence
-
Saves textarea content to localStorage with 5-second debounce
-
Restores draft on page load, clears on successful submission
Documentation
- About page updated with Node.js 22+ requirement and version minimums
- Updated auth from "NextAuth.js" to "Local + OAuth"