88d0dbdThanks @davidkpiano! - Add format support metadata as a published subpath, tighten schema drift checks, and modularize the algorithms entrypoint. This also adds benchmark coverage and CI checks for generated schema artifacts across multiple Node versions.
-
bfb5f0bThanks @davidkpiano! - Clean up and simplify type definitions:- Remove
GraphEntityConfig; merged intoGraphEntity - Export
VisualGraphFormatConverterfrom main entry - Rename
Positionedexport toEntityRect - Simplify
VisualNode,VisualEdge,VisualPortto use property narrowing instead ofOmit - Fix
Graph<any, E>→Graph<N, E>on exported APIs for better generic propagation - Normalize
labeltostring | nullon bothGraphNodeandGraphEdge(node label default changed from''tonull)
- Remove
160167bThanks @davidkpiano! - RemovegetEdgeBetweenin favor ofgetEdgesBetween.
-
0fb9433Thanks @davidkpiano! - Add entity equivalence functions:areEntitiesEqual,isLayoutEqual,isNonLayoutEqual, andLAYOUT_KEYS. -
6d2465dThanks @davidkpiano! - Add centrality, community detection, connectivity, and isomorphism algorithms.
-
8b97c9bThanks @davidkpiano! - Add port support for nodes and edges, enabling dataflow/node-editor graphs (Node-RED, Unreal Blueprints, ComfyUI).- Add
GraphEntityConfig,GraphEntity,VisualGraphEntitybase interfaces (DRY shared props for nodes, edges, ports) - Add
PortConfig<P>,GraphPort<P>,VisualPort<P>types with generic data parameter - Add
P(port data) as 4th generic toGraph<N, E, G, P>and all related types - Add
ports?: PortConfig[]onNodeConfig,ports?: GraphPort[]onGraphNode - Add
sourcePort?/targetPort?(port name strings) onEdgeConfigandGraphEdge - Add
createGraphPort()factory - Add port validation: duplicate port names rejected,
addEdge/updateEdgevalidate port existence - Add port queries:
getPort(),getPorts(),getEdgesByPort() - ELK adapter: round-trip ports (name ↔ ELK port id, direction ↔
org.eclipse.elk.port.side) - xyflow adapter:
sourcePort↔sourceHandle,targetPort↔targetHandle
- Add
976a7e6Thanks @davidkpiano! - - MakeGraph.initialNodeId,GraphNode.label, andGraphEdge.labeloptional on resolved types for easier consumer usage- Add
createGraphNode()andcreateGraphEdge()helpers that resolve defaults from config
- Add
-
3115609Thanks @davidkpiano! - Makeedge.labelnullable -
54023f4Thanks @davidkpiano! - Add edge weights, A* pathfinding, subgraph extraction, and graph reversal.weight?: numberon edges; algorithms default to(e) => e.weight ?? 1with BFS fast path when unweightedgetAStarPath(graph, { from, to, heuristic })for heuristic-guided shortest pathsgetSubgraph(graph, nodeIds)returns induced subgraph with internal edgesreverseGraph(graph, filterEdge?)flips edge directions- Remove stale TODO for Mermaid sequence blocks (already implemented)
-
8f9912dThanks @davidkpiano! - Add walk generators and coverage utilities for model-based testing.genRandomWalk(),genWeightedRandomWalk(),genQuickRandomWalk(),genPredefinedWalk()— step-by-step graph traversal generators that yieldGraphStep, with optionalseedfor deterministic replay- Composable stop conditions:
takeSteps(),takeUntilNode(),takeUntilEdge(),takeUntilNodeCoverage(),takeUntilEdgeCoverage() getCoverage()computes node/edge coverage stats from a walkfilteroption for edge guards,onStepcallback for actions — keeps graph JSON-serializable
-
22f77a5Thanks @davidkpiano! - Fix schema and GraphML serialization drift, optimize weighted graph algorithms, and makegenSimplePaths()truly lazy.- add
weighttoEdgeSchemaand tighten schema drift tests against the runtime graph types - preserve graph, node, and edge metadata in GraphML round-trips, including
initialNodeId,direction,style, geometry, and edgeweight - use a heap-backed priority queue for weighted shortest paths, A*, and Prim MST
- refactor
genSimplePaths()to yield incrementally instead of collecting all paths before returning
- add
-
371133cThanks @davidkpiano! - Add ELK formatter -
9e596d6Thanks @davidkpiano! - Generate schemas
-
166b695Thanks @davidkpiano! - Fix Mermaid types -
49ffd94Thanks @davidkpiano! - Improve Mermaid parity
-
e268990Thanks @davidkpiano! - MakeparentId,initialNodeId, andshapeoptional onGraphNode. These fields are no longer defaulted tonull/'rectangle'bycreateGraph/createVisualGraph, they are simply omitted when not provided.Add empty string validation for node/edge IDs,
parentId,sourceId, andtargetId. -
55462e6Thanks @davidkpiano! - Add xyflow (React Flow / Svelte Flow) format converter withtoXYFlow()andfromXYFlow()for converting betweenVisualGraphand xyflow node/edge structures. Uses@xyflow/systemas an optional peer dependency for types. Also addsVisualGraphFormatConvertertype for visual-first format converters.
-
#6
c186c2aThanks @davidkpiano! - Add JSDoc with usage examples to all exported functions -
83b3c66Thanks @davidkpiano! -VisualNode['shape']is now optional -
#8
27f3f7fThanks @davidkpiano! - Mermaid: reconstruct sequence diagram blocks
-
#5
25ab36aThanks @davidkpiano! - - Add DOT format (@statelyai/graph/dot)- Add Mermaid formatters: flowchart, sequence, state, class diagram, ER, mindmap, block
- Add
getRelativeDistanceMapandgetRelativeDistance(queries) - Restructure formats into per-format subpackages with READMEs
-
#3
bcf8c48Thanks @davidkpiano! - Add format converters for JGF, Cytoscape.js JSON, D3 force JSON, GEXF, GML, and TGF- New
GraphFormatConverter<TSerial>interface andcreateFormatConverter()factory - 6 new format modules with bidirectional
to*/from*functions:toJGF/fromJGF,toCytoscapeJSON/fromCytoscapeJSON,toD3Graph/fromD3Graph,toGEXF/fromGEXF,toGML/fromGML,toTGF/fromTGF - Input validation with descriptive error messages on all
from*functions - End-to-end integration tests with real Cytoscape.js and D3 force libraries
cytoscapeandd3-forceadded as optional peer dependencies
- New
-
4f02507Thanks @davidkpiano! - RemovetoGraphML,fromGraphML,GraphSchema,NodeSchema, andEdgeSchemafrom the main barrel export to avoid pulling in optional peer deps (fast-xml-parser,zod) during SSR.Use subpath imports instead:
@statelyai/graph/formats/graphml@statelyai/graph/schemas