Changelog

Changelog

All

Desktop

CLI

Jul 20, 2026

CLI v0.25.0

v0.25.0

CLI

Features

  • Attribute issues and comments to your fp account when you're signed in.

    When you have an fp token (from fp auth login or FP_TOKEN), issues and comments you create are now authored by your fp account identity instead of your local git email. The identity is fetched once and cached, so author resolution stays a local read afterward. When you're not signed in — or the identity can't be reached and nothing is cached — fp falls back to your git email, then your system username.

  • Add fp project remote stamp to commit a project's remote identity to .fp/remote.toml.

    Linked projects can now run fp project remote stamp (or just fp project link, which stamps automatically) to commit their workspace, project, and server identity to .fp/remote.toml. Sandboxes and CI that clone the repo can then use FP_REMOTE=rest-api REST mode with only FP_TOKEN set, instead of also exporting FP_WORKSPACE, FP_PROJECT_ID, and FP_SERVER_URL by hand.

    fp project remote also now works under FP_REMOTE=rest-api and shows where each identity field came from (env, sync-state, or the dotfile), so sandboxes can inspect which remote project fp resolved.

  • Remove the experimental fp project export and fp project import commands and the @fiberplane/fp-core/lib/markdown-reader subpath. Project JSONL export/import is no longer supported, and previously exported .jsonl snapshots can no longer be imported.

Fixes

  • Store fp auth credentials per server origin so preview and production logins do not overwrite each other.

  • Fix fp project clone so it works in fresh checkouts of repos that already commit .fp/, while still refusing to clone over a directory that already has a local fp project (use fp project link or fp project unlink instead, and your existing project is left untouched). Also stop fp init from auto-seeding onboarding issues in those checkouts.

  • Fix fp issue create --description - so it reads the issue description from stdin as advertised.

  • Add machine-local project aliases for distinguishing checkouts and worktrees.

    fp project update --alias <name> now stores a local-only label in projects.toml. Remote-backed fp init and project linking can initialize the alias without changing the shared console project name.

  • Fix large JSON command output being truncated when fp is piped into slower readers.

    Also fix Desktop's "Install fp in PATH" action on fresh macOS systems where /usr/local/bin does not exist yet.

Jul 20, 2026

CLI v0.25.0

v0.25.0

CLI

Features

  • Attribute issues and comments to your fp account when you're signed in.

    When you have an fp token (from fp auth login or FP_TOKEN), issues and comments you create are now authored by your fp account identity instead of your local git email. The identity is fetched once and cached, so author resolution stays a local read afterward. When you're not signed in — or the identity can't be reached and nothing is cached — fp falls back to your git email, then your system username.

  • Add fp project remote stamp to commit a project's remote identity to .fp/remote.toml.

    Linked projects can now run fp project remote stamp (or just fp project link, which stamps automatically) to commit their workspace, project, and server identity to .fp/remote.toml. Sandboxes and CI that clone the repo can then use FP_REMOTE=rest-api REST mode with only FP_TOKEN set, instead of also exporting FP_WORKSPACE, FP_PROJECT_ID, and FP_SERVER_URL by hand.

    fp project remote also now works under FP_REMOTE=rest-api and shows where each identity field came from (env, sync-state, or the dotfile), so sandboxes can inspect which remote project fp resolved.

  • Remove the experimental fp project export and fp project import commands and the @fiberplane/fp-core/lib/markdown-reader subpath. Project JSONL export/import is no longer supported, and previously exported .jsonl snapshots can no longer be imported.

Fixes

  • Store fp auth credentials per server origin so preview and production logins do not overwrite each other.

  • Fix fp project clone so it works in fresh checkouts of repos that already commit .fp/, while still refusing to clone over a directory that already has a local fp project (use fp project link or fp project unlink instead, and your existing project is left untouched). Also stop fp init from auto-seeding onboarding issues in those checkouts.

  • Fix fp issue create --description - so it reads the issue description from stdin as advertised.

  • Add machine-local project aliases for distinguishing checkouts and worktrees.

    fp project update --alias <name> now stores a local-only label in projects.toml. Remote-backed fp init and project linking can initialize the alias without changing the shared console project name.

  • Fix large JSON command output being truncated when fp is piped into slower readers.

    Also fix Desktop's "Install fp in PATH" action on fresh macOS systems where /usr/local/bin does not exist yet.

Jul 20, 2026

CLI v0.25.0

v0.25.0

CLI

Features

  • Attribute issues and comments to your fp account when you're signed in.

    When you have an fp token (from fp auth login or FP_TOKEN), issues and comments you create are now authored by your fp account identity instead of your local git email. The identity is fetched once and cached, so author resolution stays a local read afterward. When you're not signed in — or the identity can't be reached and nothing is cached — fp falls back to your git email, then your system username.

  • Add fp project remote stamp to commit a project's remote identity to .fp/remote.toml.

    Linked projects can now run fp project remote stamp (or just fp project link, which stamps automatically) to commit their workspace, project, and server identity to .fp/remote.toml. Sandboxes and CI that clone the repo can then use FP_REMOTE=rest-api REST mode with only FP_TOKEN set, instead of also exporting FP_WORKSPACE, FP_PROJECT_ID, and FP_SERVER_URL by hand.

    fp project remote also now works under FP_REMOTE=rest-api and shows where each identity field came from (env, sync-state, or the dotfile), so sandboxes can inspect which remote project fp resolved.

  • Remove the experimental fp project export and fp project import commands and the @fiberplane/fp-core/lib/markdown-reader subpath. Project JSONL export/import is no longer supported, and previously exported .jsonl snapshots can no longer be imported.

Fixes

  • Store fp auth credentials per server origin so preview and production logins do not overwrite each other.

  • Fix fp project clone so it works in fresh checkouts of repos that already commit .fp/, while still refusing to clone over a directory that already has a local fp project (use fp project link or fp project unlink instead, and your existing project is left untouched). Also stop fp init from auto-seeding onboarding issues in those checkouts.

  • Fix fp issue create --description - so it reads the issue description from stdin as advertised.

  • Add machine-local project aliases for distinguishing checkouts and worktrees.

    fp project update --alias <name> now stores a local-only label in projects.toml. Remote-backed fp init and project linking can initialize the alias without changing the shared console project name.

  • Fix large JSON command output being truncated when fp is piped into slower readers.

    Also fix Desktop's "Install fp in PATH" action on fresh macOS systems where /usr/local/bin does not exist yet.

Jul 20, 2026

Desktop v0.19.0

v0.19.0

Desktop

Features

  • You can now rename an existing API key from Account settings in the desktop app and web console.

  • Right-click a sub-issue in an issue's detail view to copy its ID.

    The sub-issues list on a parent issue now has a right-click menu for quickly copying an issue's ID or permalink, matching the right-click menu in the main issue list.

Fixes

  • Fix inline images intermittently stuck on "Loading image…" in brainstorms.

  • Remove labels from issues even after those labels are removed from your extension.

    Assigned labels that are no longer configured now remain visible in the label picker with a "Not configured" marker, so you can deselect them instead of leaving them stuck on the issue.

  • Explain clearly when installing the fp command line tool fails.

    If putting fp on your PATH doesn't work, you now get a plain-language reason for the failure (for example, that macOS denied permission to write to /usr/local/bin) instead of a generic "osascript exited with code 1". On the setup screen you can expand "Technical details" to see and copy the exact output when asking for help.

  • Fix the "Done" keyboard shortcuts when a project uses custom status items.

    The "Toggle Done filter" shortcut and Cmd/Ctrl+D ("Set to Done") now target the workflow's terminal status — the last registered status — instead of assuming Done is the third option. With an extension that adds statuses ahead of Done (for example Backlog → Todo → In Progress → Done), Done can again be un-selected from the issue list and set with Cmd/Ctrl+D, instead of the shortcut acting on the wrong status.

  • Add machine-local project aliases for distinguishing checkouts and worktrees.

    fp project update --alias <name> now stores a local-only label in projects.toml. Remote-backed fp init and project linking can initialize the alias without changing the shared console project name.

  • Fix large JSON command output being truncated when fp is piped into slower readers.

    Also fix Desktop's "Install fp in PATH" action on fresh macOS systems where /usr/local/bin does not exist yet.

  • Give every label a distinct color, order labels by your extension's definition, and flag labels your enforced set rejects.

    Labels that aren't defined in your label extension now get a stable, distinct color instead of all rendering grey, so they're easy to tell apart everywhere they appear (the issue list, kanban cards, the detail panel, and the label filter). The label filter also lists labels in the order your extension defines them rather than alphabetically, with any extra labels appended after.

    If your labels extension enforces a fixed set of values and an issue still carries a value that set no longer allows, a dismissible warning now names those values so you can update the extension or clean up the affected issues. Extensions that allow free-form labels are unaffected.

  • Fix the labels dropdown closing the New Issue dialog.

    Opening the labels (or other extension property) dropdown while creating a new issue no longer dismisses the dialog, and you can now pick labels directly from it. The same dropdowns in the issue detail panel and on board cards keep working as before.

Jul 20, 2026

Desktop v0.19.0

v0.19.0

Desktop

Features

  • You can now rename an existing API key from Account settings in the desktop app and web console.

  • Right-click a sub-issue in an issue's detail view to copy its ID.

    The sub-issues list on a parent issue now has a right-click menu for quickly copying an issue's ID or permalink, matching the right-click menu in the main issue list.

Fixes

  • Fix inline images intermittently stuck on "Loading image…" in brainstorms.

  • Remove labels from issues even after those labels are removed from your extension.

    Assigned labels that are no longer configured now remain visible in the label picker with a "Not configured" marker, so you can deselect them instead of leaving them stuck on the issue.

  • Explain clearly when installing the fp command line tool fails.

    If putting fp on your PATH doesn't work, you now get a plain-language reason for the failure (for example, that macOS denied permission to write to /usr/local/bin) instead of a generic "osascript exited with code 1". On the setup screen you can expand "Technical details" to see and copy the exact output when asking for help.

  • Fix the "Done" keyboard shortcuts when a project uses custom status items.

    The "Toggle Done filter" shortcut and Cmd/Ctrl+D ("Set to Done") now target the workflow's terminal status — the last registered status — instead of assuming Done is the third option. With an extension that adds statuses ahead of Done (for example Backlog → Todo → In Progress → Done), Done can again be un-selected from the issue list and set with Cmd/Ctrl+D, instead of the shortcut acting on the wrong status.

  • Add machine-local project aliases for distinguishing checkouts and worktrees.

    fp project update --alias <name> now stores a local-only label in projects.toml. Remote-backed fp init and project linking can initialize the alias without changing the shared console project name.

  • Fix large JSON command output being truncated when fp is piped into slower readers.

    Also fix Desktop's "Install fp in PATH" action on fresh macOS systems where /usr/local/bin does not exist yet.

  • Give every label a distinct color, order labels by your extension's definition, and flag labels your enforced set rejects.

    Labels that aren't defined in your label extension now get a stable, distinct color instead of all rendering grey, so they're easy to tell apart everywhere they appear (the issue list, kanban cards, the detail panel, and the label filter). The label filter also lists labels in the order your extension defines them rather than alphabetically, with any extra labels appended after.

    If your labels extension enforces a fixed set of values and an issue still carries a value that set no longer allows, a dismissible warning now names those values so you can update the extension or clean up the affected issues. Extensions that allow free-form labels are unaffected.

  • Fix the labels dropdown closing the New Issue dialog.

    Opening the labels (or other extension property) dropdown while creating a new issue no longer dismisses the dialog, and you can now pick labels directly from it. The same dropdowns in the issue detail panel and on board cards keep working as before.

Jul 20, 2026

Desktop v0.19.0

v0.19.0

Desktop

Features

  • You can now rename an existing API key from Account settings in the desktop app and web console.

  • Right-click a sub-issue in an issue's detail view to copy its ID.

    The sub-issues list on a parent issue now has a right-click menu for quickly copying an issue's ID or permalink, matching the right-click menu in the main issue list.

Fixes

  • Fix inline images intermittently stuck on "Loading image…" in brainstorms.

  • Remove labels from issues even after those labels are removed from your extension.

    Assigned labels that are no longer configured now remain visible in the label picker with a "Not configured" marker, so you can deselect them instead of leaving them stuck on the issue.

  • Explain clearly when installing the fp command line tool fails.

    If putting fp on your PATH doesn't work, you now get a plain-language reason for the failure (for example, that macOS denied permission to write to /usr/local/bin) instead of a generic "osascript exited with code 1". On the setup screen you can expand "Technical details" to see and copy the exact output when asking for help.

  • Fix the "Done" keyboard shortcuts when a project uses custom status items.

    The "Toggle Done filter" shortcut and Cmd/Ctrl+D ("Set to Done") now target the workflow's terminal status — the last registered status — instead of assuming Done is the third option. With an extension that adds statuses ahead of Done (for example Backlog → Todo → In Progress → Done), Done can again be un-selected from the issue list and set with Cmd/Ctrl+D, instead of the shortcut acting on the wrong status.

  • Add machine-local project aliases for distinguishing checkouts and worktrees.

    fp project update --alias <name> now stores a local-only label in projects.toml. Remote-backed fp init and project linking can initialize the alias without changing the shared console project name.

  • Fix large JSON command output being truncated when fp is piped into slower readers.

    Also fix Desktop's "Install fp in PATH" action on fresh macOS systems where /usr/local/bin does not exist yet.

  • Give every label a distinct color, order labels by your extension's definition, and flag labels your enforced set rejects.

    Labels that aren't defined in your label extension now get a stable, distinct color instead of all rendering grey, so they're easy to tell apart everywhere they appear (the issue list, kanban cards, the detail panel, and the label filter). The label filter also lists labels in the order your extension defines them rather than alphabetically, with any extra labels appended after.

    If your labels extension enforces a fixed set of values and an issue still carries a value that set no longer allows, a dismissible warning now names those values so you can update the extension or clean up the affected issues. Extensions that allow free-form labels are unaffected.

  • Fix the labels dropdown closing the New Issue dialog.

    Opening the labels (or other extension property) dropdown while creating a new issue no longer dismisses the dialog, and you can now pick labels directly from it. The same dropdowns in the issue detail panel and on board cards keep working as before.

May 29, 2026

CLI v0.24.0

v0.24.0

CLI

Features

  • Add comment editing and soft-delete support.

    Use fp comment update (alias edit) to change a comment, or fp comment delete to hide it without removing its history. Desktop now exposes the same edit and delete actions from issue comment rows.

  • Let extensions register a custom status workflow for issues.

    Extensions can now call registerProperty("status", ...) to declare the status values that fit a team's workflow (backlog, in review, blocked, qa, and so on). Each option supports a label, an icon, and a color. Without an extension installed, the built-in todo / in-progress / done behaviour is unchanged.

    Drop this file in .fp/extensions/workflow.ts:

    import type { ExtensionInit } from "@fiberplane/extensions";
    
    const init: ExtensionInit = async (fp) => {
      await fp.issues.registerProperty("status", {
        label: "Status",
        display: fp.ui.properties.select(
          fp.ui.properties.option("backlog", {
            label: "Backlog",
            icon: "no-status",
          }),
          fp.ui.properties.option("in-progress", {
            label: "In Progress",
            icon: "in-progress",
            color: "blue",
          }),
          fp.ui.properties.option("review", {
            label: "For Review",
            icon: "for-review",
            color: "purple",
          }),
          fp.ui.properties.option("done", {
            label: "Done",
            icon: "done",
            color: "success",
          })
        ),
      });
    };
    
    export default init;
    import type { ExtensionInit } from "@fiberplane/extensions";
    
    const init: ExtensionInit = async (fp) => {
      await fp.issues.registerProperty("status", {
        label: "Status",
        display: fp.ui.properties.select(
          fp.ui.properties.option("backlog", {
            label: "Backlog",
            icon: "no-status",
          }),
          fp.ui.properties.option("in-progress", {
            label: "In Progress",
            icon: "in-progress",
            color: "blue",
          }),
          fp.ui.properties.option("review", {
            label: "For Review",
            icon: "for-review",
            color: "purple",
          }),
          fp.ui.properties.option("done", {
            label: "Done",
            icon: "done",
            color: "success",
          })
        ),
      });
    };
    
    export default init;

    The first option is the default for new issues; the order drives the picker, kanban columns, sort priority, and filter chips. Icon names accept the in-house set (to-do, in-progress, for-review, done, no-status, cancelled) and fall back to any Lucide icon (e.g. flag, clock).

    The desktop app renders the registered statuses everywhere a status appears: the status icon and picker, the launcher's status sections, the kanban board's columns, sort by status, and the status filter chips. Statuses you set before installing an extension keep their values and show with neutral styling until they match a registered option. The kanban shows one column per registered status (plus an "Other" column when an issue holds an unregistered value). Cmd-click on a status filter chip solos that status, and a second Cmd-click restores the previous selection.

    For workflows with more statuses than fit comfortably on the board, add [kanban] hidden = ["triage", "cancelled", ...] to your project's .fp/config.toml (or .fp/config.local.toml, or ~/.fiberplane/config.toml) and those columns drop from the kanban while remaining selectable everywhere else. Cards that already hold a hidden status do not appear on the board; they stay reachable from list and tree view, search, the status picker, and the CLI.

    The fp CLI picks up the same workflow. fp issue create --status review is accepted whenever an extension registers review, and tab completion for --status suggests the registered values. New issues created without --status land at the first registered option (so a workflow that puts backlog first defaults there instead of todo). fp context --current filters by an automatic "current work" set derived from the registered status order (the broad middle, after trimming known pre-work labels like backlog and side-terminal labels like cancelled); set [status] current = ["in-progress", "in-review"] in any of the three config tiers to override the auto-derived set per-project or per-user. fp guide now prefaces its output with a Project context snapshot listing the project's prefix, registered statuses, default, the resolved current set with its source label ([auto] or [from .fp/config.local.toml]), other registered properties, loaded extensions, and any hidden kanban columns, so agents have one canonical place to look up what this project's workflow is. The snapshot doesn't end up in fp guide implement > plan.md, so existing redirect workflows keep producing clean markdown files.

  • Add no-clone REST attachment support for fp attach and --attach on issue and comment commands.

    Sandboxed REST workflows can now upload local image evidence without a .fp project, and issue descriptions or comments receive normal fp-asset:// markdown references.

  • Add video attachments for fp assets.

    You can attach supported MP4 and WebM files with fp attach and --attach, sync them with linked projects, and view them in Desktop with video controls.

Fixes

  • Clarify in fp issue update --help that --depends replaces the dependency set rather than appending, and drop the misleading --add-dependency alias.

  • Refresh fp's agent instruction files with the new comment commands.

    Running fp agent setup claude or fp agent setup standard after upgrading refreshes FP_CLAUDE.md or FP_AGENTS.md so agents know about fp comment update and soft-delete.

  • Fix fp commands from git worktrees when the main checkout was initialized with a registry-backed bare .fp/ marker.

  • Fix fp update --latest getting stuck on older prerelease builds and allow fp update --target to install explicit prerelease versions that are available for download.

  • Fix REST-mode fp comment delete --issue and fp comment update --issue when the issue ID uses the server project prefix.

  • Fix fp project sync, fp sync-all-projects, and status-filtered issue commands so asset failures and custom status filters report accurately.

  • fp guide extension now renders the recommended Lucide icons and color tokens as plain-text lists instead of dumping single-line HTML blobs to the terminal.

  • Fix REST issue commands to use the server project prefix for display IDs and to work without FP_PROJECT_PREFIX in no-clone environments.

  • Add experimental FP_REMOTE=rest-api support for fp issue, comment, and search workflows through the Console REST API.

  • Fix REST API remote mode issue and comment updates so explicit CLI edits are sent reliably, legacy Console issue data is handled more defensively, and attachment uploads show progress.

  • Keep extension secrets available across Git worktrees.

    When a project tracks .fp/config.toml, fp secrets and Desktop extension settings now use the main checkout's secret namespace so the same secret: references work from the main checkout and its worktrees.

  • Fix fp issue list column alignment when custom status names are longer than the built-in statuses.

  • Fix fp project sync --status reporting "Already in sync" when local edits are pending.

May 29, 2026

CLI v0.24.0

v0.24.0

CLI

Features

  • Add comment editing and soft-delete support.

    Use fp comment update (alias edit) to change a comment, or fp comment delete to hide it without removing its history. Desktop now exposes the same edit and delete actions from issue comment rows.

  • Let extensions register a custom status workflow for issues.

    Extensions can now call registerProperty("status", ...) to declare the status values that fit a team's workflow (backlog, in review, blocked, qa, and so on). Each option supports a label, an icon, and a color. Without an extension installed, the built-in todo / in-progress / done behaviour is unchanged.

    Drop this file in .fp/extensions/workflow.ts:

    import type { ExtensionInit } from "@fiberplane/extensions";
    
    const init: ExtensionInit = async (fp) => {
      await fp.issues.registerProperty("status", {
        label: "Status",
        display: fp.ui.properties.select(
          fp.ui.properties.option("backlog", {
            label: "Backlog",
            icon: "no-status",
          }),
          fp.ui.properties.option("in-progress", {
            label: "In Progress",
            icon: "in-progress",
            color: "blue",
          }),
          fp.ui.properties.option("review", {
            label: "For Review",
            icon: "for-review",
            color: "purple",
          }),
          fp.ui.properties.option("done", {
            label: "Done",
            icon: "done",
            color: "success",
          })
        ),
      });
    };
    
    export default init;

    The first option is the default for new issues; the order drives the picker, kanban columns, sort priority, and filter chips. Icon names accept the in-house set (to-do, in-progress, for-review, done, no-status, cancelled) and fall back to any Lucide icon (e.g. flag, clock).

    The desktop app renders the registered statuses everywhere a status appears: the status icon and picker, the launcher's status sections, the kanban board's columns, sort by status, and the status filter chips. Statuses you set before installing an extension keep their values and show with neutral styling until they match a registered option. The kanban shows one column per registered status (plus an "Other" column when an issue holds an unregistered value). Cmd-click on a status filter chip solos that status, and a second Cmd-click restores the previous selection.

    For workflows with more statuses than fit comfortably on the board, add [kanban] hidden = ["triage", "cancelled", ...] to your project's .fp/config.toml (or .fp/config.local.toml, or ~/.fiberplane/config.toml) and those columns drop from the kanban while remaining selectable everywhere else. Cards that already hold a hidden status do not appear on the board; they stay reachable from list and tree view, search, the status picker, and the CLI.

    The fp CLI picks up the same workflow. fp issue create --status review is accepted whenever an extension registers review, and tab completion for --status suggests the registered values. New issues created without --status land at the first registered option (so a workflow that puts backlog first defaults there instead of todo). fp context --current filters by an automatic "current work" set derived from the registered status order (the broad middle, after trimming known pre-work labels like backlog and side-terminal labels like cancelled); set [status] current = ["in-progress", "in-review"] in any of the three config tiers to override the auto-derived set per-project or per-user. fp guide now prefaces its output with a Project context snapshot listing the project's prefix, registered statuses, default, the resolved current set with its source label ([auto] or [from .fp/config.local.toml]), other registered properties, loaded extensions, and any hidden kanban columns, so agents have one canonical place to look up what this project's workflow is. The snapshot doesn't end up in fp guide implement > plan.md, so existing redirect workflows keep producing clean markdown files.

  • Add no-clone REST attachment support for fp attach and --attach on issue and comment commands.

    Sandboxed REST workflows can now upload local image evidence without a .fp project, and issue descriptions or comments receive normal fp-asset:// markdown references.

  • Add video attachments for fp assets.

    You can attach supported MP4 and WebM files with fp attach and --attach, sync them with linked projects, and view them in Desktop with video controls.

Fixes

  • Clarify in fp issue update --help that --depends replaces the dependency set rather than appending, and drop the misleading --add-dependency alias.

  • Refresh fp's agent instruction files with the new comment commands.

    Running fp agent setup claude or fp agent setup standard after upgrading refreshes FP_CLAUDE.md or FP_AGENTS.md so agents know about fp comment update and soft-delete.

  • Fix fp commands from git worktrees when the main checkout was initialized with a registry-backed bare .fp/ marker.

  • Fix fp update --latest getting stuck on older prerelease builds and allow fp update --target to install explicit prerelease versions that are available for download.

  • Fix REST-mode fp comment delete --issue and fp comment update --issue when the issue ID uses the server project prefix.

  • Fix fp project sync, fp sync-all-projects, and status-filtered issue commands so asset failures and custom status filters report accurately.

  • fp guide extension now renders the recommended Lucide icons and color tokens as plain-text lists instead of dumping single-line HTML blobs to the terminal.

  • Fix REST issue commands to use the server project prefix for display IDs and to work without FP_PROJECT_PREFIX in no-clone environments.

  • Add experimental FP_REMOTE=rest-api support for fp issue, comment, and search workflows through the Console REST API.

  • Fix REST API remote mode issue and comment updates so explicit CLI edits are sent reliably, legacy Console issue data is handled more defensively, and attachment uploads show progress.

  • Keep extension secrets available across Git worktrees.

    When a project tracks .fp/config.toml, fp secrets and Desktop extension settings now use the main checkout's secret namespace so the same secret: references work from the main checkout and its worktrees.

  • Fix fp issue list column alignment when custom status names are longer than the built-in statuses.

  • Fix fp project sync --status reporting "Already in sync" when local edits are pending.

May 29, 2026

CLI v0.24.0

v0.24.0

CLI

Features

  • Add comment editing and soft-delete support.

    Use fp comment update (alias edit) to change a comment, or fp comment delete to hide it without removing its history. Desktop now exposes the same edit and delete actions from issue comment rows.

  • Let extensions register a custom status workflow for issues.

    Extensions can now call registerProperty("status", ...) to declare the status values that fit a team's workflow (backlog, in review, blocked, qa, and so on). Each option supports a label, an icon, and a color. Without an extension installed, the built-in todo / in-progress / done behaviour is unchanged.

    Drop this file in .fp/extensions/workflow.ts:

    import type { ExtensionInit } from "@fiberplane/extensions";
    
    const init: ExtensionInit = async (fp) => {
      await fp.issues.registerProperty("status", {
        label: "Status",
        display: fp.ui.properties.select(
          fp.ui.properties.option("backlog", {
            label: "Backlog",
            icon: "no-status",
          }),
          fp.ui.properties.option("in-progress", {
            label: "In Progress",
            icon: "in-progress",
            color: "blue",
          }),
          fp.ui.properties.option("review", {
            label: "For Review",
            icon: "for-review",
            color: "purple",
          }),
          fp.ui.properties.option("done", {
            label: "Done",
            icon: "done",
            color: "success",
          })
        ),
      });
    };
    
    export default init;

    The first option is the default for new issues; the order drives the picker, kanban columns, sort priority, and filter chips. Icon names accept the in-house set (to-do, in-progress, for-review, done, no-status, cancelled) and fall back to any Lucide icon (e.g. flag, clock).

    The desktop app renders the registered statuses everywhere a status appears: the status icon and picker, the launcher's status sections, the kanban board's columns, sort by status, and the status filter chips. Statuses you set before installing an extension keep their values and show with neutral styling until they match a registered option. The kanban shows one column per registered status (plus an "Other" column when an issue holds an unregistered value). Cmd-click on a status filter chip solos that status, and a second Cmd-click restores the previous selection.

    For workflows with more statuses than fit comfortably on the board, add [kanban] hidden = ["triage", "cancelled", ...] to your project's .fp/config.toml (or .fp/config.local.toml, or ~/.fiberplane/config.toml) and those columns drop from the kanban while remaining selectable everywhere else. Cards that already hold a hidden status do not appear on the board; they stay reachable from list and tree view, search, the status picker, and the CLI.

    The fp CLI picks up the same workflow. fp issue create --status review is accepted whenever an extension registers review, and tab completion for --status suggests the registered values. New issues created without --status land at the first registered option (so a workflow that puts backlog first defaults there instead of todo). fp context --current filters by an automatic "current work" set derived from the registered status order (the broad middle, after trimming known pre-work labels like backlog and side-terminal labels like cancelled); set [status] current = ["in-progress", "in-review"] in any of the three config tiers to override the auto-derived set per-project or per-user. fp guide now prefaces its output with a Project context snapshot listing the project's prefix, registered statuses, default, the resolved current set with its source label ([auto] or [from .fp/config.local.toml]), other registered properties, loaded extensions, and any hidden kanban columns, so agents have one canonical place to look up what this project's workflow is. The snapshot doesn't end up in fp guide implement > plan.md, so existing redirect workflows keep producing clean markdown files.

  • Add no-clone REST attachment support for fp attach and --attach on issue and comment commands.

    Sandboxed REST workflows can now upload local image evidence without a .fp project, and issue descriptions or comments receive normal fp-asset:// markdown references.

  • Add video attachments for fp assets.

    You can attach supported MP4 and WebM files with fp attach and --attach, sync them with linked projects, and view them in Desktop with video controls.

Fixes

  • Clarify in fp issue update --help that --depends replaces the dependency set rather than appending, and drop the misleading --add-dependency alias.

  • Refresh fp's agent instruction files with the new comment commands.

    Running fp agent setup claude or fp agent setup standard after upgrading refreshes FP_CLAUDE.md or FP_AGENTS.md so agents know about fp comment update and soft-delete.

  • Fix fp commands from git worktrees when the main checkout was initialized with a registry-backed bare .fp/ marker.

  • Fix fp update --latest getting stuck on older prerelease builds and allow fp update --target to install explicit prerelease versions that are available for download.

  • Fix REST-mode fp comment delete --issue and fp comment update --issue when the issue ID uses the server project prefix.

  • Fix fp project sync, fp sync-all-projects, and status-filtered issue commands so asset failures and custom status filters report accurately.

  • fp guide extension now renders the recommended Lucide icons and color tokens as plain-text lists instead of dumping single-line HTML blobs to the terminal.

  • Fix REST issue commands to use the server project prefix for display IDs and to work without FP_PROJECT_PREFIX in no-clone environments.

  • Add experimental FP_REMOTE=rest-api support for fp issue, comment, and search workflows through the Console REST API.

  • Fix REST API remote mode issue and comment updates so explicit CLI edits are sent reliably, legacy Console issue data is handled more defensively, and attachment uploads show progress.

  • Keep extension secrets available across Git worktrees.

    When a project tracks .fp/config.toml, fp secrets and Desktop extension settings now use the main checkout's secret namespace so the same secret: references work from the main checkout and its worktrees.

  • Fix fp issue list column alignment when custom status names are longer than the built-in statuses.

  • Fix fp project sync --status reporting "Already in sync" when local edits are pending.

May 29, 2026

Desktop v0.18.0

v0.18.0

Desktop

Features

  • Add comment editing and soft-delete support.

    Use fp comment update (alias edit) to change a comment, or fp comment delete to hide it without removing its history. Desktop now exposes the same edit and delete actions from issue comment rows.

  • View and edit issue properties directly on kanban cards.

    Collapsed cards show a compact row of label chips with a "+N" overflow indicator. Click the chevron to expand the full property grid — select, multiselect, and text fields are all editable without opening the detail panel.

  • Let extensions register a custom status workflow for issues.

    Extensions can now call registerProperty("status", ...) to declare the status values that fit a team's workflow (backlog, in review, blocked, qa, and so on). Each option supports a label, an icon, and a color. Without an extension installed, the built-in todo / in-progress / done behaviour is unchanged.

    Drop this file in .fp/extensions/workflow.ts:

    import type { ExtensionInit } from "@fiberplane/extensions";
    
    const init: ExtensionInit = async (fp) => {
      await fp.issues.registerProperty("status", {
        label: "Status",
        display: fp.ui.properties.select(
          fp.ui.properties.option("backlog", {
            label: "Backlog",
            icon: "no-status",
          }),
          fp.ui.properties.option("in-progress", {
            label: "In Progress",
            icon: "in-progress",
            color: "blue",
          }),
          fp.ui.properties.option("review", {
            label: "For Review",
            icon: "for-review",
            color: "purple",
          }),
          fp.ui.properties.option("done", {
            label: "Done",
            icon: "done",
            color: "success",
          })
        ),
      });
    };
    
    export default init;
    import type { ExtensionInit } from "@fiberplane/extensions";
    
    const init: ExtensionInit = async (fp) => {
      await fp.issues.registerProperty("status", {
        label: "Status",
        display: fp.ui.properties.select(
          fp.ui.properties.option("backlog", {
            label: "Backlog",
            icon: "no-status",
          }),
          fp.ui.properties.option("in-progress", {
            label: "In Progress",
            icon: "in-progress",
            color: "blue",
          }),
          fp.ui.properties.option("review", {
            label: "For Review",
            icon: "for-review",
            color: "purple",
          }),
          fp.ui.properties.option("done", {
            label: "Done",
            icon: "done",
            color: "success",
          })
        ),
      });
    };
    
    export default init;

    The first option is the default for new issues; the order drives the picker, kanban columns, sort priority, and filter chips. Icon names accept the in-house set (to-do, in-progress, for-review, done, no-status, cancelled) and fall back to any Lucide icon (e.g. flag, clock).

    The desktop app renders the registered statuses everywhere a status appears: the status icon and picker, the launcher's status sections, the kanban board's columns, sort by status, and the status filter chips. Statuses you set before installing an extension keep their values and show with neutral styling until they match a registered option. The kanban shows one column per registered status (plus an "Other" column when an issue holds an unregistered value). Cmd-click on a status filter chip solos that status, and a second Cmd-click restores the previous selection.

    For workflows with more statuses than fit comfortably on the board, add [kanban] hidden = ["triage", "cancelled", ...] to your project's .fp/config.toml (or .fp/config.local.toml, or ~/.fiberplane/config.toml) and those columns drop from the kanban while remaining selectable everywhere else. Cards that already hold a hidden status do not appear on the board; they stay reachable from list and tree view, search, the status picker, and the CLI.

    The fp CLI picks up the same workflow. fp issue create --status review is accepted whenever an extension registers review, and tab completion for --status suggests the registered values. New issues created without --status land at the first registered option (so a workflow that puts backlog first defaults there instead of todo). fp context --current filters by an automatic "current work" set derived from the registered status order (the broad middle, after trimming known pre-work labels like backlog and side-terminal labels like cancelled); set [status] current = ["in-progress", "in-review"] in any of the three config tiers to override the auto-derived set per-project or per-user. fp guide now prefaces its output with a Project context snapshot listing the project's prefix, registered statuses, default, the resolved current set with its source label ([auto] or [from .fp/config.local.toml]), other registered properties, loaded extensions, and any hidden kanban columns, so agents have one canonical place to look up what this project's workflow is. The snapshot doesn't end up in fp guide implement > plan.md, so existing redirect workflows keep producing clean markdown files.

  • Add video attachments for fp assets.

    You can attach supported MP4 and WebM files with fp attach and --attach, sync them with linked projects, and view them in Desktop with video controls.

Fixes

  • Keep counts in the status filter aligned when toggling selections.

    Selecting a status used to shift the count number slightly to make room for the checkmark, so counts in the same list sat in different positions. They now line up in a single column whether or not the item is selected.

  • Improve custom extension property controls in issue details.

    Dropdown properties now keep their compact shape while showing clearer icons, long text properties can expand from a one-line preview, and URL text properties open as clickable links.

  • Reload extensions immediately when their source files are saved.

    Saving a file under .fp/extensions/ or ~/.fiberplane/extensions/ now reloads the extension subprocess within a fraction of a second, so icon, label, and status changes show up live instead of waiting for an app restart.

  • The Extensions section of Settings now refreshes automatically when you edit, add, or remove an extension file — no more closing and reopening the modal to see your change. Extensions that fail to parse or initialize are also surfaced inline on their card with the error message from the extension host, so a broken extension is no longer silently invisible.

  • Fix comment edits so finished saves do not erase a newer edit draft.

    Clean edit sessions are also cleared from draft storage, so reopening the issue will not restore an unchanged edit as a stale draft.

  • Show local projects after a fresh install without needing to restart Desktop.

    Desktop now starts watching the projects registry as soon as its config directory is created, so newly created projects appear in the sidebar right away.

  • Keep search results up to date when issues change.

    Search result rows now refresh their title, status, and other issue details immediately after edits, without needing to clear and rerun the search.

  • Fix Desktop recovering from brief console outages.

  • Add experimental FP_REMOTE=rest-api support for fp issue, comment, and search workflows through the Console REST API.

  • Restore the guided Create Project button to the empty-project screen.

    When a workspace has no projects, Desktop now offers the in-app project setup flow again while keeping the terminal commands available as a secondary path.

  • Keep extension secrets available across Git worktrees.

    When a project tracks .fp/config.toml, fp secrets and Desktop extension settings now use the main checkout's secret namespace so the same secret: references work from the main checkout and its worktrees.

  • Right-click any project in the sidebar to sync, unlink, or invite teammates to the workspace.

  • Improve video attachments so large clips load reliably in issue descriptions and comments.

    Videos now stream through the desktop app instead of being sent through the renderer as large encoded strings, which keeps the app responsive when viewing bigger attachments.

  • Clean up stray vertical guide lines in the issue tree so they no longer drop through the sub-issues of a branch's last item.

May 29, 2026

Desktop v0.18.0

v0.18.0

Desktop

Features

  • Add comment editing and soft-delete support.

    Use fp comment update (alias edit) to change a comment, or fp comment delete to hide it without removing its history. Desktop now exposes the same edit and delete actions from issue comment rows.

  • View and edit issue properties directly on kanban cards.

    Collapsed cards show a compact row of label chips with a "+N" overflow indicator. Click the chevron to expand the full property grid — select, multiselect, and text fields are all editable without opening the detail panel.

  • Let extensions register a custom status workflow for issues.

    Extensions can now call registerProperty("status", ...) to declare the status values that fit a team's workflow (backlog, in review, blocked, qa, and so on). Each option supports a label, an icon, and a color. Without an extension installed, the built-in todo / in-progress / done behaviour is unchanged.

    Drop this file in .fp/extensions/workflow.ts:

    import type { ExtensionInit } from "@fiberplane/extensions";
    
    const init: ExtensionInit = async (fp) => {
      await fp.issues.registerProperty("status", {
        label: "Status",
        display: fp.ui.properties.select(
          fp.ui.properties.option("backlog", {
            label: "Backlog",
            icon: "no-status",
          }),
          fp.ui.properties.option("in-progress", {
            label: "In Progress",
            icon: "in-progress",
            color: "blue",
          }),
          fp.ui.properties.option("review", {
            label: "For Review",
            icon: "for-review",
            color: "purple",
          }),
          fp.ui.properties.option("done", {
            label: "Done",
            icon: "done",
            color: "success",
          })
        ),
      });
    };
    
    export default init;

    The first option is the default for new issues; the order drives the picker, kanban columns, sort priority, and filter chips. Icon names accept the in-house set (to-do, in-progress, for-review, done, no-status, cancelled) and fall back to any Lucide icon (e.g. flag, clock).

    The desktop app renders the registered statuses everywhere a status appears: the status icon and picker, the launcher's status sections, the kanban board's columns, sort by status, and the status filter chips. Statuses you set before installing an extension keep their values and show with neutral styling until they match a registered option. The kanban shows one column per registered status (plus an "Other" column when an issue holds an unregistered value). Cmd-click on a status filter chip solos that status, and a second Cmd-click restores the previous selection.

    For workflows with more statuses than fit comfortably on the board, add [kanban] hidden = ["triage", "cancelled", ...] to your project's .fp/config.toml (or .fp/config.local.toml, or ~/.fiberplane/config.toml) and those columns drop from the kanban while remaining selectable everywhere else. Cards that already hold a hidden status do not appear on the board; they stay reachable from list and tree view, search, the status picker, and the CLI.

    The fp CLI picks up the same workflow. fp issue create --status review is accepted whenever an extension registers review, and tab completion for --status suggests the registered values. New issues created without --status land at the first registered option (so a workflow that puts backlog first defaults there instead of todo). fp context --current filters by an automatic "current work" set derived from the registered status order (the broad middle, after trimming known pre-work labels like backlog and side-terminal labels like cancelled); set [status] current = ["in-progress", "in-review"] in any of the three config tiers to override the auto-derived set per-project or per-user. fp guide now prefaces its output with a Project context snapshot listing the project's prefix, registered statuses, default, the resolved current set with its source label ([auto] or [from .fp/config.local.toml]), other registered properties, loaded extensions, and any hidden kanban columns, so agents have one canonical place to look up what this project's workflow is. The snapshot doesn't end up in fp guide implement > plan.md, so existing redirect workflows keep producing clean markdown files.

  • Add video attachments for fp assets.

    You can attach supported MP4 and WebM files with fp attach and --attach, sync them with linked projects, and view them in Desktop with video controls.

Fixes

  • Keep counts in the status filter aligned when toggling selections.

    Selecting a status used to shift the count number slightly to make room for the checkmark, so counts in the same list sat in different positions. They now line up in a single column whether or not the item is selected.

  • Improve custom extension property controls in issue details.

    Dropdown properties now keep their compact shape while showing clearer icons, long text properties can expand from a one-line preview, and URL text properties open as clickable links.

  • Reload extensions immediately when their source files are saved.

    Saving a file under .fp/extensions/ or ~/.fiberplane/extensions/ now reloads the extension subprocess within a fraction of a second, so icon, label, and status changes show up live instead of waiting for an app restart.

  • The Extensions section of Settings now refreshes automatically when you edit, add, or remove an extension file — no more closing and reopening the modal to see your change. Extensions that fail to parse or initialize are also surfaced inline on their card with the error message from the extension host, so a broken extension is no longer silently invisible.

  • Fix comment edits so finished saves do not erase a newer edit draft.

    Clean edit sessions are also cleared from draft storage, so reopening the issue will not restore an unchanged edit as a stale draft.

  • Show local projects after a fresh install without needing to restart Desktop.

    Desktop now starts watching the projects registry as soon as its config directory is created, so newly created projects appear in the sidebar right away.

  • Keep search results up to date when issues change.

    Search result rows now refresh their title, status, and other issue details immediately after edits, without needing to clear and rerun the search.

  • Fix Desktop recovering from brief console outages.

  • Add experimental FP_REMOTE=rest-api support for fp issue, comment, and search workflows through the Console REST API.

  • Restore the guided Create Project button to the empty-project screen.

    When a workspace has no projects, Desktop now offers the in-app project setup flow again while keeping the terminal commands available as a secondary path.

  • Keep extension secrets available across Git worktrees.

    When a project tracks .fp/config.toml, fp secrets and Desktop extension settings now use the main checkout's secret namespace so the same secret: references work from the main checkout and its worktrees.

  • Right-click any project in the sidebar to sync, unlink, or invite teammates to the workspace.

  • Improve video attachments so large clips load reliably in issue descriptions and comments.

    Videos now stream through the desktop app instead of being sent through the renderer as large encoded strings, which keeps the app responsive when viewing bigger attachments.

  • Clean up stray vertical guide lines in the issue tree so they no longer drop through the sub-issues of a branch's last item.

May 29, 2026

Desktop v0.18.0

v0.18.0

Desktop

Features

  • Add comment editing and soft-delete support.

    Use fp comment update (alias edit) to change a comment, or fp comment delete to hide it without removing its history. Desktop now exposes the same edit and delete actions from issue comment rows.

  • View and edit issue properties directly on kanban cards.

    Collapsed cards show a compact row of label chips with a "+N" overflow indicator. Click the chevron to expand the full property grid — select, multiselect, and text fields are all editable without opening the detail panel.

  • Let extensions register a custom status workflow for issues.

    Extensions can now call registerProperty("status", ...) to declare the status values that fit a team's workflow (backlog, in review, blocked, qa, and so on). Each option supports a label, an icon, and a color. Without an extension installed, the built-in todo / in-progress / done behaviour is unchanged.

    Drop this file in .fp/extensions/workflow.ts:

    import type { ExtensionInit } from "@fiberplane/extensions";
    
    const init: ExtensionInit = async (fp) => {
      await fp.issues.registerProperty("status", {
        label: "Status",
        display: fp.ui.properties.select(
          fp.ui.properties.option("backlog", {
            label: "Backlog",
            icon: "no-status",
          }),
          fp.ui.properties.option("in-progress", {
            label: "In Progress",
            icon: "in-progress",
            color: "blue",
          }),
          fp.ui.properties.option("review", {
            label: "For Review",
            icon: "for-review",
            color: "purple",
          }),
          fp.ui.properties.option("done", {
            label: "Done",
            icon: "done",
            color: "success",
          })
        ),
      });
    };
    
    export default init;

    The first option is the default for new issues; the order drives the picker, kanban columns, sort priority, and filter chips. Icon names accept the in-house set (to-do, in-progress, for-review, done, no-status, cancelled) and fall back to any Lucide icon (e.g. flag, clock).

    The desktop app renders the registered statuses everywhere a status appears: the status icon and picker, the launcher's status sections, the kanban board's columns, sort by status, and the status filter chips. Statuses you set before installing an extension keep their values and show with neutral styling until they match a registered option. The kanban shows one column per registered status (plus an "Other" column when an issue holds an unregistered value). Cmd-click on a status filter chip solos that status, and a second Cmd-click restores the previous selection.

    For workflows with more statuses than fit comfortably on the board, add [kanban] hidden = ["triage", "cancelled", ...] to your project's .fp/config.toml (or .fp/config.local.toml, or ~/.fiberplane/config.toml) and those columns drop from the kanban while remaining selectable everywhere else. Cards that already hold a hidden status do not appear on the board; they stay reachable from list and tree view, search, the status picker, and the CLI.

    The fp CLI picks up the same workflow. fp issue create --status review is accepted whenever an extension registers review, and tab completion for --status suggests the registered values. New issues created without --status land at the first registered option (so a workflow that puts backlog first defaults there instead of todo). fp context --current filters by an automatic "current work" set derived from the registered status order (the broad middle, after trimming known pre-work labels like backlog and side-terminal labels like cancelled); set [status] current = ["in-progress", "in-review"] in any of the three config tiers to override the auto-derived set per-project or per-user. fp guide now prefaces its output with a Project context snapshot listing the project's prefix, registered statuses, default, the resolved current set with its source label ([auto] or [from .fp/config.local.toml]), other registered properties, loaded extensions, and any hidden kanban columns, so agents have one canonical place to look up what this project's workflow is. The snapshot doesn't end up in fp guide implement > plan.md, so existing redirect workflows keep producing clean markdown files.

  • Add video attachments for fp assets.

    You can attach supported MP4 and WebM files with fp attach and --attach, sync them with linked projects, and view them in Desktop with video controls.

Fixes

  • Keep counts in the status filter aligned when toggling selections.

    Selecting a status used to shift the count number slightly to make room for the checkmark, so counts in the same list sat in different positions. They now line up in a single column whether or not the item is selected.

  • Improve custom extension property controls in issue details.

    Dropdown properties now keep their compact shape while showing clearer icons, long text properties can expand from a one-line preview, and URL text properties open as clickable links.

  • Reload extensions immediately when their source files are saved.

    Saving a file under .fp/extensions/ or ~/.fiberplane/extensions/ now reloads the extension subprocess within a fraction of a second, so icon, label, and status changes show up live instead of waiting for an app restart.

  • The Extensions section of Settings now refreshes automatically when you edit, add, or remove an extension file — no more closing and reopening the modal to see your change. Extensions that fail to parse or initialize are also surfaced inline on their card with the error message from the extension host, so a broken extension is no longer silently invisible.

  • Fix comment edits so finished saves do not erase a newer edit draft.

    Clean edit sessions are also cleared from draft storage, so reopening the issue will not restore an unchanged edit as a stale draft.

  • Show local projects after a fresh install without needing to restart Desktop.

    Desktop now starts watching the projects registry as soon as its config directory is created, so newly created projects appear in the sidebar right away.

  • Keep search results up to date when issues change.

    Search result rows now refresh their title, status, and other issue details immediately after edits, without needing to clear and rerun the search.

  • Fix Desktop recovering from brief console outages.

  • Add experimental FP_REMOTE=rest-api support for fp issue, comment, and search workflows through the Console REST API.

  • Restore the guided Create Project button to the empty-project screen.

    When a workspace has no projects, Desktop now offers the in-app project setup flow again while keeping the terminal commands available as a secondary path.

  • Keep extension secrets available across Git worktrees.

    When a project tracks .fp/config.toml, fp secrets and Desktop extension settings now use the main checkout's secret namespace so the same secret: references work from the main checkout and its worktrees.

  • Right-click any project in the sidebar to sync, unlink, or invite teammates to the workspace.

  • Improve video attachments so large clips load reliably in issue descriptions and comments.

    Videos now stream through the desktop app instead of being sent through the renderer as large encoded strings, which keeps the app responsive when viewing bigger attachments.

  • Clean up stray vertical guide lines in the issue tree so they no longer drop through the sub-issues of a branch's last item.

May 8, 2026

CLI v0.23.0

v0.23.0

CLI

Features

  • Relax the Status type from a closed "todo" | "in-progress" | "done" union to a branded non-empty string, so storage and sync can carry custom workflow statuses (e.g. review, blocked) once extensions can register them. Built-in statuses are still the only ones the CLI and desktop UI accept on creation today; that gate is lifted in a follow-up release alongside registerProperty("status", ...).

    The published @fiberplane/extensions Status type widens from the literal union to string. A CoreStatus alias ("todo" | "in-progress" | "done") is exported for extensions that need exhaustive pattern-matching against the built-ins.

Fixes

  • Fix the Linux ARM64 Alpine installer artifact so the installed fp command launches the Fiberplane CLI instead of the Bun runtime.

  • Fix global extension settings so globally installed extensions use shared global configuration, while project extensions continue to use project configuration. The desktop extension settings now clearly separates global and project extensions with links to the extension docs.

  • Redesign revival — Figma V2 design-system migration plus polish across the issue and brainstorm surfaces:

    • Design tokens. Swap the dark-mode bg-card and bg-surface values so card surfaces lift above the canvas like they do in light mode, introduce a bg-overlay token for modal backdrops, and migrate every popover, dropdown, dialog, modal, tooltip, and floating element from bg-surface onto bg-card so they read as lifted in dark mode. Focus rings now use the soft accent blue (--ring) instead of gray.

    • Detail pane v3. Tidied header action cluster (Pin → Focus on subtree → More → Expand → Close, with diff stats moved next to it), Created date surfaced as a property row at the top of Properties, redundant footer dropped (Updated already lives in the breadcrumb), Activity section header aligned with other section headers.

    • Sidebar v3. Removed the Settings link from the footer (still reachable via the gear icon, command palette, and macOS menu bar), show the issue count next to the active project name, refreshed Pinned and Brainstorms section headers, and the Add task shortcut renders as a single inline hint instead of two key chips.

    • Welcome screen. Tightened headline, three workflow cards (Plan, Implement, Learn) with miniature previews of each surface, and an inline install step on macOS that explains the PATH-symlink prompt before triggering it.

    • Kanban always on. The Kanban board view is always available — no need to enable the experimental_kanban flag. The flag has been removed from ~/.fiberplane/config.toml; existing entries are silently ignored.

May 8, 2026

CLI v0.23.0

v0.23.0

CLI

Features

  • Relax the Status type from a closed "todo" | "in-progress" | "done" union to a branded non-empty string, so storage and sync can carry custom workflow statuses (e.g. review, blocked) once extensions can register them. Built-in statuses are still the only ones the CLI and desktop UI accept on creation today; that gate is lifted in a follow-up release alongside registerProperty("status", ...).

    The published @fiberplane/extensions Status type widens from the literal union to string. A CoreStatus alias ("todo" | "in-progress" | "done") is exported for extensions that need exhaustive pattern-matching against the built-ins.

Fixes

  • Fix the Linux ARM64 Alpine installer artifact so the installed fp command launches the Fiberplane CLI instead of the Bun runtime.

  • Fix global extension settings so globally installed extensions use shared global configuration, while project extensions continue to use project configuration. The desktop extension settings now clearly separates global and project extensions with links to the extension docs.

  • Redesign revival — Figma V2 design-system migration plus polish across the issue and brainstorm surfaces:

    • Design tokens. Swap the dark-mode bg-card and bg-surface values so card surfaces lift above the canvas like they do in light mode, introduce a bg-overlay token for modal backdrops, and migrate every popover, dropdown, dialog, modal, tooltip, and floating element from bg-surface onto bg-card so they read as lifted in dark mode. Focus rings now use the soft accent blue (--ring) instead of gray.

    • Detail pane v3. Tidied header action cluster (Pin → Focus on subtree → More → Expand → Close, with diff stats moved next to it), Created date surfaced as a property row at the top of Properties, redundant footer dropped (Updated already lives in the breadcrumb), Activity section header aligned with other section headers.

    • Sidebar v3. Removed the Settings link from the footer (still reachable via the gear icon, command palette, and macOS menu bar), show the issue count next to the active project name, refreshed Pinned and Brainstorms section headers, and the Add task shortcut renders as a single inline hint instead of two key chips.

    • Welcome screen. Tightened headline, three workflow cards (Plan, Implement, Learn) with miniature previews of each surface, and an inline install step on macOS that explains the PATH-symlink prompt before triggering it.

    • Kanban always on. The Kanban board view is always available — no need to enable the experimental_kanban flag. The flag has been removed from ~/.fiberplane/config.toml; existing entries are silently ignored.

May 8, 2026

CLI v0.23.0

v0.23.0

CLI

Features

  • Relax the Status type from a closed "todo" | "in-progress" | "done" union to a branded non-empty string, so storage and sync can carry custom workflow statuses (e.g. review, blocked) once extensions can register them. Built-in statuses are still the only ones the CLI and desktop UI accept on creation today; that gate is lifted in a follow-up release alongside registerProperty("status", ...).

    The published @fiberplane/extensions Status type widens from the literal union to string. A CoreStatus alias ("todo" | "in-progress" | "done") is exported for extensions that need exhaustive pattern-matching against the built-ins.

Fixes

  • Fix the Linux ARM64 Alpine installer artifact so the installed fp command launches the Fiberplane CLI instead of the Bun runtime.

  • Fix global extension settings so globally installed extensions use shared global configuration, while project extensions continue to use project configuration. The desktop extension settings now clearly separates global and project extensions with links to the extension docs.

  • Redesign revival — Figma V2 design-system migration plus polish across the issue and brainstorm surfaces:

    • Design tokens. Swap the dark-mode bg-card and bg-surface values so card surfaces lift above the canvas like they do in light mode, introduce a bg-overlay token for modal backdrops, and migrate every popover, dropdown, dialog, modal, tooltip, and floating element from bg-surface onto bg-card so they read as lifted in dark mode. Focus rings now use the soft accent blue (--ring) instead of gray.

    • Detail pane v3. Tidied header action cluster (Pin → Focus on subtree → More → Expand → Close, with diff stats moved next to it), Created date surfaced as a property row at the top of Properties, redundant footer dropped (Updated already lives in the breadcrumb), Activity section header aligned with other section headers.

    • Sidebar v3. Removed the Settings link from the footer (still reachable via the gear icon, command palette, and macOS menu bar), show the issue count next to the active project name, refreshed Pinned and Brainstorms section headers, and the Add task shortcut renders as a single inline hint instead of two key chips.

    • Welcome screen. Tightened headline, three workflow cards (Plan, Implement, Learn) with miniature previews of each surface, and an inline install step on macOS that explains the PATH-symlink prompt before triggering it.

    • Kanban always on. The Kanban board view is always available — no need to enable the experimental_kanban flag. The flag has been removed from ~/.fiberplane/config.toml; existing entries are silently ignored.

May 8, 2026

Desktop v0.17.0

v0.17.0

Desktop

Features

  • Render fenced code blocks in issue descriptions and comments with Shiki syntax highlighting. Code blocks have a distinct background and border, no visible backticks, and a subtle saturation fade-in animation when colors first arrive (skipped on cache hits).

    Pasting markdown with fenced code blocks (including 4+ backtick fences, indented fences, and CRLF line endings from Windows clipboards) now produces real code blocks in the editor instead of literal backtick text.

    Editor and view modes render code blocks identically — same font (Geist Mono Variable), same padding, same border-radius, no word-wrap difference between modes.

    First-issue-open is ~25–35× faster on cold start (~174 ms → ~5–7 ms of renderer-thread blocking) thanks to background Shiki warmup during app boot.

    Internal: Lexical bumped 0.42 → 0.44, syntax-highlight CSS variables lifted to global scope, token cache uses useSyncExternalStore with bounded FIFO eviction.

  • Add a preference for choosing the issue detail title font.

  • Add a "What's new" card to the sidebar that surfaces changelog bullets after auto-updates. Click to open the full release notes in a modal; click × to dismiss without opening. The card is enabled by default — toggle it off in Settings → Updates if you'd rather not see it. Preview-channel builds also list pending changes that will ship in the next stable release.

Fixes

  • Fix custom property select and multiselect controls in the desktop issue detail view so empty values can be selected reliably and long multiselect values stay within the field.

  • Fix the detail pane showing a "Select an issue" empty state after the selected issue is removed (e.g. switching projects with the detail pane open, deleting the open issue from the CLI or another window). The pane now collapses cleanly when there is no selection, and the user's preferred layout (split or maximized) is restored when a new issue is opened.

  • Fix global extension settings so globally installed extensions use shared global configuration, while project extensions continue to use project configuration. The desktop extension settings now clearly separates global and project extensions with links to the extension docs.

  • Redesign revival — Figma V2 design-system migration plus polish across the issue and brainstorm surfaces:

    • Design tokens. Swap the dark-mode bg-card and bg-surface values so card surfaces lift above the canvas like they do in light mode, introduce a bg-overlay token for modal backdrops, and migrate every popover, dropdown, dialog, modal, tooltip, and floating element from bg-surface onto bg-card so they read as lifted in dark mode. Focus rings now use the soft accent blue (--ring) instead of gray.

    • Detail pane v3. Tidied header action cluster (Pin → Focus on subtree → More → Expand → Close, with diff stats moved next to it), Created date surfaced as a property row at the top of Properties, redundant footer dropped (Updated already lives in the breadcrumb), Activity section header aligned with other section headers.

    • Sidebar v3. Removed the Settings link from the footer (still reachable via the gear icon, command palette, and macOS menu bar), show the issue count next to the active project name, refreshed Pinned and Brainstorms section headers, and the Add task shortcut renders as a single inline hint instead of two key chips.

    • Welcome screen. Tightened headline, three workflow cards (Plan, Implement, Learn) with miniature previews of each surface, and an inline install step on macOS that explains the PATH-symlink prompt before triggering it.

    • Kanban always on. The Kanban board view is always available — no need to enable the experimental_kanban flag. The flag has been removed from ~/.fiberplane/config.toml; existing entries are silently ignored.

  • Rename the macOS app menu's "Preferences..." item to "Settings..." for consistency with the rest of the desktop UI.

  • Add per-status issue counts to the Status filter dropdown.

  • Fix macOS traffic-light buttons sitting too high above the sidebar toggle and breadcrumb row. The cluster now centers on the same line as the toggle icon and the project breadcrumb, restoring the alignment from the redesign.

  • In tree view, Last updated and Last created now float parents by their most recent descendant, so recently-touched sub-issues no longer hide under quiet parents.

  • Relax the Status type from a closed "todo" | "in-progress" | "done" union to a branded non-empty string, so storage and sync can carry custom workflow statuses (e.g. review, blocked) once extensions can register them. Built-in statuses are still the only ones the CLI and desktop UI accept on creation today; that gate is lifted in a follow-up release alongside registerProperty("status", ...).

    The published @fiberplane/extensions Status type widens from the literal union to string. A CoreStatus alias ("todo" | "in-progress" | "done") is exported for extensions that need exhaustive pattern-matching against the built-ins.

May 8, 2026

Desktop v0.17.0

v0.17.0

Desktop

Features

  • Render fenced code blocks in issue descriptions and comments with Shiki syntax highlighting. Code blocks have a distinct background and border, no visible backticks, and a subtle saturation fade-in animation when colors first arrive (skipped on cache hits).

    Pasting markdown with fenced code blocks (including 4+ backtick fences, indented fences, and CRLF line endings from Windows clipboards) now produces real code blocks in the editor instead of literal backtick text.

    Editor and view modes render code blocks identically — same font (Geist Mono Variable), same padding, same border-radius, no word-wrap difference between modes.

    First-issue-open is ~25–35× faster on cold start (~174 ms → ~5–7 ms of renderer-thread blocking) thanks to background Shiki warmup during app boot.

    Internal: Lexical bumped 0.42 → 0.44, syntax-highlight CSS variables lifted to global scope, token cache uses useSyncExternalStore with bounded FIFO eviction.

  • Add a preference for choosing the issue detail title font.

  • Add a "What's new" card to the sidebar that surfaces changelog bullets after auto-updates. Click to open the full release notes in a modal; click × to dismiss without opening. The card is enabled by default — toggle it off in Settings → Updates if you'd rather not see it. Preview-channel builds also list pending changes that will ship in the next stable release.

Fixes

  • Fix custom property select and multiselect controls in the desktop issue detail view so empty values can be selected reliably and long multiselect values stay within the field.

  • Fix the detail pane showing a "Select an issue" empty state after the selected issue is removed (e.g. switching projects with the detail pane open, deleting the open issue from the CLI or another window). The pane now collapses cleanly when there is no selection, and the user's preferred layout (split or maximized) is restored when a new issue is opened.

  • Fix global extension settings so globally installed extensions use shared global configuration, while project extensions continue to use project configuration. The desktop extension settings now clearly separates global and project extensions with links to the extension docs.

  • Redesign revival — Figma V2 design-system migration plus polish across the issue and brainstorm surfaces:

    • Design tokens. Swap the dark-mode bg-card and bg-surface values so card surfaces lift above the canvas like they do in light mode, introduce a bg-overlay token for modal backdrops, and migrate every popover, dropdown, dialog, modal, tooltip, and floating element from bg-surface onto bg-card so they read as lifted in dark mode. Focus rings now use the soft accent blue (--ring) instead of gray.

    • Detail pane v3. Tidied header action cluster (Pin → Focus on subtree → More → Expand → Close, with diff stats moved next to it), Created date surfaced as a property row at the top of Properties, redundant footer dropped (Updated already lives in the breadcrumb), Activity section header aligned with other section headers.

    • Sidebar v3. Removed the Settings link from the footer (still reachable via the gear icon, command palette, and macOS menu bar), show the issue count next to the active project name, refreshed Pinned and Brainstorms section headers, and the Add task shortcut renders as a single inline hint instead of two key chips.

    • Welcome screen. Tightened headline, three workflow cards (Plan, Implement, Learn) with miniature previews of each surface, and an inline install step on macOS that explains the PATH-symlink prompt before triggering it.

    • Kanban always on. The Kanban board view is always available — no need to enable the experimental_kanban flag. The flag has been removed from ~/.fiberplane/config.toml; existing entries are silently ignored.

  • Rename the macOS app menu's "Preferences..." item to "Settings..." for consistency with the rest of the desktop UI.

  • Add per-status issue counts to the Status filter dropdown.

  • Fix macOS traffic-light buttons sitting too high above the sidebar toggle and breadcrumb row. The cluster now centers on the same line as the toggle icon and the project breadcrumb, restoring the alignment from the redesign.

  • In tree view, Last updated and Last created now float parents by their most recent descendant, so recently-touched sub-issues no longer hide under quiet parents.

  • Relax the Status type from a closed "todo" | "in-progress" | "done" union to a branded non-empty string, so storage and sync can carry custom workflow statuses (e.g. review, blocked) once extensions can register them. Built-in statuses are still the only ones the CLI and desktop UI accept on creation today; that gate is lifted in a follow-up release alongside registerProperty("status", ...).

    The published @fiberplane/extensions Status type widens from the literal union to string. A CoreStatus alias ("todo" | "in-progress" | "done") is exported for extensions that need exhaustive pattern-matching against the built-ins.

May 8, 2026

Desktop v0.17.0

v0.17.0

Desktop

Features

  • Render fenced code blocks in issue descriptions and comments with Shiki syntax highlighting. Code blocks have a distinct background and border, no visible backticks, and a subtle saturation fade-in animation when colors first arrive (skipped on cache hits).

    Pasting markdown with fenced code blocks (including 4+ backtick fences, indented fences, and CRLF line endings from Windows clipboards) now produces real code blocks in the editor instead of literal backtick text.

    Editor and view modes render code blocks identically — same font (Geist Mono Variable), same padding, same border-radius, no word-wrap difference between modes.

    First-issue-open is ~25–35× faster on cold start (~174 ms → ~5–7 ms of renderer-thread blocking) thanks to background Shiki warmup during app boot.

    Internal: Lexical bumped 0.42 → 0.44, syntax-highlight CSS variables lifted to global scope, token cache uses useSyncExternalStore with bounded FIFO eviction.

  • Add a preference for choosing the issue detail title font.

  • Add a "What's new" card to the sidebar that surfaces changelog bullets after auto-updates. Click to open the full release notes in a modal; click × to dismiss without opening. The card is enabled by default — toggle it off in Settings → Updates if you'd rather not see it. Preview-channel builds also list pending changes that will ship in the next stable release.

Fixes

  • Fix custom property select and multiselect controls in the desktop issue detail view so empty values can be selected reliably and long multiselect values stay within the field.

  • Fix the detail pane showing a "Select an issue" empty state after the selected issue is removed (e.g. switching projects with the detail pane open, deleting the open issue from the CLI or another window). The pane now collapses cleanly when there is no selection, and the user's preferred layout (split or maximized) is restored when a new issue is opened.

  • Fix global extension settings so globally installed extensions use shared global configuration, while project extensions continue to use project configuration. The desktop extension settings now clearly separates global and project extensions with links to the extension docs.

  • Redesign revival — Figma V2 design-system migration plus polish across the issue and brainstorm surfaces:

    • Design tokens. Swap the dark-mode bg-card and bg-surface values so card surfaces lift above the canvas like they do in light mode, introduce a bg-overlay token for modal backdrops, and migrate every popover, dropdown, dialog, modal, tooltip, and floating element from bg-surface onto bg-card so they read as lifted in dark mode. Focus rings now use the soft accent blue (--ring) instead of gray.

    • Detail pane v3. Tidied header action cluster (Pin → Focus on subtree → More → Expand → Close, with diff stats moved next to it), Created date surfaced as a property row at the top of Properties, redundant footer dropped (Updated already lives in the breadcrumb), Activity section header aligned with other section headers.

    • Sidebar v3. Removed the Settings link from the footer (still reachable via the gear icon, command palette, and macOS menu bar), show the issue count next to the active project name, refreshed Pinned and Brainstorms section headers, and the Add task shortcut renders as a single inline hint instead of two key chips.

    • Welcome screen. Tightened headline, three workflow cards (Plan, Implement, Learn) with miniature previews of each surface, and an inline install step on macOS that explains the PATH-symlink prompt before triggering it.

    • Kanban always on. The Kanban board view is always available — no need to enable the experimental_kanban flag. The flag has been removed from ~/.fiberplane/config.toml; existing entries are silently ignored.

  • Rename the macOS app menu's "Preferences..." item to "Settings..." for consistency with the rest of the desktop UI.

  • Add per-status issue counts to the Status filter dropdown.

  • Fix macOS traffic-light buttons sitting too high above the sidebar toggle and breadcrumb row. The cluster now centers on the same line as the toggle icon and the project breadcrumb, restoring the alignment from the redesign.

  • In tree view, Last updated and Last created now float parents by their most recent descendant, so recently-touched sub-issues no longer hide under quiet parents.

  • Relax the Status type from a closed "todo" | "in-progress" | "done" union to a branded non-empty string, so storage and sync can carry custom workflow statuses (e.g. review, blocked) once extensions can register them. Built-in statuses are still the only ones the CLI and desktop UI accept on creation today; that gate is lifted in a follow-up release alongside registerProperty("status", ...).

    The published @fiberplane/extensions Status type widens from the literal union to string. A CoreStatus alias ("todo" | "in-progress" | "done") is exported for extensions that need exhaustive pattern-matching against the built-ins.

Apr 30, 2026

CLI v0.22.0

v0.22.0

CLI

Features

  • Add fp guide for bundled workflow primers, seed first-project onboarding tasks from fp init, and manage agent instruction files through fp init --agent <claude|standard|codex|skip> and fp agent setup <claude|standard|codex>. The old fp setup flow is replaced by the narrower agent-instruction setup commands.

    Agent setup flow no longer installs skills or plugins.

Fixes

  • Surface registry-prefix errors that were previously silent. A corrupted .fp/config.toml now logs a warning instead of silently falling back to the default prefix, and fp init / fp project sync link surface a warning when a prefix refresh fails to find the matching registry entry.

  • Fix fp failing to resolve projects from inside a git worktree or jj workspace when unrelated orphaned registry entries exist, and fix jj workspace resolution against newer jj versions (>=0.40) that write relative paths in .jj/repo.

Apr 30, 2026

CLI v0.22.0

v0.22.0

CLI

Features

  • Add fp guide for bundled workflow primers, seed first-project onboarding tasks from fp init, and manage agent instruction files through fp init --agent <claude|standard|codex|skip> and fp agent setup <claude|standard|codex>. The old fp setup flow is replaced by the narrower agent-instruction setup commands.

    Agent setup flow no longer installs skills or plugins.

Fixes

  • Surface registry-prefix errors that were previously silent. A corrupted .fp/config.toml now logs a warning instead of silently falling back to the default prefix, and fp init / fp project sync link surface a warning when a prefix refresh fails to find the matching registry entry.

  • Fix fp failing to resolve projects from inside a git worktree or jj workspace when unrelated orphaned registry entries exist, and fix jj workspace resolution against newer jj versions (>=0.40) that write relative paths in .jj/repo.

Apr 30, 2026

CLI v0.22.0

v0.22.0

CLI

Features

  • Add fp guide for bundled workflow primers, seed first-project onboarding tasks from fp init, and manage agent instruction files through fp init --agent <claude|standard|codex|skip> and fp agent setup <claude|standard|codex>. The old fp setup flow is replaced by the narrower agent-instruction setup commands.

    Agent setup flow no longer installs skills or plugins.

Fixes

  • Surface registry-prefix errors that were previously silent. A corrupted .fp/config.toml now logs a warning instead of silently falling back to the default prefix, and fp init / fp project sync link surface a warning when a prefix refresh fails to find the matching registry entry.

  • Fix fp failing to resolve projects from inside a git worktree or jj workspace when unrelated orphaned registry entries exist, and fix jj workspace resolution against newer jj versions (>=0.40) that write relative paths in .jj/repo.

Apr 30, 2026

Desktop v0.16.1

v0.16.1

Desktop

Fixes

  • Add action to copy private issue permalink from the desktop app for synced projects.

  • Restore the right-click context menu on pinned issues in the sidebar (copy issue ID, copy permalink, unpin, create child, delete).

  • Surface registry-prefix errors that were previously silent. A corrupted .fp/config.toml now logs a warning instead of silently falling back to the default prefix, and fp init / fp project sync link surface a warning when a prefix refresh fails to find the matching registry entry.

Apr 30, 2026

Desktop v0.16.1

v0.16.1

Desktop

Fixes

  • Add action to copy private issue permalink from the desktop app for synced projects.

  • Restore the right-click context menu on pinned issues in the sidebar (copy issue ID, copy permalink, unpin, create child, delete).

  • Surface registry-prefix errors that were previously silent. A corrupted .fp/config.toml now logs a warning instead of silently falling back to the default prefix, and fp init / fp project sync link surface a warning when a prefix refresh fails to find the matching registry entry.

Apr 30, 2026

Desktop v0.16.1

v0.16.1

Desktop

Fixes

  • Add action to copy private issue permalink from the desktop app for synced projects.

  • Restore the right-click context menu on pinned issues in the sidebar (copy issue ID, copy permalink, unpin, create child, delete).

  • Surface registry-prefix errors that were previously silent. A corrupted .fp/config.toml now logs a warning instead of silently falling back to the default prefix, and fp init / fp project sync link surface a warning when a prefix refresh fails to find the matching registry entry.

Apr 23, 2026

CLI v0.21.1

v0.21.1

CLI

Fixes

  • Fix fp update --latest refusing to upgrade from a prerelease binary to a same-base release. Previously build.ts baked the bumped packageJson.version into the binary for every mode, so a prerelease 0.21.0-next.<sha> binary reported itself as 0.21.0 internally and matched the later release manifest string-for-string, causing fp update --latest to short-circuit with "Already at 0.21.0." Build now computes the same publish-mode-aware version string publish.ts uses (via a shared scripts/version.ts), so the binary, the R2 upload path, and the manifest entry stay in lockstep and the semver-aware compareVersions in the update command sees the release as newer.

  • Fix runtime fpVersion reading the bundled packageJson.version instead of the build-time VERSION define, which reintroduced the prerelease-vs-release collision: a freshly-installed 0.21.1-next.<sha> binary reported itself as 0.21.1 from the JSON bundle, and fp update --latest then claimed "Current version 0.21.1 is newer than 0.21.1-next.". Introduce src/lib/version.ts as the single source of truth — prefers the VERSION define, falls back to packageJson.version for dev/test — and route every fp --version, update-check, telemetry, and boot-task callsite through it.

  • fp update now detects when it's running from inside the desktop app bundle and prints a short note pointing to the desktop app's updater instead of trying to overwrite the bundled binary. Previously a bundled fp update would either fail with a permission error (when the app sat in /Applications) or silently replace the code-signed binary and get clobbered on the next desktop auto-update.

  • Suppress the "an update is available" nudge when the user runs fp update or fp update --check. Previously a successful fp update would print "Updated to 0.21.0" and then immediately nudge that 0.21.0 was available, because the running process still reported the old version.

  • Fix local fp commands to read issue ID prefixes from the project registry instead of .fp/config.toml. Registry prefixes now win over stale checked-in config files; use fp project update --prefix <X> to correct the registry. This also fixes fp issue list --parent ... in registry-only projects.

Apr 23, 2026

CLI v0.21.1

v0.21.1

CLI

Fixes

  • Fix fp update --latest refusing to upgrade from a prerelease binary to a same-base release. Previously build.ts baked the bumped packageJson.version into the binary for every mode, so a prerelease 0.21.0-next.<sha> binary reported itself as 0.21.0 internally and matched the later release manifest string-for-string, causing fp update --latest to short-circuit with "Already at 0.21.0." Build now computes the same publish-mode-aware version string publish.ts uses (via a shared scripts/version.ts), so the binary, the R2 upload path, and the manifest entry stay in lockstep and the semver-aware compareVersions in the update command sees the release as newer.

  • Fix runtime fpVersion reading the bundled packageJson.version instead of the build-time VERSION define, which reintroduced the prerelease-vs-release collision: a freshly-installed 0.21.1-next.<sha> binary reported itself as 0.21.1 from the JSON bundle, and fp update --latest then claimed "Current version 0.21.1 is newer than 0.21.1-next.". Introduce src/lib/version.ts as the single source of truth — prefers the VERSION define, falls back to packageJson.version for dev/test — and route every fp --version, update-check, telemetry, and boot-task callsite through it.

  • fp update now detects when it's running from inside the desktop app bundle and prints a short note pointing to the desktop app's updater instead of trying to overwrite the bundled binary. Previously a bundled fp update would either fail with a permission error (when the app sat in /Applications) or silently replace the code-signed binary and get clobbered on the next desktop auto-update.

  • Suppress the "an update is available" nudge when the user runs fp update or fp update --check. Previously a successful fp update would print "Updated to 0.21.0" and then immediately nudge that 0.21.0 was available, because the running process still reported the old version.

  • Fix local fp commands to read issue ID prefixes from the project registry instead of .fp/config.toml. Registry prefixes now win over stale checked-in config files; use fp project update --prefix <X> to correct the registry. This also fixes fp issue list --parent ... in registry-only projects.

Apr 23, 2026

CLI v0.21.1

v0.21.1

CLI

Fixes

  • Fix fp update --latest refusing to upgrade from a prerelease binary to a same-base release. Previously build.ts baked the bumped packageJson.version into the binary for every mode, so a prerelease 0.21.0-next.<sha> binary reported itself as 0.21.0 internally and matched the later release manifest string-for-string, causing fp update --latest to short-circuit with "Already at 0.21.0." Build now computes the same publish-mode-aware version string publish.ts uses (via a shared scripts/version.ts), so the binary, the R2 upload path, and the manifest entry stay in lockstep and the semver-aware compareVersions in the update command sees the release as newer.

  • Fix runtime fpVersion reading the bundled packageJson.version instead of the build-time VERSION define, which reintroduced the prerelease-vs-release collision: a freshly-installed 0.21.1-next.<sha> binary reported itself as 0.21.1 from the JSON bundle, and fp update --latest then claimed "Current version 0.21.1 is newer than 0.21.1-next.". Introduce src/lib/version.ts as the single source of truth — prefers the VERSION define, falls back to packageJson.version for dev/test — and route every fp --version, update-check, telemetry, and boot-task callsite through it.

  • fp update now detects when it's running from inside the desktop app bundle and prints a short note pointing to the desktop app's updater instead of trying to overwrite the bundled binary. Previously a bundled fp update would either fail with a permission error (when the app sat in /Applications) or silently replace the code-signed binary and get clobbered on the next desktop auto-update.

  • Suppress the "an update is available" nudge when the user runs fp update or fp update --check. Previously a successful fp update would print "Updated to 0.21.0" and then immediately nudge that 0.21.0 was available, because the running process still reported the old version.

  • Fix local fp commands to read issue ID prefixes from the project registry instead of .fp/config.toml. Registry prefixes now win over stale checked-in config files; use fp project update --prefix <X> to correct the registry. This also fixes fp issue list --parent ... in registry-only projects.

Apr 23, 2026

Desktop v0.16.0

v0.16.0

Desktop

Features

  • Bundle the fp CLI inside fp-desktop. On every launch, the app ensures ~/.fiberplane/bin/fp symlinks to the bundled binary at Contents/Resources/bin/fp, replacing any stale standalone install. The auto-install is idempotent: repeated launches with an already-current symlink are a no-op; app updates that change the bundled realpath silently re-link. A new "Install CLI…" action in the tray menu (label updates to "Reinstall CLI…" or "Update CLI…" depending on state) lets users re-run the install manually. Successful installs surface a toast with a one-click "Copy PATH export" for export PATH="$HOME/.fiberplane/bin:$PATH". Requires the companion @fiberplane/fp update-nudge release — bundled binaries detect their install location via process.execPath and suppress the nudge automatically so they stay in lockstep with the desktop app's auto-updater.

  • Add one-click install to put the fp command-line tool on your PATH. Offered as a step in the welcome flow, and available later from Settings → CLI, the command palette, and the app menu. Removes the "Add to PATH" notification that appeared on every launch.

Fixes

  • Fix image rendering in comments and polish the description editor when descriptions contain images:

    • Issue-comment attachment images now refresh from the loading placeholder after async asset resolution completes (matching the description fix shipped in #745).

    • Descriptions that end with an image get a caret-reachable trailing paragraph on markdown import.

    • The description editor no longer flashes "Loading image…" when entering edit mode on a cached image — view and edit modes share the same asset-resolver cache.

    • Freshly-dropped images in the editor fall back to a local resolve path so they reliably transition out of the loading placeholder.

    • Image sizing, wrapper padding, header-row height, and vertical spacing are now identical between view and edit modes — no more layout jumps when toggling.

    • Autofocusing the description editor (and programmatic focus to the detail pane) uses preventScroll and Lexical's SKIP_SCROLL_INTO_VIEW_TAG, so the page no longer jumps when you click a description that's partially off-screen.

  • Fix issue description attachment images so they refresh from the loading placeholder after asset resolution completes.

Apr 23, 2026

Desktop v0.16.0

v0.16.0

Desktop

Features

  • Bundle the fp CLI inside fp-desktop. On every launch, the app ensures ~/.fiberplane/bin/fp symlinks to the bundled binary at Contents/Resources/bin/fp, replacing any stale standalone install. The auto-install is idempotent: repeated launches with an already-current symlink are a no-op; app updates that change the bundled realpath silently re-link. A new "Install CLI…" action in the tray menu (label updates to "Reinstall CLI…" or "Update CLI…" depending on state) lets users re-run the install manually. Successful installs surface a toast with a one-click "Copy PATH export" for export PATH="$HOME/.fiberplane/bin:$PATH". Requires the companion @fiberplane/fp update-nudge release — bundled binaries detect their install location via process.execPath and suppress the nudge automatically so they stay in lockstep with the desktop app's auto-updater.

  • Add one-click install to put the fp command-line tool on your PATH. Offered as a step in the welcome flow, and available later from Settings → CLI, the command palette, and the app menu. Removes the "Add to PATH" notification that appeared on every launch.

Fixes

  • Fix image rendering in comments and polish the description editor when descriptions contain images:

    • Issue-comment attachment images now refresh from the loading placeholder after async asset resolution completes (matching the description fix shipped in #745).

    • Descriptions that end with an image get a caret-reachable trailing paragraph on markdown import.

    • The description editor no longer flashes "Loading image…" when entering edit mode on a cached image — view and edit modes share the same asset-resolver cache.

    • Freshly-dropped images in the editor fall back to a local resolve path so they reliably transition out of the loading placeholder.

    • Image sizing, wrapper padding, header-row height, and vertical spacing are now identical between view and edit modes — no more layout jumps when toggling.

    • Autofocusing the description editor (and programmatic focus to the detail pane) uses preventScroll and Lexical's SKIP_SCROLL_INTO_VIEW_TAG, so the page no longer jumps when you click a description that's partially off-screen.

  • Fix issue description attachment images so they refresh from the loading placeholder after asset resolution completes.

Apr 23, 2026

Desktop v0.16.0

v0.16.0

Desktop

Features

  • Bundle the fp CLI inside fp-desktop. On every launch, the app ensures ~/.fiberplane/bin/fp symlinks to the bundled binary at Contents/Resources/bin/fp, replacing any stale standalone install. The auto-install is idempotent: repeated launches with an already-current symlink are a no-op; app updates that change the bundled realpath silently re-link. A new "Install CLI…" action in the tray menu (label updates to "Reinstall CLI…" or "Update CLI…" depending on state) lets users re-run the install manually. Successful installs surface a toast with a one-click "Copy PATH export" for export PATH="$HOME/.fiberplane/bin:$PATH". Requires the companion @fiberplane/fp update-nudge release — bundled binaries detect their install location via process.execPath and suppress the nudge automatically so they stay in lockstep with the desktop app's auto-updater.

  • Add one-click install to put the fp command-line tool on your PATH. Offered as a step in the welcome flow, and available later from Settings → CLI, the command palette, and the app menu. Removes the "Add to PATH" notification that appeared on every launch.

Fixes

  • Fix image rendering in comments and polish the description editor when descriptions contain images:

    • Issue-comment attachment images now refresh from the loading placeholder after async asset resolution completes (matching the description fix shipped in #745).

    • Descriptions that end with an image get a caret-reachable trailing paragraph on markdown import.

    • The description editor no longer flashes "Loading image…" when entering edit mode on a cached image — view and edit modes share the same asset-resolver cache.

    • Freshly-dropped images in the editor fall back to a local resolve path so they reliably transition out of the loading placeholder.

    • Image sizing, wrapper padding, header-row height, and vertical spacing are now identical between view and edit modes — no more layout jumps when toggling.

    • Autofocusing the description editor (and programmatic focus to the detail pane) uses preventScroll and Lexical's SKIP_SCROLL_INTO_VIEW_TAG, so the page no longer jumps when you click a description that's partially off-screen.

  • Fix issue description attachment images so they refresh from the loading placeholder after asset resolution completes.

© 2026 Fiberplane