Skip to content

VSKI v0.11.0

v0.10.0 shipped light graphs with SDK-only access; this release adds the follow-up web update. Graphs are now first-class in the dashboard: browse them alongside collections, explore a subgraph interactively, and edit nodes and edges without leaving the browser.

  • Sidebar: a Graphs section lists every graph grouped by database, live-updating as graphs are created or deleted. The collections-style header links to the index page and the create form.
  • Index (/graphs): all graphs across all databases with direction, caps and creation date; delete with confirmation.
  • Create (/graphs/create): name, target database, directed/undirected, optional per-graph maxNodes/maxEdges, and the five access-rule fields - the same inputs the SDK accepts.
  • Explorer (/graphs/:name?db=): the main page.
    • A stats strip (node/edge counts against effective caps with usage bars, average and max degree) and clickable edge-label chips that double as label filters for every query on the page.
    • A query bar: searchable center node, hops (1-5), result limit and direction. The page auto-seeds from the most recent node so a graph is never a blank screen.
    • The canvas renders the subgraph with Cytoscape.js and the fCoSE layout: distinct seed node, per-label edge colors, directed arrows, zoom/fit controls, and theme-aware colors for both light and dark.
    • Click a node or edge for a detail panel with properties and actions: Center here re-seeds the view, Expand merges one-hop neighbours into the canvas without a full reload, plus edit and delete.
    • A shortest-path finder: pick two nodes (same search), choose hops or weight cost, and the path is highlighted on the canvas with everything else dimmed.
    • Full node and edge CRUD from modals - including endpoints picked via node search when creating an edge.

Cytoscape is lazy-loaded with the explorer page, so the main dashboard bundle does not grow. The embedded dashboard in the standalone binary ships the same pages.

Listing endpoints only supported an exact-match label filter - usable for slicing by label, useless for finding a node in a graph that may hold 100k of them. Both list endpoints now accept q:

  • GET /api/graphs/:name/nodes?q= substring-matches node id and label
  • GET /api/graphs/:name/edges?q= substring-matches edge id, source, target and label

q combines with the existing label/source/target filters and pagination, and the usual access rules still apply. The dashboard’s node pickers are backed by it (debounced, 20 results per keystroke).

  • TypeScript/JS (@vski/sdk v2.1.1): getNodes/getEdges accept a q substring-search option.
  • Python (vski-sdk v0.4.1): get_nodes/get_edges accept the matching q= keyword (mirrored by the sync wrapper). No other surface changes.
  • Dashboard: edge-label chips moved below the canvas, next to the legend they explain.
  • Dashboard: the canvas now renders correctly on both themes. daisyUI 5 serves theme colors as oklch() and Chromium preserves oklch in computed styles, which Cytoscape’s canvas cannot parse - every color is now converted to sRGB through a canvas pixel readback, and theme flips re-resolve node, edge and label colors live.
  • Dashboard: the sidebar footer is decluttered - the OpenAPI link moved to the connection modal footer (left of Retry Connection), leaving user actions alone in the sidebar.
  • No breaking changes. q is an additive query parameter ignored by older clients; older servers ignore it from newer SDKs (results are unfiltered).
  • Access rules, caps and realtime publishing behave exactly as in v0.10.0; nothing about the storage or index changed.
  • Python e2e: the graph suite covers substring search; one workflow websocket test is flaky under full-suite ordering (passes in isolation, reproduces on the v0.10.0 backend as well - not a regression from this release).