Diff
Diff renders one file patch in a unified or split view with syntax highlighting and optional line numbers. Use Code when you do not need patch parsing.
Availability
| Field | Availability |
|---|---|
| Package | @opentui/core |
| Core renderable | DiffRenderable |
| React | <diff> (automatic) |
| Solid | <diff> is runtime built in. Its exact props declaration is missing. |
| Status | Built in with a Solid typing limitation |
Basic usage
Renderable API
Monochrome views of the same patch:
Unified view:
1 setup()
2 - const a = 1
2 + const a = 2
3 ready(a)Split view:
1 setup() 1 setup()
2 - const a = 1 2 + const a = 2
3 ready(a) 3 ready(a)For multi-file input, Diff shows only the first file patch (patches[0]). Create one DiffRenderable for each file patch that you need to show.
Split view scroll sync
In split view, set syncScroll: true to link the two panes. A mouse-wheel scroll in one pane then copies its scrollX and scrollY to the other pane:
const diff = new DiffRenderable(renderer, {
id: "diff",
view: "split",
syncScroll: true,
diff: patch,
syntaxStyle,
})
// Toggle at runtime
diff.syncScroll = falseScroll sync has no effect in the unified view.
If you omit syntaxStyle, Diff creates an empty fallback style and destroys it when you destroy the Diff.
Destroying a Diff also destroys its inactive panes.
Diff does not destroy a syntaxStyle you pass. Destroy it after no renderable uses it.
Properties
| Property | Type | Default | Description |
|---|---|---|---|
diff | string | "" | Unified diff string |
view | "unified" or "split" | "unified" | Layout style |
syncScroll | boolean | false | Link horizontal and 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 lines |
removedLineNumberBg | string or RGBA | transparent | Line number background for removed lines |
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 |
Other grammars require Tree-sitter configuration. See the Tree-sitter reference.
Related components
Use Code for source text without patch structure. Use Line number gutter with other line-aware renderables. Use Markdown for documents and TextTable for general tabular comparisons.