The Problem
Teams that need embedded visual analytics face a binary: build charting from scratch or bolt a heavy BI platform into their app. Graphic Walker targets that gap with a React component that provides Tableau-style drag-and-drop exploration without the infrastructure overhead.
What This Does
Graphic Walker is a React-based visual analytics library. Users upload CSV/JSON data, define dimensions and measures, then drag fields onto visual channels to build charts. It includes a data explainer for pattern analysis, spatial visualization via the leafletRenderer components, and a natural language query interface in components/askViz.
The main package lives in packages/graphic-walker, with a companion packages/duckdb-wasm-computation that handles client-side query computation via web workers. The repo is a fork of Kanaries/graphic-walker (3218 stars upstream), so it inherits a mature codebase with 25 test files and GitHub Actions CI.
How It Is Wired
Execution starts in packages/graphic-walker/src/index.tsx, which mounts App.tsx. The App component wires together the field system (fields/fieldsContext.tsx), the data source layer (dataSource/index.tsx), and the store (store/index.tsx). The Renderer.tsx component is the visualization output path, translating the visual spec into rendered charts.
The dependency graph shows 298 internal modules with 798 import edges. The src/interfaces module is the critical hub: 113 modules import it, making it the highest-blast-radius file in the repo. It's also part of a circular dependency cycle along with src/utils/index.ts and src/config.ts. The src/store/index module has 38 dependents and sits at the center of state management.
The computation path routes through src/computation/index.ts (934 lines, flagged as oversized), which delegates to either client-side workers or a remote query service. The src/App component imports 39 modules, making it the widest entry point into the system.
How To Use It
# Clone and install
git clone https://github.com/moses-y/graphic-walker
cd graphic-walker
yarn install
# Run the dev server
yarn dev
The package is published on npm as @kanaries/graphic-walker. To embed it, import the GraphicWalker component and pass a data source. No environment variables are required; the default configuration uses in-browser computation.
Real-World Use
A typical integration is a data analysis dashboard where users upload a CSV, explore it visually, and export findings. The component accepts a dataSource prop, so you can feed it parsed data from your backend. The DuckDB WASM package lets you offload computation to web workers, keeping the UI responsive on large datasets.
Code Health & Issues
Static analysis found 171 findings across 4 categories: 96 high, 74 medium, 1 low. The main issues:
- High - Import cycles:
src/interfaces.ts,src/utils/index.ts,src/config.tsparticipate in circular dependencies. This makes changes ripple unpredictably and complicates module loading. - High - Hub modules:
src/interfaces.tshas 113 dependents;src/utils/index.tshas 39. Any change here has a wide blast radius. - Medium - Oversized files:
src/interfaces.ts(934 lines) andsrc/computation/index.tsare hard to reason about in one pass. - High - Deep nesting: 31 files exceed 10 levels of indentation, notably
fields/fieldsContext.tsxandutils/workflow.ts.
The CI audit found 2 high-severity issues: GitHub Actions pinned to mutable tags (peter-evans/create-pull-request@v3) and workflows that never invoke the test suite despite 18 test files existing.
The Bottom Line
This is a solid, feature-complete embedded analytics library with real-world adoption via the upstream project. The architecture is sound but the circular dependencies and hub modules will make significant refactoring painful. Teams needing a Tableau-like component in a React app should evaluate it; the CI gaps are worth fixing before relying on the green check.