Release v0.9.0
What's New
A visual refresh paired with a data-layer rewrite. The UI gets a new indigo design system, violet accents, and a deeper dark mode for OLED-friendly contrast. Under the hood, every component that used to fetch its own data via useEffect + useState now goes through TanStack Query — components share a cache, refetch on invalidation instead of re-mount, and the React Compiler-era set-state-in-effect lint rule passes cleanly across the codebase.
✨ New Features
- New indigo-based design system with violet accents and refined range sliders
- Deeper, near-black dark-mode neutrals for less glare on OLED panels
🔧 Improvements
- Migrated all server-state loading to TanStack Query across personas, users, models (Ollama + HuggingFace), image gallery, settings, and auth — gives shared caching, request deduplication, and consistent loading/error handling
- Image gallery's "load more" now uses
useInfiniteQuerywith cursor-based pagination instead of manual offset bookkeeping - Mutations (create / update / delete in Persona and User managers) now invalidate queries instead of locally splicing arrays, so concurrent edits from another tab stay in sync
- Embedding model discovery rate-limits requests so providers don't get hammered when the embedding picker is opened repeatedly
- Retired the legacy
opheliatheme in favor of the unified indigo system
🐛 Bug Fixes
- Restored the build after a Dependabot batch broke compatibility with dev dependencies
- Stopped CodeQL from scanning Homebrew formula templates as Ruby, eliminating spurious analysis failures
📦 Dependencies
- Added
@tanstack/react-query(~14 KB gzipped) for the data-layer migration - Multiple Dependabot-driven bumps across production and dev dependency groups