{"_id":"@abelfubu/dv","_rev":"3-dc80a914c99aacb2b393bcacbb6f410f","name":"@abelfubu/dv","dist-tags":{"latest":"1.0.1"},"versions":{"0.1.0":{"name":"@abelfubu/dv","version":"0.1.0","license":"MIT","_id":"@abelfubu/dv@0.1.0","maintainers":[{"name":"abelfubu","email":"abelfubu@gmail.com"}],"bin":{"dv":"dist/cli.js"},"dist":{"shasum":"3e330b1701f4cf56684e2d88b9af55b07e4c3ce1","tarball":"https://registry.npmjs.org/@abelfubu/dv/-/dv-0.1.0.tgz","fileCount":118,"integrity":"sha512-21SbH1WT00aWcHSGDx8zrHFxnZ+GcgsW2hU8MNjZJSfpC+dHZDz0jIVyLvUyir6bUyuPkVxF9dQFLJS8rFI5sA==","signatures":[{"sig":"MEUCIQCN21VloDQnQQBCj2JSDGmN9B7vZQ1zU37tVqMCZHiVawIgcfeM/XHzn10U7eDmhOhiQesptLxQqXCBv+VEQPey3Cg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3935266},"type":"module","gitHead":"79a52d599037bd53c74cc5fba5b5e4f496702a88","scripts":{"cli":"bun src/cli.tsx","build":"rm -rf dist && tsc","cli:watch":"bun --watch src/cli.tsx","prepublishOnly":"bun run build"},"_npmUser":{"name":"abelfubu","email":"abelfubu@gmail.com"},"_npmVersion":"11.13.0","directories":{},"_nodeVersion":"24.16.0","dependencies":{"diff":"^8.0.2","goke":"^6.6.1","react":"^19.2.0","zustand":"^5.0.8","picocolors":"^1.1.1","strip-ansi":"^7.1.2","@opentuah/core":"0.1.97","supports-color":"^10.2.2","@opentuah/react":"0.1.97","@parcel/watcher":"^2.5.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tuistory":"^0.0.13","@types/bun":"1.3.5","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/dv_0.1.0_1782635611281_0.5869641622087616","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@abelfubu/dv","version":"1.0.0","license":"MIT","_id":"@abelfubu/dv@1.0.0","maintainers":[{"name":"abelfubu","email":"abelfubu@gmail.com"}],"homepage":"https://github.com/abelfubu/diffview#readme","bugs":{"url":"https://github.com/abelfubu/diffview/issues"},"bin":{"dv":"dist/cli.js"},"dist":{"shasum":"6c538703798bc264fb8a9cb80a1e4438eab582b0","tarball":"https://registry.npmjs.org/@abelfubu/dv/-/dv-1.0.0.tgz","fileCount":119,"integrity":"sha512-VJhxDXcSYLUHaHRPCgvRy2wfSsYA1maYmA4Adi0QSq3bmuqJkqFhApC+AIKINv+ewez7tPq95rWqkSiUu9To/g==","signatures":[{"sig":"MEQCIE+9Xt5NAXenaxQs0dj5c9RVftTJzpMBr29qLvytbj0tAiAKrxBV3wPj6+yLU9XPq+Rk4SUyUnWiIm5/xGVz8OptOw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abelfubu%2fdv@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3938701},"type":"module","gitHead":"c863e1106da182b74aa72625e0f3debb6c2a1cd6","scripts":{"cli":"bun src/cli.tsx","build":"rm -rf dist && tsc","cli:watch":"bun --watch src/cli.tsx","prepublishOnly":"bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f80d8034-5b01-4a98-bc66-8e856bf193ce"}},"repository":{"url":"git+https://github.com/abelfubu/diffview.git","type":"git"},"_npmVersion":"11.13.0","description":"A fast, keyboard-driven diff viewer for the terminal. Pipe any `git diff` into it and navigate changes with a TUI, copy selections, switch themes, and more.","directories":{},"_nodeVersion":"24.17.0","dependencies":{"diff":"^8.0.2","goke":"^6.6.1","react":"^19.2.0","zustand":"^5.0.8","picocolors":"^1.1.1","strip-ansi":"^7.1.2","@opentuah/core":"0.1.97","supports-color":"^10.2.2","@opentuah/react":"0.1.97","@parcel/watcher":"^2.5.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tuistory":"^0.0.13","@types/bun":"1.3.5","typescript":"^5.9.3","semantic-release":"^24.2.3"},"_npmOperationalInternal":{"tmp":"tmp/dv_1.0.0_1782657700126_0.7842130560394094","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@abelfubu/dv","type":"module","version":"1.0.1","license":"MIT","bin":{"dv":"dist/cli.js"},"publishConfig":{"access":"public"},"scripts":{"cli":"bun src/cli.tsx","cli:watch":"bun --watch src/cli.tsx","build":"rm -rf dist && tsc && mkdir -p dist/themes && cp src/themes/*.json dist/themes/","prepublishOnly":"bun run build"},"repository":{"type":"git","url":"git+https://github.com/abelfubu/diffview.git"},"devDependencies":{"@types/bun":"1.3.5","@types/react":"^19.0.0","semantic-release":"^24.2.3","tuistory":"^0.0.13","typescript":"^5.9.3"},"dependencies":{"@opentuah/core":"0.1.97","@opentuah/react":"0.1.97","@parcel/watcher":"^2.5.6","diff":"^8.0.2","goke":"^6.6.1","picocolors":"^1.1.1","react":"^19.2.0","strip-ansi":"^7.1.2","supports-color":"^10.2.2","zustand":"^5.0.8"},"gitHead":"3704997b3cb103c0752c7d677c065aae84146102","_id":"@abelfubu/dv@1.0.1","description":"A fast, keyboard-driven diff viewer for the terminal. Pipe any `git diff` into it and navigate changes with a TUI, copy selections, switch themes, and more.","bugs":{"url":"https://github.com/abelfubu/diffview/issues"},"homepage":"https://github.com/abelfubu/diffview#readme","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-mqYKvNr4ClFloUJBIdAtwVwfOY7kkA5YW0Ehk2f0PngW0E6sTZ6FYzD3+0x0AwiYnnZ/oQofkVKpYdf7O4bPtA==","shasum":"2d13f76af9f9058d57d1dcf2f8c15747abe9b1cb","tarball":"https://registry.npmjs.org/@abelfubu/dv/-/dv-1.0.1.tgz","fileCount":152,"unpackedSize":4087046,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abelfubu%2fdv@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDzlUGqF4S7b6jH+ve7J/7RgZjG1AADOHh6kuQdSIy3AQIgBkl8AOggmGLZpCVxPUUhwx/gOQzYSdSWvtl7avzI1LY="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f80d8034-5b01-4a98-bc66-8e856bf193ce"}},"directories":{},"maintainers":[{"name":"abelfubu","email":"abelfubu@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dv_1.0.1_1783246715389_0.5492257578887552"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-28T08:33:31.156Z","modified":"2026-07-05T10:18:35.943Z","0.1.0":"2026-06-28T08:33:31.511Z","1.0.0":"2026-06-28T14:41:40.358Z","1.0.1":"2026-07-05T10:18:35.653Z"},"bugs":{"url":"https://github.com/abelfubu/diffview/issues"},"license":"MIT","homepage":"https://github.com/abelfubu/diffview#readme","repository":{"type":"git","url":"git+https://github.com/abelfubu/diffview.git"},"description":"A fast, keyboard-driven diff viewer for the terminal. Pipe any `git diff` into it and navigate changes with a TUI, copy selections, switch themes, and more.","maintainers":[{"name":"abelfubu","email":"abelfubu@gmail.com"}],"readme":"# `dv` — Diffview\n\nA fast, keyboard-driven diff viewer for the terminal. Pipe any `git diff` into it and navigate changes with a TUI, copy selections, switch themes, and more.\n\n![license](https://img.shields.io/npm/l/@abelfubu/dv)\n\n## Install\n\n```bash\nbun install -g @abelfubu/dv\n```\n\nRequires [Bun](https://bun.sh/).\n\n## Usage\n\n```bash\n# Pipe git diff output\ngit diff | dv\n\n# Diff specific refs\ngit diff main...feature | dv\n\n# Show working tree changes (default when stdin is empty)\ndv\n\n# Scrollback mode for non-TTY output\ngit diff | dv --scrollback\n\n# Transparent background\ndv --transparent\n\n# Watch for changes\ndv --watch\n```\n\n## Features\n\n- **Interactive TUI** built with [`@opentuah/react`](https://github.com/opentuah/opentuah)\n- **Unified and split view** modes (auto-switches based on terminal width)\n- **Directory tree** sidebar for jumping between files\n- **Keyboard selection** and **clipboard copy** of diff text\n- **Syntax highlighting** via Tree-sitter parsers\n- **Themes** — switch at runtime\n- **Transparent background** mode\n- **Scrollback output** when stdout isn't a TTY\n- **Watch mode** for live diff updates\n- **Submodule support** — dirty submodules shown inline\n- **Untracked files** displayed via synthetic diffs\n\n## Keybindings\n\n| Key | Action |\n| --- | --- |\n| `↑` / `↓` or `k` / `j` | Move cursor |\n| `←` / `→` or `h` / `l` | Switch focus (tree / diff) |\n| `Enter` | Jump to file under cursor |\n| `Tab` | Toggle focus between tree and diff |\n| `u` | Toggle unified / split view |\n| `v` | Set selection anchor |\n| `y` | Copy selected diff content |\n| `t` | Cycle themes |\n| `T` | Toggle transparent background |\n| `c` | Change context lines |\n| `r` | Refresh diff |\n| `q` / `Esc` | Quit |\n\n## Development\n\n```bash\n# Install dependencies\nbun install\n\n# Run in development\nbun run cli\n\n# Watch mode\nbun run cli:watch\n\n# Build\ncd /Users/abelfubu/dev/diffview && bun run build\n\n# Run tests\nbun test\n```\n\n## Project Structure\n\n```\n.\n├── src/\n│   ├── cli.tsx              # CLI entrypoint\n│   ├── components/          # React/TUI components\n│   ├── diff-*.ts            # Diff parsing, cursor, copy utilities\n│   ├── themes.ts            # Theme definitions\n│   ├── store.ts             # Persistent state\n│   └── parsers/             # Tree-sitter syntax parsers\n├── docs/                    # ADRs and feature docs\n├── dist/                    # Compiled output\n└── package.json\n```\n\n## Docs\n\n- [`docs/adr-cursor-selection.md`](docs/adr-cursor-selection.md)\n- [`docs/transparent-background.md`](docs/transparent-background.md)\n- [`CONTEXT.md`](CONTEXT.md) — domain glossary\n\n## License\n\nMIT\n","readmeFilename":"README.md"}