VSKI v0.11.0
Graphs in the dashboard
Section titled “Graphs in the dashboard”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.
What’s in the UI
Section titled “What’s in the UI”- 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-graphmaxNodes/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.
Substring search for nodes and edges
Section titled “Substring search for nodes and edges”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 labelGET /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/sdkv2.1.1):getNodes/getEdgesaccept aqsubstring-search option. - Python (
vski-sdkv0.4.1):get_nodes/get_edgesaccept the matchingq=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 preservesoklchin 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.
Compatibility
Section titled “Compatibility”- No breaking changes.
qis 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).