# What changed in shiki

> 71 changes in shiki 3 to 4 from its official release notes, upgrade guides and advisories: 3 breaking, 20 new APIs and options. Each one cited. Sources checked 2026-10-17. HTML: https://unstale.sh/npm/shiki/

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

## shiki 4

### Breaking changes

- Deprecated APIs were removed and are no longer available to developers. (4.0.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v4.0.0)
- Node v18 support was dropped, so developers must use a newer Node.js version. (4.0.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v4.0.0)

### New APIs and options

- Adds classActiveCode to control the active-code class produced by word highlighting. (4.5.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v4.5.0)
- Adds a transformer for rendering line numbers. (4.5.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v4.5.0)
- Adds a type field to ThemedToken. (4.3.1) — [release notes](https://github.com/shikijs/shiki/releases/tag/v4.3.1)
- Added a Svelte renderer for stream output, enabling Shiki stream rendering in Svelte applications. (4.3.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v4.3.0)
- Adds the @shikijs/magic-move package for Magic Move functionality. (4.2.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v4.2.0)
- Adds the @shikijs/stream package for stream-based Shiki usage. (4.2.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v4.2.0)
- A new package, @shikijs/markdown-exit, is available for developers to use. (4.0.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v4.0.0)

### Performance

- The React renderer groups tokens by line for more efficient rendering. (4.5.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v4.5.0)
- Tokenization reuses each regular expression's last search while processing a line. (4.5.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v4.5.0)
- Token split performance improvements make tokenization faster for developers using Shiki. (4.4.2) — [release notes](https://github.com/shikijs/shiki/releases/tag/v4.4.2)
- The @shikijs/primitive package became leaner, changing the package developers use in their projects. (4.0.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v4.0.0)

### Behavior and default changes

- codeToANSI now emits an explicit color level. (4.5.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v4.5.0)
- Grammars and themes were updated, affecting syntax highlighting behavior and appearance. (4.4.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v4.4.0)

### Fixes and other changes

- Twoslash avoids crashing when @errors nodes occur past end of file. (4.5.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v4.5.0)
- Repeated language loads no longer duplicate grammar injections. (4.5.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v4.5.0)
- The CLI falls back to text when a file or URL has no extension and no language option. (4.5.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v4.5.0)
- Wasm memory is disposed for lazily embedded languages. (4.5.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v4.5.0)
- Notations are preserved on content comment lines. (4.5.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v4.5.0)
- The rose-pine theme now handles split # and -- comments. (4.5.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v4.5.0)
- The CLI falls back to plaintext for unknown languages. (4.5.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v4.5.0)
- Twoslash tooltips now appear after a 200ms delay. (4.4.3) — [release notes](https://github.com/shikijs/shiki/releases/tag/v4.4.3)
- YAML is now guessed from frontmatter segments, improving language detection for those segments. (4.4.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v4.4.0)
- Correctly handles YAML comment prefixes for v3. (4.2.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v4.2.0)
- Fixes scroll blocking on mobile viewports. (3.21.0, 4.2.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v4.2.0), [release notes](https://github.com/shikijs/shiki/releases/tag/v3.21.0)
- tsModule is now forwarded to createTwoslasher, ensuring the configured TypeScript module reaches the twoslash implementation. (4.1.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v4.1.0)
- ANSI language now works with multiple themes. (4.0.2) — [release notes](https://github.com/shikijs/shiki/releases/tag/v4.0.2)
- Fixed the declaration bundle, which may improve the type information available to developers using shiki. (4.0.1) — [release notes](https://github.com/shikijs/shiki/releases/tag/v4.0.1)

## shiki 3

### Breaking changes

- The highlighter factory is renamed from createdBundledHighlighter to createBundledHighlighter. (3.17.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.17.0)

### New APIs and options

- Code annotations can now use [!code info] notation. (3.23.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.23.0)
- The CLI now provides list commands. (3.23.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.23.0)
- The CLI can now accept input from standard input. (3.23.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.23.0)
- transformerRenderWhitespace now supports the leading position. (3.23.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.23.0)
- Adds a format option for HTML output. (3.20.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.20.0)
- Adds classActiveCode to notation transformers for customizing active code classes. (3.19.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.19.0)
- Adds a context parameter to the twoslash filter option. (3.19.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.19.0)
- Adds a rootStyle option that can be set to false. (3.19.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.19.0)
- Adds a transformer for removing comments from transformed code. (3.19.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.19.0)
- Supports the zeroIndexed option for transformerMetaHighlight. (3.18.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.18.0)
- The embeddedLanguages alias is supported for backwards compatibility. (3.17.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.17.0)
- The CLI supports passing a remote file URL for processing. (3.17.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.17.0)
- Indent guides now support the meta.indent field. (3.15.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.15.0)

### Performance

- Eliminates a redundant tokenization call, improving tokenization efficiency. (3.20.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.20.0)

### Behavior and default changes

- Grammar and themes were updated, potentially changing syntax highlighting output. (3.22.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.23.0), [release notes](https://github.com/shikijs/shiki/releases/tag/v3.22.0)
- codeToHast now preserves HAST data and properties. (3.21.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.21.0)
- Grammar was updated, potentially changing syntax highlighting behavior. (3.21.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.21.0)
- Monaco theme tokenScopes are normalized, with tighter Monaco type imports. (3.17.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.17.0)
- Grammars were updated, which may change syntax highlighting behavior. (3.16.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.16.0)
- Grammars and themes were updated, potentially changing syntax highlighting output. (3.14.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.14.0)

### Fixes and other changes

- Top-level declarations in .d.ts files now receive the declare modifier. (3.23.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.23.0)
- CLI language and extension inputs are normalized for casing. (3.23.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.23.0)
- Promise rejections during lazy language loading are now handled. (3.20.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.20.0)
- Popper positions are no longer recomputed too early within VitePress code groups. (3.20.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.20.0)
- Registry dependency checks now account for embeddedLanguages. (3.19.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.19.0)
- Monaco now correctly handles sparse color map updates. (3.19.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.19.0)
- Adds typesVersions to support legacy module resolution. (3.19.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.19.0)
- langAlias can now be used with special languages. (3.18.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.18.0)
- dimColor now correctly parses 4-digit hex colors. (3.17.1) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.17.1)
- String utilities now handle edge cases more robustly. (3.17.1) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.17.1)
- The Monaco integration now updates its color map correctly when themes switch. (3.17.1) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.17.1)
- Markdown font styles are preserved in Monaco output. (3.17.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.17.0)
- The PlainTextLanguage type now includes plain as a valid language. (3.17.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.17.0)
- The rose-pine theme correctly handles multi-token comments. (3.17.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.17.0)
- A typo in twoslash-query-persisted is fixed. (3.17.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.17.0)
- Decorations are enabled for inline structures. (3.16.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.16.0)
- The matcher now supports comment-prefixed [code . highlight] markers. (3.16.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.16.0)
- Missing theme ANSI colors now fall back instead of remaining unavailable. (3.15.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.15.0)
- A singleton highlighter can now recover after an invalid language error. (3.15.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.15.0)
- Dragging no longer triggers popper show or hide behavior. (3.15.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.15.0)
- The default color now works correctly with colorized-brackets. (3.14.0) — [release notes](https://github.com/shikijs/shiki/releases/tag/v3.14.0)
