Skip to main content
The plugins in plugins/* connect the React interface to Syntheo Desktop’s native code. This page describes what each plugin exposes and which user pages to review when it changes. For where the plugins fit in the whole monorepo, see Architecture.

Anatomy of a plugin

Each plugins/<name> folder follows the same structure: After any change to a plugin’s commands, run codegen, then update permissions/default.toml and apps/desktop/src-tauri/capabilities/default.json (plugins/AGENTS.md). All plugins are registered in apps/desktop/src-tauri/src/lib.rs, with three conditional exceptions:
  • agent and hooks are not loaded with the app-store feature.
  • relay is only loaded in debug builds or with the devtools feature.
The name of a plugin doesn’t tell the whole story: notification shows notifications, notify watches the file system. The 2 suffixes (fs2, path2, opener2, store2, sidecar2, deeplink2) denote in-house extensions of an official Tauri plugin with the same name.

Inventory

The “Interface” column shows whether apps/desktop/src imports the @syntheo/plugin-<name> package.

Capture, transcription and dictation

transcription

  • Path: plugins/transcription
  • Role: drives microphone and system audio capture, live transcription, batch transcription of imported files and retention of audio segments waiting to be sent. It is the plugin the interface uses most.
  • Main commands:
    • Devices and levels: list_microphone_devices, list_speaker_devices, start_microphone_level_monitor, set_mic_muted, set_speaker_muted.
    • Capture: start_capture, stop_capture, stop_capture_for_session, retry_audio_capture, update_capture_config, update_capture_credentials, get_capture_state, get_capture_snapshot, get_capture_audio_gaps.
    • Recovery after a stop: list_stopped_captures, list_capture_recoveries, lifecycle markers (save_capture_lifecycle_marker…).
    • Live transcription: flush_live_transcript, render_transcript_segments, render_session_transcript.
    • Batch and import: start_transcription, stop_transcription, begin_audio_upload, append_audio_upload, refine_batch_transcript, save_batch_transcript, reconcile_refined_speaker_clusters.
    • Subtitles: parse_subtitle, export_to_vtt.
    • Languages: is_supported_languages_live and _batch, suggest_providers_for_languages_live and _batch, list_documented_language_codes_live and _batch.
    • In-memory audio: list_capture_audio_chunks, delete_transcribed_capture_audio, delete_processed_session_audio.
  • Events: CaptureLifecycleEvent, CaptureStatusEvent, CaptureDataEvent, LiveTranscriptPersistenceEvent, SessionAudioRetentionEvent, TranscriptionEvent.
  • Internal dependencies: crates/audio, crates/db-app, crates/language, crates/storage, crates/transcript, crates/transcription-core, crates/owhisper-client, crates/owhisper-interface; plugins db, fs-sync, settings, store2, tray.
  • Affected doc pages: /en/meetings, /en/import-recordings, /en/languages, /en/ai-setup, /en/offline, /en/data-and-privacy, /en/troubleshooting.

dictation

  • Path: plugins/dictation
  • Role: records the voice, sends it to the STT server and inserts the text into the active app. Insertion has a Linux implementation and a Windows one (src/insertion/).
  • Commands: show, hide, set_phase, update_amplitude, start_recording, start_system_recording, stop_recording, cancel_recording, capture_target, insert_text.
  • Internal dependencies: crates/owhisper-client, crates/owhisper-interface, crates/audio.
  • Affected doc pages: /en/dictation.

detect

  • Path: plugins/detect
  • Role: spots the apps that use the microphone, respects Do Not Disturb mode, reads the accessibility tree of meeting windows to send or capture chat messages, and captures screen shares.
  • Commands: list_installed_applications, list_mic_using_applications, set_respect_do_not_disturb, set_ignored_bundle_ids, set_included_bundle_ids, set_mic_active_threshold, inspect_meeting_accessibility, send_meeting_chat_message, capture_meeting_chat_messages, capture_meeting_screen_share, get_preferred_languages, get_current_locale_identifier.
  • Events: DetectEvent (MicDetected, MicStopped, MicMuteStateChanged, SleepStateChanged…).
  • Internal dependencies: crates/detect, crates/notification-interface; plugins settings, windows.
  • Affected doc pages: /en/automatic-capture (“Detect an unscheduled meeting”, “Stop listening”, “Inform participants”, “Capture shared screens” sections, and the per-platform availability table).

Other audio plugins

Data and content

db

  • Path: plugins/db
  • Role: exposes the SQLite database to the interface. Applies migrations, runs queries and pushes changes to subscribers.
  • Commands: execute, execute_transaction, execute_proxy, subscribe, unsubscribe, list_meetings, get_meeting, get_meeting_transcript, get_recurring_meeting_history, apply_session_ingest, get_startup_status, wait_until_ready.
  • Internal dependencies: crates/db-core, crates/db-app, crates/db-execute, crates/db-migrate, crates/db-reactive, crates/session-ingest, crates/agent-access.
  • Consumers: packages/db-tauri and the interface; the session, contacts, template, export, local-api and transcription plugins depend on it on the Rust side.
  • Affected doc pages: /en/meetings, /en/notes, /en/data-and-privacy.

session

  • Path: plugins/session
  • Role: transactional writes on notes and folders.
  • Commands: create_session, soft_delete_session, restore_deleted_session, add_session_participant, remove_session_participant, persist_chat_session_proposal, set_session_proposal_status, resolve_session_conflicts, move_session_contents, attachments and audio catalog (catalog_note_attachment, catalog_session_audio, tombstone_session_audio…), folder catalog (ensure_folder_catalog, rename_folder_catalog, update_folder_instructions, update_folder_workspace, update_folder_icon…).
  • Internal dependencies: crates/db-app; plugin db.
  • Affected doc pages: /en/notes, /en/meetings, /en/chat (proposals from the chat).

template

  • Path: plugins/template
  • Role: renders Jinja prompts and saves the generation result.
  • Commands: render, render_custom, get_template_source, summary_length_policy, dominant_language, prepare_generated_summary, compose_generated_summary, save_generated_summary, save_generated_title, apply_session_content_corrections.
  • Internal dependencies: crates/template-app, crates/template-app-legacy, crates/summary, crates/gbnf, crates/language, crates/db-app; plugin db.
  • Affected doc pages: /en/customize-summaries, /en/languages (language of summaries and titles), /en/chat.

Other data plugins

Windows and system integration

windows

  • Path: plugins/windows
  • Role: opens, hides and animates windows and tabs, and drives two overlay windows: the floating bar and the live captions.
  • Commands: window_show, window_hide, window_navigate, window_emit_navigate, window_save_frame, window_restore_frame_animated, set_show_app_in_dock, webview_health_ack, floating_bar_show, floating_bar_hide, floating_bar_update, live_caption_show, live_caption_hide, live_caption_update.
  • Events: Navigate, OpenTab, WindowDestroyed, VisibilityEvent, WebviewHealthCheck, FloatingBarStop, FloatingBarDictationAction, FloatingBarListeningAction, FloatingBarOpenMain, FloatingBarSettingsChange, LiveCaptionOverlayState…
  • Internal dependencies: crates/brand.
  • Affected doc pages: /en/automatic-capture (“Keep the controls at hand”), /en/meetings.

Other system plugins

Internal, macOS-specific or inherited plugins

When to update the documentation

  • A command or event added, renamed or removed: update the table on this page.
  • A visible behavior change in a plugin whose “Affected doc pages” column is not “none”: review those pages.
  • A plugin that starts being called by the interface (for example audio-priority or agent): add the affected user pages and the matching row in Doc ↔ code mapping.