Skip to content

Compatibility

"Shiki-compatible" is checked, not claimed. Ferriki tracks one approved Shiki release at a time, currently Shiki v4.4.3.

How it is checked

  • A pinned mirror of Shiki. Shiki's own tests run unchanged against Ferriki's native engine from an immutable mirror in the repository. Every mirrored file is recorded with its SHA-256 digest and verified before and after a test run; Ferriki-specific glue lives outside the mirror.
  • A pinned vscode-textmate oracle. The tokenizer is a mechanical port of vscode-textmate v9.3.2, checked against vscode-textmate's own test cases.
  • Explicit exclusions. Upstream tests outside Ferriki's scope are listed in a machine-checked manifest, each with its reason and owning issue.

The Node compatibility gate covers the standard catalogs, language aliases, themes, HTML output, lazily embedded grammars, injections, custom registrations, multi-theme HTML, and the supported public exports.

Scope

What Ferriki includes in its compatibility scope.
AreaFerriki
Highlighting runtime and HTML output APIscodeToHtml and codeToHtmlWithCss, with reusable highlighters.Yes: Part of Ferriki
Transformers and decorationsJavaScript hooks around the native pipeline.Partial: The @shikijs/transformers package is external.
rehype, markdown-it and other adaptersAdapters stay in the Markdown layer and consume rendered HTML.No: Outside Ferriki.
Browser runtime, WASM and engine selectionFerriki runs in Node.js and Rust.No: Not a goal.

Platforms

Node.js 22.13.0 or newer, with a native binary per target:

Node.js 22.13.0 or newer.
Native targetFerriki
linux-x64-gnu, linux-arm64-gnuLinux, glibcYes: Supported
linux-x64-musl, linux-arm64-muslLinux, musl (Alpine)Yes: Supported
darwin-arm64macOS on Apple SiliconYes: Supported
win32-x64-msvc, win32-arm64-msvcWindowsYes: Supported
darwin-x64macOS on IntelNo: Not supported

The full policy, including how to report a gap, is docs/compatibility.md.

Native Markdown highlighting acceptance examples

The homepage production build compiles these fences through Ardo's native Markdown path. They are the fixed corpus for reviewing TypeScript, TSX, embedded HTML, unknown-language fallback, themes, and code metadata.

src/add.ts
export function add(left: number, right: number) {
  return left + right;
}
src/Button.tsx
type ButtonProps = { label: string };
export function Button({ label }: ButtonProps) {
  return <button type="button">{label}</button>;
}
public/widget.html
<style>
  .notice {
    color: rebeccapurple;
  }
</style>
<script>
  document.querySelector(".notice")?.classList.add("ready");
</script>
data/example.unknown
<raw value="literal & safe">