# Publishers

## Publisher Protocol & Base Classes

| [`Publisher`](https://dev.nominal.io/instro/ref/library/instro.lib.publishers.publisher.Publisher.md#instro.lib.publishers.publisher.Publisher "instro.lib.publishers.publisher.Publisher") |  |
| --- | --- |
| [`BufferedPublisher`](https://dev.nominal.io/instro/ref/library/instro.lib.publishers.publisher.BufferedPublisher.md#instro.lib.publishers.publisher.BufferedPublisher "instro.lib.publishers.publisher.BufferedPublisher") |  |
| [`BasicBufferedPublisher`](https://dev.nominal.io/instro/ref/library/instro.lib.publishers.publisher.BasicBufferedPublisher.md#instro.lib.publishers.publisher.BasicBufferedPublisher "instro.lib.publishers.publisher.BasicBufferedPublisher") |  |
| [`QueuedPublisher`](https://dev.nominal.io/instro/ref/library/instro.lib.publishers.publisher.QueuedPublisher.md#instro.lib.publishers.publisher.QueuedPublisher "instro.lib.publishers.publisher.QueuedPublisher") |  |
| [`SharedPublisher`](https://dev.nominal.io/instro/ref/library/instro.lib.publishers.publisher.SharedPublisher.md#instro.lib.publishers.publisher.SharedPublisher "instro.lib.publishers.publisher.SharedPublisher") | A publisher that can be shared between multiple instruments. |

## File Publishers

| [`FilePublisher`](https://dev.nominal.io/instro/ref/library/instro.lib.publishers.files.FilePublisher.md#instro.lib.publishers.files.FilePublisher "instro.lib.publishers.files.FilePublisher") | Write Measurement/Command data to a file or to an open stream. |
| --- | --- |
| [`FileWriter`](https://dev.nominal.io/instro/ref/library/instro.lib.publishers.files.FileWriter.md#instro.lib.publishers.files.FileWriter "instro.lib.publishers.files.FileWriter") | Base class for format writers. |
| [`JsonFileWriter`](https://dev.nominal.io/instro/ref/library/instro.lib.publishers.files.JsonFileWriter.md#instro.lib.publishers.files.JsonFileWriter "instro.lib.publishers.files.JsonFileWriter") | Write records as one JSON array. |
| [`JsonlFileWriter`](https://dev.nominal.io/instro/ref/library/instro.lib.publishers.files.JsonlFileWriter.md#instro.lib.publishers.files.JsonlFileWriter "instro.lib.publishers.files.JsonlFileWriter") | Write newline-delimited JSON, one record per line. |
| [`CsvFileWriter`](https://dev.nominal.io/instro/ref/library/instro.lib.publishers.files.CsvFileWriter.md#instro.lib.publishers.files.CsvFileWriter "instro.lib.publishers.files.CsvFileWriter") | Write one CSV row per channel value, after a header unless the stream already has data. |
| [`AvroFileWriter`](https://dev.nominal.io/instro/ref/library/instro.lib.publishers.files.AvroFileWriter.md#instro.lib.publishers.files.AvroFileWriter "instro.lib.publishers.files.AvroFileWriter") | Write snappy-compressed Avro records in the Nominal Core ingest schema. |

## Nominal Core Publisher

| [`NominalCorePublisher`](https://dev.nominal.io/instro/ref/library/instro.lib.publishers.nominal_core.NominalCorePublisher.md#instro.lib.publishers.nominal_core.NominalCorePublisher "instro.lib.publishers.nominal_core.NominalCorePublisher") | Stream Measurement/Command data to a Nominal Core dataset. |
| --- | --- |

## Nominal Connect Publisher

| [`NominalConnectPublisher`](https://dev.nominal.io/instro/ref/library/instro.lib.publishers.nominal_connect.NominalConnectPublisher.md#instro.lib.publishers.nominal_connect.NominalConnectPublisher "instro.lib.publishers.nominal_connect.NominalConnectPublisher") | Publish Measurement/Command data to a Nominal Connect stream. |
| --- | --- |

## Plotly Publisher

| [`PlotlyPublisher`](https://dev.nominal.io/instro/ref/library/instro.lib.publishers.plot.PlotlyPublisher.md#instro.lib.publishers.plot.PlotlyPublisher "instro.lib.publishers.plot.PlotlyPublisher") | Plot Measurement/Command data on a Plotly figure, one trace per channel. |
| --- | --- |

## Channel Buffers

| [`ChannelBufferPublisher`](https://dev.nominal.io/instro/ref/library/instro.lib.publishers.channel_buffer.ChannelBufferPublisher.md#instro.lib.publishers.channel_buffer.ChannelBufferPublisher "instro.lib.publishers.channel_buffer.ChannelBufferPublisher") | Base class for channel buffer publishers that store measurements in memory. |
| --- | --- |
| [`DequeInMemoryPublisher`](https://dev.nominal.io/instro/ref/library/instro.lib.publishers.channel_buffer.DequeInMemoryPublisher.md#instro.lib.publishers.channel_buffer.DequeInMemoryPublisher "instro.lib.publishers.channel_buffer.DequeInMemoryPublisher") |  |
| [`NumpyInMemoryPublisher`](https://dev.nominal.io/instro/ref/library/instro.lib.publishers.channel_buffer.NumpyInMemoryPublisher.md#instro.lib.publishers.channel_buffer.NumpyInMemoryPublisher "instro.lib.publishers.channel_buffer.NumpyInMemoryPublisher") | String-valued channels are stored in a plain deque; a float32 ring cannot hold them. |
| [`NumpyRingBuffer`](https://dev.nominal.io/instro/ref/library/instro.lib.publishers.channel_buffer.NumpyRingBuffer.md#instro.lib.publishers.channel_buffer.NumpyRingBuffer "instro.lib.publishers.channel_buffer.NumpyRingBuffer") |  |
| [`ChannelNotFoundError`](https://dev.nominal.io/instro/ref/library/instro.lib.publishers.channel_buffer.ChannelNotFoundError.md#instro.lib.publishers.channel_buffer.ChannelNotFoundError "instro.lib.publishers.channel_buffer.ChannelNotFoundError") | Raised when a channel does not appear within the specified timeout. |
| [`ChannelValueTimeoutError`](https://dev.nominal.io/instro/ref/library/instro.lib.publishers.channel_buffer.ChannelValueTimeoutError.md#instro.lib.publishers.channel_buffer.ChannelValueTimeoutError "instro.lib.publishers.channel_buffer.ChannelValueTimeoutError") | Raised when sufficient channel values are not available within the specified timeout. |
