Automatically sync task completions to Beeminder goals. Add a 🐝 marker to any checklist item, and when you check it off, the plugin sends a datapoint to Beeminder. Uncheck it, and the datapoint is removed.
Works with plain markdown checkboxes. Compatible with the Tasks plugin but does not require it.
- Install the plugin and enable it in Settings > Community plugins.
- Go to Settings > Beeminder Task Sync.
- Click Open to get your auth token from Beeminder.
- In the Auth token setting, create or select a secret in Obsidian SecretStorage that contains your Beeminder auth token.
- Click Validate — this confirms the connection and caches your goal list for autocomplete.
The plugin stores only a reference to your selected secret in its settings. The token value itself is read from Obsidian SecretStorage.
Add a 🐝 goalname marker to any task:
- [ ] Read chapter 5 🐝 reading
- [ ] Run 5km 🐝 exercise=5
- [ ] Write blog post 🐝 words=500 📅 2026-04-10🐝 reading— sends +1 to the "reading" goal when completed🐝 exercise=5— sends +5 to the "exercise" goal- If
=valueis omitted, it defaults to 1
Type bee, goal, or 🐝 on a task line to get a dropdown of your Beeminder goals. You can also use the command Insert Beeminder marker on current task from the command palette.
If you're using the Tasks plugin, place the 🐝 marker before Tasks metadata (due dates, priorities, etc.) so it doesn't interfere with Tasks' parser. The autocomplete handles this automatically.
Autocomplete has a configurable minimum text trigger length in the plugin settings. By default it is 1, which means text-based suggestions can appear after the first typed character on a task line, while typing 🐝 always triggers suggestions immediately. Set it to 0 if you want suggestions to appear on empty task lines before typing anything.
If you also use the Tasks plugin, both plugins can compete for the same suggestion slot on task lines. A lower Beeminder trigger length makes Beeminder suggestions appear more aggressively, while a higher value gives Tasks more room to show its own suggestions first.
Unchecking a task deletes the synced datapoint from Beeminder. This works across sessions — the plugin stores the Beeminder datapoint ID locally so it can reverse the sync later.
If a task is heavily edited or moved between files before being unchecked, the plugin may not match it to the stored datapoint. In that case, delete it manually on Beeminder.
| Command | Description |
|---|---|
| Insert Beeminder marker on current task | Adds a 🐝 goal marker to the task at your cursor |
| Refresh Beeminder goals | Re-fetches your goal list from Beeminder |
npm install
npm run buildCopy main.js and manifest.json into .obsidian/plugins/beeminder-sync/ in your vault.
To build and install directly into a vault:
npm run install:vault -- /path/to/YourVaultTo publish an Obsidian-compatible GitHub release:
- Update
manifest.jsonwith the new plugin version inx.y.zformat. - Commit the change.
- Create and push a Git tag with exactly the same version string.
git tag 1.0.1
git push origin 1.0.1When that tag is pushed, GitHub Actions builds the plugin and creates a release that attaches:
main.jsmanifest.json
The workflow fails if the tag does not exactly match manifest.json's version, which is the release format Obsidian expects.