# What changed in fuse.js

> 43 changes in fuse.js 7 from its official release notes, upgrade guides and advisories: 10 breaking, 1 security, 6 new APIs and options. Each one cited. Sources checked 2026-10-18. HTML: https://unstale.sh/npm/fuse.js/

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

## fuse.js 7

### Breaking changes

- Tabs and newlines now count as word separators when scoring fields, changing scores for fields containing them. (7.5.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.5.0)
- Field-length normalisation now counts word starts instead of space transitions, changing field scores. (7.5.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.5.0)
- Key weights are normalised in object and keyless-logical search, changing relative rankings when weights do not sum to 1. (7.5.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.5.0)
- When scores tie at the cutoff boundary, limit now returns the correct top-N results. (7.5.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.5.0)
- The exact-match shortcut now respects minMatchCharLength, excluding shorter matches from the matches array. (7.5.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.5.0)
- Explicitly rejects `useTokenSearch` in `Fuse.match`. (7.4.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.4.0)
- For array-path keys, `match.key` now returns the canonical dotted string instead of a raw string array; consumers can remove `.join('.')` conversions. (7.4.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.4.0)
- Rejects `useTokenSearch` in `FuseWorker`. (7.4.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.4.0)
- An empty query now returns all results. (7.3.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.3.0)
- UMD builds are no longer provided. (7.3.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.3.0)

### Security

- toJSON() omits getFn from keys for safe serialization. (7.3.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.3.0)

### New APIs and options

- Adds a class that shards a collection across Web Workers, runs searches in parallel, and preserves Fuse result ordering. (7.4.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.4.0)
- Adds a customizable tokenizer and a unicode-aware default that segments CJK, Cyrillic, Greek, Arabic, and other scripts. (7.4.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.4.0)
- Adds `'all'` and `'any'` token-search semantics; the default `'any'` preserves existing behavior, while `'all'` requires every query word to match. (7.4.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.4.0)
- Adds a static method for single string matching. (7.3.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.3.0)
- Token search adds per-term fuzzy matching with IDF scoring. (7.3.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.3.0)
- Adds runtime plugin registration. (7.2.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.2.0)

### Performance

- Includes optimizations to Bitap search, search hot paths, index creation, field normalization, and collection removal. (7.4.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.4.0)
- Compiled searchers are cached for repeated queries. (7.2.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.2.0)
- Search uses heap-based top-k selection when `limit` is set. (7.2.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.2.0)
- Bulk removals now use O(n) batching instead of O(n*k). (7.2.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.2.0)

### Behavior and default changes

- BigInt values are supported for indexing and search. (7.3.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.3.0)
- Extended search supports an escaped pipe. (7.3.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.3.0)
- A null return from getFn is supported. (7.3.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.3.0)
- Logical queries now support keyless string entries. (7.3.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.3.0)
- removeAt() now returns the removed item. (7.3.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.3.0)

### Fixes and other changes

- CommonJS type declarations now resolve correctly for consumers using moduleResolution: node16 or nodenext, avoiding TS1479 when importing from a CommonJS project. (7.4.2) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.4.2)
- TypeScript declarations are now shipped for this subpath, allowing it to resolve types under node16/nodenext and bundler module resolution. (7.4.1) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.4.1)
- TypeScript declarations are now shipped for this subpath, allowing it to resolve types under node16/nodenext and bundler module resolution. (7.4.1) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.4.1)
- Invalidates the searcher cache when the collection is mutated. (7.4.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.4.0)
- Corrects doc-index alignment for string collections containing blank documents. (7.4.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.4.0)
- Restricts Bitap highlight indices to the matched window. (7.4.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.4.0)
- Renumbers the inverted index after document removal. (7.4.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.4.0)
- Non-string array values are coerced to strings during indexing. (7.3.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.3.0)
- The default config is frozen to prevent mutation across instances. (7.3.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.3.0)
- Overlapping match indices are merged in extended search. (7.3.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.3.0)
- Inverse patterns now work correctly across multiple keys. (7.3.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.3.0)
- Extended search handles quoted tokens containing inner spaces and quotes. (7.3.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.3.0)
- Handles non-decomposable diacritics. (7.3.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.3.0)
- Corrects the type of `key` in `FuseSortFunctionMatch`. (7.2.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.2.0)
- Search results deduplicate and merge overlapping match indices. (7.2.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.2.0)
- Preserves original array indices during nested path traversal. (7.2.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.2.0)
- Corrects the type of the `keys` parameter in `parseIndex`. (7.2.0) — [release notes](https://github.com/krisk/Fuse/releases/tag/v7.2.0)
