Add a menu action

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018 - TFS 2017

In this example, we add an action to the query context menu in the work item queries hub.


Check out our newest documentation on extension development using the Azure DevOps Extension SDK.

Prerequisites for this article

Update extension manifest file

Below is the code snippet that adds your action to the contributions section of your extension manifest.

    "contributions": [
            "id": "myAction",
            "type": "ms.vss-web.action",
            "description": "Run in Hello hub action",
            "targets": [
            "properties": {
                "text": "Run in Hello hub",
                "title": "Run in Hello hub",
                "icon": "images/icon.png",
                "groupId": "actions",
                "uri": "action.html"


Property Description
text Text that appears on the menu item.
title Tooltip text that appears on the menu item.
icon URL to an icon that appears on the menu item. Relative URLs are resolved using baseUri.
groupId Determines where this menu item appears in relation to the others.
uri URI to a page that registers the menu action handler (see below).
registeredObjectId (Optional) Name of the registered menu action handler. Defaults to the contributor id.

Learn about all of the places where you can add actions in the contributions reference.

Your HTML page

Your menu action is represented by a JavaScript script embedded in an HTML file. Save the following contents in a file and location that matches the reference to it in your extension's manifest file.

	<!DOCTYPE html>
	<html lang="en">
		<meta charset="UTF-8">
		<title>Action Sample</title>
			The end user doesn't see the content on this page.
			It is only in the background to handle the contributed menu item being clicked.

Your JavaScript

The script below registers the handler object to handle the action, place it in the head section of the HTML page above.

We aliased lib to be node_modules/vss-web-extension-sdk/lib in our vss-extension.json manifest file.

<script src="lib/VSS.SDK.min.js"></script>

    // Use an IIFE to create an object that satisfies the IContributedMenuSource contract
    var menuContributionHandler = (function () {
        "use strict";
        return {
            // This is a callback that gets invoked when a user clicks the newly contributed menu item
            // The actionContext parameter contains context data surrounding the circumstances of this
            // action getting invoked.
            execute: function (actionContext) {
                alert("Hello, world");

    // Associate the menuContributionHandler object with the "myAction" menu contribution from the manifest.
    VSS.register("myAction", menuContributionHandler);

Next steps

Now that you've written your extension, the next steps are to Package, Publish, and Install your extension. You can also check out the documentation for Testing and Debugging your extension.