Thunderegg225 downloadsConvert attachments — documents, images, even meeting recordings (transcribed on-device) — to Markdown via the local Thunderegg engine. Adds Grades, Bonds and Condensers.
Convert any attachment in your vault — PDF, Word, Excel, PowerPoint, email, image, even meeting recordings (transcribed on-device) — to clean Markdown with YAML frontmatter, 100% on your Mac. Plus the Refinery: track note maturity, discover connections, and surface hub notes automatically.
The plugin is free and MIT-licensed. The app it drives is not. Thunderegg for macOS is converting is free and unlimited. Thunderegg Pro — recording meetings, transcription and the AI write-up — is $19.95, once, no subscription and no account. This plugin is the Obsidian half; the Thunderegg app does the converting, and it is what you buy. thunderegg.ai
Stated plainly, in the order Obsidian's developer policies list them.
~/Library/Application Support/MarkItDownDroplet/convert.sh, through Node's child_process.
This is why the plugin is desktop-only and macOS-only.Thunderegg: Convert clipboard — copy anything (a web page selection, an email,
a table), run the command, and Thunderegg converts it into a new note called
Clipboard <date>.md and opens it. Nothing to save to disk first.The clipboard command is command-palette only — there is no ribbon icon and no menu item for it, so it is easy to miss. It is the fastest way to get something you are reading in a browser into your vault as clean Markdown.
Thunderegg: Convert file — convert the active attachmentThunderegg: Convert clipboard — paste clipboard content (HTML or text), run it through Thunderegg, and create a new notereport.md for report.pdf (or report.pdf.md when that name is taken), with title/source/type/created/tags frontmatter.Enable the Refinery in settings for Thunderegg's knowledge-management layer. It adds three concepts:
| Concept | What it is |
|---|---|
| Grades | Note maturity: Blank → Rough → Polished → Crystal → Gem |
| Bonds | Connections discovered via [[wikilinks]] |
| Condensers | Hub notes — notes whose bond count exceeds a threshold |
When Refinery is enabled:
Add a grade field to any note's YAML frontmatter:
---
grade: rough
---
Valid values: blank, rough, polished, crystal, gem (plus synthesis on generated map
pages). Notes from before the 2026-07 rename (vapor, crude, distillate, refined,
essence) are read forever and shown under their new names. The plugin reads Obsidian's
metadata cache for instant display.
~/Library/Application Support/MarkItDownDroplet/convert.sh. The engine path is
configurable in plugin settings.ocr helper that ships with the Thunderegg app. If image
conversion fails with an OCR message, reinstall the Thunderegg app — that restores the helper.| Setting | Description |
|---|---|
| Engine path | Full path to the Thunderegg convert.sh script |
| Add YAML frontmatter | Prepend title/source/type/tags to converted notes |
| Open after converting | Auto-open the resulting .md in a new pane |
| Enable Refinery | Turn on Grade badges, Bond counts, and Condenser links |
| Vault root | Limit bond scanning to a subfolder (blank = whole vault) |
| Condenser threshold | Min bonds to flag a note as a Condenser (default: 5) |
| Show grade badges | Toggle Grade display |
| Show bond counts | Toggle Bond count display |
| Show condenser links | Toggle Condenser back-link display |
The plugin shells out to the local Thunderegg engine via Node's child_process
(allowed for desktop-only plugins). Conversion and transcription are entirely on-device —
nothing is uploaded to convert. Frontmatter can be toggled off in settings (passes
DISTILL_FRONTMATTER=0); the plugin also passes your vault's path (DISTILL_VAULT_PATH)
so the engine's bond discovery links against this vault.
The Refinery reads from Obsidian's metadataCache.resolvedLinks to build the bond graph — no custom file parsing, no background workers.
The plugin can publish an Obsidian Canvas as a signed concept map to a server you
configure (Settings → Publish & Community), and import maps others share via
obsidian://distill-fork links. No server is configured by default, so out of the box the plugin
makes no network call at all. Once you set one, this is the only network call the plugin itself makes:
nothing is sent by the plugin unless you explicitly run a Publish command, publishing sends
only the selected Canvas (after a redaction scan for blocked tags), and the device token is
stored outside your vault.
That is a claim about the plugin, not about the whole pipeline, and the difference matters. Conversion, OCR and transcription run entirely on your Mac. But if you have connected a cloud model in the Thunderegg app, the engine's AI enrichment step sends part of each converted note to that provider — the plugin never sees that request and cannot prevent it. Mark the vault Local in Thunderegg (or connect no cloud model) to keep everything on-device. The hosted community server is not currently online; the feature works against any server implementing the protocol.
npm install
npm run build # produces main.js
Copy manifest.json, main.js, and styles.css into:
<your-vault>/.obsidian/plugins/thunderegg/
Then enable Thunderegg in Settings → Community plugins.
The plugin is listed in the official Obsidian directory as thunderegg. To ship an update:
version in manifest.json and add the same version to versions.json —
always, even when minAppVersion did not change. Obsidian picks the newest version
whose versions.json entry its app version satisfies, so a MISSING key does not mean
"unchanged", it means "skip this release". 0.2.1-0.2.3 were absent for exactly this
reason and every Obsidian 1.4.0-1.6.5 user silently resolved back to 0.2.0.npm test && npm run build.manifest.json, main.js, and styles.css
as assets — Obsidian serves updates from the GitHub release, no new catalog PR needed.
⚠️ This step has been forgotten twice: a fix committed to the repo reaches nobody until a
release is cut under a bumped version.Note: Obsidian's review guidelines require desktop-only plugins that run shell commands to clearly disclose it. The description and this README state that the plugin executes a local helper script; keep that disclosure if you edit copy.
v0.2.12. On top of the v0.1.0
conversion features: the Refinery (rock-ladder grades with permanent legacy-name reads),
audio/video → on-device meeting summaries, .doc/.rtf support, vault-aware bond
discovery (DISTILL_VAULT_PATH), clipboard conversion, status-bar indicators, and the
Canvas publish/verify/fork surface (disclosed above).