> ## Documentation Index
> Fetch the complete documentation index at: https://instro.nominal.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Contrib drivers

> Drivers Nominal accepts on contributor verification rather than direct testing

# Contrib drivers

[`instro-contrib`](https://github.com/nominal-io/instro/tree/main/packages/instro-contrib) is a separate package containing drivers that have passed code review but were **verified on real hardware by the contributor**, not by Nominal. They typically come from one of two sources:

* **Community contributions**: drivers submitted by users who own the hardware and tested locally.
* **Staff drops**: drivers Nominal has written for a device it doesn't have on hand.

If a driver is in `instro-contrib`, that means: it type-checks, it has a unit test against a mocked transport, and a Nominal reviewer has read it. It does **not** mean Nominal has personally run it on the device.

## Install

`instro-contrib` is published on PyPI and installed via the `contrib` extra:

```bash theme={null}
$ uv add "instro[contrib]"
```

or with pip:

```bash theme={null}
(.venv) $ pip install "instro[contrib]"
```

It's also included in the `all` extra. See [Installation](/instrumentation/installation#additional-packages) for the full list of extras.

## Import path

Contrib drivers live under `instro.contrib.<category>.drivers.<driver_module>`:

```python theme={null}
from instro.contrib.psu.drivers import SomeVendorPSU
from instro.psu import InstroPSU

psu = InstroPSU(
    name="myPSU",
    driver=SomeVendorPSU(visa_resource="USB0::..."),
    num_channels=1,
)
```

The category-level class (`InstroPSU`, `InstroDMM`, etc.) is always imported from core `instro`. Only the concrete driver lives in `instro.contrib`.

## Stability expectations

* **API may change between releases.** A contrib driver's constructor or behavior may be revised based on user feedback or graduation. Pin to a specific commit if you need a frozen target.
* **No regression verification by Nominal.** A core dependency change (e.g. a `VisaDriver` refactor) might break a contrib driver between releases. The smoke test catches import-level breaks. Behavioral breaks may not surface until you run it.
* **Bugs are accepted as PRs.** If you hit a problem with a contrib driver, the fastest path to a fix is usually contributing one: the original author may not be reachable.

## Available drivers

This is the complete set of `instro-contrib` drivers as of the current release.

### Matrix WPS300S-series PSU

**Class**: `MatrixWPS300S`\
**Import**: `from instro.contrib.psu.drivers import MatrixWPS300S`\
**Tested against**: WPS300S-150-5 (0–150 V, 0–5 A, 300 W)\
**Protocol**: SCPI over RS-232, 9600 baud 8-N-1

Drivers should be added to this list as part of the merge which brings them into the main branch. For pre-release drivers browse [`packages/instro-contrib/instro/contrib/`](https://github.com/nominal-io/instro/tree/main/packages/instro-contrib/instro/contrib) or [this file](https://github.com/nominal-io/instro/blob/main/docs/guides/instrumentation/contrib.mdx) in the source GitHub repository.

## Graduation to core

When Nominal acquires the hardware and can verify the driver directly, it moves into core `instro`. The import path drops `.contrib`:

```python theme={null}
# Before (contrib)
from instro.contrib.psu.drivers import SomeVendorPSU

# After graduation (core)
from instro.psu.drivers import SomeVendorPSU
```

Graduations are noted in `CHANGELOG.md`. The old `instro.contrib` import path is a hard cutover. There is no compatibility shim: old code stays broken until the import is updated.

For one release after the graduation, a stub at the old path raises an `ImportError` that names the destination:

```python theme={null}
from instro.contrib.psu.drivers import SomeVendorPSU
# ImportError: SomeVendorPSU graduated to core in v1.2. Import it from instro.psu.drivers.
```

The stub is deleted in the following release, after which the old import fails with a plain `ImportError`.

## Contributing a driver

See the **Contrib Package** section of [`CONTRIBUTING.md`](https://github.com/nominal-io/instro/blob/main/CONTRIBUTING.md) for the contribution bar and review process.
