Skip to content

GemX-v0.4.0

Choose a tag to compare

@Avaneesh40585 Avaneesh40585 released this 10 Jun 21:56

v0.4.0 Release Notes

The follow-up to v0.3.0 makes GemX feel at home on any Mac, no matter how you keep your desktop. The headline is a full Light mode that spans every surface of the app — chat, composer, sidebar, modals, code blocks, and the README hero — with a three-way Light / Dark / System toggle that follows your macOS Appearance setting live. Alongside it, the assistant's thinking avatar is reborn as the Quantum Binary mark, code blocks are rebuilt to match the clean Gemini-chat look, and the Settings panel is reorganised into a calmer, better-paired layout.

Light Mode — Across the Entire UI

  • Three-way theme toggle in Settings. A new Theme control offers System (default), Light, and Dark. System watches your macOS Appearance and switches the whole app the instant you flip it in Control Center or System Settings — no restart, no reload.
  • Built on CSS custom properties, not per-component branches. Every colour in the app now reads from a semantic token (--surface-*, --fg-*, --border-*, --accent-*, syntax --syn-*, …). Dark is the default :root palette; [data-theme="light"] flips the values. This keeps both themes pixel-consistent and means future surfaces theme themselves for free.
  • No white flash on launch. An IIFE runs before React mounts, reads your saved theme from localStorage, and applies data-theme to <html> immediately — so a Light-mode boot never flickers through a dark frame first.
  • Native chrome stays in sync. The renderer tells the main process the active mode over a new theme:set IPC channel, which drives nativeTheme.themeSource so the titlebar tint and native scrollbars match the in-app theme instead of fighting it.
  • Theme-conditional artwork. The app ships icon-light / icon-dark and hero-light / hero-dark assets; the in-app hero and the README hero both swap automatically with the active theme (<picture> + prefers-color-scheme on GitHub).
  • 'system' is resolved, never stored as a literal. Picking System keeps themeMode: 'system' in settings and resolves to a concrete 'light' | 'dark' at runtime via matchMedia('(prefers-color-scheme: light)'), with a live subscription so the app re-renders when the OS preference changes.

New Assistant Avatar — "Quantum Binary"

  • A solid core dot + a hollow ring. The old 4-point sparkle is replaced by a strictly monochrome mark — one filled qb-core and one outlined qb-ring. It reads as black in Light mode and white in Dark, so it never looks tinted or out of place.
  • Two states that tell you what the model is doing. While thinking, the core and ring orbit a shared invisible centre on opposite sides. When the model starts generating, they slide into a locked bullseye and pulse rhythmically (the ring scales slightly more than the core).
  • Tuned motion. The slide-and-lock uses a cubic-bezier(0.65, 0, 0.35, 1) for a "magnetic friction" feel, and the pulse is delayed 0.65s so it only begins once the slide has fully settled. Pure SVG + CSS keyframes; respects prefers-reduced-motion.

Redesigned Code Blocks

  • Gemini-chat style. Code blocks are rebuilt as a single rounded bg-code panel — no heavy border separators. A compact header carries an uppercase language label and a Copy button; the code body sits inside with a transparent background so it reads as one clean surface.
  • Theme-aware syntax. Highlighting is driven by --syn-* tokens (One Dark in dark, One Light in light), so snippets stay legible and on-palette in either theme.

Settings Panel — Reorganised & Paired

  • A calmer top-to-bottom order: Theme → Web Search (+ Tavily key) → Thinking → Context Window → HuggingFace Token. Related controls now sit together instead of being scattered.
  • Downloaded Models pinned. The Downloaded Models surface spans its own column (lg:row-span-5) so built-ins and customs stay visible while you adjust the rest of the panel.

UX Polish

  • Cleaner composer attach affordance. The attach control is back to a plain paperclip (the old inline count chip is gone). Attachments render as cards above the textarea — the same clear, low-noise pattern Claude and Gemini use.
  • Consistent steppers. The custom-model modal's context-window inputs use the same power-of-two stepper as Settings → Context Window, so the two surfaces feel identical.

Under the Hood

  • New src/renderer/src/lib/theme.ts (resolveTheme, useEffectiveTheme, useAppliedTheme, THEME_OPTIONS) centralises all theme resolution and subscriptions.
  • useAppliedTheme() lets components without settings in scope (Setup, the empty-state hero) react to theme via a MutationObserver on <html data-theme>.
  • The full contributor docs/ and from-scratch learning/ curriculum were audited and brought current with the theme system, the Quantum Binary avatar, and the custom-model registry.

Upgrading

Drop the new GemX.app in over the old one. Your downloaded models, custom models, settings, and HuggingFace / Tavily keys are preserved. On first launch GemX defaults to System theme — switch to a fixed Light or Dark any time from Settings.