# Extension Install Anyone can create an extension by following the [example extension](https://github.com/lnbits/lnbits/tree/extension_install_02/lnbits/extensions/example). Extensions can be installed by an admin user after the **LNbits** instance has been started. ## Configure Repositories Go to `Manage Server` > `Server` > `Extensions Manifests` ![image](https://user-images.githubusercontent.com/2951406/213494038-e8152d8e-61f2-4cb7-8b5f-361fc3f9a31f.png) An `Extension Manifest` is a link to a `JSON` file whitch contains information about various extensions that can be installed (repository of extensions). Multiple repositories can be configured. For more information check the [Manifest File](https://github.com/lnbits/lnbits/blob/extension_install_02/docs/guide/extension-install.md#manifest-file) section. **LNbits** administrators should configure their instances to use repositories that they trust (like the [lnbits-extensions](https://github.com/lnbits/lnbits-extensions/) one). > **Warning** > Extensions can have bugs or mallicious code, be carefull what you install!! ## Manifest File The manifest file is just a `JSON` file that lists a collection of extensions that can be installed. This file is of the form: ```json { "extensions": [...] "repos": [...] } ``` There are two ways to specify installable extensions: ### Explicit Release It goes under the `extensions` object and it is of the form: ```json { "id": "lnurlp", "name": "LNURL Pay Links", "version": 1, "shortDescription": "Upgrade to version 111111111", "icon": "receipt", "details": "All charge names should be 111111111. API panel must show:
", "archive": "https://github.com/lnbits/lnbits-extensions/raw/main/new/lnurlp/1/lnurlp.zip", "hash": "a22d02de6bf306a7a504cd344e032cc6d48837a1d4aeb569a55a57507bf9a43a", "htmlUrl": "https://github.com/lnbits/lnbits-extensions/tree/main/new/lnurlp/1", "infoNotification": "This is a very old version" } ```
Fields Detailed Description | Field | Type | | Description | |----------------------|---------------|-----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------| | id | string | mandatory | The ID of the extension. Must be unique for each extensions. It is also used as the path in the URL. | | name | string | mandatory | User friendly name for the extension. It will be displayed on the installation page. | | version | string | mandatory | Version of this release. [Semantic versoning](https://semver.org/) is recommended. | | shortDescription | string | optional | A few words about the extension. It will be displayed on the installation page. | | icon | string | optional | quasar valid icon name | | details | string (html) | optional | Details about this particular release | | archive | string | mandatory | URL to the `zip` file that contains the extension source-code | | hash | string | mandatory | The hash (`sha256`) of the `zip` file. The extension will not be installed if the hash is incorrect. | | htmlUrl | string | optional | Link to the extension home page. | | infoNotification | string | optional | Users that have this release installed will see a info message for their extension. For example if the extension support will be terminated soon. | | criticalNotification | string | optional | Reserved for urgent notifications. The admin user will receive a message each time it visits the `Install` page. One example is if the extension has a critical bug. |
This mode has the advantage of strictly specifying what releases of an extension can be installed. ### GitHub Repository It goes under the `repos` object and it is of the form: ```json { "id": "withdraw", "organisation": "lnbits", "repository": "withdraw-extension" } ``` | Field | Type | Description | |--------------|--------|-------------------------------------------------------| | id | string | The ID of the extension. Must be unique for each extensions. It is also used as the path in the URL. | | organisation | string | The GitHub organisation (eg: `lnbits`) | | repository | string | The GitHub repository name (eg: `withdraw-extension`) |
GitHub Releases Page ![image](https://user-images.githubusercontent.com/2951406/213508934-11de5ae5-2045-471c-854b-94b6acbf4434.png)