# Registering to Extension Registry

When you complete your extension development, you can register your extension to **Extension Registry** so that users can install your extension easily via **Extension Manager**.

## First Registration

If you created your own extension and want to release the first version, then please follow the below steps.

### Create `package.json`

Create a `package.json` file. `name` field is a unique identifier for the extension. We recommend to combine your Github id and repository name. For example, if your Github id is `john` and the repository name is `sql-generator`, then `john.sql-generator` could be good for `name` field. `version` field has to be set carefully. Recommend to follow [Semantic Versioning](http://semver.org/).

> Note that `name` field should be lowercase alpha-numeric name without spaces. It may include "." or "\_" or "-" characters.

Following is an example for Java extension.

```javascript
{
    "name": "staruml.java",
    "title": "Java",
    "description": "Java code generation and reverse engineering.",
    "homepage": "https://github.com/staruml/Java",
    "issues": "https://github.com/staruml/Java/issues",
    "keywords": ["java"],
    "version": "0.9.0",
    "author": {
        "name": "Minkyu Lee",
        "email": "niklaus.lee@gmail.com",
        "url": "https://github.com/niklauslee"
    },
    "license": "MIT",
    "engines": {
        "staruml": ">=3.0.0"
    }
}
```

### Write README.md

Please write information and user manual of your extension in `README.md` file.

### Upload to Github

Upload your extension source codes to a Github repository. Only Github is supported, so others (e.g. Bitbuckets, etc.) are not supported. When user install an extension, then **Extension Manager** downloads extension directly from the Github repository.

### Create a release

Finally, you have to create a release in the Github repository as described in <https://help.github.com/articles/creating-releases/>. This is very important. Without this, extensions cannot be downloaded from **Extension Manager**. The `tag version` and `release title` should be matched with the `version` field in the `package.json` file.

### Send email

After creating a release, just send email to us (`support@staruml.io`) with your extension repository URL. Then, we will register your extension to **Extension Registry** within one or two business days.

## Upgrading to New Version

If you want to release a new version of your extension already registered in **Extension Registry**. Please check the followings.

### Check `version` in `package.json`

Set new version number in `version` field in `package.json`.

### Create a new release

You have to create a release for every version. Check again that the `tag version` and `release title` are matched with the `version` field in the `package.json` file.

### Send email.

After creating a new release, just let us know that new version is released by sending email to us (`support@staruml.io`). We will upgrade your extension to the new version within one or two business days.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.staruml.io/developing-extensions/registering-to-extension-registry.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
