Sam K32 downloadsSync your OpenWhispr notes and speaker-labeled transcripts into your Obsidian vault using the OpenWhispr CLI.
Sync your OpenWhispr notes — including meeting notes with speaker-labeled transcripts — into an Obsidian vault folder.
Instead of talking to an API directly, this plugin drives the official
openwhispr CLI, so it works
against whichever backend the CLI is configured for (local desktop app or the
cloud API). Because it shells out to the CLI, the plugin is desktop-only.
notes get <id> --transcript --format markdown).openwhispr_id, title, folder (resolved to its
name via folders list), created_at, updated_at, and source.openwhispr_id; choose
to overwrite, skip, or keep a timestamped copy when a file already exists.{title}, {id},
{created_date}, {folder}), date format, and separator (incl. none).--local), or Remote (--remote).The plugin makes no network calls of its own. It only spawns the local
openwhispr CLI and writes markdown into your vault — all backend
communication is handled by the CLI you configured and authenticated. There is
no telemetry, analytics, or third-party service.
Because it spawns a child process and may resolve an absolute binary path, the
plugin is marked isDesktopOnly and does not run on Obsidian mobile.
Obsidian 1.6.6+ on desktop (Windows / macOS / Linux).
The OpenWhispr CLI, installed and configured:
npm i -g @openwhispr/cli # requires Node.js 20+
main.js, manifest.json, and styles.css from the
latest release
(or build them yourself — see Development).<vault>/.obsidian/plugins/openwhispr-to-obsidian/.First-time setup:
openwhispr
isn't on Obsidian's PATH (an absolute path such as
/usr/local/bin/openwhispr is safest — see Troubleshooting).You can trigger a sync three ways:
Or turn on auto-sync (a frequency and/or Sync on startup) and let it run in
the background. The status bar shows live progress (OpenWhispr: 3/12) and
the result of the last run (OpenWhispr: 8 synced).
Tip — first run: enable Sync all historical notes to backfill your entire history once, then turn it off so routine syncs stay fast.
Access plugin settings via Settings → Community Plugins → OpenWhispr Sync
openwhispr executable. A bare name (openwhispr)
resolves via PATH; an absolute path (e.g. /usr/local/bin/openwhispr) is
safest because Obsidian launches with a stripped-down PATH. Find yours with
which openwhispr / where openwhispr.--local, the desktop app), or Remote
(--remote, the cloud API). Match how your CLI is authenticated.Each note is a single # <title> heading followed by whichever sections you
enable below. Turn them all on for a complete record, or keep just the one you
actually read.
## My Notes.## Enhanced Notes.**Me** *(0:03)*: …), under ## Transcript. This
can be long.Filename prefix — Optional text added to the start of every filename (e.g.
openwhispr- → openwhispr-Weekly-Standup.md). Handy for grouping synced
notes or spotting them at a glance. Empty by default.
Filename template (default: {title}) — Build filenames from tokens:
{title}, {id}, {created_date}, {folder}. For example
{created_date}_{title} → 2026-07-15_Weekly-Standup.
Date format — Format for the {created_date} token. Tokens: YYYY, MM,
DD, HH, mm, ss. Examples: YYYY-MM-DD (ISO, 2026-07-15),
DD-MM-YYYY (European, 15-07-2026), MM-DD-YYYY (US, 07-15-2026).
Filename separator — Character that replaces spaces in filenames, so it
matches your naming convention. Daily Standup becomes:
-) → Daily-Standup (default)_) → Daily_StandupDaily StandupDailyStandupExisting notes — What to do when a note that was already synced (matched by
its openwhispr_id) has a file in your vault:
Standup_13-40.md) whenever the content has actually changed, so you keep a
history of versions.Two different notes that happen to resolve to the same filename are always
kept as separate files (Standup.md, Standup-2.md) — nothing is silently
overwritten.
OpenWhispr) — Vault folder that synced notes are
written to, created automatically if it doesn't exist.OpenWhispr/2026-07-15/Weekly-Standup.md.OpenWhispr/Meetings/Weekly-Standup.md./ to nest: YYYY-MM-DD → 2026-07-15, YYYY/MM →
2026/07, YYYY/MM/DD → 2026/07/15.50) — (shown when the above is off) Maximum
number of most-recent notes to pull per sync. Keeps routine syncs quick.A synced note is YAML frontmatter, a single # <title> heading, then whichever
content sections you enabled. With My Notes on (the default) and the
transcript also enabled:
---
openwhispr_id: "1234"
title: "Weekly Standup"
folder: "Meetings"
created_at: "2026-07-10T14:30:00.000Z"
updated_at: "2026-07-10T15:05:00.000Z"
source: openwhispr
---
# Weekly Standup
## My Notes
- Ship the beta on Friday
## Enhanced Notes
- **Decision:** ship the beta on Friday.
- **Action item:** finalize the release notes.
## Transcript
**Me** *(0:03)*: Let's get started.
**Speaker 2** *(0:11)*: Sounds good, I'll share my screen.
Only the sections you enable appear, in this order: My Notes, Enhanced Notes, Transcript. If a section is enabled but the note has no such content (e.g. no personal notes), it's simply omitted.
Where each part comes from:
| Part | Source |
|---|---|
| Frontmatter | Built by the plugin. openwhispr_id keys dedup / update-in-place. |
## My Notes |
The note's content (your typed notes). |
## Enhanced Notes |
The note's enhanced_content (OpenWhispr's AI rewrite). |
## Transcript |
notes get <id> --transcript --format markdown, with its duplicate # title heading stripped. |
Obsidian is launched from your desktop, not a login shell, so it inherits a
stripped-down PATH. The plugin already searches the common install locations
(Homebrew, /usr/local/bin, nvm/volta/fnm, %AppData%\npm), but if your binary
lives elsewhere, find its absolute path and paste it into CLI path:
which openwhispr # macOS / Linux
where openwhispr # Windows
openwhispr --version and
openwhispr doctor in a terminal.npm install
npm run dev # watch build → main.js
npm run build # type-check + production bundle
Source lives in src/:
cli.ts — openwhispr CLI wrapper (notes list / notes get /
notes get --transcript --format markdown) and PATH augmentation.format.ts — filename/date/YAML formatting helpers (dependency-free).settings.ts — settings tab.types.ts — shared types and defaults.main.ts — plugin lifecycle and sync engine.Releases are automated. To cut one:
## [Unreleased] heading in
CHANGELOG.md.npm version <patch|minor|major>. This bumps manifest.json /
versions.json, stamps the [Unreleased] notes into a dated
## [<version>] section, and creates a matching git tag (no v prefix —
Obsidian requires the tag to equal the manifest version exactly).git push && git push --tags.Pushing the tag triggers
.github/workflows/release.yml, which builds
the plugin, verifies the tag matches manifest.json, and publishes a GitHub
Release with main.js, manifest.json, and styles.css — using the matching
changelog section as the release notes.
Contributions are welcome — see CONTRIBUTING.md for how to report issues, propose features, and open pull requests.
MIT © Sam Kawsarani.
Not officially affiliated with OpenWhispr or Obsidian.