Status as of 2026-10-26: audio never touches the disk anymore, on any path. Meeting capture, dictation, importing and dropping an audio file, as well as the internal splitting of batch processing, work entirely in memory; the imported file is read where it is, without a copy in the data folder. Providers: on-premise endpoints only. Transcription speaks the OpenAI and NVIDIA NIM protocols; the summary, the chat and the template generator speak to a single configured LLM endpoint, an OpenAI-compatible API (vLLM, Ollama, llama.cpp server…).
Stored data
Everything is stored on the computer, in the app’s data folder (syntheo
under the user’s data directory, for example ~/.local/share/syntheo on
Linux).
None of this data is sent to the vendor.
No inference on the computer: the app neither
downloads nor runs any model (transcription, LLM, diarization or
voiceprints). An earlier version may have left model files in the
models/stt and models/llm folders of the data folder, as well as in the
Soniqo model cache on macOS: they are no longer read or loaded, and can be
deleted by hand. Voiceprints that an earlier version may have saved (vectors
in the system keychain, references in the voiceprint_exemplars and
voiceprint_candidates tables) are erased at startup; if the keychain refuses
a deletion, erasure is retried at the next launch.
Network flows
- Inference endpoints configured by the user, and only those: ASR
(OpenAI protocol: Realtime and
/v1/audio/transcriptions; NVIDIA NIM WebSocket) and the configured LLM endpoint (OpenAI-compatible API). Capture audio and text (transcript, notes, prompts) go through them, with no device fingerprint or task identifier in the headers. An unrecognized transcription URL is handled with the OpenAI protocol, never redirected to a third-party service. - TLS recommended as soon as the endpoint is not on the machine or a trusted
network (for example through a reverse proxy or a VPN). The app accepts
plain HTTP only toward a private host (local machine, local network,
Tailscale range,
.localnames) and requires HTTPS elsewhere. - An endpoint run by a third party becomes the user’s processor (Art. 28 GDPR): contract and data location to be checked.
- Other flows, apart from inference:
- release notes: those of the installed version are included in the app;
showing those of another version triggers an unauthenticated request
to GitHub (
raw.githubusercontent.com, or the public APIapi.github.comfor a nightly version). Only the version number is sent; - icons on some screens loaded from
api.iconify.design(no personal data sent, but a network request);
- release notes: those of the installed version are included in the app;
showing those of another version triggers an unauthenticated request
to GitHub (
- No account, no sync, no error reports, no automatic updates (updates go through GitHub Releases, downloaded by the user).
- No calendar or task integration: Apple Calendar, Reminders and the legacy hosted integrations (Google and Outlook calendars, Linear, GitHub) are removed from the code.
Technical safeguards
- No account or authentication: the legacy authentication code
(Supabase,
authplugin) is deleted. - No telemetry, no error reports: the analytics code (PostHog) and error
reporting code (Sentry) are removed (
crates/analytics,plugins/analytics, dependenciesposthog-rs,sentry,@sentry/react), as well as the device identifier that existed only for telemetry. There is nothing left to turn off. - Keys in the system keychain, not in the database.
- No audio on disk, on any path: the capture session no longer starts a recorder, retention is fixed to “none” and a Rust test checks that no audio file appears in the session folder; no player, no re-transcription, no voiceprints. Dictation produces a WAV in memory, importing and dropping a file transcribe from where the file is without a copy, and batch splitting happens in memory.
- Safeguard in the tests:
apps/desktop/src/no-cloud-imports.test.tsfails if a removed cloud or authentication module is imported again. - End-to-end check: a network capture during a complete session must show
only the configured inference endpoints and the flows listed above; any
other flow is treated as a vulnerability (see
SECURITY.md).
User responsibilities
- Inform participants before recording a meeting (Art. 13 and 14 GDPR). In France, recording a private conversation without the participants’ knowledge is punishable under Article 226-1 of the Penal Code; in a company, employees must be informed. When each capture starts, the app shows a reminder to inform participants; it is on by default and can be turned off in Settings → Meetings (“Remind participants about recording”).
- Choose the inference endpoints and take responsibility for the processing: a self-hosted endpoint stays under the user’s control; a third-party endpoint is a processor.
- Manage the retention period of transcripts and notes, and delete them when they are no longer needed.
- Data protection impact assessment (DPIA): to be considered by an organization that deploys the tool at scale or for sensitive meetings (Art. 35 GDPR).
- Protect the computer (disk encryption, locked session): the data is stored there in plain text in the local database.