Aha! Develop | Extension contribution types

Contributions are the way that extensions extend the Aha! Develop experience. There are six types of contributions, split into two groups:

  • Browser contributions run in the end user's web browser. These contributions can affect the Aha! Develop user interface, and include Views, Commands, Settings, and Importers.

  • Server contributions run on the Aha! Develop servers. These contributions are endpoints that can respond to record changes within Aha! Develop or actions generated by other systems through webhooks.

Event handlers can run either in the browser or on the server.

Within the JavaScript code, contributions are implemented as callback functions that are registered on the aha object using the on function, e.g.

aha.on("links", ({ record }) => {
// Implementation of the contribution goes here.

This code registers the contribution named links. When this contribution should run, the callback function is invoked.

Each contribution has a unique identifier that is the concatenation of the extension identifier and the contribution name. For example, if the contribution above was in an extension named aha-develop/github , then the contribution identifier would be aha-develop.github.links . This means that all contributions have an identifier that is globally unique. Aha! Develop does not enforce this uniqueness.

The type of each extension contribution is defined in the package.json file in the ahaExtension.contributes section. An example is:

"ahaExtension": {
"contributes": {
"views": {
"links": {
"title": "GitHub links",
"entryPoint": "src/links.js",
"host": "attribute",
"recordTypes": ["Feature", "Epic", "Requirement"]
"commands": {
"createBranch": {
"title": "GitHub: Create a branch",
"entryPoint": "src/createBranch.js"

This snippet defines two contributions. One is a view named links that is an attribute and should be displayed for feature, epic, and requirement records. The second contribution is a command named createBranch. Each contribution has a human-readable title for the contribution suitable for display in the user interface. Each contribution also specifies the entryPoint, which specifies the JavaScript source file that contains the on function for the contribution.