Skip to main content
This page covers the crates in crates/ that handle data, files, PDF export, LLM prompts, notifications and a few system services. The overall organization is described in Architecture. In the Cargo workspace, each crate is declared under a syntheo-* alias (for example syntheo-db-app for crates/db-app). The internal dependencies listed below use these aliases.

Overview

Database

The app.db database is the heart of the data. The crates are organized in layers: db-core opens the connection, db-migrate applies the schema provided by db-app, and db-change, db-execute and db-reactive serve the interface through the db plugin (see Tauri plugins).

db-core

  • Path: crates/db-core
  • Role: opens a SQLite pool and attaches a ChangeNotifier to it.
  • API: Db (open, connect_memory, connect_local_read_write, connect_local_read_only, pool, change_notifier), DbOpenOptions, DbStorage, ManagedDb.
  • Internal dependencies: syntheo-db-change.
  • Note: the CLI opens the database with connect_local_read_only (apps/cli/src/db.rs), which guarantees the read-only access described in CLI for agents.
  • Affected doc pages: Data and privacy, CLI for agents.

db-app

  • Path: crates/db-app, SQL migrations in crates/db-app/migrations.
  • Role: defines the app schema (schema(), APP_MIGRATION_STEPS, prepare_schema) and groups the SQL operations shared by the app, the CLI and the plugins.
  • Internal dependencies: syntheo-db-core, syntheo-db-migrate.
The modules in crates/db-app/src and the pages they feed:
Don’t describe product behavior from the raw SQL schema. Start from the operations and the interface that uses them.

db-migrate

  • Path: crates/db-migrate
  • Role: applies an ordered list of MigrationStep (migrate, migrate_with_progress), with the Plain or CloudsyncAlter scope.
  • Internal dependencies: syntheo-db-core.
  • Affected doc pages: none.

db-change, db-execute, db-reactive

  • db-change (crates/db-change): ChangeNotifier, TableChange and TableChangeKind report modified tables. No internal dependencies.
  • db-execute (crates/db-execute): DbExecutor runs a query, a “proxy” query or a transaction described in JSON (TransactionStatement). Depends on syntheo-db-core.
  • db-reactive (crates/db-reactive): LiveQueryRuntime extracts the tables read by a query (extract_dependencies, through EXPLAIN) and replays it when one of them changes. The db plugin exposes it through the subscribe and unsubscribe commands. Depends on syntheo-db-core, syntheo-db-change, syntheo-db-execute, syntheo-db-migrate.
  • Affected doc pages: none.

Files and storage

storage

  • Path: crates/storage
  • Role: computes the data location and writes files without following symbolic links.
  • API:
    • global::compute_default_base: base folder. The stable build uses the syntheo folder; the other identities (debug, dev configuration) use their bundle ID.
    • vault: settings.json, vault_path key, consolidate_custom_vault.
    • safe_path: join_under_base, resolve_under_base, open_no_follow, write_no_follow, copy_no_follow.
    • session_tree: walking the session tree (walk_session_tree, find_session_dir).
    • fs: atomic_write, copy_dir_recursive.
    • windows_auth: auth.dpapi file encrypted with DPAPI, active on Windows only.
    • StorageRuntime: trait that provides the global and vault bases.
  • Internal dependencies: syntheo-brand.
  • Affected doc pages: Data and privacy, Uninstall.

fs-sync-core

  • Path: crates/fs-sync-core
  • Role: manages session folders on disk for the fs-sync plugin: listing, creating, renaming and moving folders, reading a session’s content, attachments, audio files (audio: import into a session, metadata, peaks, speech detection, deletion of expired orphans).
  • API: FsSyncCore (list_folders, move_session, create_folder), modules scan, session_content, folder, audio, path.
  • Internal dependencies: syntheo-storage, syntheo-fs-format, syntheo-frontmatter, syntheo-tiptap, syntheo-audio-utils, syntheo-vad; syntheo-data as a dev-dependency.
  • Affected doc pages: Notes, Import recordings, Meetings.

fs-format, frontmatter, tiptap

  • fs-format (crates/fs-format): serializable types of the transcript file (TranscriptJson, TranscriptWithData, TranscriptWord, TranscriptSpeakerHint). No internal dependencies.
  • frontmatter (crates/frontmatter): Document parses and serializes Markdown with a header. No internal dependencies.
  • tiptap (crates/tiptap): tiptap_json_to_md, md_to_tiptap_json, tiptap_json_to_mdast, mdast_to_markdown, validate_tiptap_json, merge module. No internal dependencies. crates/agent-access uses it to convert note bodies to Markdown in the CLI and MCP server outputs.
  • Affected doc pages: tiptap feeds CLI for agents, MCP server and CLI reference; fs-format and frontmatter: none.

Export

export-core

  • Path: crates/export-core
  • Role: produces a meeting’s PDF with Typst (typst, typst-pdf, fonts from typst-assets).
  • API: export_pdf(path, input), render_pdf(input), types ExportInput, ExportMetadata, Transcript, TranscriptItem, ExportLabels (section labels in the interface language).
  • Internal dependencies: none.
  • Note: only PDF goes through this crate. The app’s other export formats (TXT, Markdown, Org) and the CLI’s Markdown or JSON export don’t depend on it.
  • Affected doc pages: Notes (“Export a meeting” section).

Prompts and summaries

template-app

  • Path: crates/template-app, templates in crates/template-app/assets/*.md.jinja.
  • Role: renders the prompts sent to the LLM. The templates are compiled with Askama.
  • API: render(Template), enum Template (EnhanceSystem, EnhanceUser, TitleSystem, TitleUser, ChatSystem, ContextBlock, ToolSearchSessions, TranscriptPatchSystem, TranscriptPatchUser, ActivityCaptureSystem, DailySummarySystem, EventContactSystem…), EditableTemplate (EnhanceFormat, EnhanceUser, TitleUser) and template_source.
  • Internal dependencies: syntheo-askama-utils.
  • Note: the template plugin exposes render and get_template_source. The interface reads the enhanceFormat source in the form of the “Automatic” template (apps/desktop/src/templates/auto-form.tsx).
  • Affected doc pages: Customize summaries, Notes, Chat, Languages.

askama-utils

  • Path: crates/askama-utils
  • Role: filters shared by the templates (current_date, language, language_name, is_english, is_korean) and extraction of the variables used (extract, TemplateUsage).
  • Internal dependencies: none.
  • Affected doc pages: Languages.

summary

  • Path: crates/summary
  • Role: computes the target length of the summary based on the transcript size and the number of sections in the template, then formats the generated text (title on the first line, tags line).
  • API: summary_length_policy, summary_length_policy_for_texts, prepare_generated_summary, compose_generated_summary, extract_tag_names. The template plugin exposes them as commands.
  • Internal dependencies: none.
  • Affected doc pages: Customize summaries, Notes.

template-app-legacy

  • Path: crates/template-app-legacy
  • Role: old MiniJinja engine inherited from Anarlog, with its templates (enhance, title, chat, auto_generate_tags, postprocess_transcript, highlight).
  • Usage: the template plugin initializes its environment at startup and uses it for the render_custom command, which no code in apps/desktop/src calls outside tests.
  • Internal dependencies: none.
  • Affected doc pages: none.

Local automation

hooks

  • Path: crates/hooks
  • Role: runs the shell commands configured for an event and returns their result.
  • API: HooksConfig, HookDefinition, HookEvent (beforeListeningStarted, afterListeningStopped), run_hooks_for_event, HookResult.
  • Usage: the hooks plugin reads the configuration under the hooks key of the settings, and the interface triggers the events from apps/desktop/src/store/zustand/listener/general-live.ts.
  • Internal dependencies: none.
  • Affected doc pages: none. This feature is not documented for users; it is separate from webhooks.

Notifications

crates/notification is the facade called by the notification plugin. It deduplicates notifications by key, keeps their context and delegates display to the platform backend, enabled by the legacy feature (enabled by default and requested by the plugin).

Platform and identity

  • Affected doc pages: see the Remarks column; none for host, user-error, shortcut-macos, overlay-kit and bundle.

Coding agent integrations

crates/claude, crates/codex and crates/opencode drive the Claude Code, Codex and OpenCode CLIs: options, event streams, sessions or threads, installation check (health_check_with_options) and reading or writing their configuration. codex and opencode also expose deep links (new_thread_deeplink, open_project_deeplink).
  • Internal dependencies: syntheo-cli-process for all three.
  • Usage: only crates/agent-core uses them, to install a notification hook in each agent’s configuration (char … notify command, inherited from Anarlog). plugins/agent exposes health_check, install_cli and uninstall_cli, but no code in apps/desktop/src imports @syntheo/plugin-agent.
  • Affected doc pages: none. The skills installation described in Skills doesn’t go through these crates.

Tooling and test data

  • data (crates/data): WAV audio samples (English and Korean) included at compile time. Regular dependency of crates/audio-mock, dev-dependency of audio-actual, audio-utils, fs-sync-core, owhisper-client, resampler and vad. Affected doc pages: none.
  • xtask (crates/xtask): cargo xtask prepare-binaries builds syntheo-cli in release mode for the current target (TAURI_ENV_TARGET_TRIPLE or the host triple) and copies the binary to apps/desktop/src-tauri/resources/cli/syntheo-cli-{triple}. Alias defined in .cargo/config.toml. Affected doc pages: none directly; the prepared binary is the one the app bundles (see Installation).