# Plug-in System

Learn about how things happen in Pyblish.

## Introduction

There are three ways in which a plug-in is associated with a particular set of data.

1. By availability
2. By host
3. By family

Availability is determined by registering a given plug-in to Pyblish, for example by calling [register\_plugin\_path()](https://github.com/pyblish/api/tree/9d41e509649f2dfb91bc4d595aebabed2dc0512f/pages/register_plugin_path.md). Once a plug-in is made available, it must also match the currently running host.

```python
class MyPlugin(...):
  hosts = ["maya"]
```

If the host matches, a plug-in is put to the final test; it's supported families.

```python
class MyPlugin(...):
  families = ["myFamily"]
```

**See also**

* [Plugin.hosts](https://api.pyblish.com/pyblish.api/plugin/plugin.hosts)

## Data

These data members are included.

| Data         | Description                                       |
| ------------ | ------------------------------------------------- |
| currentFile  | Current working file                              |
| workspaceDir | Higher-level directory of current file            |
| user         | Currently logged on user                          |
| cwd          | Current working directory (of Python interpreter) |

**Example**

```python
import pyblish.util
context = pyblish.util.collect()
print context.data["currentFile"]
```

\[2]: <https://github.com/pyblish/pyblish.api/wiki/Plugin.hosts>
