# @mwillbanks/tuil-editor

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

Renderer-neutral editor contracts and tree-shakeable terminal editor implementations for tuil.



## Overview [#overview]

Renderer-neutral editor contracts and tree-shakeable terminal editor implementations for tuil.

`@mwillbanks/tuil-editor` 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-editor
    ```
  </CodeBlockTab>

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

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

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

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

Editor providers own documents, selections, history, composition, clipboard, commands, static output, and buffer, Vim, or rich editing behavior behind one contract.

<Mermaid
  chart="flowchart LR
  S0[&#x22;register provider&#x22;]
  S1[&#x22;create editor&#x22;]
  S2[&#x22;edit/command&#x22;]
  S3[&#x22;undo&#x22;]
  S4[&#x22;dispose&#x22;]
  S0 --> S1
  S1 --> S2
  S2 --> S3
  S3 --> S4"
/>

## API [#api]

| API                                                                                                   | Signature                               | Description                                   |
| ----------------------------------------------------------------------------------------------------- | --------------------------------------- | --------------------------------------------- |
| [`applyEditorTransactions`](/tuil/docs/reference/packages/editor/api/apply-editor-transactions)            | `function applyEditorTransactions`      | Public function applyEditorTransactions.      |
| [`assertEditorInvariant`](/tuil/docs/reference/packages/editor/api/assert-editor-invariant)                | `function assertEditorInvariant`        | Public function assertEditorInvariant.        |
| [`BuiltInRichNodeType`](/tuil/docs/reference/packages/editor/api/built-in-rich-node-type)                  | `type BuiltInRichNodeType`              | Public type BuiltInRichNodeType.              |
| [`EditorBackend`](/tuil/docs/reference/packages/editor/api/editor-backend)                                 | `interface EditorBackend`               | Public interface EditorBackend.               |
| [`EditorCapability`](/tuil/docs/reference/packages/editor/api/editor-capability)                           | `type EditorCapability`                 | Public type EditorCapability.                 |
| [`EditorChange`](/tuil/docs/reference/packages/editor/api/editor-change)                                   | `interface EditorChange`                | Public interface EditorChange.                |
| [`EditorCommand`](/tuil/docs/reference/packages/editor/api/editor-command)                                 | `interface EditorCommand`               | Public interface EditorCommand.               |
| [`EditorDecoration`](/tuil/docs/reference/packages/editor/api/editor-decoration)                           | `interface EditorDecoration`            | Public interface EditorDecoration.            |
| [`EditorDiagnostic`](/tuil/docs/reference/packages/editor/api/editor-diagnostic)                           | `interface EditorDiagnostic`            | Public interface EditorDiagnostic.            |
| [`EditorDocument`](/tuil/docs/reference/packages/editor/api/editor-document)                               | `interface EditorDocument`              | Public interface EditorDocument.              |
| [`EditorMode`](/tuil/docs/reference/packages/editor/api/editor-mode)                                       | `type EditorMode`                       | Public type EditorMode.                       |
| [`EditorPosition`](/tuil/docs/reference/packages/editor/api/editor-position)                               | `interface EditorPosition`              | Public interface EditorPosition.              |
| [`EditorProvider`](/tuil/docs/reference/packages/editor/api/editor-provider)                               | `interface EditorProvider`              | Public interface EditorProvider.              |
| [`EditorProviderFactory`](/tuil/docs/reference/packages/editor/api/editor-provider-factory)                | `type EditorProviderFactory`            | Public type EditorProviderFactory.            |
| [`EditorProviderOptions`](/tuil/docs/reference/packages/editor/api/editor-provider-options)                | `interface EditorProviderOptions`       | Public interface EditorProviderOptions.       |
| [`EditorRange`](/tuil/docs/reference/packages/editor/api/editor-range)                                     | `interface EditorRange`                 | Public interface EditorRange.                 |
| [`EditorSelection`](/tuil/docs/reference/packages/editor/api/editor-selection)                             | `interface EditorSelection`             | Public interface EditorSelection.             |
| [`EditorSession`](/tuil/docs/reference/packages/editor/api/editor-session)                                 | `interface EditorSession`               | Public interface EditorSession.               |
| [`EditorSnapshot`](/tuil/docs/reference/packages/editor/api/editor-snapshot)                               | `interface EditorSnapshot`              | Public interface EditorSnapshot.              |
| [`EditorTransaction`](/tuil/docs/reference/packages/editor/api/editor-transaction)                         | `interface EditorTransaction`           | Public interface EditorTransaction.           |
| [`insertText`](/tuil/docs/reference/packages/editor/api/insert-text)                                       | `function insertText`                   | Public function insertText.                   |
| [`RichDocument`](/tuil/docs/reference/packages/editor/api/rich-document)                                   | `interface RichDocument`                | Public interface RichDocument.                |
| [`RichDocumentSession`](/tuil/docs/reference/packages/editor/api/rich-document-session)                    | `class RichDocumentSession`             | Public class RichDocumentSession.             |
| [`RichEditorDocument`](/tuil/docs/reference/packages/editor/api/rich-editor-document)                      | `interface RichEditorDocument`          | Public interface RichEditorDocument.          |
| [`RichEditorProviderOptions`](/tuil/docs/reference/packages/editor/api/rich-editor-provider-options)       | `interface RichEditorProviderOptions`   | Public interface RichEditorProviderOptions.   |
| [`RichMark`](/tuil/docs/reference/packages/editor/api/rich-mark)                                           | `interface RichMark`                    | Public interface RichMark.                    |
| [`RichNode`](/tuil/docs/reference/packages/editor/api/rich-node)                                           | `interface RichNode`                    | Public interface RichNode.                    |
| [`RichNodeProvider`](/tuil/docs/reference/packages/editor/api/rich-node-provider)                          | `interface RichNodeProvider`            | Public interface RichNodeProvider.            |
| [`RichNodeType`](/tuil/docs/reference/packages/editor/api/rich-node-type)                                  | `type RichNodeType`                     | Public type RichNodeType.                     |
| [`RichTransaction`](/tuil/docs/reference/packages/editor/api/rich-transaction)                             | `interface RichTransaction`             | Public interface RichTransaction.             |
| [`runEditorProviderConformance`](/tuil/docs/reference/packages/editor/api/run-editor-provider-conformance) | `function runEditorProviderConformance` | Public function runEditorProviderConformance. |
| [`textBufferProvider`](/tuil/docs/reference/packages/editor/api/text-buffer-provider)                      | `constant textBufferProvider`           | Public constant textBufferProvider.           |
| [`TextBufferSession`](/tuil/docs/reference/packages/editor/api/text-buffer-session)                        | `class TextBufferSession`               | Public class TextBufferSession.               |
| [`vimEditorProvider`](/tuil/docs/reference/packages/editor/api/vim-editor-provider)                        | `constant vimEditorProvider`            | Public constant vimEditorProvider.            |
| [`VimEditorSession`](/tuil/docs/reference/packages/editor/api/vim-editor-session)                          | `class VimEditorSession`                | Public class VimEditorSession.                |
| [`VimKeymap`](/tuil/docs/reference/packages/editor/api/vim-keymap)                                         | `interface VimKeymap`                   | Public interface VimKeymap.                   |
| [`VimMode`](/tuil/docs/reference/packages/editor/api/vim-mode)                                             | `type VimMode`                          | Public type VimMode.                          |
| [`VimState`](/tuil/docs/reference/packages/editor/api/vim-state)                                           | `interface VimState`                    | Public interface VimState.                    |

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

Editors publish typed snapshots and command outcomes through provider-owned subscriptions.

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

## Example [#example]

```tsx
import { TextBufferSession } from "@mwillbanks/tuil-editor";

import { TextBufferSession } from "@mwillbanks/tuil-editor/buffer";

const editor = new TextBufferSession({ value: "hello" });
```

## Related [#related]

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