Meetily and the Real Meaning of Local-First Meeting Intelligence
Meetily is a desktop AI meeting assistant whose current supported application captures audio, turns speech into a transcript, stores the meeting locally, and generates a structured summary. This opening asks what “privacy-first” means in that actual system—not in the retired backend that remains in the repository—and why the answer depends on tracing data from one stage to the next. The result is a practical way to judge what Meetily keeps on the machine, what it can send elsewhere, and which choices determine the difference.
That question matters because a meeting assistant handles several kinds of sensitive material at once: the original audio, the words extracted from it, the notes created from those words, and the configuration that determines where processing happens. A product can keep one of those layers local and move another to a remote service. It can also store everything locally while still depending on network downloads, update channels, or optional telemetry. Privacy, in other words, is not a single switch at the edge of the application. It is a property of a chain.
Meetily’s supported boundary
The current Meetily subject is a Tauri desktop application. Its Next.js interface runs alongside a Rust core that handles native integration, audio capture, transcription, storage, and summary orchestration. The repository identifies the current package as version 0.4.1. That architecture is important for more than technology branding: it places the main meeting workflow inside one desktop process boundary instead of requiring a separately deployed application server.
The interface and the Rust core communicate through commands and events. A user action such as starting a recording becomes a native command; the core then emits state, progress, transcript, and completion events back to the interface. That arrangement gives the local core ownership of resources that a browser-only page could not safely manage by itself: microphones, system audio, native model runtimes, local files, and the SQLite database. It also means that a reader should look for the owner of each state transition. The screen is not the recording engine, and a summary button is not the summary service. They are visible controls over native work that may remain local or cross a chosen provider boundary.
The distinction is easy to miss because the repository still contains a backend directory and older documentation describing a Python/FastAPI service, Docker setup, and standalone whisper server. The repository now labels that material as a legacy archive. It is useful for migration context, but it is not the supported route for a new installation or a production assessment of the current app. Meetily’s current meeting commands use the Rust/Tauri layer to retrieve meetings, save transcripts, manage settings, and persist summaries in a local SQLite database. The desktop application therefore does not need the archived FastAPI tier to carry out its core workflow.
That does not mean the binary has no network-facing behavior. The current code retains HTTP helpers for some profile, licensing, and connectivity-related operations, and the application configuration includes an update endpoint. Those edges do not overturn the “self-contained desktop app” description; they refine it. A self-contained workflow means that the core meeting path can run without the archived Meetily backend. It does not mean that every optional service, account operation, update, or model acquisition happens without a network.
This is the first boundary to keep in view: Meetily is a local desktop application with optional external edges, not a cloud service that merely presents a local-looking interface. The rest of the system becomes easier to understand once those two facts are held together.
Local-first is a map of data paths, not a slogan
A useful mental model begins with the meeting itself. Audio may arrive from a microphone, system audio, or both. The local audio pipeline prepares and combines those streams. One output is suitable for preserving the session as a recording; another is reduced to speech segments for recognition. A local Whisper or Parakeet engine can turn those segments into timestamped transcript events. The resulting transcript and meeting metadata can be stored in SQLite and in user-visible meeting files. Only after that does summary generation become a separate decision.
The first important consequence is that local transcription and local summarization are not the same promise. The current recording path selects local Whisper or Parakeet engines. Summary generation, by contrast, can use local Ollama, the built-in local AI sidecar, named cloud providers such as Claude, Groq, OpenAI, and OpenRouter, or a user-configured OpenAI-compatible endpoint. A person can therefore record and transcribe locally while sending the transcript to a cloud model. They can also choose a local summary route, but then the local endpoint, model files, and machine resources become part of the trust decision.
The distinction becomes concrete in three questions. First, what is the input to a stage? The transcription engine receives speech-oriented audio segments, not necessarily the same continuous file that the user wants to keep. A summary engine receives transcript text and user-provided context, not the original microphone stream in the ordinary summary path. Second, who owns the state? The Rust core owns the native recording and model lifecycle, while local database and meeting files preserve the resulting record. Third, what crosses the boundary? A cloud summary provider receives text because the user selected that route; a model host receives bytes when a local model is downloaded; an analytics service receives selected usage events only after opt-in. These are different transfers with different consequences.
The second consequence is that local processing changes control, but it does not remove responsibility. Meetily stores ordinary local database, JSON, and media artifacts and relies on the operating system and file-system permissions around them. That is different from proving that every artifact is encrypted by the application itself. A local file is not automatically a protected file; the security of the device, user account, backups, and retention policy still matters. Local storage can reduce a vendor’s routine access to meeting material, but it moves more responsibility to the person or organization operating the computer.
The third consequence concerns network traffic that is not meeting content. Model downloads are external acquisition paths even when the downloaded model later runs locally. Updates are another path. Optional analytics is a third. In the current UI, analytics is off by default and is initialized only after opt-in. When enabled, the implementation sends product and performance events to PostHog, while removing explicitly flagged fields such as meeting names, file paths, and device names. That is a narrower telemetry design than uploading meeting content, but it is still a network feature and should be evaluated as one.
This map also explains why the word “configurable” is more accurate than the word “isolated.” The user can decide whether summaries use a local or external provider and whether analytics is enabled. The application can keep core artifacts in local storage. But platform permissions, package resources, model hosts, update infrastructure, and any chosen provider remain dependencies outside the narrow audio-and-transcription path.
For a sensitive-meeting operator, the practical reading is therefore not “press record and trust the label.” It is “choose the path that matches the information policy.” A fully local configuration may still require downloading models first and protecting the resulting files. A cloud-summary configuration may preserve local audio and local transcription while sending a derived transcript to a provider whose retention rules are outside Meetily’s control. Enabling analytics may be acceptable for a community installation but inappropriate on a tightly controlled workstation. None of these configurations is automatically right or wrong; each makes a different custodian and failure mode visible.
The question that follows the audio
The strongest claims about Meetily are therefore conditional. The repository directly supports a design in which capture, speech recognition, meeting storage, and selected summary routes operate on the user’s machine. It does not support an absolute claim that nothing ever leaves the machine, that every platform behaves identically, or that local processing by itself supplies compliance, encryption, or perfect reliability.
That restraint is not a weakness in the architecture. It is how the architecture becomes inspectable. A reader can ask where the audio goes, where the transcript goes, which provider receives summary input, whether telemetry is enabled, how model artifacts arrived, and who controls the update path. Each answer identifies a different boundary and a different owner of risk.
It also helps separate three kinds of evidence. Some statements are direct implementation facts: the supported application uses Tauri commands and events, local engines are available for recording, and meeting data has local persistence paths. Some statements describe intended behavior: the README and privacy policy call the design privacy-first and describe exclusions for analytics. Other outcomes depend on conditions that the repository cannot settle alone: whether a particular operating system grants audio permission, whether a device stays connected, how a third-party provider retains submitted text, or whether a packaged artifact is trustworthy. A careful account should not silently turn the second and third categories into the first.
The next question is consequently concrete: how does Meetily turn two imperfect device streams into both a usable recording and timely speech segments? To answer it, we need to follow the audio rather than jump straight to the model. The capture path will show why permissions, operating-system audio mechanisms, synchronization, and voice-activity detection are not setup details around the privacy story. They are the first mechanisms that make the story true—or limit it.
References
- Meetily repository
- Top-level README
- Legacy backend archive notice
- Tauri application configuration
- Tauri core entry point
- Architecture documentation
- Native API and optional HTTP helpers
- Audio pipeline
- Audio processing
- Recording manager wiring
- Transcription engine selection
- Transcription provider interface
- Transcription worker
- Whisper engine
- Parakeet engine
- Application model defaults
- Database manager
- Initial local schema
- Meeting repository
- Transcript repository
- Recording saver
- Incremental audio saver
- Recording shutdown path
- LLM client and provider endpoints
- Summary service
- Summary commands
- Summary module configuration
- Settings model
- Analytics provider
- Analytics consent UI
- Analytics client
- Rust analytics implementation
- Analytics commands
- Privacy policy
- Rust build script
- FFmpeg build helper
- ONNX Runtime build helper
- Release workflow
- Windows build workflow