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
DiffRenderablefor 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
| Property | Type | Default | Description |
|---|---|---|---|
diff |
string |
"" |
Unified diff string |
view |
"unified" or "split" |
"unified" |
Layout style |
syncScroll |
boolean |
false |
Link vertical scroll in split view |
filetype |
string |
- | Syntax highlighting language |
fg |
string or RGBA |
- | Base foreground for inner code panes |
syntaxStyle |
SyntaxStyle |
- | Syntax style for code |
wrapMode |
"word", "char", or "none" |
- | Code wrapping mode |
conceal |
boolean |
false |
Conceal markup when highlighting |
selectionBg |
string or RGBA |
- | Selection background in code panes |
selectionFg |
string or RGBA |
- | Selection foreground in code panes |
treeSitterClient |
TreeSitterClient |
- | Custom Tree-sitter client |
showLineNumbers |
boolean |
true |
Show line numbers |
lineNumberFg |
string or RGBA |
#888888 |
Line number text color |
lineNumberBg |
string or RGBA |
transparent | Line number background |
addedLineNumberBg |
string or RGBA |
transparent | Line number background for added |
removedLineNumberBg |
string or RGBA |
transparent | Line number background for removed |
addedBg |
string or RGBA |
#1a4d1a |
Background for added lines |
removedBg |
string or RGBA |
#4d1a1a |
Background for removed lines |
contextBg |
string or RGBA |
transparent | Background for context lines |
addedContentBg |
string or RGBA |
- | Optional content background (added) |
removedContentBg |
string or RGBA |
- | Optional content background (removed) |
contextContentBg |
string or RGBA |
- | Optional content background (context) |
addedSignColor |
string or RGBA |
#22c55e |
Sign color for added lines |
removedSignColor |
string or RGBA |
#ef4444 |
Sign color for removed lines |