Anarlog

Anarlog is an open-source, local-first AI meeting notetaker that records, transcribes, and summarizes meetings entirely on your device — no cloud lock-in, no mandatory account, and every note saved as a plain markdown file you own forever.

8.8Kstars
657forks
MIT License
TypeScript

Anarlog is an open-source AI meeting notetaker built by fastrepl, a Y Combinator-backed (S2025) team, as a local-first alternative to Granola: it listens to your meetings, transcribes them on-device, and turns the transcript into structured notes without requiring a cloud backend or an account for its core functionality.

Under the hood, Anarlog is a large Tauri desktop application backed by a Rust monorepo of more than 170 purpose-built crates. Audio capture flows through on-device voice activity detection (Silero ONNX or a lightweight “earshot” VAD) into a local whisper.cpp transcription server that can be built with per-platform GPU acceleration — CoreML on macOS, CUDA, DirectML, Metal, Vulkan, HIPBLAS, or OpenBLAS — so transcription never has to leave the machine. Summarization and note generation are provider-agnostic: the desktop app wires in the Vercel AI SDK so you can point it at OpenAI, Anthropic, Google, Azure, OpenRouter, a local Ollama or LM Studio instance, or any OpenAI-compatible endpoint.

Every meeting becomes a plain .md file on disk rather than a row in someone else’s database, so notes can be searched, versioned, and synced through Dropbox, iCloud, Syncthing, or git without any proprietary format. A dedicated importer crate can pull existing history directly out of Granola’s own cache and API, giving users a concrete migration path off the closed-source tool Anarlog was built to rearrange. Calendar integrations (Google, Apple, Outlook) and a full-text search plugin built on Tantivy round out the day-to-day meeting workflow.

The codebase is MIT-licensed and fully self-hostable: cloning the repo and building it gives every feature, including local transcription, at no cost and with no license key. The official builds also offer an optional hosted convenience tier (a cloud-run transcription/LLM proxy with a free trial, then a paid plan) for people who’d rather not manage their own API keys or local models, but that tier sits alongside — not in place of — the fully free local and bring-your-own-key paths.

What You Get

  • On-device transcription - Whisper-based speech-to-text runs locally with optional CoreML, CUDA, Metal, DirectML, Vulkan, HIPBLAS, or OpenBLAS acceleration, so audio never has to leave the machine.
  • Bring-your-own LLM - Summaries and structured notes can be generated with OpenAI, Anthropic, Google, Azure, OpenRouter, Ollama, LM Studio, or any OpenAI-compatible endpoint.
  • Markdown-native notes - Every meeting is saved as a plain .md file on disk, so notes are greppable, versionable, and syncable through Dropbox, iCloud, Syncthing, or git.
  • Granola import - A dedicated importer crate pulls existing notes and transcripts directly out of Granola’s own cache and API for a concrete migration path.
  • Calendar-aware scheduling - Built-in Google Calendar, Apple Calendar, and Outlook Calendar integrations surface upcoming meetings automatically.
  • Full-text search - A Tantivy-backed search plugin indexes notes and transcripts for fast local lookup.

Common Use Cases

  • Privacy-sensitive meetings - Legal, healthcare, or internal strategy calls where audio and transcripts must never touch a third-party server.
  • Cross-tool notetaking - Teams already living in Obsidian, Logseq, or plain markdown vaults who want meeting notes to land in the same place as everything else.
  • Granola switchers - Users who want to keep their meeting history but move off a closed-source, cloud-only tool.
  • Offline-first workflows - Freelancers and travelers who need reliable transcription without a dependable internet connection.
  • Multi-provider AI shops - Teams standardized on a specific LLM vendor or self-hosted model who want meeting notes generated with the same provider they already use elsewhere.

Under The Hood

Architecture Anarlog is a pnpm/Cargo monorepo split into apps/ (a Tauri desktop app, a Rust API service, a marketing/docs web app, and a Stripe billing service) and 170+ single-purpose Rust crates/ plus over 50 Tauri plugins/ that expose typed Rust commands to the TypeScript frontend. The desktop entry point (apps/desktop/src-tauri/src/main.rslib.rs) spawns a root supervisor process for background services, wires up Sentry, and constructs the audio capture layer behind a swappable AudioProvider trait object (dependency injection, with a mock implementation for dev/staging builds) before registering the windows and permissions plugins. Data flows from audio capture through on-device voice activity detection into local or cloud transcription, then into an LLM summarization step, and finally into a local SQLite store and markdown export — with crate-per-concern boundaries and specta-generated typed bindings keeping the blast radius of any single change contained despite the project’s large surface area.

Tech Stack The backend is Rust (edition 2024) wrapped in Tauri 2 for the native shell, with a TypeScript/React frontend built on TanStack Router, Query, and Form, Vite, and TinyBase as the local reactive data store synced through a custom plugin-db/db-core layer backed by sqlx and SQLite. AI access goes through the Vercel AI SDK (ai, @ai-sdk/anthropic, @ai-sdk/openai, @ai-sdk/google, @ai-sdk/azure, plus an OpenRouter provider), while transcription uses whisper.cpp bindings with optional CoreML, CUDA, DirectML, Metal, Vulkan, HIPBLAS, and OpenBLAS acceleration features, alongside a Silero ONNX (or “earshot”) voice activity detector. Supabase handles auth and account state, Stripe handles billing, Sentry handles error tracking, Lingui handles i18n, Tantivy powers full-text search, and Turborepo, dprint, oxlint, and oxfmt coordinate the monorepo’s build, lint, and formatting.

Code Quality The repository contains an extensive TypeScript test suite alongside abundant Rust #[test]/#[tokio::test] coverage, including criterion benchmarks in the voice-activity-detection crate. Rust errors are typed per crate via thiserror rather than left as unstructured panics, and the TypeScript layer leans on TanStack Query/Form specifically to avoid manual state management, per the project’s own house style guide. CI is comprehensive, with dozens of GitHub Actions workflows covering per-app build/test/deploy pipelines, a dedicated end-to-end desktop test suite, and formatting/content-check gates, backed by oxlint/eslint and dprint/oxfmt.

What Makes It Unique Anarlog’s distinguishing combination is a fully local, no-cloud-required transcription pipeline built from independently swappable crates — on-device voice activity detection gating a local Whisper server with per-platform GPU acceleration chosen at build time — paired with a dedicated importer that migrates a user’s existing history directly out of Granola’s proprietary cache and API. Storing every note as a plain markdown file rather than a proprietary database record, combined with bring-your-own-LLM support across every major provider, makes the whole corpus portable and forkable in a way most closed, cloud-hosted meeting notetakers are not.

Self-Hosting

Licensing Model MIT licensed — cloning and self-building the repo gives every feature, including fully local transcription, with no license key or account required.

Self-Hosting Restrictions

  • None found for core notetaking, local transcription, or bring-your-own-LLM functionality; self-built binaries work fully offline.

Enterprise Features

  • Not applicable — no separate paid “enterprise” tier is documented for self-hosters. The paid tier described below is a consumer convenience plan, not an enterprise SKU.

Cloud vs Self-Hosted Official builds ship with an optional hosted convenience path: a cloud-run transcription/LLM provider with a free trial, after which continued use of that specific hosted provider requires a paid (“Pro”) subscription — while local transcription keeps working for free regardless of trial status. Configuring your own API keys or local models (Ollama, LM Studio, whisper.cpp) avoids this entirely and needs no account.

License Key Required No. The Pro upgrade gates only the first-party hosted transcription/LLM convenience service (via a Supabase-issued entitlement, not a license key), and only in official builds that ship with that service configured; it does not restrict source-available or self-built usage.

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack

No spam. Unsubscribe anytime.

Join 750+ subscribers
No spam. Unsubscribe anytime.

Search