Diff

Render unified or split diffs with syntax highlighting and optional line numbers.

Basic usage

Renderable API

import { DiffRenderable, SyntaxStyle, RGBA, createCliRenderer } from "@opentui/core"

const renderer = await createCliRenderer()

const syntaxStyle = SyntaxStyle.fromStyles({
  default: { fg: RGBA.fromHex("#E6EDF3") },
  string: { fg: RGBA.fromHex("#A5D6FF") },
  keyword: { fg: RGBA.fromHex("#FF7B72"), bold: true },
})

const diff = new DiffRenderable(renderer, {
  id: "diff",
  width: "100%",
  height: 16,
  diff: `diff --git a/app.ts b/app.ts\nindex 1111111..2222222 100644\n--- a/app.ts\n+++ b/app.ts\n@@ -1,3 +1,3 @@\n-const a = 1\n+const a = 2\n`,
  view: "split",
  filetype: "typescript",
  syntaxStyle,
  showLineNumbers: true,
})

renderer.root.add(diff)

Construct API

Not available yet. Use DiffRenderable for now.

Split view scroll sync

When view: "split" is active, you can link the vertical scroll of both panes. Scrolling one pane then moves the other:

const diff = new DiffRenderable(renderer, {
  id: "diff",
  view: "split",
  syncScroll: true,
  diff: patch,
  syntaxStyle,
})

// Toggle at runtime
diff.syncScroll = false

Scroll sync is a no-op in the unified view.

Properties

PropertyTypeDefaultDescription
diffstring""Unified diff string
view"unified" or "split""unified"Layout style
syncScrollbooleanfalseLink vertical scroll in split view
filetypestring-Syntax highlighting language
fgstring or RGBA-Base foreground for inner code panes
syntaxStyleSyntaxStyle-Syntax style for code
wrapMode"word", "char", or "none"-Code wrapping mode
concealbooleanfalseConceal markup when highlighting
selectionBgstring or RGBA-Selection background in code panes
selectionFgstring or RGBA-Selection foreground in code panes
treeSitterClientTreeSitterClient-Custom Tree-sitter client
showLineNumbersbooleantrueShow line numbers
lineNumberFgstring or RGBA#888888Line number text color
lineNumberBgstring or RGBAtransparentLine number background
addedLineNumberBgstring or RGBAtransparentLine number background for added
removedLineNumberBgstring or RGBAtransparentLine number background for removed
addedBgstring or RGBA#1a4d1aBackground for added lines
removedBgstring or RGBA#4d1a1aBackground for removed lines
contextBgstring or RGBAtransparentBackground for context lines
addedContentBgstring or RGBA-Optional content background (added)
removedContentBgstring or RGBA-Optional content background (removed)
contextContentBgstring or RGBA-Optional content background (context)
addedSignColorstring or RGBA#22c55eSign color for added lines
removedSignColorstring or RGBA#ef4444Sign color for removed lines