SuperProductivity Todo Sync
approvedby oswalt
View and edit your SuperProductivity tasks via SuperProductivity's local REST API. - This plugin has not been manually reviewed by Obsidian staff.
SuperProductivity Todo Sync
View and edit your SuperProductivity tasks directly inside Obsidian, using SuperProductivity's local REST API — no cloud account, no third-party server.
📂 Full source code: github.com/oswaltx/obsidian-superproductivity-todo-sync
Features
- A sidebar view listing your open SuperProductivity tasks, grouped into Overdue, Due today, This week, No date, and Waiting (tasks carrying a configurable "waiting" tag).
- Project tabs above the list ("All" plus one per SuperProductivity project) to filter the whole view down to a single project.
- A filter box to narrow the visible tasks by a title search.
- Quick-add input with the same
@/#/+shortcut syntax as SuperProductivity's own add-task bar, plus a^shortcut of this plugin's own for subtasks, with autocomplete for all of them:@today,@tomorrow, a weekday name, or@nextweekfor the due date#tagfor an existing tag+projectfor an existing project^parent taskto create it as a subtask of an existing top-level task (SuperProductivity requires a subtask to inherit its parent's project and forbids it from having its own tags, so any#tag/+projectin the same input is dropped when^resolves)30m/2hfor a time estimate
- Subtasks are shown indented directly under their parent task, wherever the parent falls in the due-date grouping. Drag any task onto a top-level task to make it a subtask (SuperProductivity's API can't re-parent a task directly, so this re-creates it as a subtask and removes the original).
- A "Quick add task" command (Command palette → assign your own hotkey under Settings → Hotkeys) opens the same quick-add input in a small modal, so you can log a task without switching to the sidebar.
- Checkboxes to mark tasks done, patched straight back to SuperProductivity.
- Click a task's title to rename it in place, or its due-date badge to change the date (a calendar icon shows for tasks without one yet).
- A trash icon to delete a task — click once to arm it (turns red), click again to confirm. SuperProductivity has no undo for this via the REST API.
- One-click "→ all to today" to reschedule every overdue task at once.
- The view refreshes automatically on an interval, and immediately whenever Obsidian regains focus — so checking something off or adding a task directly in SuperProductivity shows up here almost as soon as you switch back. (SuperProductivity's REST API has no push/webhook mechanism, so this is the closest to real-time sync that's possible without polling aggressively.)
- If a task's notes contain an
obsidian://open?...&file=<path>link, a small icon opens that note directly inside Obsidian. - A guided setup wizard for the base URL and API token.
- A "what's new" popup after an update, with a link to this repo and to the funding page — also reachable anytime from the settings tab.
Requirements
- The SuperProductivity desktop app, running locally.
- Its local REST API enabled: in SuperProductivity, go to
Settings → Misc → Enable local REST API. SuperProductivity will then
show you the base URL (e.g.
http://127.0.0.1:3876— the port is not fixed) and an API token. - Desktop Obsidian only (the plugin talks to
127.0.0.1, which isn't reachable from Obsidian Mobile).
Setup
- Install and enable the plugin.
- The setup wizard opens automatically on first activation (also available any time via the ribbon icon's "Open setup wizard" command, or the Setup wizard button at the top of the plugin's settings tab).
- Enable the local REST API in SuperProductivity as described above, then paste the base URL and token into the wizard.
- Click Test connection to confirm it works, then Done.
Notes on tags and projects
SuperProductivity's REST API has no endpoints to create tags or projects, so
the quick-add parser only ever matches #tag/+project against tags and
projects that already exist in SuperProductivity. An unrecognized #/+
token is left as literal text in the task title instead of being silently
dropped.
In settings, Priority sort order lets you add any number of existing SuperProductivity tags and reorder them (▲/▼); within the same day, tasks are sorted by the position of their first matching tag (top = first), and tasks with none of the listed tags sort last. The Waiting tag name is separately configurable (case-insensitive) — leave it blank to hide that section.
Security: where the token is stored
The API token is saved in plain text in
<vault>/.obsidian/plugins/superproductivity-todo-sync/data.json. Obsidian's
plugin API has no secret-store facility, so this is the same approach every
community plugin that needs an API key uses — but it does mean the token
travels with that file.
If you sync .obsidian/ with anything (Google Drive, iCloud, Syncthing,
remotely-save, a git repo,
etc.), check whether your sync tool includes plugin data — many let you
exclude specific paths or turn off syncing the config folder entirely. If it
does sync data.json, treat the token like any other credential: avoid
pushing it somewhere you wouldn't push a password, and rotate it in
SuperProductivity's settings if you think it leaked. Since SuperProductivity's
REST server only listens on 127.0.0.1, the token by itself is only useful
to someone who also has local access to the machine while SuperProductivity
is running — but it's still worth being deliberate about where it ends up.
Why not fetch()?
SuperProductivity's local REST server rejects any request carrying an
Origin header (403, "Requests from web origins are not allowed"), which
fetch()/XMLHttpRequest always attach from a renderer context. This plugin
talks to the API through Obsidian's own requestUrl() instead, which goes
through Electron's networking stack rather than the renderer's fetch(), so
it never sends an Origin header either.
Manual installation
The plugin isn't in the Community Plugins directory yet, so for now it has to be installed manually:
- Build it (or download
main.js,manifest.json, andstyles.cssfrom a release, if one exists):This emitsgit clone https://github.com/oswaltx/obsidian-superproductivity-todo-sync cd obsidian-superproductivity-todo-sync npm install npm run buildmain.jsat the repository root, alongside the existingmanifest.jsonandstyles.css. - Create the plugin folder inside your vault, if it doesn't exist yet:
<vault>/.obsidian/plugins/superproductivity-todo-sync/ - Copy the three files —
main.js,manifest.json,styles.css— into that folder. (While developing,npm run devrebuildsmain.json every change; symlinking the repo folder into.obsidian/plugins/instead of copying saves you the copy step on every rebuild.) - Reload Obsidian (Ctrl/Cmd+R, or close and reopen the vault).
- Go to Settings → Community plugins, make sure "Restricted mode" is off, and enable SuperProductivity Todo Sync in the list.
- The setup wizard should open automatically — enable the local REST API in SuperProductivity and follow the steps in Setup above.
Alternative: dataviewjs snippet (no plugin install)
This plugin started life as a single dataviewjs code block. If you'd rather
not install a plugin at all — or you want something you can hack on directly
in your vault without touching TypeScript or rebuilding anything — the full
script lives at
dataviewjs/superproductivity-dashboard.js.
Open it on GitHub, copy it with the button in the top-right corner of the
code view, and paste it into a dataviewjs code block in any note (requires
the Dataview plugin,
with JavaScript queries enabled in its settings). It's plain code sitting in
your note, so edit it freely (tag names, groupings, colors, whatever) —
there's nothing to rebuild.
It's functionally the predecessor of this plugin: same REST API, same
@/#/+ quick-add syntax and autocomplete, same due-date grouping — but
it re-fetches and re-renders on every note view instead of living in a
persistent sidebar, has no setup wizard (edit the tokenPath/token handling
in the script directly), and the priority/waiting tag names are hardcoded
at the top of the file rather than configurable in a settings UI.
Building from source
npm install
npm run build
main.js is emitted at the repository root alongside manifest.json and
styles.css.
Support
If this plugin is useful to you:
(Built with AI assistance — see the commit history for details.)
License
MIT
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.