Updates

Weekly updates from the Char team

Week 10 2026

Two stable releases this week — v1.0.9 and v1.0.10 — plus a ton of architectural work underneath. The headline changes: pre-meeting notes now inform AI summaries, Azure LLM providers are supported, chat got UI and bug fix improvements, links behave properly in the editor, and there's a new CLI taking shape. Internally, the codebase went through a major restructuring — feature-based desktop layout, extracted core crates, a new plugin SDK, and a formatter migration from Prettier to oxfmt.

Pre-meeting notes in AI summaries

If you write notes before a meeting starts, those notes are now passed to the AI as a separate section when generating summaries. This means the AI can distinguish between what you prepared beforehand and what actually came up during the meeting. The result is summaries that better reflect what changed, not just what was discussed.

Azure LLM support

Azure OpenAI and Azure AI Foundry are now supported as LLM providers (beta). If your organization standardizes on Azure for AI services, you can now point Char directly at your Azure endpoints. This joins the existing lineup of OpenRouter, local models via Ollama and LM Studio, and direct API keys.

Chat refinements

Chat received a round of UI polish and minor bug fixes this week. The experience should feel tighter overall — cleaner layout, better edge case handling. Work is still ongoing to support multiple context sources in a single conversation, which will let you query across sessions rather than just the current one.

Links in the editor got a complete rework across several PRs. Links now open on hover instead of requiring Cmd+Click — just hover and click the URL to open it. Link text edits automatically update the underlying URL, so you don't end up with stale hrefs. Pressing Enter on an empty line clears active inline formatting (bold, italic, underline). Hover tooltips are correctly positioned for links near the top of the editor, and links no longer bleed into adjacent text when you type near a link boundary.

Consolidated export

Export options are now behind a single Export button that opens a modal. You pick the format — PDF, TXT, or Markdown — and choose what to include: summary, memos, or transcript. Cleaner than the previous scattered export options.

Transcript improvements

Transcript segmentation was rebuilt to fix incorrect splits between speakers. The underlying transcript crate was simplified significantly — the old accumulator, view, and ID modules were replaced with a cleaner processor and words module. On the TypeScript side, the transcript package was similarly simplified with better segment-building logic.

Recordings are now saved as MP3 files instead of the previous format, and playback speed is configurable directly in the transcript view.

Calendar and integrations

Session creation from a calendar event now correctly populates participants from event attendees. Calendar onboarding replaced the dead-end "No calendars found" message with a proper "Request Access to Calendar" button. A new unified calendar abstraction was introduced in the codebase, along with a calendar proxy API and Google Calendar plugin, laying groundwork for richer calendar integrations.

Integration connections can now be triggered directly from the desktop app. The Nango webhook handling was improved with better support for connection health tracking and refresh failure recovery.

Smarter mic detection

When mic usage is detected, the notification now lists nearby calendar events so you can jump straight into the right session. This makes the common flow — start a call, get prompted to record — much faster.

Onboarding polish

The onboarding flow got visual improvements with clearer step states, checkmark completion indicators, and auto-scroll navigation between steps. Button styles were refreshed across the app with improved visual depth and hover feedback.

Desktop restructuring

The desktop app source was restructured from a type-based layout to a feature-based one. Instead of grouping all components together, all hooks together, etc., code is now organized by feature — session, chat, calendar, settings, search, and so on. This doesn't change anything for users, but it makes the codebase significantly easier to navigate and maintain.

New crates and architectural work

Several internal crates were extracted to make the core logic reusable outside the desktop app:

  • listener-core: The audio session lifecycle and STT coordination logic was extracted from the Tauri plugin into a standalone crate, making it usable from the new CLI and future platforms.
  • model-downloader: Model download management was extracted from the local-stt plugin and unified across both STT and LLM plugins, with a proper download registry and progress tracking.
  • local-model: A unified type system for local models (both STT and LLM) across the codebase.
  • fs-format: Defines the on-disk transcript format for plain file storage.
  • apple-calendar: Extracted from the Apple Calendar plugin for reuse.
  • plugin-sdk: A new TypeScript SDK for building Char plugins, with event delegation from core crates.

The pyannote-cloud crate was rewritten using progenitor (auto-generated from OpenAPI), and the cactus-sys build dependency was removed in favor of the upstream cactus crate.

CLI and cross-platform groundwork

A new CLI app is taking shape with TUI support, theme configuration, model management commands, and a batch transcription mode. The mobile bridge got updated with proper UniFFI best practices, and an updater-core crate was drafted for cross-platform update support. A Chrome extension scaffold was also added.

Formatter migration

The codebase migrated from Prettier to oxfmt for TypeScript/JavaScript formatting. This touched hundreds of files but is a one-time change — oxfmt is faster and the formatting rules are configured in .oxfmtrc.json.

Other fixes

  • Auth flow fixed when the user was already logged into char.com in their browser
  • "Resume listening" now appears in the overflow menu when a transcript already exists
  • AI generation is more resilient when output validation retries exhaust — gracefully yields instead of erroring
  • Detect notifications setting is now properly respected
  • Remaining "Hyprnote" references renamed to "Char" across the UI and docs
  • OpenRouter Zero Data Retention (ZDR) enforcement documented in FAQ and docs
  • ONNX runtime returned to static linking for simpler distribution

Full version details on the changelog.

Read more

Week 9 2026

Big week. v1.0.9 stable is out with local speech-to-text via our Cactus engine, keyboard-first navigation across settings, task-aware model routing on the server side, and a proper find-and-replace in the transcript view. A lot of internal plumbing was reworked too — the transcript accumulator was rebuilt, PostHog was migrated to the official client, and Restate was removed entirely.

Cactus: local speech-to-text in beta

The headline feature this week is Cactus, our local inference engine for speech-to-text. Cactus runs Whisper small directly on your Mac — no network requests, no API keys, no data leaving your device. It's English-only for now and still in beta, but it works.

The settings UI shows available Cactus models alongside cloud providers, with disabled models listed so you can see what's coming. Language-aware provider selection means Char automatically picks the best STT backend per language, falling back to cloud providers for non-English languages. Local provider status indicators show whether your engine is running, and model selection is disabled when it's not.

Under the hood, this required significant work on the Cactus bindings — we enforced Sync invariants, guarded callback aliasing, and added proper locking in Drop for soundness. The cactus-model crate was expanded with model metadata and the build system was cleaned up for better upstream portability. We also added end-to-end local STT tests and a CI workflow to keep them passing.

Keyboard-first settings navigation

Settings now supports full keyboard navigation. You can tab through every settings panel, use arrow keys to move between options, and press Enter to toggle or select. This applies across general settings, AI configuration, and lab toggles. It's the kind of thing that should have always been there — now it is.

Task-aware model routing

The LLM proxy now supports a x-char-task header that tells the server what the request is for — chat, enhance, title generation, etc. The server uses this to route requests to the most appropriate model for each task type. This means better results without users needing to manually pick different models for different operations. The API client was updated to pass this header from every call site in the desktop app.

Find and replace in transcripts

Transcript search got a major upgrade. You can now replace text, toggle match case, and filter by whole word — all with keyboard shortcuts. Search auto-scrolls to the active result and stays in sync between the transcript and editor views. If you're cleaning up transcripts after a meeting, this makes the workflow significantly faster.

AI improvements

Your selected default template in settings is now automatically applied to all new AI-generated summaries. No more picking the same template every time. We also added fuzzy matching for template headers to work around models with poor instruction following — if the model outputs a slightly different heading, Char still matches it to the right section.

AI-generated summaries now produce section headings in the correct language for non-English users. The model selectors filter out deprecated and non-chat models, giving you a cleaner list. Gemini 2.0 and 2.5 models (Flash, Pro) were incorrectly hidden and are now visible again. Local provider status for Ollama and LM Studio shows visual indicators so you know if your local setup is actually running.

A new Memory tab in AI settings lets you define custom vocabulary — useful if you have domain-specific terms that models consistently get wrong.

Calendar and contacts

Calendar got visual polish — cleaner header spacing, improved typography, and better weekend styling. Calendar onboarding shows a proper loading state while fetching calendars. Participant email resolution for Apple Calendar events was improved with a better fallback chain. Long event descriptions no longer overflow in metadata chips and popovers.

Contact avatars now show colored initials when no profile photo is set, making the contact list easier to scan at a glance.

Notes and editor

Cmd+Click on links in the note editor now opens them in your default browser. "Reveal in Finder" was added to the session overflow menu for quick file access. The contacts permission request was removed from onboarding — it was unnecessary friction.

Onboarding refresh

The onboarding flow was streamlined with clearer trial status after sign-in. The account step was split into distinct before-login, after-login, and trial components, making each step focused on one thing. The overall flow better guides users through getting started without unnecessary permission requests.

Infrastructure

We migrated to the official posthog-rs 0.4 client, replacing our custom PostHog and feature flag crates. The telemetry opt-out toggle now properly disables usage analytics via PostHog's enable/disable side effect.

All Restate-related code was removed — the app, crates, CI workflows, and data directories. This simplifies the codebase and removes infrastructure we were no longer using.

The transcript crate got a full rebuild. A new TranscriptAccumulator handles word-level merging, channel splitting, and view generation. The replay example was expanded with cloud correction support and Cactus metrics. The audio-mime crate was extracted to deduplicate content type handling across transcribe-cactus and transcribe-proxy.

What's next

Cactus is English-only today. More languages and larger models are coming. We're also expanding the transcript accumulator to handle more edge cases in live transcription. If you're on the nightly channel, you'll see these improvements landing daily.

As always, grab the latest from our changelog or let the app auto-update.

Read more

Week 8 2026

This was a big week. Hyprnote is now Char. Alongside the rebrand, we shipped v1.0.6 and v1.0.7 stable with a completely new search engine, two new speech-to-text providers, and a revamped chat experience — plus a bunch of reliability improvements under the hood.

Hyprnote is now Char

We've rebranded. All external-facing content, the website, GitHub repo links, and deeplink schemes have been updated to reflect the new Char name. The website banner now reads "Hyprnote is now Char", and char.com redirects are live. If you have existing bookmarks or links, they'll continue to work. You can read more about the reasoning in our dedicated blog post.

Search, powered by Tantivy

We replaced our search infrastructure with Tantivy, a Rust-native full-text search engine. Indexing is noticeably faster and search results are more accurate when you're looking across your sessions.

The search UI also got a refresh. The search bar now collapses to an icon by default and expands on click, giving you more screen real estate. Advanced filters let you narrow results by meeting notes, people, and organizations. Date presets like "Today", "This week", and "This month" are available too.

New transcription providers

Two new speech-to-text providers landed this week. Mistral is now available as a transcription provider, and we added a DashScope adapter for Alibaba's Qwen3-ASR model with real-time speech recognition support. You can optimize for cost, quality, or language support depending on your needs.

We also added a configurable mic active threshold for detection, so you can tune how long the microphone must be active before triggering notifications.

Chat gets a major overhaul

Chat is back as an experimental feature, rebuilt from the ground up. The old feedback modal is gone. You now report bugs and suggest features directly through chat. Under the hood, chat uses MCP (Model Context Protocol) tools that can create GitHub issues, add comments, and search existing issues on your behalf.

Chat can open as a full tab alongside your session tabs, and slash commands give you quick access to common actions. Chat now receives richer session context, so responses are more relevant to what you're working on. Search results within chat include full session context too.

Resilient transcription

Live transcription failures are no longer fatal. If the transcription provider goes down mid-session, the recorder keeps running and the session enters a degraded mode instead of crashing. A visual indicator in the transcript view shows when transcription is operating in degraded mode.

We also replaced the old ractor-based supervisor with a custom SessionActor that gives us finer-grained, per-actor-type supervision and better fault recovery.

Multi-session operations

You can now select multiple sessions in the timeline and delete them in bulk. The familiar undo toast from single-session delete extends to multi-select as well — hover to pause the countdown, press Cmd+Z to restore. Cleaning up old sessions is much faster this way.

Calendar and events

Calendar event sync is more reliable, especially for timeline and notification interactions. Event descriptions now show up in session metadata chips, so you can see the meeting agenda at a glance without opening the calendar.

UI and experience

  • Onboarding has been moved from a separate window into the main app flow, making it feel more integrated
  • macOS dock right-click menu now shows "New Note" for quick access
  • Context menus are available for creating new notes and tabs via right-click
  • Tab bar blur visibility and width have been polished
  • Settings UI has been simplified with cleaner labels, timezone selector, and week start configuration
  • Auto-focus on the title input when no title is set, so you can start typing immediately

Documentation

We published comprehensive data handling transparency documentation, giving you a clear picture of how Char processes and stores your data. We also added onboarding guides for Cursor and Claude Code in the developer handbook.

What's next

The Char rebrand is just the beginning. We're continuing to expand transcription provider support and polish the chat experience. If you're on the nightly channel, you'll see improvements landing daily. If you're on stable, v1.0.7 is available now.

As always, you can download the latest version from our changelog or let the app auto-update.

Read more

Week 7 2026

Two stable releases in one week. We shipped v1.0.4 and v1.0.5 back-to-back, bringing a redesigned calendar, backlink mentions, undo delete, and a bunch of quality-of-life improvements.

Calendar redesign

The calendar got a complete overhaul. There's now a full calendar interface with a week view, event popovers, and improved navigation controls. You can see your week at a glance and jump directly into upcoming sessions without scrolling through day view.

We also added the ability to unignore calendar events directly from the sidebar timeline via context menu. If you previously dismissed an event and changed your mind, you can restore it without digging through settings.

You can now mention notes, people, and companies inline using backlink mentions. Each mention displays a type badge--person, company, or note--so you can see what you're linking to at a glance. This creates a connected knowledge graph across your sessions.

Undo delete

Deleted notes now show a dissolving animation with a 5-second countdown timer. Hover to pause the countdown and reveal a "Restore" button, or press Cmd+Z to instantly restore. You won't lose work to an accidental delete.

Hold-to-quit

We redesigned the Cmd+Q behavior, inspired by Chrome. Instead of immediately hiding the app, you now hold Cmd+Q to quit with a visual overlay showing the progress. This replaces the previous Cmd+Shift+Q shortcut and prevents accidental quits.

In-meeting reminder

There's a new experimental notification that alerts you when another app has been using your microphone for 3+ minutes while Char isn't listening. If you forgot to start recording, this nudge will catch it. It's opt-in in the lab settings and still early, but we think it'll be useful.

Performance and stability

Under the hood, we fixed memory leaks from actor subscriptions and timer accumulation, and resolved high CPU usage caused by a MutationObserver watching the entire document tree. We also upgraded to Tauri 2.10.1 and updated several core dependencies including cpal 0.17 for audio handling.

Other improvements

  • Cmd+Shift+N hotkey to create a new note and start listening in one action
  • Recently opened notes now appear in the Open Note dialog (Cmd+O) for quick access
  • Manual timezone override in Settings for sidebar timeline display
  • Fallback support for local AI models without tool calling (e.g., Gemma via LM Studio)
  • Fix for "invalid Refresh Token: Already Used" authentication error
  • Fix for opening a note now switching to an existing tab instead of creating a duplicate

What's next

We're working on the next round of features. If you're on the nightly channel, you'll see improvements landing daily. If you're on stable, v1.0.5 is available now.

You can download the latest version from our changelog or let the app auto-update.

Read more

Week 6 2026

This was a big week for Char. We shipped our v1.0.2 stable release, introduced a new Git plugin, and made several quality-of-life improvements.

v1.0.2 stable release

The v1.0.2 stable release brings months of work from our nightly builds into a production-ready release.

Acoustic Echo Cancellation (AEC) is the standout feature. Previously, we used heuristics-based mic-only mode to avoid feedback loops when recording both microphone and speaker audio. AEC eliminates that complexity. You can now record both audio sources simultaneously without echo or feedback.

PDF export now includes a metadata cover page with the session title, date, and participants. PDFs save directly to your Downloads folder and open automatically.

Table support landed in the editor. You can insert and edit tables directly in your notes, useful for meeting minutes with action items or comparison notes.

Other improvements in v1.0.2 include sleep detection that stops recording when you close your laptop lid, a redesigned settings panel, and improved authentication that persists across app updates.

Git plugin

We introduced a new Git plugin built on gix, a pure Rust implementation of Git. The plugin provides core Git operations with a modular architecture. It's not user-facing yet, but it sets up infrastructure for future version control and collaboration features.

Persistent pinned tabs

Pinned tabs now persist across app restarts. If you pin a session tab, it stays pinned when you reopen the app.

Smarter notification filtering

We centralized our notification policy with explicit skip conditions. Mic notification filtering now reduces noise by avoiding alerts when the app already knows what's happening.

Bug fixes

We fixed a startup issue on macOS where a stale single-instance socket could prevent the app from launching. We also fixed timeline sorting to use event start time as a fallback, improved the feedback submission flow with direct log attachment, and made video chat link visibility adapt to editor width.

What's next

We're continuing to polish the experience and work on some features we're not ready to announce yet. If you're on the nightly channel, you'll see these improvements land incrementally. If you're on stable, v1.0.2 is available now.

You can download the latest version from our changelog or let the app auto-update.

Read more

Get updates in your inbox

Subscribe to get weekly updates from the Char team.