# Proofing

Checks text through a host-supplied proofing provider and displays transient findings. The default null provider performs no checking.

Checks text through a host-supplied proofing provider and displays transient findings. The default null provider performs no checking.

`@quirekit/extension-proofing` · **MIT**

## Editor compatibility
Layer：**Shared document capability**
| Editor | Status | Assembly and boundaries |
| --- | --- | --- |
| Classic | Supported | [createClassicWordPreset](/en/plugins/reference/create-classic-word-preset) — Use createClassicWordPreset for Word models, layout and product integration. Controls, flags, host services and file support follow this page. Full comment, revision and content-control authoring UI additionally requires Pro. |
| Block | Requires integration | Connect the services, targets and lifecycle described on this page and validate the selected View and document model. Core contracts are reusable, but there is no universal product installation without host ports. |

“Supported” means the product assembly above exists; interaction, host services and file formats retain their own conditions. See [status and integration rules](/en/plugins/compatibility). Licensing is shown separately.

## Installation

```sh
pnpm add @quirekit/extension-proofing@alpha
```

Install in Editor extensions. The host supplies a view, container and persistence; see [Quick start](/en/guide/quick-start).

```ts
import { Proofing } from '@quirekit/extension-proofing'
```

Use compatible versions available from your distribution source. This site uses the Alpha workspace. License labels come from package metadata; see [support and licensing](/en/support).

## Integration by editor

These snippets use an existing host element named element. The host owns container sizing and persistence; call instance.destroy() on teardown. Avoid duplicating preset capabilities and supply required host ports before installation.

### Classic

Use createClassicWordPreset for Word models, layout and product integration. Controls, flags, host services and file support follow this page. Full comment, revision and content-control authoring UI additionally requires Pro.

[createClassicWordPreset](/en/plugins/reference/create-classic-word-preset)

```ts
import { createClassicEditor } from '@quirekit/classic-editor'
import '@quirekit/classic-editor/styles.css'
import { createClassicWordDefaultDocument, createClassicWordPreset } from '@quirekit/classic-docx'
import '@quirekit/classic-docx/styles.css'

const instance = createClassicEditor({
  element,
  preset: createClassicWordPreset(),
  document: createClassicWordDefaultDocument(),
})
```

### Block

Connect the services, targets and lifecycle described on this page and validate the selected View and document model. Core contracts are reusable, but there is no universal product installation without host ports.

## Configuration

These are extension-level defaults. Presets can override them; they are distinct from current document attributes. See [configuration](/en/plugins/configuration).

### enabled

Whether checking starts enabled.

Type：`boolean`

Default：`true`

### provider

Engine; checking stays disabled while null.

Type：`ProofingProvider | null`

Default：`null`

### policy

Document-model knowledge; defaults treat every textblock as body text.

Type：`ProofingDocumentPolicy | null`

Default：`null`

### defaultLanguage

Language used when a text has none.

Type：`string | null`

Default：`"en-US"`

### debounceMs

Quiet period after an edit before checking.

Type：`number`

Default：`400`

### maxWaitMs

Longest delay while edits keep arriving.

Type：`number`

Default：`2000`

### timeoutMs

Longest time one provider request may run.

Type：`number`

Default：`10000`

### maxConcurrentRequests

Requests running at once.

Type：`number`

Default：`2`

### maxSegmentsPerBatch

Segments per request.

Type：`number`

Default：`40`

### maxCharactersPerBatch

UTF-16 characters per request.

Type：`number`

Default：`8000`

### maxSuggestions

Suggestions per finding.

Type：`number`

Default：`5`

### maxIssues

Findings kept for the whole document before reporting `limited`.

Type：`number`

Default：`2000`

### dictionaryStore

Persistent user dictionary, or null for session-only ignores.

Type：`ProofingDictionaryStore | null`

Default：`null`

### appearance

Underline colors.

Type：`ProofingAppearance`

Default：`{ spelling: "#e5484d", grammar: "#3e63dd", style: "#8e4ec6" }`

### onError

Receives provider failures, timeouts, and invalid results.

Type：`((error: ProofingError) => void) | null`

Default：`null`

### resolveVisibleRange

Resolves the visible document interval checked right after the caret's block.

Type：`((editor: QuireEditor) => ProofingRange | null) | null`

Default：`resolveDefaultProofingVisibleRange`

## Commands and runtime

These commands are supplied directly by this extension. Availability depends on the installed schema, selection and protection policy; query editor.can() first.

| Command | Parameter signature |
| --- | --- |
| `setProofingEnabled` | `setProofingEnabled(enabled: boolean)` |
| `recheckProofing` | `recheckProofing()` |
| `replaceProofingIssue` | `replaceProofingIssue(issueId: string, replacement: string)` |
| `ignoreProofingIssue` | `ignoreProofingIssue(issueId: string)` |
| `ignoreProofingWord` | `ignoreProofingWord(word: string)` |
| `addProofingWord` | `addProofingWord(word: string)` |

These are parameter signatures. See [commands and controls](/en/build/commands) to connect UI while retaining one transaction/history authority.

Checking requires a provider. @quirekit/proofing-harper and @quirekit/proofing-hunspell are service adapters rather than additional Core extensions.

## Next steps

Return to [all plugins](/en/plugins), or read [configuration](/en/plugins/configuration) to distinguish options, attributes and commands.

See [extension development](/en/build/extension) for custom capabilities and [Build a product](/en/build) for complete hosting.
