Skip to content

Scenario: Add support for 3rd-party extensions #4000

@zadjii-msft

Description

@zadjii-msft

Updated thread from #555

Now that we have a better understanding of what work will be needed to support 3rd party extensions ("plugins"), this thread is the megathread to track all the work that's needed to support them.

Before any real work can begin here, we're waiting on some support from the Windows operating system that will be coming SoonTM. Fundamentally, third-party code extensions for packaged applications (like us) isn't supported currently.

This is not work slated for 1.0. It may not even land in 2.0. This work will likely span multiple releases. Whenever this work does end up starting formally, we'll likely have a number of minor versions with prototypes of the extensibility model, with breaking changes up until the major version release of the Terminal. So if extensions are scheduled for 3.0, then 2.4 might introduce bts of the extensibility model that are later broken in 2.5, 2.6, etc.

What should extensions be able to do?

  • Add their own profiles via Dynamic Profile Generators
  • Customize the rendering of the Terminal, with things like:
    • custom shaders, font renderers
    • custom formatting of the buffer (like hyperlinks)
  • Add their own Color Schemes, keymaps
  • Modify the UI theme (for adjusting appearance of tabs, scrollbars, etc.)
  • Modify the layout of the UI
    • Add elements to the UI like status bars, toolbars, minimaps
    • reposition existing elements of the UI? Tabs on bottom for example.
  • Create Panes with their own UI elements
  • Read the contents of the text buffer, for parsing things like hyperlinks
  • When extensions modify the UI, they'll need to adjust how large the initial window size is
  • Add commands to the Command Palette, including nested commands
  • Add commands to various context menus (such as the TermControl context menu, TabViewItem menu).

Work needed to support extensions

Some of this work is more directly related to extensions, while others on the list are simply adding features to the terminal to provide points for extensibility in the future.

Mega-list of extension ideas

Dynamic Profiles / settings

Additional Connection types

Buffer Parsing/Manipulation

Suggestions

UI Elements

App elements

Control Elements

Other Elements

Custom Rendering

Advanced Settings

Miscellaneous


@ future me, 10/14/2021

I tried this in dev/migrie/fhl/adaptive-card-extension, but ran into a number of unfixable build issues that made me hate the world. I couldn't get another package built to be able to load that into the terminal at all. Maybe next month I'll try again. For now, it's on to honks.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Area-ExtensibilityA feature that would ideally be fulfilled by us having an extension model.Issue-ScenarioProduct-TerminalThe new Windows Terminal.

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions