Paste a Jenkinsfile. See your pipeline.
Live site · Usage · Local development
| Created | Saturday, 22 August 2026 at 01:36 EDT |
| Last updated | Saturday, 22 August 2026 at 04:10 PM EDT |
| Status | M0–M6 complete: parser, layout, canvas, full UI, Pages auto-deploy, plus the whole M6 batch (matrix expansion, PNG export, share links, light theme, CodeMirror editor). The app version lives only in package.json and is injected into the UI at build time. |
| License | GPL-3.0 |
- What Is PipeViz
- Current Status
- Features
- Tech Stack
- Usage
- Local Development
- Deployment
- Repository Layout
- Documentation
- Branding
- License
PipeViz is a browser based tool that turns Jenkins pipeline definitions into an interactive visual graph. You paste or upload a Jenkinsfile, the app parses it entirely client side, and renders stages, parallel branches, matrix axes, conditions, steps, and scoped metadata as a horizontal stage graph in the style made familiar by Jenkins Blue Ocean.
No backend, no accounts, no pipeline code leaving your machine. The whole thing is a static site hosted on GitHub Pages.
Shipped:
- Parser (M1): hand rolled tokenizer + block tree + declarative interpreter, with a scripted
stage()fallback; never throws, always returns a model plus line-numbered diagnostics - Layout engine (M2): recursive structural layout with horizontal pipeline flow, parallel fan-out/fan-in, matrices, and collapsible vertical sequential groups
- Canvas (M3): React Flow subflows with pan, zoom, semantic minimap, controlled selection, graph search, focused execution paths, selected-node toolbars, and category-colored stage cards
- Full UI (M4): editor pane with debounced re-parse, file upload, 36 categorized and searchable samples, details panel, Copy JSON export, expandable diagnostics bar with click-to-jump
- CI/CD (M5): every push to main builds
dist/and deploys it to GitHub Pages automatically - M6 batch: matrix axis expansion behind a canvas toggle, Export PNG of the graph, share links that encode the pipeline in the URL, a persisted light/dark theme toggle, and a CodeMirror 6 editor with Groovy highlighting
- Declarative pipeline support: stages,
parallelblocks (with failFast),matrixblocks with axis values and excludes, sequential nested stages,whenconditions, detailedinputgates, stage/pipelineposthandlers, agents, environment, tools, options, parameters, and triggers - Metadata scope clarity: pipeline metadata appears once above the graph; stage cards badge only local overrides, with complete values available in the pipeline or stage inspector
- Matrix expansion toggle: one card per axis combination (exclude rules applied), or the compact MATRIX summary card
- Reusable structural groups: nested sequential stages collapse to an honest summary card and expand into numbered vertical chains; parallel and matrix groups share the same future-ready container system
- Pipeline graph exploration: search stage names and metadata with
/, highlight a selected execution path, expand or collapse nested groups and stage commands, and use node toolbars for structural actions and source navigation - Adapter-ready metadata:
PipelineDialectidentifies a source format andMetadataFactcarries runtime, condition, security, artifact, cache, deployment, resource, and custom facts through shared badges and inspectors - Share links: the pipeline rides in the URL hash, so a pasted Jenkinsfile is one "Copy link" away from being shared; opening such a link restores editor, graph, and even sample provenance
- Export PNG: download the current graph as an image, framed by React Flow's own camera math (no controls or minimap in the shot)
- Light and dark color schemes: dark is the default, the toggle persists locally, and the code editor uses a dedicated high-contrast palette in both modes
- Scripted pipeline fallback: detects
stage('name')calls anywhere in Groovy and nests them by brace containment - Graceful failure: parse errors produce line-numbered diagnostics alongside a partial graph of whatever parsed — never a blank screen
- Category stripes guessed from stage names: cyan build/test-violet/emerald-deploy/slate neutral
- Everything runs in your browser; nothing is uploaded anywhere
Versions verified against the npm registry on Saturday, 22 August 2026:
| Layer | Choice | Version |
|---|---|---|
| Build tool | Vite | 8.2.2 |
| UI framework | React | 19.2.8 |
| Language | TypeScript | 5.9.3 |
| Graph rendering | @xyflow/react (React Flow 12) | 12.11.3 |
| Code editor | @codemirror/* 6 + @codemirror/legacy-modes Groovy | see package.json (exact-pinned) |
| PNG export | html-to-image | 1.11.13 |
| Test runner | Vitest | 4.1.11 |
| Linting | ESLint | 10.9.0 |
| Runtime | Node.js | 24 LTS |
- Open https://amanalip.github.io/PipeViz/.
- Get a pipeline in via any of:
- Paste a Jenkinsfile into the editor pane (focused by default),
- Upload a
.jenkinsfile,Jenkinsfile,.groovy, or.txtfile from the header, - Samples ▾ search 36 bundled examples across six categories, including advanced orchestration and deliberate recovery cases.
- The graph re-renders ~400ms after you stop typing.
- Interact:
- Click the metadata summary above the graph for the inherited pipeline agent, environment, tools, options, parameters, triggers, and pipeline post handlers,
- Click a card for its steps,
whentext, stage agent override, environment, tools, options, input gate, and post handlers, - Double-click a nested-stage card to expand it into a sequential group; double-click the expanded group to collapse it,
- Double-click a leaf card or use its chevron to expand the complete commands directly on the graph,
- Use the selected-node toolbar for a keyboard-discoverable source or group action,
- Search the graph with
/, and use Focus path to isolate the selected stage's directed execution path, - Use Expand all / Collapse all to inspect or summarize every nested sequential group and stage command list,
- Pan/zoom the canvas; the minimap tracks the viewport,
- Expand matrix swaps a matrix stage between the compact summary card and one card per axis combination,
- Copy JSON exports the parsed model to your clipboard,
- Copy link shares the exact pipeline via the URL (it rides in the hash),
- Export PNG downloads the graph as an image,
- Light mode / Dark mode flips and remembers the color scheme.
- Parse problems appear in the bottom bar; click a row to jump to that line.
Your code never leaves the browser tab — there is no backend at all.
Requires Node.js 24+ and npm 12+.
npm install # install dependencies
npm run dev # start dev server at http://localhost:5173 with hot reload
npm run test # run the unit test suite (parser, layout, graph, ui helpers)
npm run build # typecheck + production build into dist/
npm run lint # ESLint across the repoNote on the TypeScript version: the stack research pinned TS 7.0.2, but typescript-eslint 8.x declares a peer range below 6.1.0, so the project uses the plan's documented fallback of 5.9.3. Application code targets ES2022 either way; upgrading to the native line later is a dependency swap.
Deploys are fully automatic:
- Pushes to
maintrigger .github/workflows/static.yml, which installs dependencies withnpm ci, builds withnpm run build(typecheck included), and uploadsdist/to GitHub Pages. - The Vite build uses
base: './'so all asset URLs resolve under the project page path/PipeViz/. - You can re-run a deploy manually from the Actions tab via workflow_dispatch.
The site lives at https://amanalip.github.io/PipeViz/.
PipeViz/
.github/workflows/ GitHub Pages deploy workflow (build + deploy dist/)
public/ logo.svg, favicon.svg (static assets)
src/
parser/ tokenizer, block tree, interpreter, scripted fallback
model/ PipelineModel / StageNode / Step / Diagnostic types
layout/ computeLayout engine + matrix combination math
graph/ FlowCanvas, StageNodeCard, flow conversion, PNG export
ui/ EditorPane (CodeMirror), SamplePicker, DetailsPanel, DiagnosticsBar
share/ URL hash codec for shareable pipeline links
samples/ 36 categorized bundled Jenkinsfiles
theme.ts color scheme plumbing and canvas palettes
styles/ global.css design tokens (dark + light)
index.html Vite entry document
vite.config.ts dev server and build config (relative base for Pages)
tsconfig.json strict TypeScript configuration
eslint.config.js ESLint 10 flat config
package.json exact-pinned dependencies and npm scripts
project_plan.md architecture, milestones, risks, sources
commit_tracker.md commit conventions and running log
ui_mockups.md ASCII reference for every screen and state
jenkins_pipelines_mock.md 68-input UX corpus imported by regression tests
label_geometry_toast_cards_tests.md label, metadata, toast card, and React Flow geometry test contract
LICENSE GNU GPL v3
| Document | Contents |
|---|---|
| project_plan.md | Full plan: goals, architecture, parser and layout design, data model, milestones, risks, verified sources |
| commit_tracker.md | Conventional commit conventions, complete history, planned commit sequence mapped to milestones |
| ui_mockups.md | ASCII reference for every screen, state, and dimension in the app |
| jenkins_pipelines_mock.md | 68 realistic, edge-case, malformed, and deeply grouped Jenkinsfiles used for UX regression testing |
| label_geometry_toast_cards_tests.md | Complete label, metadata, toast card, geometry, browser-audit, and future pipeline-format test contract |
| future_project_expansion_plan.md | Prioritized roadmap for CI/CD, cloud workflow, and infrastructure-as-code adapters |
- Parser behavior and metadata ownership:
src/parser/, then the plain-data contract insrc/model/types.ts. - Card and container labels:
src/graph/stageBadges.tsandsrc/graph/toFlow.ts. - Expanded command sizing and containment:
src/layout/computeLayout.ts,src/graph/StageNodeCard.tsx, and the 68-input browser audit ine2e/ux-regressions.spec.ts. - Pipeline metadata labels and inspector content:
src/ui/pipelineMetadata.ts. - Stage and container inspector content:
src/ui/detailsSections.ts. - React Flow geometry:
src/layout/computeLayout.tsandsrc/layout/mockCorpusLayout.test.ts. - React Flow interactions, search, focus paths, subflows, minimap, and node toolbars:
src/graph/FlowCanvas.tsxandsrc/graph/toFlow.ts. - Adapter-neutral provider identity and metadata:
src/model/types.ts,src/graph/stageBadges.ts, andsrc/ui/detailsSections.ts. - Broad UX fixtures and expected checks:
jenkins_pipelines_mock.mdandlabel_geometry_toast_cards_tests.md. - Live browser behavior:
e2e/and the browser-audit procedure inlabel_geometry_toast_cards_tests.md.
Logo concept: The Branch, three parallel lanes merging into one flow, drawn as a cyan gradient on a dark rounded badge with a white output arrow. Files live in public/:
public/logo.svg: header mark and social preview basepublic/favicon.svg: browser tab icon
Design tokens and usage rules are documented in project_plan.md, Branding section.
Released under the GNU General Public License v3.0.