- TypeScript 59.7%
- JavaScript 40.3%
| node_modules | ||
| plugin | ||
| scripts | ||
| src | ||
| .gitignore | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
sp-asana
Asana issue provider plugin for Super Productivity.
Provides 2-way sync between SP tasks and Asana tasks.
Features
- Search any Asana task by name and link it to an SP task
- Backlog import — pull all open tasks from a project into SP, with their Asana due dates
- Pull updates from Asana → SP (title, notes, completed state)
- Push updates from SP → Asana (title, completed state) — changes sync immediately on save
Sync behaviour
| SP field | Asana field | Default direction |
|---|---|---|
| Done | completed |
Both |
| Title | name |
Both |
| Notes | notes |
Pull only |
Notes are pull-only by default to protect content you write in Asana.
Push (SP → Asana) happens via SP's taskComplete and taskUpdate hooks:
- Marking a task done in SP immediately marks it complete in Asana.
- Renaming a task in SP pushes the new name to Asana.
- Un-completing a task in SP pushes
completed: falseto Asana (requires the task to have been polled at least once first).
Pull (Asana → SP) happens on the background poll cycle (every 5 minutes).
Setup
1. Personal Access Token
- Go to Asana Developer Console
- Click + New access token, give it a name, copy the token
2. Workspace GID
Open this URL while logged in to Asana — copy the gid for your workspace:
https://app.asana.com/api/1.0/workspaces
3. Project GID (optional, recommended)
Open a project in Asana and grab the numeric ID from the URL:
https://app.asana.com/0/<PROJECT_GID>/board
Enables backlog import and blank-search results scoped to that project.
4. Assignee GID (optional)
Filters backlog import to only tasks assigned to a specific user. Find your GID at:
https://app.asana.com/api/1.0/users/me
5. Install in Super Productivity
- Open Super Productivity → Settings → Plugins
- Click "Install from ZIP / folder" and select the
plugin/folder (or zip theplugin/directory and upload the ZIP) - Configure the plugin with your token, workspace GID, and optionally project GID / assignee GID
Development
npm install
npm run build # compile src/plugin.ts → plugin/plugin.js
npm run build:watch # watch mode
npm run typecheck # type-check without emitting
npm run zip # package plugin/ into asana-issue-provider.zip
Or zip manually:
cd plugin && zip -j ../asana-issue-provider.zip manifest.json plugin.js icon.svg
The -j flag is required — it strips directory prefixes so all files land at the ZIP root, which is what Super Productivity expects.
The plugin/ directory is the self-contained distributable — everything SP needs is in there.
Project structure
sp-asana/
├── src/
│ ├── plugin.ts # TypeScript source (compile → plugin/plugin.js)
│ └── plugin-api.d.ts # Local type definitions for SP's issue provider API
├── plugin/ # Distributable (load this in SP)
│ ├── manifest.json
│ ├── plugin.js
│ └── icon.svg
├── package.json
├── tsconfig.json
└── README.md
To-do
- Create Asana tasks from SP — the
createIssuemethod is implemented in the plugin, but SP does not yet expose a UI entry point for it (no "create new issue" button in the task panel). This will work once SP adds that UI.