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
Theapp.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
ChangeNotifierto 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 incrates/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.
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 thePlainorCloudsyncAlterscope. - Internal dependencies:
syntheo-db-core. - Affected doc pages: none.
db-change, db-execute, db-reactive
- db-change (
crates/db-change):ChangeNotifier,TableChangeandTableChangeKindreport modified tables. No internal dependencies. - db-execute (
crates/db-execute):DbExecutorruns a query, a “proxy” query or a transaction described in JSON (TransactionStatement). Depends onsyntheo-db-core. - db-reactive (
crates/db-reactive):LiveQueryRuntimeextracts the tables read by a query (extract_dependencies, throughEXPLAIN) and replays it when one of them changes. Thedbplugin exposes it through thesubscribeandunsubscribecommands. Depends onsyntheo-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 thesyntheofolder; the other identities (debug, dev configuration) use their bundle ID.vault:settings.json,vault_pathkey,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.dpapifile 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-syncplugin: 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), modulesscan,session_content,folder,audio,path. - Internal dependencies:
syntheo-storage,syntheo-fs-format,syntheo-frontmatter,syntheo-tiptap,syntheo-audio-utils,syntheo-vad;syntheo-dataas 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):Documentparses 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,mergemodule. No internal dependencies.crates/agent-accessuses it to convert note bodies to Markdown in the CLI and MCP server outputs. - Affected doc pages:
tiptapfeeds CLI for agents, MCP server and CLI reference;fs-formatandfrontmatter: none.
Export
export-core
- Path:
crates/export-core - Role: produces a meeting’s PDF with Typst (
typst,typst-pdf, fonts fromtypst-assets). - API:
export_pdf(path, input),render_pdf(input), typesExportInput,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 incrates/template-app/assets/*.md.jinja. - Role: renders the prompts sent to the LLM. The templates are compiled with Askama.
- API:
render(Template), enumTemplate(EnhanceSystem,EnhanceUser,TitleSystem,TitleUser,ChatSystem,ContextBlock,ToolSearchSessions,TranscriptPatchSystem,TranscriptPatchUser,ActivityCaptureSystem,DailySummarySystem,EventContactSystem…),EditableTemplate(EnhanceFormat,EnhanceUser,TitleUser) andtemplate_source. - Internal dependencies:
syntheo-askama-utils. - Note: the
templateplugin exposesrenderandget_template_source. The interface reads theenhanceFormatsource 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. Thetemplateplugin 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
templateplugin initializes its environment at startup and uses it for therender_customcommand, which no code inapps/desktop/srccalls 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
hooksplugin reads the configuration under thehookskey of the settings, and the interface triggers the events fromapps/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).
- Affected doc pages: Automatic capture (microphone detection notification).
Platform and identity
- Affected doc pages: see the Remarks column; none for
host,user-error,shortcut-macos,overlay-kitandbundle.
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-processfor all three. - Usage: only
crates/agent-coreuses them, to install a notification hook in each agent’s configuration (char … notifycommand, inherited from Anarlog).plugins/agentexposeshealth_check,install_clianduninstall_cli, but no code inapps/desktop/srcimports@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 ofcrates/audio-mock, dev-dependency ofaudio-actual,audio-utils,fs-sync-core,owhisper-client,resamplerandvad. Affected doc pages: none. - xtask (
crates/xtask):cargo xtask prepare-binariesbuildssyntheo-cliin release mode for the current target (TAURI_ENV_TARGET_TRIPLEor the host triple) and copies the binary toapps/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).