Syntax highlighting is a separate package so applications that do not need Shiki do not download it. Without a highlighter, fenced blocks render as ordinary <pre><code> with no toolbar.
Install @smoothstream/code next to your adapter and pass codeHighlighter.
Attaching a highlighter also opts fenced blocks into Smoothstream’s code surface: a language label and a copy button. The copy control mounts only after the closing fence is known. It copies the full raw code even if the visual reveal is still running.
Choose a theme
codeHighlighter is a ready-made instance using Shiki’s github-light theme. Create your own for a different bundled theme, hidden labels, or paired light and dark themes.
theme and themes are mutually exclusive. For applications with light and dark color schemes, pass Shiki’s themes API:
defaultColor follows Shiki: "light" (default), "dark", "light-dark()", or false. The light-dark() strategy follows the nearest CSS color-scheme. Class-based toggles should update that property:
Token styles also keep Shiki’s --shiki-light and --shiki-dark variables if you prefer selector-based switching.

