Skip to content

MrWangJustToDo/git-diff-view

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

logo

Git Diff View

A high-performance, feature-rich diff view component for React / Vue / Solid / Svelte

Deploy NPM Downloads NPM License

โœจ Highlights

  • ๐ŸŽจ Full Syntax Highlighting - Complete syntax context based on HAST AST
  • โšก High Performance - Web Worker & Node Server support, template mode optimization
  • ๐ŸŽฏ Framework Agnostic - React, Vue, Solid, Svelte, and CLI support
  • ๐Ÿ”ง Highly Customizable - Widgets, extend data, themes, and flexible rendering
  • ๐Ÿ“ฆ Multiple Modes - Git diff or file comparison with Split/Unified views
  • ๐ŸŒ— SSR/RSC Ready - Full server-side rendering and React Server Components support

๐ŸŽฎ Live Demo

Try it online: Git Mode ยท File Mode ยท GitHub Style

git mode

๐Ÿ“ธ More Screenshots

file mode theme support unified view

๐Ÿ“ฆ Installation

# React
pnpm add @git-diff-view/react

# Vue
pnpm add @git-diff-view/vue

# Solid / Svelte
pnpm add @git-diff-view/solid
pnpm add @git-diff-view/svelte

View Examples for React / Vue / Solid / Svelte

๐Ÿš€ Quick Start

React

import { DiffView, DiffModeEnum } from "@git-diff-view/react";
import "@git-diff-view/react/styles/diff-view.css";

<DiffView
  data={{
    oldFile: { fileName: "old.ts", content: "..." },
    newFile: { fileName: "new.ts", content: "..." },
    hunks: ["..."]
  }}
  diffViewMode={DiffModeEnum.Split}
  diffViewTheme="dark"
  diffViewHighlight
/>

Advanced Usage

import { DiffFile, generateDiffFile } from "@git-diff-view/file";

// File comparison mode
const file = generateDiffFile(
  "old.ts", oldContent,
  "new.ts", newContent,
  "typescript", "typescript"
);
file.initTheme('dark');
file.init();
file.buildSplitDiffLines();

<DiffView diffFile={file} />

More examples: React ยท Vue ยท Solid

๐Ÿ“š Packages

UI Frameworks

Core Libraries

Syntax Highlighters

๐ŸŽฏ Key Features

  • โœ… Split & Unified Views - Switch between side-by-side and unified diff modes
  • โœ… Full Syntax Highlighting - Complete context-aware syntax highlighting with HAST AST
  • โœ… Light & Dark Themes - Built-in theme support with customization
  • โœ… Line Wrapping - Toggle line wrapping for long code lines
  • โœ… Widget System - Add custom interactive widgets to diff lines
  • โœ… Extend Data - Attach and render custom data per line
  • โœ… Web Worker Support - Offload processing for better performance
  • โœ… SSR & RSC - Full server-side rendering support for React and Vue
  • โœ… Diff Match Patch - Enhanced line-level diff with FastDiff template (experimental)
  • โœ… Multiple Platforms - React, Vue, Solid, Svelte, and CLI

โšก Advanced Features

FastDiff Template (Experimental)

Enhanced line-by-line diff visualization for better readability.

import { setEnableFastDiffTemplate } from '@git-diff-view/core';

setEnableFastDiffTemplate(true);
Default FastDiff
default fastdiff

Template Mode

Optimized rendering mode enabled by default for better performance. Learn more

๐Ÿ“– API Reference

Component Props

Prop Type Description
data DiffData Diff data with oldFile, newFile, and hunks
diffFile DiffFile Pre-processed diff file instance
diffViewMode Split | Unified View mode (default: Split)
diffViewTheme light | dark Theme (default: light)
diffViewHighlight boolean Enable syntax highlighting
diffViewWrap boolean Enable line wrapping
diffViewFontSize number Font size in pixels
diffViewAddWidget boolean Enable widget button
renderWidgetLine Function Custom widget renderer
renderExtendLine Function Custom extend data renderer
extendData ExtendData Additional data per line
onAddWidgetClick Function Widget button click handler

Styling

// Default styles with Tailwind
// next release will remove Tailwind dependency, then the diff-view.css will be pure CSS
import "@git-diff-view/react/styles/diff-view.css";

// Pure CSS (no Tailwind conflicts)
import "@git-diff-view/react/styles/diff-view-pure.css";

Two Usage Modes

1. Direct Data Mode - Pass raw diff data

<DiffView data={{ oldFile, newFile, hunks }} />

2. DiffFile Instance Mode - Pre-process for better control

const file = new DiffFile(/* ... */);
file.init();
file.buildSplitDiffLines();
<DiffView diffFile={file} />

๐Ÿ› ๏ธ Development

git clone https://github.com/MrWangJustToDo/git-diff-view.git
cd git-diff-view
pnpm install
pnpm run build:packages
pnpm run dev:react  # or dev:vue, dev:solid, dev:svelte

๐Ÿ“„ License

MIT ยฉ MrWangJustToDo