GraphVM is a React + TypeScript application for graph modeling, visualization, and manipulation using Cytoscape.
- Node.js 20.x (recommended)
- npm
npm ci
cp .env.example .envnpm run devnpm run buildnpm run lintnpm run dev: start Vite development server.npm run dev:host: start Vite server exposed on the local network.npm run build: type-check and build production assets.npm run lint: run ESLint againstsrc.npm run lint:fix: run ESLint with automatic fixes.npm run format: run Prettier onsrc/**/*.npm run preview: preview the production build.
- Graph state source of truth: Cytoscape instance.
- UI state: React contexts and providers for settings, graph metadata, graph selection, modals, and toasts.
- Service layer: stateless operations in
src/servicesfor graph mutations, import/export, layout, and algorithms. - Split-state synchronization: after graph mutations, relevant UI metadata (counts and selections) is explicitly synchronized.
src/components/graph: graph canvas, workspace shell, selection info.src/components/feedback: loading, toasts, error boundary fallback surfaces.src/contexts/graph: graph-scoped context hooks and contracts.src/contexts/ui: UI-scoped context hooks and contracts.src/providers/graph,src/providers/elements,src/providers/ui: provider domains.src/types/elements,src/types/graph,src/types/ui,src/types/workspace: canonical type domains.
Canonical imports use grouped paths such as @/components/graph, @/components/feedback, @/types/ui/settings, and @/types/elements/edges.
MIT. See LICENSE.