# @mwillbanks/tuil-streaming

Source: /tuil/docs/reference/packages/streaming
Locale: en

Extensible backpressure-aware streaming parsers, transformers, and projections for tuil.



## Overview [#overview]

Extensible backpressure-aware streaming parsers, transformers, and projections for tuil.

`@mwillbanks/tuil-streaming` is independently installable and also participates in the
umbrella `@mwillbanks/tuil` runtime where applicable.

## Installation [#installation]

<CodeBlockTabs defaultValue="npm">
  <CodeBlockTabsList>
    <CodeBlockTabsTrigger value="npm">
      npm
    </CodeBlockTabsTrigger>

    <CodeBlockTabsTrigger value="pnpm">
      pnpm
    </CodeBlockTabsTrigger>

    <CodeBlockTabsTrigger value="yarn">
      yarn
    </CodeBlockTabsTrigger>

    <CodeBlockTabsTrigger value="bun">
      bun
    </CodeBlockTabsTrigger>
  </CodeBlockTabsList>

  <CodeBlockTab value="npm">
    ```bash
    npm install @mwillbanks/tuil-streaming
    ```
  </CodeBlockTab>

  <CodeBlockTab value="pnpm">
    ```bash
    pnpm add @mwillbanks/tuil-streaming
    ```
  </CodeBlockTab>

  <CodeBlockTab value="yarn">
    ```bash
    yarn add @mwillbanks/tuil-streaming
    ```
  </CodeBlockTab>

  <CodeBlockTab value="bun">
    ```bash
    bun add @mwillbanks/tuil-streaming
    ```
  </CodeBlockTab>
</CodeBlockTabs>

## How it operates [#how-it-operates]

Streaming pipelines incrementally decode and parse common text formats with cancellation, backpressure, transforms, projections, diagnostics, bounded source, and replay.

<Mermaid
  chart="flowchart LR
  S0[&#x22;decode chunks&#x22;]
  S1[&#x22;parse partials&#x22;]
  S2[&#x22;transform/project&#x22;]
  S3[&#x22;end/cancel&#x22;]
  S0 --> S1
  S1 --> S2
  S2 --> S3"
/>

## API [#api]

| API                                                                                                       | Signature                              | Description                                  |
| --------------------------------------------------------------------------------------------------------- | -------------------------------------- | -------------------------------------------- |
| [`BackpressureController`](/tuil/docs/reference/packages/streaming/api/backpressure-controller)                | `interface BackpressureController`     | Public interface BackpressureController.     |
| [`BoundedBackpressureController`](/tuil/docs/reference/packages/streaming/api/bounded-backpressure-controller) | `class BoundedBackpressureController`  | Public class BoundedBackpressureController.  |
| [`builtInDocumentTransformers`](/tuil/docs/reference/packages/streaming/api/built-in-document-transformers)    | `constant builtInDocumentTransformers` | Public constant builtInDocumentTransformers. |
| [`builtInFormatParsers`](/tuil/docs/reference/packages/streaming/api/built-in-format-parsers)                  | `constant builtInFormatParsers`        | Public constant builtInFormatParsers.        |
| [`builtInRenderProjections`](/tuil/docs/reference/packages/streaming/api/built-in-render-projections)          | `constant builtInRenderProjections`    | Public constant builtInRenderProjections.    |
| [`DocumentNode`](/tuil/docs/reference/packages/streaming/api/document-node)                                    | `interface DocumentNode`               | Public interface DocumentNode.               |
| [`DocumentTransformer`](/tuil/docs/reference/packages/streaming/api/document-transformer)                      | `interface DocumentTransformer`        | Public interface DocumentTransformer.        |
| [`FormatParser`](/tuil/docs/reference/packages/streaming/api/format-parser)                                    | `interface FormatParser`               | Public interface FormatParser.               |
| [`FormatParserSession`](/tuil/docs/reference/packages/streaming/api/format-parser-session)                     | `interface FormatParserSession`        | Public interface FormatParserSession.        |
| [`ParserDiagnostic`](/tuil/docs/reference/packages/streaming/api/parser-diagnostic)                            | `interface ParserDiagnostic`           | Public interface ParserDiagnostic.           |
| [`PartialDocument`](/tuil/docs/reference/packages/streaming/api/partial-document)                              | `interface PartialDocument`            | Public interface PartialDocument.            |
| [`RenderProjection`](/tuil/docs/reference/packages/streaming/api/render-projection)                            | `interface RenderProjection`           | Public interface RenderProjection.           |
| [`SourceSpan`](/tuil/docs/reference/packages/streaming/api/source-span)                                        | `interface SourceSpan`                 | Public interface SourceSpan.                 |
| [`StreamDecoder`](/tuil/docs/reference/packages/streaming/api/stream-decoder)                                  | `interface StreamDecoder`              | Public interface StreamDecoder.              |
| [`StreamEvent`](/tuil/docs/reference/packages/streaming/api/stream-event)                                      | `type StreamEvent`                     | Public type StreamEvent.                     |
| [`StreamRenderer`](/tuil/docs/reference/packages/streaming/api/stream-renderer)                                | `interface StreamRenderer`             | Public interface StreamRenderer.             |
| [`Utf8StreamDecoder`](/tuil/docs/reference/packages/streaming/api/utf8-stream-decoder)                         | `class Utf8StreamDecoder`              | Public class Utf8StreamDecoder.              |

## Events and lifecycle [#events-and-lifecycle]

Typed start, document, diagnostic, and end events carry monotonically increasing sequence numbers.

All subscriptions and registrations return a disposer or belong to an owning
runtime that disposes them in reverse order.

## Example [#example]

```tsx
const pipeline = new StreamingPipeline({ format: "jsonl" });
await pipeline.write(chunk);
```

## Related [#related]

* [Package architecture](/tuil/docs/concepts/packages)
* [Events](/tuil/docs/concepts/events)
* [Testing](/tuil/docs/guides/testing)
