• v0.11.0 20b9db4606

    v0.11.0 Stable

    x released this 2026-10-21 14:55:49 +00:00 | 5 commits to main since this release

    VSKI v0.11.0

    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

    • 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.

    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 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).

    SDKs

    • 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.

    Fixes

    • 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.

    Compatibility

    • 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).
    Downloads