SuperProductivity Todo Sync

approved

by oswalt

View and edit your SuperProductivity tasks via SuperProductivity's local REST API. - This plugin has not been manually reviewed by Obsidian staff.

3 stars274 downloadsUpdated 12d agoMIT

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 @nextweek for the due date
    • #tag for an existing tag
    • +project for an existing project
    • ^parent task to 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/+project in the same input is dropped when ^ resolves)
    • 30m / 2h for 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

  1. Install and enable the plugin.
  2. 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).
  3. Enable the local REST API in SuperProductivity as described above, then paste the base URL and token into the wizard.
  4. 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:

  1. Build it (or download main.js, manifest.json, and styles.css from a release, if one exists):
    git clone https://github.com/oswaltx/obsidian-superproductivity-todo-sync
    cd obsidian-superproductivity-todo-sync
    npm install
    npm run build
    
    This emits main.js at the repository root, alongside the existing manifest.json and styles.css.
  2. Create the plugin folder inside your vault, if it doesn't exist yet: <vault>/.obsidian/plugins/superproductivity-todo-sync/
  3. Copy the three filesmain.js, manifest.json, styles.css — into that folder. (While developing, npm run dev rebuilds main.js on every change; symlinking the repo folder into .obsidian/plugins/ instead of copying saves you the copy step on every rebuild.)
  4. Reload Obsidian (Ctrl/Cmd+R, or close and reopen the vault).
  5. Go to Settings → Community plugins, make sure "Restricted mode" is off, and enable SuperProductivity Todo Sync in the list.
  6. 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:

Buy Me A Coffee

(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.