Releases: VidGuiCode/plane-cli
v0.3.0
What's new
plane project create
Create projects from the CLI without leaving the terminal:
```
plane project create "My Project" --identifier PROJ --network 2
```
Prompts to set as active project in interactive mode.
plane project update
Update the active project's name, description, or network visibility:
```
plane project update --name "Renamed" --description "New description"
```
plane issue move
Move (or copy) an issue to a different project. State is mapped by group (e.g. started → started):
```
plane issue move PROJ-42 --to-project OTHER
plane issue move PROJ-42 --to-project OTHER --copy # skip delete
```
Bulk issue update
Update multiple issues in one call using comma-separated refs:
```
plane issue update PROJ-1,2,3 --state Done
plane issue update PROJ-5,PROJ-6 --priority high --assignee me
```
All refs are resolved before any API calls are sent (fail-fast). Patches run in parallel.
Multi-filter on issue list / issue mine
--state, --priority, and --assignee now accept comma-separated values:
```
plane issue list --state Todo,InProgress
plane issue list --assignee me,alice --priority high,urgent
```
Prettier formatting fixes
Applied consistent formatting across cycle.ts, issue.ts, project.ts, html.ts, and resolvers.ts.
Install / upgrade
```
npm install -g github:VidGuiCode/plane-cli
```
v0.2.6
What's new
Bug fixes
- Fixed
issue createandpage createhanging in non-interactive mode when optional fields (description, content) have no default (fixes #8)
Features
--namealias for--titleonissue update— matches the Plane API field name (fixes #9)viewalias forissue getandpage get—plane issue view PROJ-42now works (fixes #10)stripHtml()preserves paragraph breaks, line breaks, and list structure instead of collapsing to a single line (fixes #11)- Richer
cycleandmoduleoutput: progress counters (totalIssues,completedIssues),module listshows NAME/STATUS/START/TARGET columns, anddiscover cycles/discover modulesexpose progress fields (fixes #12)
Install
npm install -g https://github.com/VidGuiCode/plane-cli/releases/download/v0.2.6/plane-cli-0.2.6.tgzOr upgrade from an existing install:
plane upgradev0.2.5
What's new
Features
--assignee me— resolves to the current authenticated user onissue list,create, andupdateplane issue mine— shortcut for listing issues assigned to youplane cycle current— shows the active cycle and its issues--updated-since <date>— filterissue listby last-updated date (YYYY-MM-DD)- Post-pack release verification —
npm run verify-packsmoke tests the.tgzbefore publishing
Output consistency
issue list --json,issue get --json,cycle issues --json, andmodule issues --jsonnow return normalized camelCase fields (state name, identifier string, label names) instead of raw API shapes
Error messages
- API errors now include actionable hints (401→check token, 404→verify identifiers, 429→rate limited)
- Resolver errors include more context (e.g., which workspace was searched)
Install
npm install -g https://github.com/VidGuiCode/plane-cli/releases/download/v0.2.5/plane-cli-0.2.5.tgzv0.2.4
Bug fixes
- Fixed `plane issue list --fields` and `plane issue get --fields` returning `[{}, {}, ...]` for every issue — raw Plane API fields (`id`, `name`, `priority`, `assignees`, `sequence_id`, `updated_at`, etc.) are now directly accessible by their exact API name, not just via a curated alias map
- Fixed `--fields` failing when the shell (e.g. PowerShell) splits a comma-separated list like `id,name,title` into separate arguments
Install
```bash
npm install -g https://github.com/VidGuiCode/plane-cli/releases/download/v0.2.4/plane-cli-0.2.4.tgz
```
Or upgrade from within the CLI:
```bash
plane upgrade
```
v0.2.3
Bug fixes
--fieldsproducing{}empty objects —issue listandissue getwith--fieldsnow accept both the normalized camelCase names and raw Plane API field names as aliases. Previously, passing names likestate_name,sequence_id,name, orupdated_atproduced empty objects{}because none matched the internal normalized keys.
Both of these now work:
# normalized names
plane issue list --json --fields id,sequence,title,state,updatedAt
# raw API names (same result)
plane issue list --json --fields id,sequence_id,name,state_name,updated_atFull alias table:
| Normalized | Also accepts |
|---|---|
title |
name |
sequence |
sequence_id |
state |
state_name, state_id |
projectId |
project_id |
updatedAt |
updated_at |
createdAt |
created_at |
dueDate |
due_date |
startDate |
start_date |
labels |
label_ids |
- Added
projectIdfield — now available in--fieldsoutput (also accessible asproject_id)
Install
npm install -g https://github.com/VidGuiCode/plane-cli/releases/download/v0.2.3/plane-cli-0.2.3.tgzOr upgrade in-place:
plane upgradev0.2.2
Bug fixes
Follow-up to 0.2.1 — member name/email still blank and --assignee still failing.
Root cause: The most common Plane API layout returns workspace members with display_name and email as top-level fields, and member as a plain UUID string (not an object). The 0.2.1 fix only handled two other formats (double-underscore annotations and a nested member object), missing this third shape entirely.
The three member formats now handled:
| Format | Fields | Plane versions |
|---|---|---|
| Top-level flat | display_name, email, member: "uuid" |
Most current versions |
| Double-underscore | member__display_name, member__email |
Some older versions |
| Nested object | member: { id, display_name, email } |
Some versions |
getMemberId also updated: when member is a string UUID, that string is returned as the user UUID for assignee filtering (instead of falling back to the membership record id).
Install
npm install -g https://github.com/VidGuiCode/plane-cli/releases/download/v0.2.2/plane-cli-0.2.2.tgzOr upgrade in-place:
plane upgradev0.2.1
Bug fixes
- Pagination timeouts —
plane discover projects,plane issue list, and allplane discoversub-commands could hang indefinitely. Plane API always returns anext_cursoreven on the last page; the loop now checksnext_page_resultsto stop correctly. --assigneecrash —plane issue list --assigneethrewTypeError: Cannot read properties of undefined (reading 'toLowerCase'). Newer Plane instances return workspace members as a nestedmemberobject; both flat and nested formats are now handled.plane members listshowingundefined— same nested vs flat member format issue. Names and emails now display correctly.plane discover members/discover issue-inputs—displayNameandemailfields wereundefinedin JSON output. Same fix.plane helperror — threw "too many arguments. Expected 0 arguments but got 1". Commander.js v13 suppresses the implicithelpsubcommand when.action()is set on the root command. Re-enabled with.helpCommand(true).plane profileshowing "Inactive" —/users/me/does not always includeis_active;undefinednow defaults to Active instead of Inactive.plane profileshowing "Role: undefined" —/users/me/does not return a role (it is workspace-scoped). Removed from output.- Assignee filter returning wrong results —
resolveMemberwas returning the workspace membership UUID instead of the user UUID on newer Plane API versions. Now correctly returnsmember.id.
Install
npm install -g https://github.com/VidGuiCode/plane-cli/releases/download/v0.2.1/plane-cli-0.2.1.tgzOr upgrade from within the CLI:
plane upgradev0.2.0
AI-first release: discover-first workflow, normalized JSON context, dry-run support, compact output, structured errors, and expanded AI discovery helpers.
v0.1.7 - API Modernization & New Commands
Changelog
0.1.7
New Commands
plane completion <bash|zsh|fish>— generate shell completion scriptsplane issue open <ref>— open an issue in the default browserplane cycle create <name>— create a new cycleplane cycle delete <cycle>— delete a cycle by name or UUIDplane module create <name>— create a new moduleplane module delete <module>— delete a module by name or UUIDplane label update <label> --name <name> --color <color>— update an existing labelplane comment update <commentId> <issue> --message <text>— update an existing commentplane page create <name>— create a new pageplane page update <id>— update an existing pageplane page delete <id>— delete a page by UUID
API & Authentication
- API style detection now tries
work-itemsfirst, falls back toissues - Added
--api-styleflag toplane logincommand for explicit control - Added
PLANE_CONFIGenvironment variable support for custom config file path
Developer Experience
- Added ESLint + Prettier configuration for code quality
- Added unit tests for core modules using Vitest
- Added retry logic and rate limiting in API client
0.1.6
- Fix install on Windows: switch to GitHub release tarballs (
npm install -g https://github.com/.../releases/download/v{x}/plane-cli-{x}.tgz); npm installs HTTPS tarballs as real directories — no junctions, no broken paths plane upgradenow installs from the GitHub release tarball for the same reason
0.1.5
- Fix GitHub install on Windows: npm creates a broken directory junction (not a real copy) for git dependencies that have no
preparescript; adding a no-oppreparescript forces npm to do a full pack-and-install, producing a real directory dist/is still committed — no build step required during install
0.1.4
- Fix install failure on Windows:
npm install -g github:VidGuiCode/plane-cliwas creating a broken junction to a temporary git-clone directory that npm later cleaned up; now uses tagged installs (#v{version}) so npm fetches a proper GitHub archive tarball instead of cloning plane upgradenow installs the exact tagged version (github:VidGuiCode/plane-cli#v{latest}) to benefit from the same fix
0.1.3
- Env var support:
PLANE_BASE_URL,PLANE_API_TOKEN,PLANE_WORKSPACE,PLANE_API_STYLE— no config file needed in CI/automation plane issue delete— delete an issue by refplane issue close/plane issue reopen— move to first completed/backlog state automaticallyplane label create <name> <color>/plane label delete <name>— manage labelsplane label add/plane label remove— now accept names instead of raw UUIDsplane module add <issue> <module>— name-based, consistent withcycle addplane comment delete <id> <issue>— delete a comment by UUID- Removed legacy
plane module assign(replaced byplane module add) plane upgrade— check for updates and upgrade in one command- Update hint shown on
planesplash when a newer version is available - Rebuilt and shipped updated
dist/
0.1.2
- Fixed GitHub installs by shipping the built
dist/output in the repository - Removed the install-time
preparebuild hook that was failing duringnpm install -g github:... - Included the CI workflow fix for
setup-nodecache configuration in a repo withoutpackage-lock.json
0.1.1
- Added
plane comment list <issue>so comments can be discovered and deleted from the CLI - Updated docs and command references to reflect the shipped command surface
- Clarified that
plane-cliworks with self-hosted Plane and Plane Cloud via personal access tokens - Added an npm
preparebuild hook so GitHub installs produce theplanebinary correctly
0.1.0
- First public release of
plane-cli - Interactive and non-interactive login with saved local accounts
- Active account, workspace, and project context management
- Read/write issue workflows: list, get, create, update, delete, close, reopen
- Project, workspace, members, modules, cycles, labels, comments, pages, and states commands
- Support for both self-hosted
issuesand Plane Cloudwork-itemsAPI styles - JSON output, table output, custom help formatting, and env var overrides for automation
v0.1.6
Fix install on Windows: npm git installs create broken directory junctions. Switching to GitHub release tarballs produces real directories with no junctions.