v2.2.0
✨ New Features
Desktop App — First Production Release
This is the first major release where the Tauri desktop app is truly production-ready. The bulk of this release focuses on desktop stability, code signing, and build automation.
- Automated macOS DMG signing & release — build, sign, and publish DMGs for both ARM64 and x86_64 via GitHub Actions
- Native module ABI rebuild — automatic detection of
better-sqlite3ABI mismatch with runtime rebuild; falls back toprebuild-install+NODE_PATH - 6-step server startup logging — detailed Node.js version, ABI detection, migration status logged to
server-startup.log - Background server start — server starts before migrations complete, preventing 404/Bad Gateway on SPA load
- Permanent DB error flag (
db_error) — frontend stops infinite retry loop, shows permanent error message - Desktop auto-login — automatic login without form for Tauri desktop builds
- Tauri build robustness — dynamic
find_node_executableprobing,PATHfallback, cross-compilation scripts - Node.js 25 support, improved Windows compatibility
- Force Tauri rebuild —
npm rebuildin writable cache directory (avoids spaces-in-path issues) - Updated
tauri.conf.jsonversion to2.2.0
Production Database — Live ERD from Remote/Local DB
The second major feature: the app can now connect to external databases (PostgreSQL, MySQL, SQLite) and render ERD diagrams directly from live schemas — no import into system DB required.
- DB Connect Panel — manage external database accounts (encrypted credential storage)
- Schema Import as ERD — import tables + foreign keys + primary keys directly as ERD diagrams
- Production DB ERD — ERDView renders live schema with saved positions; read-only mode (no column edit/dropdown/delete)
- Sync button — refresh diagram from live schema on demand
- Data field in Diagram model — stores JSON positions for production DB diagrams
- DataViewer — browse & paginate table records directly from the app (PostgreSQL, MySQL, SQLite)
- Data tab — new tab in the diagram editor for browsing records, active by default for production DBs
- AI chat auto-hidden when 'data' tab is active to prevent UI conflicts
- URL-driven tab state —
erd/datatab persisted in URL for AppLayout integration - Tab management — DataViewer grid layout, scrollbar handling, empty state, custom scrollbar
- New endpoints:
/api/connections/:id/records,/api/connections/:id/import,/api/connections/:id/test
Theme System
- Full theme selector implementation: Light, Dark, and System (follows OS preference)
- Theme persistence in localStorage
- Theme-aware styling across all components: Flowchart nodes/edges, React Flow, Excalidraw, ERD nodes
- CSS variables for stroke, marker, background, popover — consistent across the entire UI
Guest Mode
- Guest Data Export/Import — backup and restore guest data to/from JSON files
- Streaming import with progress bar and batching via NDJSON (100x faster for large ERDs)
- Settings navigation tailored for guest users
- "Backup Data" option exclusive to guest mode
Docker Deployment
- Dockerfile +
docker-entrypoint.shfor production deployment - Support for SQLite (default), local PostgreSQL, and Supabase PostgreSQL
- Runtime Prisma client regeneration based on DB variant
- Automatic database creation if it doesn't exist (P1003 fix)
- Removed hardcoded admin credentials — admin created during startup via seed
docker-compose.ymlfor local development
AI Provider & Proxy
- Gemini authentication upgraded to Bearer token (OpenAI-compatible endpoint)
- Base URL field now visible for all providers, not just
openai_compatible providerCodeforwarded to the proxy for correct routingapiKeymade nullable in Prisma schema — save without changing the key- Client-side guard to skip
'***'API key during save operations
Build & CI/CD
- Automated macOS DMG creation & signing via custom
create-dmg.sh - Sequential build ARM64 + x86_64 on single runner (macos-latest)
- Dedicated build matrix for each macOS architecture
workflow_dispatchfor manual releases with version and prerelease options- Dynamic release notes from commit history between tags
latest.jsongeneration for update channels (darwin-aarch64, darwin-x86_64)
🔧 Improvements & Refactors
Route Refactoring
- AI, AI Chat, AI Rules, and Common routes moved to modular directories (
routes/ai/,routes/ai-chat/,routes/ai-rules/,routes/common/) - Service/Controller separation pattern adopted
- Connection routes split into: accounts, catalogs, legacy, and migration modules
- Middleware and helper functions consolidated into shared middleware files
UI Improvements
- Custom button groups replacing shadcn/ui Tabs — more flexible styling control
- Download & export feedback with toast notifications
- ExportAllDialog: reordered tabs, default active tab set to 'typescript'
- Flowchart nodes/edges: theme-aware colors, cleaner look without box-shadow
- Table views: column visibility toggle (persisted to localStorage), rounded borders, scrollbar handling
- Settings modal: guest-limited view, API key save fix, spinner styling
- Changelog view: better versioning (pre-release vs stable) and styling
Prisma & Database
- Upgraded dependencies (express, supabase, zod, Prisma client, etc.)
- Connection model restructure:
LocalDbConnection→DbAccount+DbCatalog - Automatic migration from
local_db_connectionsto new structure - Removed
DbAccount&DbCatalogfrom SQLite schema (desktop-only) - Removed redundant
@db.Timestamptz(6)annotations - Skip camelToSnake conversion for
/api/accountsand/api/catalogsroutes
Error Handling
/api/mereturns 503 +{ db_ready: false }while DB is initializing- Frontend "Preparing…" state + retry logic for DB initialization
- Background server start — Traefik healthcheck succeeds immediately
- Healthcheck endpoint for Docker container monitoring