# What changed in slate

> 82 changes in slate 0.123 to 0.144 from its official release notes, upgrade guides and advisories: 13 breaking, 1 security, 34 new APIs and options. Each one cited. Sources checked 2026-10-18. HTML: https://unstale.sh/npm/slate/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## slate 0.144

### Breaking changes

- BaseEditor now requires setChildren; createEditor supplies it, while hand-built editors and test mocks must add it. (0.144.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.144.0)
- Deleting beside two non-selectable blocks, or a read-only block whose content is all non-selectable, now removes them instead of merging their text. (0.144.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.144.0)

### New APIs and options

- Applies an outside document through Slate operations, keeping unchanged nodes and preserving selection, refs and history. (0.144.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.144.0)

### Behavior and default changes

- With history enabled, each setChildren call is recorded as one undo step, separate from typing before and after it. (0.144.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.144.0)

### Fixes and other changes

- No longer returns points inside consecutive non-selectable elements or inside a non-selectable first child of a void or read-only element. (0.144.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.144.0)
- No longer returns points inside consecutive non-selectable elements or inside a non-selectable first child of a void or read-only element. (0.144.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.144.0)

## slate 0.143

### New APIs and options

- Adds editor.getSplitProperties(node, path) to choose properties copied to the new right-hand node by Transforms.splitNodes; createEditor supplies it, while structural editor implementations and mocks must add the method. (0.143.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.143.0)

## slate 0.142

### New APIs and options

- createEditor accepts an optional type parameter; createEditor<BaseEditor>() returns a plain BaseEditor, so plugin chains are type-checked against the plugins actually applied. (0.142.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.142.0)

### Fixes and other changes

- Opt-in edge affinity leaves collapsed selections outside text nodes to the transform, avoiding a “Cannot get the leaf node” error. (0.142.1) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.142.1)

## slate 0.141

### Breaking changes

- Dropping a dragged block void onto the middle of a paragraph now splits the paragraph in the same way as pasting a block-level node. (0.141.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.141.0)
- Pasting block-level nodes mid-block now splits the block so the nodes land between its halves, and moves the cursor to the start of the second half. (0.141.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.141.0)

### New APIs and options

- Adds a query for consistent insertion at inline and mark boundaries; BaseEditor requires it, while createEditor supplies it automatically. (0.141.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.141.0)
- Adds an opt-in editor hook that configures insertion affinity at inline boundaries; it defaults to null, preserving existing behavior. (0.141.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.141.0)
- Adds a filter option called for each fragment node with the destination block entry; returning false skips that node. (0.141.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.141.0)
- Adds an opt-in editor hook that configures insertion affinity at leaf boundaries; it defaults to null, preserving existing behavior. (0.141.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.141.0)

### Fixes and other changes

- Reports the receiving leaf’s marks when affinity rules determine the insertion point. (0.141.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.141.0)

## slate 0.140

### Breaking changes

- An invalid call combining block children with text or inline children now throws with both node paths instead of allowing normalization to discard content. (0.140.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.140.0)

### Fixes and other changes

- When fragment replacement leaves an insertion point at a block-leading or trailing inline, the required empty text is inserted so insertion stays within the block before emptied containers normalize. (0.140.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.140.0)

## slate 0.139

### New APIs and options

- Adds an API for identifying remote changes, alongside inward affinity support for expanded selections during remote operations. (0.139.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.139.0)
- Adds a way for bindings to apply remote operations with inward affinity for expanded selections, keeping text inserted at selection edges outside the selected content. (0.139.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.139.0)

### Fixes and other changes

- Includes text boundaries after inline voids in position traversal and restarts word segmentation there, aligning positions with Editor.before and Editor.after. (0.139.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.139.0)
- When deleting an expanded target before inserting a fragment, honors voids: true and inserts at the surviving start point if the range ends inside an inline element. (0.139.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.139.0)

## slate 0.138

### Breaking changes

- Hanging selections and native triple-click selections delete whole blocks only at the top level; nested blocks keep the previous behavior. (0.138.1) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.138.1)
- Removes wholly selected sibling blocks when a selection starts at the start of a block and ends at the start of a later sibling; ranges inside editor.isIsolated elements retain the previous behavior. (0.138.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.138.0)

### New APIs and options

- Accepts isWordCharacter for custom boundaries when unit is 'word', matching the callback supported by Editor.word. (0.138.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.138.0)
- Accepts isWordCharacter for custom boundaries when unit is 'word', matching the callback supported by Editor.word. (0.138.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.138.0)
- Accepts isWordCharacter for custom boundaries when unit is 'word', matching the callback supported by Editor.word. (0.138.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.138.0)
- Supports select; explicit true moves the caret to the result even with an explicit at, and insertion selects by default when at is omitted. (0.138.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.138.0)
- Supports select; explicit true moves the caret to the result, while the default preserves a null selection. Use true to create a caret after inserting into an unfocused document. (0.138.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.138.0)
- Supports select; explicit true moves the caret to the result, while moving retains its existing selection-following behavior by default. (0.138.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.138.0)
- Supports select; explicit true moves the caret to the result, while moving retains its existing selection-following behavior by default. (0.138.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.138.0)
- Supports select; explicit true moves the caret to the result even with an explicit at, and splitting selects by default when at is omitted. (0.138.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.138.0)
- Adds ignore to exclude selected top-level properties from comparison, independently of the existing loose option. (0.138.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.138.0)

### Performance

- Restores faster loose comparisons when `ignore` is not set, avoiding the slowdown introduced in 0.138.0. (0.138.2) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.138.2)

### Fixes and other changes

- When an `apply` override changes inserted text, the selection follows the operation by default, and `select: true` selects the end of the text actually applied. (0.138.1) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.138.1)
- After undoing a whole-block deletion, the default behavior scrolls to the restored text instead of the start of the following block. (0.138.1) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.138.1)

## slate 0.137

### New APIs and options

- The editor.setNodes type now accepts the replace option. (0.137.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.137.0)
- Transforms.setNodes and editor.setNodes accept a function to compute properties per matched node. (0.137.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.137.0)

## slate 0.136

### New APIs and options

- Returns the range of the word around a point within its block; words can cross mark changes and inline links but stop at voids. (0.136.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.136.0)
- Lets you define your own word characters for word handling. (0.136.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.136.0)

### Behavior and default changes

- The 'word' unit for deletion, movement, and Editor.before/after/positions uses Intl.Segmenter where available, so Chinese, Japanese, and Thai text without spaces is handled one word at a time. (0.136.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.136.0)

### Fixes and other changes

- Includes text an input method is still composing. (0.136.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.136.0)

## slate 0.135

### New APIs and options

- Identifies isolated elements whose edges prevent Backspace, Delete, range deletion, and insertBreak from merging or splitting across them. (0.135.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.135.0)
- The replace option removes every property not in props in the same operation, preventing old node properties from carrying over when changing type; undo restores them. (0.135.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.135.0)

## slate 0.134

### New APIs and options

- Adds Editor.hasRange to core; DOMEditor.hasRange and ReactEditor.hasRange use it, falling back to the path check with older Slate versions. (0.134.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.134.0)
- Path, point, and range refs support Symbol.dispose so using declarations can release tracked locations automatically. TypeScript consumers need TypeScript 5.2 or later with esnext.disposable in lib, or skipLibCheck. (0.134.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.134.0)
- Adds a height option to lift matched nodes through multiple ancestors. (0.134.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.134.0)

### Performance

- Tree-altering operations are faster by using faster array functions when copying and replacing children. (0.134.1) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.134.1)

### Fixes and other changes

- Unwrapping nodes with split: true respects partial inline selections and preserves unselected portions of the inline. (0.134.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.134.0)
- Errors now include the next dirty path to help locate normalizeNode logic that keeps a node invalid. (0.134.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.134.0)

## slate 0.133

### Fixes and other changes

- Keeps unselected text outside an inline wrapper when wrapNodes splits a selection across an existing inline boundary. (0.133.7) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.133.7)
- Preserves selection endpoints at the end of the document when inserting fragments, so pasting over select-all removes trailing voids and empty paragraphs. (0.133.3) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.133.3)
- Keeps a valid insertion point when replacing a selection whose end node is removed, including when that node is read-only. (0.133.1) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.133.1)
- Keeps a valid insertion point when replacing a selection whose end node is removed, including when that node is a void node. (0.133.1) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.133.1)

## slate 0.132

### New APIs and options

- Adds a method that returns whether a range is forward, backward, or collapsed. (0.132.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.132.0)

### Fixes and other changes

- Fixes the PropsMerge type so the merge option can return scalar property values, not just objects. (0.132.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.132.0)

## slate 0.131

### Breaking changes

- Transforms.unwrapNodes now unhangs a range by default; pass hanging: true to preserve the old behavior. (0.131.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.131.0)
- Transforms.wrapNodes now unhangs a range by default; pass hanging: true to preserve the old behavior. (0.131.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.131.0)

### Fixes and other changes

- Backspace at the start of a block following a list or table no longer pulls that block into the list or table. (0.131.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.131.0)
- Fixes inserting a fragment into an editor whose only block is empty, which previously left an extra untyped empty block before the inserted content. (0.131.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.131.0)
- An explicit at path no longer causes a programmatic delete to refill the editor with an untyped empty block. (0.131.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.131.0)

## slate 0.130

### Breaking changes

- Deleting the editor’s only node now leaves an empty block, so the editor retains a start point for focusing or typing. (0.130.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.130.0)

### Performance

- Only walks the top-level blocks covered by the range, so copying or cutting in a large document no longer takes time proportional to the whole document. (0.130.1) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.130.1)

## slate 0.129

### Breaking changes

- Deleting a character or word now removes the empty block and selects the void, instead of deleting the void. (0.129.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.129.0)

### Fixes and other changes

- Deleting a single character next to, or inside, an empty non-void inline now removes the inline instead of skipping over it and deleting the character on its other side. (0.129.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.129.0)

## slate 0.128

### Breaking changes

- In Chrome and Safari, pressing Delete on a selected void now deletes forward instead of backward. (0.128.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.128.0)

### Fixes and other changes

- The type signature now allows non-Range properties of Selections; functionality is unchanged. (0.128.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.128.0)
- Deleting a void backward from a cursor inside it places the cursor before the removed void; in Chrome and Safari, Delete on a selected void deletes forward. (0.128.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.128.0)

## slate 0.126

### New APIs and options

- Its types now allow setting optional node properties to null, which unsets them. (0.126.1) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.126.1)

### Behavior and default changes

- Its types now allow setting optional node properties to null, which unsets them. (0.126.1) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.126.1)

### Fixes and other changes

- Nested data structures inside array properties on nodes are now deeply compared when merging identical text nodes; previously array items were compared using ===. (0.126.2) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.126.2)
- Character distance now treats Indic conjunct clusters as a single grapheme, so character-by-character cursor movement no longer stops inside conjuncts. (0.126.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.126.0)

## slate 0.124

### Breaking changes

- Paths containing strings are no longer allowed when getting nodes. (0.124.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.124.0)

### Security

- Property accessors are hardened against untrusted keys. (0.124.1) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.124.1)

### New APIs and options

- Added a force property to normalizeNode, passed from the normalize method. (0.124.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.124.0)

### Fixes and other changes

- Corrects the argument type for the compare option. (0.124.1) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.124.1)
- Corrects the argument type for the merge option. (0.124.1) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.124.1)
- Fixes normalization hanging when merging text under non-selectable elements. (0.124.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.124.0)

## slate 0.123

### New APIs and options

- Added as an efficient type discriminator; use it instead of Path.isPath whenever possible. (0.123.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.123.0)
- Added as an efficient type discriminator; use it instead of Point.isPoint whenever possible. (0.123.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.123.0)
- Added as an efficient type discriminator; use it instead of Range.isRange whenever possible. (0.123.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.123.0)
- Added as an efficient type discriminator; use it instead of Span.isSpan whenever possible. (0.123.0) — [release notes](https://github.com/ianstormtaylor/slate/releases/tag/slate%400.123.0)
