<!-- # hard line break macro for HTML -->

# fiftyone.plugins

* [fiftyone.plugins.constants](fiftyone.plugins.constants.md)
* [fiftyone.plugins.context](fiftyone.plugins.context.md)
  * [`build_plugin_contexts()`](fiftyone.plugins.context.md#fiftyone.plugins.context.build_plugin_contexts)
  * [`PluginContext`](fiftyone.plugins.context.md#fiftyone.plugins.context.PluginContext)
    * [`PluginContext.name`](fiftyone.plugins.context.md#fiftyone.plugins.context.PluginContext.name)
    * [`PluginContext.secrets`](fiftyone.plugins.context.md#fiftyone.plugins.context.PluginContext.secrets)
    * [`PluginContext.has_errors()`](fiftyone.plugins.context.md#fiftyone.plugins.context.PluginContext.has_errors)
    * [`PluginContext.can_register()`](fiftyone.plugins.context.md#fiftyone.plugins.context.PluginContext.can_register)
    * [`PluginContext.register()`](fiftyone.plugins.context.md#fiftyone.plugins.context.PluginContext.register)
    * [`PluginContext.register_all()`](fiftyone.plugins.context.md#fiftyone.plugins.context.PluginContext.register_all)
    * [`PluginContext.dispose_all()`](fiftyone.plugins.context.md#fiftyone.plugins.context.PluginContext.dispose_all)
* [fiftyone.plugins.core](fiftyone.plugins.core.md)
  * [`PluginPackage`](fiftyone.plugins.core.md#fiftyone.plugins.core.PluginPackage)
    * [`PluginPackage.name`](fiftyone.plugins.core.md#fiftyone.plugins.core.PluginPackage.name)
    * [`PluginPackage.path`](fiftyone.plugins.core.md#fiftyone.plugins.core.PluginPackage.path)
    * [`PluginPackage.shadow_paths`](fiftyone.plugins.core.md#fiftyone.plugins.core.PluginPackage.shadow_paths)
  * [`list_plugins()`](fiftyone.plugins.core.md#fiftyone.plugins.core.list_plugins)
  * [`enable_plugin()`](fiftyone.plugins.core.md#fiftyone.plugins.core.enable_plugin)
  * [`disable_plugin()`](fiftyone.plugins.core.md#fiftyone.plugins.core.disable_plugin)
  * [`delete_plugin()`](fiftyone.plugins.core.md#fiftyone.plugins.core.delete_plugin)
  * [`list_downloaded_plugins()`](fiftyone.plugins.core.md#fiftyone.plugins.core.list_downloaded_plugins)
  * [`list_enabled_plugins()`](fiftyone.plugins.core.md#fiftyone.plugins.core.list_enabled_plugins)
  * [`list_disabled_plugins()`](fiftyone.plugins.core.md#fiftyone.plugins.core.list_disabled_plugins)
  * [`get_plugin()`](fiftyone.plugins.core.md#fiftyone.plugins.core.get_plugin)
  * [`find_plugin()`](fiftyone.plugins.core.md#fiftyone.plugins.core.find_plugin)
  * [`download_plugin()`](fiftyone.plugins.core.md#fiftyone.plugins.core.download_plugin)
  * [`load_plugin_requirements()`](fiftyone.plugins.core.md#fiftyone.plugins.core.load_plugin_requirements)
  * [`install_plugin_requirements()`](fiftyone.plugins.core.md#fiftyone.plugins.core.install_plugin_requirements)
  * [`ensure_plugin_requirements()`](fiftyone.plugins.core.md#fiftyone.plugins.core.ensure_plugin_requirements)
  * [`ensure_plugin_compatibility()`](fiftyone.plugins.core.md#fiftyone.plugins.core.ensure_plugin_compatibility)
  * [`create_plugin()`](fiftyone.plugins.core.md#fiftyone.plugins.core.create_plugin)
* [fiftyone.plugins.definitions](fiftyone.plugins.definitions.md)
  * [`PluginDefinition`](fiftyone.plugins.definitions.md#fiftyone.plugins.definitions.PluginDefinition)
    * [`PluginDefinition.name`](fiftyone.plugins.definitions.md#fiftyone.plugins.definitions.PluginDefinition.name)
    * [`PluginDefinition.directory`](fiftyone.plugins.definitions.md#fiftyone.plugins.definitions.PluginDefinition.directory)
    * [`PluginDefinition.builtin`](fiftyone.plugins.definitions.md#fiftyone.plugins.definitions.PluginDefinition.builtin)
    * [`PluginDefinition.shadow_paths`](fiftyone.plugins.definitions.md#fiftyone.plugins.definitions.PluginDefinition.shadow_paths)
    * [`PluginDefinition.author`](fiftyone.plugins.definitions.md#fiftyone.plugins.definitions.PluginDefinition.author)
    * [`PluginDefinition.version`](fiftyone.plugins.definitions.md#fiftyone.plugins.definitions.PluginDefinition.version)
    * [`PluginDefinition.url`](fiftyone.plugins.definitions.md#fiftyone.plugins.definitions.PluginDefinition.url)
    * [`PluginDefinition.license`](fiftyone.plugins.definitions.md#fiftyone.plugins.definitions.PluginDefinition.license)
    * [`PluginDefinition.description`](fiftyone.plugins.definitions.md#fiftyone.plugins.definitions.PluginDefinition.description)
    * [`PluginDefinition.tags`](fiftyone.plugins.definitions.md#fiftyone.plugins.definitions.PluginDefinition.tags)
    * [`PluginDefinition.fiftyone_compatibility`](fiftyone.plugins.definitions.md#fiftyone.plugins.definitions.PluginDefinition.fiftyone_compatibility)
    * [`PluginDefinition.fiftyone_requirement`](fiftyone.plugins.definitions.md#fiftyone.plugins.definitions.PluginDefinition.fiftyone_requirement)
    * [`PluginDefinition.operators`](fiftyone.plugins.definitions.md#fiftyone.plugins.definitions.PluginDefinition.operators)
    * [`PluginDefinition.skills`](fiftyone.plugins.definitions.md#fiftyone.plugins.definitions.PluginDefinition.skills)
    * [`PluginDefinition.package_json_path`](fiftyone.plugins.definitions.md#fiftyone.plugins.definitions.PluginDefinition.package_json_path)
    * [`PluginDefinition.has_package_json`](fiftyone.plugins.definitions.md#fiftyone.plugins.definitions.PluginDefinition.has_package_json)
    * [`PluginDefinition.js_bundle`](fiftyone.plugins.definitions.md#fiftyone.plugins.definitions.PluginDefinition.js_bundle)
    * [`PluginDefinition.js_bundle_path`](fiftyone.plugins.definitions.md#fiftyone.plugins.definitions.PluginDefinition.js_bundle_path)
    * [`PluginDefinition.py_entry`](fiftyone.plugins.definitions.md#fiftyone.plugins.definitions.PluginDefinition.py_entry)
    * [`PluginDefinition.py_entry_path`](fiftyone.plugins.definitions.md#fiftyone.plugins.definitions.PluginDefinition.py_entry_path)
    * [`PluginDefinition.server_path`](fiftyone.plugins.definitions.md#fiftyone.plugins.definitions.PluginDefinition.server_path)
    * [`PluginDefinition.js_bundle_server_path`](fiftyone.plugins.definitions.md#fiftyone.plugins.definitions.PluginDefinition.js_bundle_server_path)
    * [`PluginDefinition.js_bundle_hash`](fiftyone.plugins.definitions.md#fiftyone.plugins.definitions.PluginDefinition.js_bundle_hash)
    * [`PluginDefinition.can_register_operator()`](fiftyone.plugins.definitions.md#fiftyone.plugins.definitions.PluginDefinition.can_register_operator)
    * [`PluginDefinition.has_py`](fiftyone.plugins.definitions.md#fiftyone.plugins.definitions.PluginDefinition.has_py)
    * [`PluginDefinition.has_js`](fiftyone.plugins.definitions.md#fiftyone.plugins.definitions.PluginDefinition.has_js)
    * [`PluginDefinition.secrets`](fiftyone.plugins.definitions.md#fiftyone.plugins.definitions.PluginDefinition.secrets)
    * [`PluginDefinition.to_dict()`](fiftyone.plugins.definitions.md#fiftyone.plugins.definitions.PluginDefinition.to_dict)
    * [`PluginDefinition.from_disk()`](fiftyone.plugins.definitions.md#fiftyone.plugins.definitions.PluginDefinition.from_disk)
* [fiftyone.plugins.secrets](fiftyone.plugins.secrets.md)
  * [`PluginSecretsResolver`](fiftyone.plugins.secrets.md#fiftyone.plugins.secrets.PluginSecretsResolver)
    * [`PluginSecretsResolver.register_operator()`](fiftyone.plugins.secrets.md#fiftyone.plugins.secrets.PluginSecretsResolver.register_operator)
    * [`PluginSecretsResolver.client()`](fiftyone.plugins.secrets.md#fiftyone.plugins.secrets.PluginSecretsResolver.client)
    * [`PluginSecretsResolver.get_multiple()`](fiftyone.plugins.secrets.md#fiftyone.plugins.secrets.PluginSecretsResolver.get_multiple)
    * [`PluginSecretsResolver.get_secret()`](fiftyone.plugins.secrets.md#fiftyone.plugins.secrets.PluginSecretsResolver.get_secret)
    * [`PluginSecretsResolver.get_secret_sync()`](fiftyone.plugins.secrets.md#fiftyone.plugins.secrets.PluginSecretsResolver.get_secret_sync)
  * [`SecretsDictionary`](fiftyone.plugins.secrets.md#fiftyone.plugins.secrets.SecretsDictionary)
    * [`SecretsDictionary.copy()`](fiftyone.plugins.secrets.md#fiftyone.plugins.secrets.SecretsDictionary.copy)
    * [`SecretsDictionary.keys()`](fiftyone.plugins.secrets.md#fiftyone.plugins.secrets.SecretsDictionary.keys)
    * [`SecretsDictionary.values()`](fiftyone.plugins.secrets.md#fiftyone.plugins.secrets.SecretsDictionary.values)
    * [`SecretsDictionary.items()`](fiftyone.plugins.secrets.md#fiftyone.plugins.secrets.SecretsDictionary.items)
    * [`SecretsDictionary.get()`](fiftyone.plugins.secrets.md#fiftyone.plugins.secrets.SecretsDictionary.get)
* [fiftyone.plugins.skills](fiftyone.plugins.skills.md)
  * [`SkillDefinition`](fiftyone.plugins.skills.md#fiftyone.plugins.skills.SkillDefinition)
    * [`SkillDefinition.name`](fiftyone.plugins.skills.md#fiftyone.plugins.skills.SkillDefinition.name)
    * [`SkillDefinition.description`](fiftyone.plugins.skills.md#fiftyone.plugins.skills.SkillDefinition.description)
    * [`SkillDefinition.category`](fiftyone.plugins.skills.md#fiftyone.plugins.skills.SkillDefinition.category)
    * [`SkillDefinition.path`](fiftyone.plugins.skills.md#fiftyone.plugins.skills.SkillDefinition.path)
    * [`SkillDefinition.plugin_name`](fiftyone.plugins.skills.md#fiftyone.plugins.skills.SkillDefinition.plugin_name)
    * [`SkillDefinition.content`](fiftyone.plugins.skills.md#fiftyone.plugins.skills.SkillDefinition.content)
    * [`SkillDefinition.to_dict()`](fiftyone.plugins.skills.md#fiftyone.plugins.skills.SkillDefinition.to_dict)
  * [`list_skills()`](fiftyone.plugins.skills.md#fiftyone.plugins.skills.list_skills)
* [fiftyone.plugins.utils](fiftyone.plugins.utils.md)
  * [`list_zoo_plugins()`](fiftyone.plugins.utils.md#fiftyone.plugins.utils.list_zoo_plugins)
  * [`find_plugins()`](fiftyone.plugins.utils.md#fiftyone.plugins.utils.find_plugins)
  * [`get_plugin_info()`](fiftyone.plugins.utils.md#fiftyone.plugins.utils.get_plugin_info)

## Module contents

FiftyOne plugins.

Copyright 2017-2026, Voxel51, Inc.
<br/>
[voxel51.com](https://voxel51.com/)
<br/>
<br/>

**Functions:**

| [`enable_plugin`](#fiftyone.plugins.enable_plugin)(plugin_name[, \_allow_missing])                 | Enables the given plugin.                                                                                  |
|----------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------|
| [`disable_plugin`](#fiftyone.plugins.disable_plugin)(plugin_name[, \_allow_missing])               | Disables the given plugin.                                                                                 |
| [`delete_plugin`](#fiftyone.plugins.delete_plugin)(plugin_name)                                    | Deletes the given plugin from local disk.                                                                  |
| [`list_plugins`](#fiftyone.plugins.list_plugins)([enabled, builtin, shadowed])                     | Lists available plugins.                                                                                   |
| [`list_disabled_plugins`](#fiftyone.plugins.list_disabled_plugins)()                               | Returns a list of all disabled plugin names.                                                               |
| [`list_downloaded_plugins`](#fiftyone.plugins.list_downloaded_plugins)()                           | Returns a list of all downloaded plugin names.                                                             |
| [`list_enabled_plugins`](#fiftyone.plugins.list_enabled_plugins)()                                 | Returns a list of all enabled plugin names.                                                                |
| [`get_plugin`](#fiftyone.plugins.get_plugin)([name, plugin_dir])                                   | Gets the definition for the given plugin.                                                                  |
| [`find_plugin`](#fiftyone.plugins.find_plugin)(name)                                               | Returns the path to the plugin on local disk.                                                              |
| [`download_plugin`](#fiftyone.plugins.download_plugin)(url_or_gh_repo[, ...])                      | Downloads the plugin(s) from the given location to your local plugins directory (`fo.config.plugins_dir`). |
| [`create_plugin`](#fiftyone.plugins.create_plugin)(plugin_name[, from_files, ...])                 | Creates a plugin with the given name.                                                                      |
| [`load_plugin_requirements`](#fiftyone.plugins.load_plugin_requirements)(plugin_name)              | Loads the Python package requirements associated with the given plugin, if any.                            |
| [`install_plugin_requirements`](#fiftyone.plugins.install_plugin_requirements)(plugin_name[, ...]) | Installs any Python package requirements associated with the given plugin.                                 |
| [`ensure_plugin_requirements`](#fiftyone.plugins.ensure_plugin_requirements)(plugin_name[, ...])   | Ensures that any Python package requirements associated with the given plugin are installed.               |
| [`ensure_plugin_compatibility`](#fiftyone.plugins.ensure_plugin_compatibility)(plugin_name[, ...]) | Ensures that the given plugin is compatible with your current FiftyOne package version.                    |
| [`list_skills`](#fiftyone.plugins.list_skills)([enabled, plugin, category])                        | Lists available skills from installed plugins.                                                             |

**Classes:**

| [`PluginDefinition`](#fiftyone.plugins.PluginDefinition)(directory, metadata[, ...])   | A plugin definition.                                                     |
|----------------------------------------------------------------------------------------|--------------------------------------------------------------------------|
| [`PluginContext`](#fiftyone.plugins.PluginContext)(plugin_definition)                  | Context that represents a plugin and the Python objects it creates.      |
| [`PluginSecretsResolver`](#fiftyone.plugins.PluginSecretsResolver)()                   | Injects secrets from environmental variables into the execution context. |

### fiftyone.plugins.enable_plugin(plugin_name, \_allow_missing=False)

Enables the given plugin.

* **Parameters:**
  **plugin_name** – the plugin name

### fiftyone.plugins.disable_plugin(plugin_name, \_allow_missing=False)

Disables the given plugin.

* **Parameters:**
  **plugin_name** – the plugin name

### fiftyone.plugins.delete_plugin(plugin_name)

Deletes the given plugin from local disk.

* **Parameters:**
  **plugin_name** – the plugin name

### fiftyone.plugins.list_plugins(enabled=True, builtin=False, shadowed=False)

Lists available plugins.

* **Parameters:**
  * **enabled** (*True*) – whether to include only enabled plugins (True) or only
    disabled plugins (False) or all plugins (“all”)
  * **builtin** (*False*) – whether to include only builtin plugins (True) or only
    non-builtin plugins (False) or all plugins (“all”)
  * **shadowed** (*False*) – whether to include only “shadowed” duplicate plugins
    (True) or only usable plugins (False) or all plugins (“all”)
* **Returns:**
  a list of [`PluginDefinition`](#fiftyone.plugins.PluginDefinition) instances

### fiftyone.plugins.list_disabled_plugins()

Returns a list of all disabled plugin names.

* **Returns:**
  a list of plugin names

### fiftyone.plugins.list_downloaded_plugins()

Returns a list of all downloaded plugin names.

* **Returns:**
  a list of plugin names

### fiftyone.plugins.list_enabled_plugins()

Returns a list of all enabled plugin names.

* **Returns:**
  a list of plugin names

### fiftyone.plugins.get_plugin(name=None, plugin_dir=None)

Gets the definition for the given plugin.

* **Parameters:**
  * **name** (*None*) – the plugin name
  * **plugin_dir** (*None*) – a directory containing the plugin
* **Returns:**
  a [`PluginDefinition`](#fiftyone.plugins.PluginDefinition)

### fiftyone.plugins.find_plugin(name)

Returns the path to the plugin on local disk.

* **Parameters:**
  **name** – the plugin name
* **Returns:**
  the path to the plugin directory

### fiftyone.plugins.download_plugin(url_or_gh_repo, plugin_names=None, overwrite=False)

Downloads the plugin(s) from the given location to your local plugins
directory (`fo.config.plugins_dir`).

#### NOTE
To download from a private GitHub repository that you have access to,
provide your GitHub personal access token by setting the
`GITHUB_TOKEN` environment variable.

* **Parameters:**
  * **url_or_gh_repo** – 

    the location to download from, which can be:
    - a GitHub repo URL like `https://github.com/<user>/<repo>`
    - a GitHub ref like
      `https://github.com/<user>/<repo>/tree/<branch>` or
      `https://github.com/<user>/<repo>/commit/<commit>`
    - a GitHub ref string like `<user>/<repo>[/<ref>]`
    - a GitHub tree path like
      `https://github.com/<user>/<repo>/tree/<branch>/<path>`
    - a publicly accessible URL of an archive (eg zip or tar) file
  * **plugin_names** (*None*) – a plugin name or iterable of plugin names to
    download. By default, all found plugins are downloaded
  * **overwrite** (*False*) – whether to overwrite an existing plugin with the
    same name if it already exists
* **Returns:**
  a dict mapping plugin names to plugin directories on disk

### fiftyone.plugins.create_plugin(plugin_name, from_files=None, outdir=None, description=None, tags=None, version=None, overwrite=False, \*\*kwargs)

Creates a plugin with the given name.

If no `from_files` are provided, a directory containing only the plugin’s
metadata file will be created.

If no `outdir` is specified, the plugin is created within your local
plugins directory (`fo.config.plugins_dir`).

* **Parameters:**
  * **plugin_name** – the name of the plugin
  * **from_files** (*None*) – a directory or list of explicit filepaths to include
    in the plugin
  * **outdir** (*None*) – the path at which to create the plugin directory. If
    not provided, the plugin is created within your
    `fo_config.plugins_dir`
  * **description** (*None*) – a description for the plugin
  * **tags** (*None*) – a tag or list of tags for the plugin
  * **version** (*None*) – an optional FiftyOne version requirement string
  * **overwrite** (*False*) – whether to overwrite a local plugin with the same
    name if one exists
  * **\*\*kwargs** – additional keyword arguments to include in the plugin
    definition
* **Returns:**
  the directory containing the created plugin

### fiftyone.plugins.load_plugin_requirements(plugin_name)

Loads the Python package requirements associated with the given plugin,
if any.

* **Parameters:**
  **plugin_name** – the plugin name
* **Returns:**
  a list of requirement strings, or `None`

### fiftyone.plugins.install_plugin_requirements(plugin_name, error_level=None)

Installs any Python package requirements associated with the given
plugin.

* **Parameters:**
  * **plugin_name** – the plugin name
  * **error_level** (*None*) – 

    the error level to use, defined as:
    - 0: raise error if the install fails
    - 1: log warning if the install fails
    - 2: ignore install fails

    By default, `fiftyone.config.requirement_error_level` is used

### fiftyone.plugins.ensure_plugin_requirements(plugin_name, error_level=None, log_success=False)

Ensures that any Python package requirements associated with the given
plugin are installed.

* **Parameters:**
  * **plugin_name** – the plugin name
  * **error_level** (*None*) – 

    the error level to use, defined as:
    - 0: raise error if requirement is not satisfied
    - 1: log warning if requirement is not satisfied
    - 2: ignore unsatisifed requirements

    By default, `fiftyone.config.requirement_error_level` is used
  * **log_success** (*False*) – whether to generate a log message if a requirement
    is satisfied

### fiftyone.plugins.ensure_plugin_compatibility(plugin_name, error_level=None, log_success=False)

Ensures that the given plugin is compatible with your current FiftyOne
package version.

* **Parameters:**
  * **plugin_name** – the plugin name
  * **error_level** (*None*) – 

    the error level to use, defined as:
    - 0: raise error if plugin is not compatible
    - 1: log warning if plugin is not satisfied
    - 2: ignore fiftyone compatibility requirements

    By default, `fiftyone.config.requirement_error_level` is used
  * **log_success** (*False*) – whether to generate a log message if the plugin is
    compatible

### *class* fiftyone.plugins.PluginDefinition(directory, metadata, shadow_paths=None)

Bases: `object`

A plugin definition.

* **Parameters:**
  * **directory** – the directory containing the plugin
  * **metadata** – a plugin metadata dict
  * **shadow_paths** (*None*) – a list of plugin directories that this plugin
    shadows

**Attributes:**

| [`name`](#fiftyone.plugins.PluginDefinition.name)                                     | The name of the plugin.                                     |
|---------------------------------------------------------------------------------------|-------------------------------------------------------------|
| [`directory`](#fiftyone.plugins.PluginDefinition.directory)                           | The directory containing the plugin.                        |
| [`builtin`](#fiftyone.plugins.PluginDefinition.builtin)                               | Whether the plugin is a builtin plugin.                     |
| [`shadow_paths`](#fiftyone.plugins.PluginDefinition.shadow_paths)                     | A list of plugin directories that this plugin shadows.      |
| [`author`](#fiftyone.plugins.PluginDefinition.author)                                 | The author of the plugin.                                   |
| [`version`](#fiftyone.plugins.PluginDefinition.version)                               | The version of the plugin.                                  |
| [`url`](#fiftyone.plugins.PluginDefinition.url)                                       | The URL of the plugin.                                      |
| [`license`](#fiftyone.plugins.PluginDefinition.license)                               | The license of the plugin.                                  |
| [`description`](#fiftyone.plugins.PluginDefinition.description)                       | The description of the plugin.                              |
| [`tags`](#fiftyone.plugins.PluginDefinition.tags)                                     | The tags of the plugin.                                     |
| [`fiftyone_compatibility`](#fiftyone.plugins.PluginDefinition.fiftyone_compatibility) | The FiftyOne compatibility version.                         |
| [`fiftyone_requirement`](#fiftyone.plugins.PluginDefinition.fiftyone_requirement)     | The FiftyOne requirement as a string like `fiftyone>=0.21`. |
| [`operators`](#fiftyone.plugins.PluginDefinition.operators)                           | The operators of the plugin.                                |
| [`skills`](#fiftyone.plugins.PluginDefinition.skills)                                 | The skills of the plugin.                                   |
| [`package_json_path`](#fiftyone.plugins.PluginDefinition.package_json_path)           | The absolute path to the package.json file.                 |
| [`has_package_json`](#fiftyone.plugins.PluginDefinition.has_package_json)             | Whether the plugin has a package.json file.                 |
| [`js_bundle`](#fiftyone.plugins.PluginDefinition.js_bundle)                           | The relative path to the JS bundle file.                    |
| [`js_bundle_path`](#fiftyone.plugins.PluginDefinition.js_bundle_path)                 |                                                             |
| [`py_entry`](#fiftyone.plugins.PluginDefinition.py_entry)                             |                                                             |
| [`py_entry_path`](#fiftyone.plugins.PluginDefinition.py_entry_path)                   | The absolute path to the Python entry file.                 |
| [`server_path`](#fiftyone.plugins.PluginDefinition.server_path)                       | The default server path to the plugin.                      |
| [`js_bundle_server_path`](#fiftyone.plugins.PluginDefinition.js_bundle_server_path)   | The default server path to the JS bundle.                   |
| [`js_bundle_hash`](#fiftyone.plugins.PluginDefinition.js_bundle_hash)                 | A hash of the plugin's JS bundle file.                      |
| [`has_py`](#fiftyone.plugins.PluginDefinition.has_py)                                 | Whether the plugin has a Python entry file.                 |
| [`has_js`](#fiftyone.plugins.PluginDefinition.has_js)                                 | Whether the plugin has a JS bundle file.                    |
| [`secrets`](#fiftyone.plugins.PluginDefinition.secrets)                               | A list of required secrets for the plugin.                  |

**Methods:**

| [`can_register_operator`](#fiftyone.plugins.PluginDefinition.can_register_operator)(name)   | Whether the plugin can register the given operator.                                             |
|---------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------|
| [`to_dict`](#fiftyone.plugins.PluginDefinition.to_dict)()                                   | Returns a JSON dict representation of the plugin metadata.                                      |
| [`from_disk`](#fiftyone.plugins.PluginDefinition.from_disk)(metadata_path[, shadow_paths])  | Creates a [`PluginDefinition`](#fiftyone.plugins.PluginDefinition) for the given metadata file. |

#### *property* name

The name of the plugin.

#### *property* directory

The directory containing the plugin.

#### *property* builtin

Whether the plugin is a builtin plugin.

#### *property* shadow_paths

A list of plugin directories that this plugin shadows.

#### *property* author

The author of the plugin.

#### *property* version

The version of the plugin.

#### *property* url

The URL of the plugin.

#### *property* license

The license of the plugin.

#### *property* description

The description of the plugin.

#### *property* tags

The tags of the plugin.

#### *property* fiftyone_compatibility

The FiftyOne compatibility version.

#### *property* fiftyone_requirement

The FiftyOne requirement as a string like `fiftyone>=0.21`.

#### *property* operators

The operators of the plugin.

#### *property* skills

The skills of the plugin.

#### *property* package_json_path

The absolute path to the package.json file.

#### *property* has_package_json

Whether the plugin has a package.json file.

#### *property* js_bundle

The relative path to the JS bundle file.

#### *property* js_bundle_path

#### *property* py_entry

#### *property* py_entry_path

The absolute path to the Python entry file.

#### *property* server_path

The default server path to the plugin.

#### *property* js_bundle_server_path

The default server path to the JS bundle.

#### *property* js_bundle_hash

A hash of the plugin’s JS bundle file.

#### can_register_operator(name)

Whether the plugin can register the given operator.

* **Parameters:**
  **name** – the operator name
* **Returns:**
  True/False

#### *property* has_py

Whether the plugin has a Python entry file.

#### *property* has_js

Whether the plugin has a JS bundle file.

#### *property* secrets

A list of required secrets for the plugin.

#### to_dict()

Returns a JSON dict representation of the plugin metadata.

* **Returns:**
  a JSON dict

#### *classmethod* from_disk(metadata_path, shadow_paths=None)

Creates a [`PluginDefinition`](#fiftyone.plugins.PluginDefinition) for the given metadata file.

* **Parameters:**
  * **metadata_path** – the path to a plugin `.yaml` file
  * **shadow_paths** (*None*) – a list of plugin directories that this plugin
    shadows
* **Returns:**
  a [`PluginDefinition`](#fiftyone.plugins.PluginDefinition)

### *class* fiftyone.plugins.PluginContext(plugin_definition)

Bases: `object`

Context that represents a plugin and the Python objects it creates.

* **Parameters:**
  **plugin_definition** – the [`fiftyone.plugins.PluginDefinition`](#fiftyone.plugins.PluginDefinition) for
  the plugin

**Attributes:**

| [`name`](#fiftyone.plugins.PluginContext.name)       | The plugin name.                                                         |
|------------------------------------------------------|--------------------------------------------------------------------------|
| [`secrets`](#fiftyone.plugins.PluginContext.secrets) | List of keys for required secrets as specified in the plugin definition. |

**Methods:**

| [`has_errors`](#fiftyone.plugins.PluginContext.has_errors)()             | Determines whether the plugin has errors.                      |
|--------------------------------------------------------------------------|----------------------------------------------------------------|
| [`can_register`](#fiftyone.plugins.PluginContext.can_register)(instance) | Determines whether the given operator can be registered.       |
| [`register`](#fiftyone.plugins.PluginContext.register)(cls)              | Registers the given operator on the plugin.                    |
| [`register_all`](#fiftyone.plugins.PluginContext.register_all)()         | Registers all operators defined by the plugin on this context. |
| [`dispose_all`](#fiftyone.plugins.PluginContext.dispose_all)()           | Disposes all operators from this context.                      |

#### *property* name

The plugin name.

#### *property* secrets

List of keys for required secrets as specified in the plugin
definition.

#### has_errors()

Determines whether the plugin has errors.

* **Returns:**
  True/False

#### can_register(instance)

Determines whether the given operator can be registered.

* **Parameters:**
  **instance** – an [`fiftyone.operators.operator.Operator`](fiftyone.operators.operator.md#fiftyone.operators.operator.Operator)
* **Returns:**
  True/False

#### register(cls)

Registers the given operator on the plugin.

#### NOTE
Any errors are logged rather than being raised.

* **Parameters:**
  **cls** – an [`fiftyone.operators.operator.Operator`](fiftyone.operators.operator.md#fiftyone.operators.operator.Operator) or
  [`fiftyone.operators.panel.Panel`](fiftyone.operators.panel.md#fiftyone.operators.panel.Panel) class

#### register_all()

Registers all operators defined by the plugin on this context.

#### NOTE
Any errors are logged rather than being raised.

#### dispose_all()

Disposes all operators from this context.

### *class* fiftyone.plugins.PluginSecretsResolver

Bases: `object`

Injects secrets from environmental variables into the execution
context.

**Methods:**

| [`register_operator`](#fiftyone.plugins.PluginSecretsResolver.register_operator)(operator_uri, required_secrets)   |                                    |
|--------------------------------------------------------------------------------------------------------------------|------------------------------------|
| [`client`](#fiftyone.plugins.PluginSecretsResolver.client)()                                                       |                                    |
| [`get_multiple`](#fiftyone.plugins.PluginSecretsResolver.get_multiple)(keys, operator_uri, \*\*kwargs)             | Get the value of multiple secrets. |
| [`get_secret`](#fiftyone.plugins.PluginSecretsResolver.get_secret)(key, operator_uri, \*\*kwargs)                  | Get the value of a secret.         |
| [`get_secret_sync`](#fiftyone.plugins.PluginSecretsResolver.get_secret_sync)(key, operator_uri, \*\*kwargs)        | Get the value of a secret.         |

#### register_operator(operator_uri: str, required_secrets: List[str]) → None

#### client() → ISecretProvider

#### *async* get_multiple(keys: List[str], operator_uri: str, \*\*kwargs) → Dict[str, ISecret | None]

Get the value of multiple secrets.
:param keys: list of secret keys
:param operator_uri: the operator URI
:param kwargs: additional keyword arguments to pass to the secrets
:param client for authentication if required:

* **Returns:**
  A dictionary of secret keys and their values

#### *async* get_secret(key: str, operator_uri: str, \*\*kwargs) → ISecret | None

Get the value of a secret.

* **Parameters:**
  * **key** (*str*) – unique secret identifier
  * **kwargs** – additional keyword arguments to pass to the secrets
  * **required** (*client for authentication if*)

#### get_secret_sync(key: str, operator_uri: str, \*\*kwargs) → ISecret | None

Get the value of a secret.

* **Parameters:**
  * **key** (*str*) – unique secret identifier
  * **kwargs** – additional keyword arguments to pass to the secrets
  * **required** (*client for authentication if*)

### fiftyone.plugins.list_skills(enabled=True, plugin=None, category=None)

Lists available skills from installed plugins.

* **Parameters:**
  * **enabled** (*True*) – whether to include only enabled plugins (True),
    only disabled plugins (False), or all plugins (`"all"`)
  * **plugin** (*None*) – a plugin name or list of plugin names to include.
    By default, skills from all plugins are included
  * **category** (*None*) – a category or list of categories to filter by.
    By default, skills of all categories are included
* **Returns:**
  a list of `SkillDefinition` instances
