> For the complete documentation index, see [llms.txt](https://docs.duplocloud.com/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.duplocloud.com/docs/armor/extensions.md).

# Extensions

Install published extensions, and build your own.

Extensions add capabilities to the platform — API resources, menu entries, and skills — loaded at runtime without redeploying the portal. There are two places to work with them, and they do different jobs:

|                           | Where                         | What it's for                                               |
| ------------------------- | ----------------------------- | ----------------------------------------------------------- |
| **Extensions** (registry) | **AI Admin → Extensions**     | Install and manage published extensions across the platform |
| **Extension Studio**      | **Studio** within a workspace | Build a new extension from a description                    |

Start with the registry — installing something that already exists needs no source control and no build.

***

## Installing an extension

Go to **AI Admin → Extensions**. The page has two tabs: **Installed Extensions** and **Extension Library**.

### Installed Extensions

Summary tiles across the top show how many extensions are installed, how many API resources they contribute, how many need attention, and when the set last changed. The table below lists each one with its extension id, version, status, resource count, the menus it adds, and whether it is tracked in source control.

![Installed Extensions](https://2471407984-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F68cb0s9ce5UIUKWPuYs8%2Fuploads%2Fgit-blob-d4d1454807287763e81fda9a01500f2f20513584%2Fextensions-registry-step-01-registry-installed.png?alt=media)

Use the **All statuses / Active / Disabled / Failed** filters to narrow the list — **Failed** is the one to check when an extension's resources or menus aren't appearing.

### Extension Library

The **Extension Library** tab is the catalog of extensions available to install. Each entry shows its category, a short description, and whether it is **Available** or already **Installed**.

![Extension Library](https://2471407984-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F68cb0s9ce5UIUKWPuYs8%2Fuploads%2Fgit-blob-b3289d85a9d5051d07f12623fc93228c3ba74da0%2Fextensions-registry-step-02-extension-library.png?alt=media)

Click **Install** to add one, **Details** to read more first, or the link icon to open its source repository on GitHub. Versions come from the source repository's releases, so you can install a specific version rather than only the latest. **Refresh** re-reads the catalog.

### Inspecting an installed extension

Opening an installed extension shows what it actually contributes to the platform.

![Extension detail](https://2471407984-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F68cb0s9ce5UIUKWPuYs8%2Fuploads%2Fgit-blob-9f7612b05c3e027936c11688d6a20e265a8f8261%2Fextensions-registry-step-03-catalog-entry-detail.png?alt=media)

The header carries its status, extension id, version, and last-updated time. Below that:

* **Load Context** — the fully-qualified identifier and version the platform loaded
* **Source Control** — the repository it is tracked in, or **Not tracked** for a zip upload
* **Menu Entries** — how many navigation entries it adds
* **Skills** — the skills it registers, with their fully-qualified paths
* **Resources** — the API resources it registers, by origin type, sub-type, and REST segment

Three tabs give more detail: **Overview** (above), **Menu** (the navigation entries it adds), and **Manifest** (the raw declaration).

The **Actions** menu on the detail page lets you **Disable** an extension without removing it — its resources and menus stop loading, and the status changes to Disabled — or **Enable** one that is currently disabled. Both ask for confirmation first.

### Registering an extension from a file

If an extension isn't in the catalog, click **Register** and upload its `extension.zip`.

![Register extension](https://2471407984-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F68cb0s9ce5UIUKWPuYs8%2Fuploads%2Fgit-blob-e69b4dfb4320cb7bbbfb1c44c1f99aa45aac702a%2Fextensions-registry-step-04-register-modal.png?alt=media)

Extensions registered this way show **Not tracked** under Source Control, since there's no repository behind them.

***

## Building an extension in Extension Studio

Extension Studio is the authoring side, scoped to a workspace rather than the platform. Go to **Studio** in the workspace navigation.

Click **New Extension** and provide:

* **Extension name** and an **Icon**
* **GitHub Scope** — the source-control scope the extension's code is written to. This is required; Studio builds into a repository
* **Extra scopes** *(optional)* — any further credentials the extension needs
* **Use source control** — whether to track the extension in the selected repository
* **Requirements** — a description of what the extension should do

Clicking **Create & Build** starts an agent that writes the extension against your requirements. You can **Preview** the generated result and step **Back** to revise before building.

Once built, an extension in Studio has two further actions on its detail page:

* **Load** — loads the built extension into the platform so its resources, menus, and skills become available
* **Deprovision** — tears the extension back down, removing what it contributed

{% hint style="info" %}
Extension Studio needs a GitHub scope because it builds into a repository. If you only want to use an extension someone else has published, install it from the **Extension Library** instead — that needs no source control.
{% endhint %}

***

## Which one should I use?

* **Install from the Extension Library** when the capability already exists. No build, no repository, no scope.
* **Register a zip** when you have a built extension that isn't published to the catalog.
* **Build in Extension Studio** when you need something that doesn't exist yet and are prepared to maintain it in your own repository.

For the concepts behind extensions — the plugin architecture, manifests, storage, and lifecycle — see the [Extension Framework](/docs/extension-framework/extension-framework.md).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

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

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.duplocloud.com/docs/armor/extensions.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
