RFC-67 Forge Command Palette

RFCs are a way for Atlassian to share what we’re working on with our valued developer community.

It’s a document for building shared understanding of a topic. It expresses a technical solution, but can also communicate how it should be built or even document standards. The most important aspect of an RFC is that a written specification facilitates feedback and drives consensus. It is not a tool for approving or committing to ideas, but more so a collaborative practice to shape an idea and to find serious flaws early.

Please respect our community guidelines: keep it welcoming and safe by commenting on the idea not the people (especially the author); keep it tidy by keeping on topic; empower the community by keeping comments constructive. Thanks!

  • Publish: October 3, 2024
  • Discuss: October 18, 2024
  • Resolve: November 1, 2024

Summary of Project:

The command palette lets you seamlessly work in Jira with just your keyboard. Use the command palette to find work, perform actions on issues, and navigate to key places in Jira.

This project aims to allow Forge Apps to extend the command palette with additional commands.

Problem

Jira users expect to be able to interact with Apps using the command palette and shortcuts. However, this is not currently possible. Connect Apps can register keyboard shortcuts but also do not have access to the command palette.

Proposed Solution

Milestone 1: Minimal Command Palette UI integration

All App commands are listed inside of a new command palette section for Apps. These commands can specify an Icon and a shortcut key combination.

When selected, these actions can open a dialog or send the user to a new page.

Here’s an example partial manifest showing what this might look like:

Manifest.yml

modules:
  jira:globalPage:
    - key: example-global-page
      resource: main-resource
      render: native
      title: Example Global Page
  jira:command:
    - key: example-go-to-page-command
      name: 'Example go to page command'
      shortcut: 'g m'
      icon: 'arrow-right'
      keywords:
        - 'go'
        - 'to'
        - 'page'
      target:
        page: example-global-page
    - key: example-dialog-command
      name: 'Example open dialog command'
      shortcut: 'o d'
      icon: 'activity'
      keywords:
        - 'open'
        - 'dialog'
      target:
        function: example-dialog-function
  function:
    - key: main-resource
      handler: index.mainResource
    - key: example-dialog-function
      handler: index.mainDialog`

Milestone 2: custom Command Palette sections and command context

Sections will allow the grouping of commands that have something in common to allow them to be found more easily. Commands can be added to existing sections such as “Quick Actions” or “Site Navigation” or Apps can declare entirely new sections.

Command context will allow commands to appear only under certain conditions. For example actions to do with issues would only be available in the context issue.

modules:
  jira:commmandSection:
    - key: 'time-tracking-commands'
      name: 'Time Tracking Section Heading'
  jira:command:
    - key: example-go-to-page-command
      name: 'Example go to page command'
      icon: 'bell'
      section:
        target: 'QUICK_ACCESS'
        context: 'issue'
    - key: example-dialog-command
      name: 'Example open dialog command'
      icon: 'arrow-right'
      section:
        target: time-tracking-commands
        context: 'global'

Asks

We appreciate your engagement and look for feedback on this RFC that will help shape the command palette offering.

Specifically, the Forge team would love to get some insights on:

  • What use-cases for your apps that this offering would enable?
  • How many commands would your app look to implement?
  • Which icons from the icon explorer would suit your command best?
  • What additional features would you expect the Command Palette to support?
4 Likes

Although it is not in scope with this RFC, I want to make it clear for all Marketplace Partners that this will be the first extension point within a core product (Jira / Confluence) that will be Forge only.

I think this should be considered a watershed moment, and I want to make sure Atlassian understands the impact of this given that it will mean that there are going to be a lot of Marketplace Partners / popular apps that will not be able to build upon this feature for the foreseeable future.

Thanks for writing this RFC, the feature looks like a very welcome addition to the integration landscape.

But I must ask: Can this extension module also be made available in Connect?

It would a great benefit to both Atlassian, Partners and Customers if new features are not exclusive to Forge especially since Forge is so far away from being on-par with Connect.
There are loads of Connect Apps that cannot migrate to Forge because of the feature gap, and only adding new extension modules to Forge will hurt the migration in the short and long run.

3 Likes

It’s already been stated that all new development will be Forge only.

You’ll need to switch to Connect on Forge: see How to adopt Forge from Connect

3 Likes

I guess there is a difference between stating it, and actually doing it on a core product. Especially considering that there are still blockers that prevent partners from migrating to Forge, even if this is Connect-on-Forge.

1 Like

If only I could, Connect-on-Forge doesn’t support Data Residency so switching is not that easy after all. And Forge also has other blocking the migration.

3 Likes

Currently, apps are able to define conflicting keyboard shortcuts (with other apps or Jira itself). Has anything been considered in that regards?

Background: We have app(s) that define keyboard shortcuts and one of our most used shortcut clashes with Jira itself, this has historically caused some frustration.

2 Likes

Hi all,

I’m going to address some of the questions and concerns regarding Connect on Forge and Forge-only extensibility. I’m hopeful that this discussion can continue to focus on the extensibility @cwhittington has proposed, with a view on how it may/may not suit your use cases and apps.

Other capabilities and extension points have been delivered for Forge-only, such as UI Modifications and Rovo modules. As we move forward, we will see new extensibility being delivered Forge-first / Forge-only.

We acknowledge that Connect apps which utilise Data Residency are not able to adopt Forge just yet, but we are working toward this. More details about this capability can be found in the RFC-56: Data Residency for Forge Remote.

In addition to this, we are working towards an additional public RFC which will address in FRGE-1481. We’ve spent that last year trying to make it as easy as possible to adopt Forge from Connect and hope the pathway presented will continue that.

4 Likes

@SeanBourke thanks for your response on this, I also saw your message in our shared Slack and replied there. So I won’t go into the specifics here to keep this thread on the RFC at hand.

2 Likes

The old keyboard shortcut ‘gg’ which got replaced with the Command Palette recently, automatically added all adminPage modules to the list of screens.
IMHO, this was an easy and consistent way to add keyboard shortcuts for navigating to global pages. Users already knew what they were clicking on and app devs didn’t need to do anything in addition.

Have you also thought about supporting this automatic addition? I’d be interested in the reasoning why you’ve changed that behavior.

1 Like