← All posts

Ekorbia v0.4 & v0.5 — Spaces, an offline UI, and voice input

Two releases have landed since the cross-platform v0.3. v0.4 brings guided setup, in-app model management, and a UI that runs fully offline. v0.5 gives Ekorbia a voice: on-device dictation you can trigger from anywhere.

v0.4 — the "no terminal required" release

Up to v0.3, getting started still required running ollama pull in a terminal. v0.4 removes that requirement.

Guided first-run setup

Launch Ekorbia with no model installed and it now looks at your machine's memory, recommends a right-sized Gemma 4 (e2b for 8 GB or less, up to 31b for 64 GB and beyond), and downloads it in-app with a progress bar. If you want folder search it grabs the nomic-embed-text embedding model in the same step. No terminal, no guessing which model fits.

An in-app model manager

A new Settings → Models tab lists your installed models with their on-disk sizes, deletes them with a confirmation, and pulls new ones with a live, cancellable progress bar. It's reachable from wherever you'd want it — Manage models… in the composer's model picker, a Download a model… button when nothing is installed, and the startup "Model not found" dialog all lead to the same place.

Spaces

v0.4 replaces the lightweight sidebar chat groups with Spaces — a named workspace that bundles the context a project needs:

  • a default model for new chats in the Space,
  • optional pinned files and folders that attach themselves to every new chat,
  • optional pinned prompts, and
  • an optional Space-scoped memory file.

Any pinned file, folder, or prompt can be locked, which forces it to stay attached and removes the × from its composer chip so it can't be detached mid-chat — handy for a system-prompt-style instruction you always want in force. A Space with no pins and no memory file behaves as a plain organisational bucket, so the old "just a folder" use case still works.

Watch recipes and a Today digest

Creating a watch used to mean filling out a blank form. Now it starts from one-click recipes — Summarise new downloads, Watch a price, Watch job listings, Follow a blog, or Custom — that pre-fill the kind, prompt, cadence, and a model picker that defaults to a model you actually have pulled.

The Watches panel gained an All / Today toggle and a Chat about today button that opens a chat seeded with the last 24 hours of summaries. And folder watches can now skip files already present, so pointing one at a busy folder like Downloads doesn't summarise the entire backlog on the first poll.

Snappier reasoning models

Ekorbia now detects thinking-capable models (qwen3.x, deepseek-r1, gpt-oss, …) via Ollama's /api/show probe and sends think: false by default — so they answer right away instead of streaming a long hidden chain-of-thought first. You get the model's response, not a wait.

A fully offline UI

This one's invisible until you unplug the network. React, ReactDOM, Babel-standalone, marked, highlight.js, DOMPurify, and the Inter / JetBrains Mono / Instrument Serif fonts now ship inside the app under ui/vendor/ (pinned versions and checksums) instead of loading from unpkg.com and Google Fonts at runtime.

The only network traffic Ekorbia produces is to your local Ollama server on 127.0.0.1:11434. A new Playwright spec (offline-boot.spec.js) boots the UI with every non-localhost request blocked and fails the build if any external request is even attempted — so "fully offline" stays true, release over release.

v0.5 — your voice, on your machine

v0.5 adds voice input, and it holds the same line the rest of the app does: nothing leaves your machine. Speech is transcribed on-device with whisper.cpp — no audio is ever uploaded.

Push-to-talk dictation

There's a new mic button in the composer, between the prompt button and the model picker. Click it, speak, and click again to insert the transcript at your cursor; Esc cancels. First use downloads a small English model (base.en, about 142 MB; tiny.en and small.en are also offered) with a cancellable progress bar, and you manage them under Settings → Voice.

On Apple Silicon it's Metal-accelerated — a short dictation transcribes in a few hundred milliseconds. Voice is macOS-first for now; the mic permission prompt appears the first time you record.

Hands-free: auto-stop and auto-send

You don't have to click twice. Auto-stop (energy-based voice-activity detection) ends the recording a moment after you stop speaking, and auto-send submits the finished dictation for you — so you can just speak and let it go, no Enter, no second click. Both are on by default and toggleable under Settings → Voice; Esc mid-recording still cancels without sending.

Dictate from anywhere

The same mic button lives in the Spotlight-style quick-query overlay, so you can dictate a question without switching to the main window (recording keeps the overlay open rather than auto-dismissing). And a system-wide, rebindable global voice hotkey (default ⌘⇧V on macOS, Alt+Shift+V on Windows) opens the overlay already listening — dictate from any app without clicking anything first. Rebind it under Settings → General → Voice input.

99 languages, and translate-to-English

Alongside the English-only models, multilingual Whisper models (base, small, large-v3-turbo) cover 99 languages. Settings → Voice adds a language picker (auto-detect or a specific language) and a Translate to English toggle — speak in one language and have the transcript land in English. Both apply to the multilingual models; the English-only models always transcribe English.

How to get it

The releases page has the latest bundles for macOS, Windows, and Linux. Existing users upgrade in place — your chats, prompts, and settings carry over, and any old chat groups migrate to Spaces automatically on first launch.

Voice input is macOS-first this release; everything else in v0.4 and v0.5 works across all three platforms.