OpenProject Management
Browse and manage OpenProject work packages without
leaving VS Code.
Features
- Projects in the sidebar with their work packages inside, subprojects nested under
their parents, and a count per project
- Parent/child work packages nested too; a work package whose parent isn't in the
current filter still appears, at the top level
- A details panel with description, comments, time breakdown, dates and inline actions
- Log time against a work package without leaving the editor
- Apply the saved queries your team already built in the OpenProject web UI
- Optionally group work packages by status within each project (flat, since parents and
children usually hold different statuses)
- Filter from the view toolbar by scope, status, type, project, or full-text search —
the active filter shows next to the view title
- Change status — only transitions the workflow actually permits are offered
- Write and edit comments in the panel — multi-line markdown, not a one-line popup
- Open a work package in the browser
Setup
- In OpenProject: My account → Access tokens → API → generate.
- In VS Code: run OpenProject Management: Set Up Connection from the command palette.
- Enter your instance URL (e.g.
https://myorg.openproject.com) and paste the token.
The token is stored in the OS keychain via VS Code's SecretStorage, not in settings.json.
Filtering
Click the funnel icon in the view toolbar (or run OpenProject Management: Filter…)
to reach every dimension in one menu:
| Dimension |
Notes |
| Scope |
assigned to me, open, or all |
| Status |
Multi-select. Overrides the scope's open/closed condition |
| Type |
Multi-select — Task, Bug, Milestone, … |
| Project |
Scoping to a project includes its subprojects |
| Sprint |
Requires the Backlogs module |
| Search |
Full text across subject, description and comments |
The active filter appears next to the view title, and a Clear Filters button shows in
the toolbar whenever anything is narrowed. Filters are stored as settings, so they
persist and can equally be edited in the Settings editor.
Picking a closed status while the scope is open does what you'd expect: the explicit
status wins rather than cancelling out to zero results.
Time tracking
Right-click a work package → Log Time, or press Log time in the details panel.
Either way you get one form with date, hours, activity and comment all visible at once —
Enter submits, Escape closes.
Hours accept 2, 1.5, 90m or 1h30m. Activities come from the server, so only the
ones your instance actually offers are listed, and the date defaults to today.
The details panel separates Spent (which OpenProject rolls up from sub-items) from
Logged here (entries against that work package alone), so a summary task doesn't
look like it recorded time it never did.
Comments are written in the details panel, not a popup, so they can be multi-line
markdown. Ctrl/Cmd + Enter posts.
Existing comments show an edit link when the server says you may change them — the
extension reads that from the API's update link rather than guessing from authorship.
Comments cannot be deleted: OpenProject's API advertises no delete for them, and
DELETE on an activity returns 404 while leaving it in place. Editing is the only
revision available.
Saved queries
Apply Saved Query… in the toolbar lists the views your team defined in the web UI
and applies one as filters.
Not every saved query can be re-issued: board queries using manual ordering and
subproject-scoped queries use filters the work-packages endpoint rejects. Those report a
clear message instead of failing silently.
Settings
| Setting |
Description |
openprojectManagement.baseUrl |
Instance URL, without /api/v3 |
openprojectManagement.projectId |
Optional project identifier to scope to |
openprojectManagement.filter |
assignedToMe, open, or all |
openprojectManagement.statuses |
Status ids to show; empty defers to the scope |
openprojectManagement.types |
Type ids to show; empty means all |
openprojectManagement.search |
Full-text search string |
openprojectManagement.sprint |
Sprint id; empty means any |
openprojectManagement.groupBy |
none (tasks directly under the project) or status |
openprojectManagement.pageSize |
Max work packages fetched in total (default 200, max 1000) |
A project labelled 12/39 means pageSize truncated the list — raise it to see the
rest.
Development
npm install
npm run watch
Then press F5 to launch the Extension Development Host.
See GUIDE.md for a walkthrough of both the VS Code extension model and
the OpenProject API v3.
Requirements
- An OpenProject instance (self-hosted or cloud) reachable from your machine
- An API token from My account → Access tokens → API
- VS Code 1.96 or newer
Sprint filtering additionally requires the Backlogs module to be enabled.
Troubleshooting
"Unauthorized" — the token is wrong or was revoked. Run Clear Stored API Key, then
Set Up Connection again.
A project shows 12/39 — pageSize truncated the list. Raise
openprojectManagement.pageSize (the API caps it at 1000).
A saved query won't apply — board queries using manual ordering and subproject-scoped
queries rely on filters the work-packages endpoint rejects. Those cannot be re-issued.
No sprints listed — the Backlogs module is disabled on your instance.
To check the API against your own instance directly, run node scripts/verify-api.mjs.
It reads the token from $OP_API_KEY or ~/.openproject-api-key and never prints it.
Icon
The activity bar icon and extension icon use the OpenProject mark, taken from
icon_logo.svg
in the OpenProject repository (GPLv3). The geometry is unmodified; only Inkscape metadata
was stripped and the fill set to currentColor so VS Code can theme it.
This is an unofficial, third-party extension and is not affiliated with or endorsed by
the OpenProject Foundation. Note that a project's trademarks are generally not covered by
its source licence — if you publish this to the Marketplace, it is worth checking
OpenProject's brand guidelines first.
License
MIT