# Metadatos de la extensión


## El archivo metadata.json

El archivo `metadata.json` es el punto de entrada para tu extensión. Contiene los metadatos de tu extensión, como el nombre, la versión y la descripción. También contiene la información necesaria para compilar y ejecutar tu extensión. La imagen de una extensión de Docker debe incluir un archivo `metadata.json` en la raíz de su sistema de archivos.

El formato del archivo `metadata.json` debe ser:

```json
{
    "icon": "extension-icon.svg",
    "ui": ...
    "vm": ...
    "host": ...
}
```

Las secciones `ui`, `vm` y `host` son opcionales y dependen de lo que proporcione una extensión determinada. Describen el contenido de la extensión que se va a instalar.

### Sección UI

La sección `ui` define una nueva pestaña que se añade al panel de control (dashboard) en Docker Desktop. Sigue la siguiente estructura:

```json
"ui":{
    "dashboard-tab":
    {
        "title":"MyTitle",
        "root":"/ui",
        "src":"index.html"
    }
}
```

`root` especifica la carpeta donde se encuentra el código de la UI dentro del sistema de archivos de la imagen de la extensión.
`src` especifica el punto de entrada (entrypoint) que debe cargarse en la pestaña de la extensión.

En el futuro habrá disponibles otros puntos de extensión de la UI.

### Sección VM

La sección `vm` define un servicio de backend que se ejecuta dentro de la VM de Desktop. Debe definir una `image` (imagen) o un archivo `compose.yaml` que especifique qué servicio ejecutar en la VM de Desktop.

```json
"vm": {
    "image":"${DESKTOP_PLUGIN_IMAGE}"
},
```

Cuando utilizas `image`, se genera un archivo compose predeterminado para la extensión.

> `${DESKTOP_PLUGIN_IMAGE}` es una palabra clave específica que permite una forma sencilla de referirse a la imagen que empaqueta la extensión.
> También es posible especificar aquí cualquier otro nombre de imagen completo. Sin embargo, en muchos casos, el uso de la misma imagen facilita el desarrollo de la extensión.

```json
"vm": {
    "composefile": "compose.yaml"
},
```

El archivo Compose, con una definición de volumen por ejemplo, se vería así:

```yaml
services:
  myExtension:
    image: ${DESKTOP_PLUGIN_IMAGE}
    volumes:
      - /host/path:/container/path
```

### Sección Host

La sección `host` define ejecutables que Docker Desktop copia en el host.

```json
  "host": {
    "binaries": [
      {
        "darwin": [
          {
            "path": "/darwin/myBinary"
          },
        ],
        "windows": [
          {
            "path": "/windows/myBinary.exe"
          },
        ],
        "linux": [
          {
            "path": "/linux/myBinary"
          },
        ]
      }
    ]
  }
```

`binaries` define una lista de binarios que Docker Desktop copia desde la imagen de la extensión al host.

`path` especifica la ruta del binario en el sistema de archivos de la imagen. Docker Desktop se encarga de copiar estos archivos en su propia ubicación, y la API de JavaScript permite invocar estos binarios.

Aprende a [invocar ejecutables](/extensions/extensions-sdk/guides/invoke-host-binaries/).

