Anarlog (formerly Hyprnote/Char) is an open-source, local-first AI meeting notetaker designed with a focus on privacy and user data sovereignty. It records, transcribes, and summarizes meetings using either on-device models or user-provided cloud LLM APIs, ensuring that users maintain full control over their data README.md11-24 The team is now building Char, while Anarlog remains open-source and maintained as the local-first meeting notetaker README.md1-2
This monorepo hosts the full stack required for the application ecosystem, including a native desktop client, a backend API server, and a web platform for marketing and user account management. It leverages the Tauri framework for desktop apps and Axum for server-side APIs Cargo.toml10-18
Anarlog’s system consists of three primary components:
Desktop App (apps/desktop)
A Tauri application combining React for the UI frontend with Rust powering the backend services. It manages audio capture, real-time transcription using local or cloud models, data storage, and integration with various plugins for extended capabilities apps/desktop/src-tauri/src/lib.rs38-180 apps/desktop/package.json20-121
Web App (apps/web)
A TanStack Start (React-based) web app hosting marketing pages, user authentication via Supabase, and content collections apps/web/package.json12-91
API Server (apps/api)
A Rust backend using the Axum framework, acting as a proxy for LLM and STT cloud services, managing subscriptions, and handling support workflows Cargo.toml10-18
The following diagram maps the conceptual layers of the system to their implementation within the codebase, highlighting key crates, plugins, and packages.
Sources: apps/desktop/src-tauri/src/lib.rs38-180 apps/desktop/package.json20-121 Cargo.toml10-18 apps/desktop/src-tauri/Cargo.toml22-85
| Layer | Technology / Frameworks |
|---|---|
| Languages | Rust (backend/crates), TypeScript (frontend/packages) |
| Desktop Framework | Tauri v2 |
| Frontend UI | React, Tailwind CSS v4, Lucide Icons |
| State Management | Zustand, TinyBase |
| Local Database | SQLite via hypr-db-app crate |
| Cloud Database | Supabase (Postgres) |
| AI/ML Engines | Whisper (STT), Cactus (on-device engine), AI SDKs for LLMs |
| Build System | PNPM workspaces, Cargo workspaces, Turbo monorepo orchestration |
Sources: apps/desktop/package.json20-121 apps/desktop/src-tauri/Cargo.toml1-106 apps/desktop/src-tauri/tauri.conf.json1-85 package.json1-30
The application emphasizes a local-first storage model. The UI interacts with reactive stores synchronized across app windows. Persistent relational state is handled by a local SQLite database accessed through the hypr-db-app crate and exposed to the frontend via the Tauri plugin tauri-plugin-db apps/desktop/src-tauri/src/lib.rs89-93 apps/desktop/src-tauri/src/lib.rs115
For more information, see the Data Layer & Persistence page.
Anarlog captures audio using the Rust hypr-audio-actual provider apps/desktop/src-tauri/src/lib.rs35-36 Audio can be locally transcribed using the tauri-plugin-local-stt plugin backed by the hypr-cactus engine or routed to cloud providers apps/desktop/src-tauri/src/lib.rs163-169
For more information, see the Speech-to-Text (STT) Pipeline page.
The desktop app is modularized via a rich Tauri plugin system. The bootstrap file (apps/desktop/src-tauri/src/lib.rs) registers plugins for authentication, analytics, window management, file synchronization, and AI tasks apps/desktop/src-tauri/src/lib.rs109-173
For more information, see the Tauri Plugin Ecosystem page.
apps/: Contains the app entry points: Desktop (Tauri), Web (React Start), and API server (Axum) Cargo.toml12-18crates/: Core Rust logic — shared app logic, backend services, AI components, and database layers Cargo.toml15packages/: Shared TypeScript packages, including the UI library (@hypr/ui), editor extensions (@hypr/editor), and store schemas apps/desktop/package.json29-69plugins/: Custom Tauri plugins wrapping Rust crates for frontend consumption Cargo.toml17For setup details, see Getting Started & Development Setup. For an in-depth folder layout, see Monorepo Structure.
Sources: Cargo.toml25-125 apps/desktop/package.json20-121 apps/desktop/src-tauri/src/lib.rs1-6
Refresh this wiki