Agent skill

Neo4j Nvl Skill

by neo4j-contrib in neo4j-contrib/neo4j-skills

Neo4j Visualization Library (NVL) — framework-agnostic graph rendering for the browser.

MITAuto-check: notesAI & LLM Engineering

Install Neo4j Nvl Skill

skills CLI
$ npx skills add neo4j-contrib/neo4j-skills --skill neo4j-nvl-skill -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install neo4j-contrib/neo4j-skills neo4j-nvl-skill --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/neo4j-contrib/neo4j-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/neo4j-nvl-skill .claude/skills/neo4j-nvl-skill && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
neo4j-nvl-skill
GitHub stars
114
Token cost
~5k tokens
SKILL.md length
1,284 words
Files
4 (incl. references)
Skills in repo
28
Repo updated
First seen
Licence
MIT

At a glance

Neo4j Visualization Library (NVL) — framework-agnostic graph rendering for the browser.

  • Rendering a Neo4j graph in a browser
  • SKILL.md covers When to Use, When NOT to Use, Use NVL or the Needle Component? and Install, plus 15 more sections
  • Calls npm; needs NEO4J_PASSWORD
  • Feeding driver results through nvlResultTransformer

What it does

Neo4j Nvl Skill is an agent skill from neo4j-contrib/neo4j-skills. Neo4j Visualization Library (NVL) — framework-agnostic graph rendering for the browser. Covers @neo4j-nvl/base (NVL class, nodes/relationships, Canvas vs WebGL renderer), @neo4j-nvl/interaction-handlers (ZoomInteraction, PanInteraction, DragNodeInteraction, ClickInteraction, HoverInteraction, BoxSelectInteraction, LassoInteraction, KeyboardInteraction), and @neo4j-nvl/react (InteractiveNvlWrapper, BasicNvlWrapper, StaticPictureWrapper). Use when rendering a Neo4j graph in a browser, feeding driver results through…

Its SKILL.md is about 5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including reference files (for example `README.md`, `references/api-surface.md` and `references/troubleshooting.md`). Compatibility notes: @neo4j-nvl packages 2.0.x; React 19 for @neo4j-nvl/react; modern browsers with Canvas2D + WebGL2

It sits in AI & LLM Engineering, covering Embeddings and 3D graphics and WebGL. It works with Neo4j, JavaScript, React and Vite. The repository describes itself as: Neo4j Skills for Coding and other Agents including Cypher. The licence is MIT.

When your agent uses it

  • Rendering a Neo4j graph in a browser
  • Feeding driver results through nvlResultTransformer
  • Choosing Canvas vs WebGL
  • Wiring node/relationship click/hover/drag handlers

Example prompts

  • “/neo4j-nvl-skill”

Requirements

  • Python 3
  • Node.js
  • Compatibility (from SKILL.md): @neo4j-nvl packages 2.0.x; React 19 for @neo4j-nvl/react; modern browsers with Canvas2D + WebGL2
  • Pre-approved tools (allowed-tools): Bash, WebFetch

What it can do on your machine

Read from SKILL.md and the folder at commit bb30e1f. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Bash
    • WebFetch

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • npm

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • github.com
    • neo4j.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • NEO4J_PASSWORD

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

  • Compatibility

    @neo4j-nvl packages 2.0.x; React 19 for @neo4j-nvl/react; modern browsers with Canvas2D + WebGL2

    From compatibility in the SKILL.md frontmatter.

Context cost

Neo4j Nvl Skill loads about 5k tokens when it runs, and up to ~12k if it reads all its reference files. Until then it costs about 234 tokens; SKILL.md has 1,284 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~234
When it runs · the whole SKILL.md, loaded when a task matches
~5k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~12k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Bash, WebFetch

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from neo4j-contrib/neo4j-skills at commit bb30e1f, republished under its MIT licence (© neo4j-contrib). 1,284 words, ~4,995 tokens.

Download SKILL.mdSave it as .claude/skills/neo4j-nvl-skill/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.
name
neo4j-nvl-skill
description
Neo4j Visualization Library (NVL) — framework-agnostic graph rendering for the browser. Covers @neo4j-nvl/base (NVL class, nodes/relationships, Canvas vs WebGL renderer), @neo4j-nvl/interaction-handlers (ZoomInteraction, PanInteraction, DragNodeInteraction, ClickInteraction, HoverInteraction, BoxSelectInteraction, LassoInteraction, KeyboardInteraction), and @neo4j-nvl/react (InteractiveNvlWrapper, BasicNvlWrapper, StaticPictureWrapper). Use when rendering a Neo4j graph in a browser, feeding driver results through nvlResultTransformer, choosing Canvas vs WebGL, wiring node/relationship click/hover/drag handlers, or embedding NVL in React, Vite, or vanilla JS apps. Does NOT handle Cypher query authoring — use neo4j-cypher-skill. Does NOT handle driver lifecycle, sessions, or executeQuery setup — use neo4j-driver-javascript-skill. Does NOT handle GraphVisualization/Needle default embed — use @neo4j-ndl/react.
allowed-tools
Bash, WebFetch
compatibility
@neo4j-nvl packages 2.0.x; React 19 for @neo4j-nvl/react; modern browsers with Canvas2D + WebGL2
version
2.0.0

When to Use

  • Rendering a Neo4j graph in a browser (vanilla JS, React, Vite) with custom interactions, rendering, or data shapes
  • Visualizing driver.executeQuery results as an interactive graph
  • Wiring zoom, pan, drag, click, hover, lasso, or box-select interactions
  • Embedding NVL inside an existing app and synchronizing graph state

When NOT to Use

  • Pre-styled embedded graph view with default behavior, no custom interactions → GraphVisualization from @neo4j-ndl/react (Neo4j Needle / NDL design system) — wraps NVL with default Neo4j styling. See Use NVL or the Needle Component? below.
  • Python / Jupyter notebook graph visualization → neo4j/python-graph-visualization (the Python port of NVL)
  • Writing/optimizing Cypher → neo4j-cypher-skill
  • Driver setup / executeQuery / sessions → neo4j-driver-javascript-skill
  • Server-side data fetching with no rendering → neo4j-driver-javascript-skill
  • GDS algorithm execution → neo4j-gds-skill or neo4j-aura-graph-analytics-skill
  • GraphQL API → neo4j-graphql-skill

Use NVL or the Needle Component?

NeedUse
Embed a graph view with default Neo4j styling, no custom interactions or renderingGraphVisualization from @neo4j-ndl/react (Neo4j Needle / NDL design system) — wraps NVL and accepts records shaped { id, labels, properties: { key: { stringified, type } } } (NeoNode)
Custom interactions, custom rendering, non-standard data shapes, or framework-agnostic embeddingThis skill — use NVL directly

If the answer is the first row, install and use the Needle component instead of NVL — do not duplicate styling work.


Install

bash
npm install @neo4j-nvl/base                  # core (required)
npm install @neo4j-nvl/interaction-handlers  # standard interactions (optional, vanilla JS)
npm install @neo4j-nvl/react                 # React wrappers (optional)

Peer requirements: React 19 for @neo4j-nvl/react. The published peerDependency range still permits React 18, but mixing major versions is not recommended — target 19. @neo4j-nvl/layout-workers is a transitive dependency — never install directly. neo4j-driver is a peer of @neo4j-nvl/base only when using nvlResultTransformer.

Starter templates: https://github.com/neo4j-devtools/nvl-boilerplates — official per-framework scaffolds; prefer these over hand-rolled setups.

License: NVL ships under the Neo4j Visualization Library License — for use with Neo4j products only. Cannot be used against other graph backends.


Pick the Right Paradigm

NeedUse
React app, default interactions<InteractiveNvlWrapper> from @neo4j-nvl/react
React app, custom interaction wiring<BasicNvlWrapper> + own handlers via ref
Vanilla JS, standard interactionsNVL + @neo4j-nvl/interaction-handlers
Vanilla JS, fully custom event logicNVL + container.addEventListener + nvl.getHits()
Static PNG/SVG image export<StaticPictureWrapper> or nvl.saveToFile() / nvl.saveToSvg()

Pick the Right Renderer

RendererMax nodesDetailUse case
'canvas' (default)~1,000Captions, icons, arrows, pixel-perfect hit-testingDetail investigation, small graphs
'webgl'100,000+No captions; supports node icons and relationship arrowheads in 2.0Large-scale pattern exploration
javascript
const nvl = new NVL(container, nodes, rels, { renderer: 'webgl' })
nvl.setRenderer('canvas')   // swap at runtime

NVL 2.0 requires WebGL2 for the GPU renderer and force-directed physics engine. When GPU acceleration is unavailable, NVL can fall back to Canvas rendering and non-GPU layout implementations; use disableWebGL: true to explicitly avoid WebGL.


Container Setup

The container must have an explicit width AND height. Missing height → container collapses to 0 → graph invisible. Most-reported NVL bug.

html
<!-- ❌ height defaults to 0; graph invisible -->
<div id="viz"></div>

<!-- ✅ explicit dimensions -->
<div id="viz" style="width: 100%; height: 600px;"></div>

Vanilla — Base Library

javascript
import { NVL } from '@neo4j-nvl/base'

const container = document.getElementById('viz')
const nodes = [{ id: '1' }, { id: '2' }]
const relationships = [{ id: '12', from: '1', to: '2', type: 'KNOWS' }]

const nvl = new NVL(container, nodes, relationships)

With options + callbacks:

javascript
import { NVL } from '@neo4j-nvl/base'

const options = {
  initialZoom: 1.0,
  minZoom: 0.1,
  maxZoom: 8,
  layout: 'forceDirected',
  renderer: 'canvas',
  styling: { defaultNodeColor: '#0e86d4', defaultRelationshipColor: '#888' }
}
const callbacks = {
  onInitialization: () => console.log('NVL ready'),
  onLayoutDone: () => nvl.fit([]),
  onError: (err) => console.error('NVL error', err)
}

const nvl = new NVL(container, nodes, relationships, options, callbacks)

// On teardown — always:
nvl.destroy()

NVL constructor signature: new NVL(frame, nvlNodes?, nvlRels?, options?, callbacks?). All but frame are optional and default to empty.


Vanilla — Interaction Handlers

Compose handlers onto an existing NVL instance. Each handler registers callbacks via .updateCallback(name, fn) and must be torn down with .destroy().

javascript
import { NVL } from '@neo4j-nvl/base'
import {
  ZoomInteraction, PanInteraction, DragNodeInteraction,
  ClickInteraction, HoverInteraction, BoxSelectInteraction,
  LassoInteraction, KeyboardInteraction
} from '@neo4j-nvl/interaction-handlers'

const nvl = new NVL(container, nodes, relationships)

const zoom  = new ZoomInteraction(nvl)
const pan   = new PanInteraction(nvl)
const drag  = new DragNodeInteraction(nvl)
const click = new ClickInteraction(nvl, { selectOnClick: true })
const hover = new HoverInteraction(nvl, { drawShadowOnHover: true })

click.updateCallback('onNodeClick',         (node, hits, evt) => console.log('node',  node.id))
click.updateCallback('onRelationshipClick', (rel,  hits, evt) => console.log('rel',   rel.id))
click.updateCallback('onClusterClick',      (cluster, hits, evt) => console.log('cluster', cluster.id))
click.updateCallback('onCanvasClick',       (evt)             => console.log('canvas'))
hover.updateCallback('onHover',             (el, hits, evt)   => el && console.log('over', el.id))
drag.updateCallback('onDragEnd',            (nodes, evt)      => savePositions(nodes))
zoom.updateCallback('onZoomAndPan',          (level, panX, panY) => console.log(level, panX, panY))

// Teardown — destroy all handlers, then the NVL instance
function teardown() {
  for (const h of [zoom, pan, drag, click, hover]) h.destroy()
  nvl.destroy()
}

Disable an event without removing the handler: click.removeCallback('onCanvasClick'). Passing true instead of a function enables the event with a no-op (useful for default selection behavior).


React — InteractiveNvlWrapper

Pre-wires every interaction handler. Toggle events with mouseEventCallbacks (function = on + callback; true = on, no-op; false/omit = off).

tsx
import { InteractiveNvlWrapper } from '@neo4j-nvl/react'
import type { MouseEventCallbacks } from '@neo4j-nvl/react'
import { useRef } from 'react'
import type { NVL, NvlOptions } from '@neo4j-nvl/base'

export function GraphView({ nodes, rels }) {
  const nvlRef = useRef<NVL>(null)

  const nvlOptions: NvlOptions = { initialZoom: 1, renderer: 'canvas' }

  const mouseEventCallbacks: MouseEventCallbacks = {
    onNodeClick:         (node, hits, evt) => console.log('node',  node.id),
    onRelationshipClick: (rel,  hits, evt) => console.log('rel',   rel.id),
    onClusterClick:      (cluster, hits, evt) => console.log('cluster', cluster.id),
    onCanvasClick:       (evt)             => console.log('canvas'),
    onHover:             (el, hits, evt)   => {
      if (el) console.log('hover', el.id)
      if (hits.clusters[0]) console.log('cluster hover', hits.clusters[0].data.id)
    },
    onDragEnd:           (nodes, evt)      => persist(nodes),
    onZoomAndPan: true,                                 // enable, no callback
    onPan:  true
  }

  return (
    <div style={{ width: '100%', height: 600 }}>
      <InteractiveNvlWrapper
        ref={nvlRef}
        nodes={nodes}
        rels={rels}
        nvlOptions={nvlOptions}
        interactionOptions={{ selectOnClick: true, drawShadowOnHover: true }}
        mouseEventCallbacks={mouseEventCallbacks}
        onInitializationError={(err) => console.error('NVL init', err)}
      />
    </div>
  )
}

ref resolves to the underlying NVL instance — call any method on it: nvlRef.current?.fit([]), nvlRef.current?.setRenderer('webgl'), nvlRef.current?.saveToFile().


NVL 2.0 — Layout Clustering

clusterBy groups nodes whose callback returns the same string or number. Return undefined for independent nodes. Keep the callback reference stable in React with useCallback.

Force-directed clustering nests all clustering settings under layoutOptions.clustering:

javascript
const clusterBy = (nodeId) => categoryByNodeId[nodeId]

const nvl = new NVL(container, nodes, relationships, {
  layout: 'forceDirected',
  layoutOptions: {
    seedingMethod: 'circle',
    clustering: {
      clusterBy,
      drawOutline: true,
      drawHalo: true,
      crossClusterRelationshipMultiplier: 0.2
    }
  },
  minFps: 3,
  maxFps: 30
})

crossClusterRelationshipMultiplier is experimental, capped to 0..1, and can destabilize highly connected graphs near 1. It affects cross-cluster spring pull only; intra-cluster edges remain full strength.

Hierarchical clustering places clusterBy directly in layoutOptions:

javascript
const nvl = new NVL(container, nodes, relationships, {
  layout: 'hierarchical',
  layoutOptions: {
    direction: 'down',
    clusterBy
  }
})

Cluster decorations and cluster hull interactions apply to force-directed layoutOptions.clustering. A Cluster is not a graph element; it has { id: string | number, nodeIds: string[] }. Cluster callbacks fire only for empty space inside a cluster hull; node and relationship hits retain priority.


Migrating from NVL 1.x to 2.0

  • Move React wrapper layout and layoutOptions props into nvlOptions: <InteractiveNvlWrapper nvlOptions={{ layout, layoutOptions }} />.
  • Replace interaction callback onZoom with onZoomAndPan(zoom, panX, panY, event).
  • Remove intelWorkaround and Cytoscape-related layout settings; they no longer exist.
  • Treat WebGL as WebGL2-only and do not expect captions in the WebGL renderer.
  • getNodes() and onLayoutStep return NodeWithClientPosition[]: x/y are layout coordinates and clientPosition is relative to the canvas element.
  • Use styling.overlayLineColor; styling.minimapViewportBoxColor is deprecated.

React — BasicNvlWrapper + Ref

No interactions wired. The ref exposes every NVL method via IncludeMethods<NVL> — use when building custom interaction logic in React.

tsx
import { BasicNvlWrapper } from '@neo4j-nvl/react'
import type { NVL } from '@neo4j-nvl/base'
import { useRef } from 'react'

export function MiniGraph({ nodes, rels }) {
  const nvlRef = useRef<NVL>(null)

  return (
    <div style={{ width: '100%', height: 400 }}>
      <BasicNvlWrapper
        ref={nvlRef}
        nodes={nodes}
        rels={rels}
        nvlOptions={{ initialZoom: 2 }}
        nvlCallbacks={{ onLayoutDone: () => nvlRef.current?.fit([]) }}
      />
      <button onClick={() => nvlRef.current?.fit(['1', '2'])}>Zoom to 1,2</button>
    </div>
  )
}

Wiring a Neo4j Driver Result

@neo4j-nvl/base exports a ResultTransformer for the JS driver that deduplicates nodes/relationships across any record shape.

javascript
import neo4j from 'neo4j-driver'
import { NVL, nvlResultTransformer } from '@neo4j-nvl/base'

const driver = neo4j.driver(process.env.NEO4J_URI,
  neo4j.auth.basic(process.env.NEO4J_USERNAME, process.env.NEO4J_PASSWORD))

const { nodes, relationships } = await driver.executeQuery(
  'MATCH (a)-[r]-(b) RETURN a, r, b LIMIT 25',
  {},
  { database: 'neo4j', resultTransformer: nvlResultTransformer }
)

const nvl = new NVL(document.getElementById('viz'), nodes, relationships)
javascript
// ❌ raw EagerResult — records are not Node/Relationship objects
const result = await driver.executeQuery('MATCH (a)-[r]-(b) RETURN a, r, b')
new NVL(container, result.records, [])   // breaks

// ✅ use the transformer
const { nodes, relationships } = await driver.executeQuery(
  'MATCH (a)-[r]-(b) RETURN a, r, b',
  {},
  { database: 'neo4j', resultTransformer: nvlResultTransformer }
)
new NVL(container, nodes, relationships)

For driver lifecycle, session management, Integer handling, and TypeScript types → neo4j-driver-javascript-skill.


Show full SKILL.md (530 more words)Show less

Updating the Graph

MethodBehavior
addAndUpdateElementsInGraph(nodes, rels)Insert new; update existing by id (only specified fields)
updateElementsInGraph(nodes, rels)Update existing only; ignores unknown ids
addElementsToGraph(nodes, rels)Insert only; throws on existing id
removeNodesWithIds(ids)Remove nodes; adjacent relationships auto-removed
removeRelationshipsWithIds(ids)Remove relationships
setNodePositions(nodes, updateLayout?)Override positions; optionally re-run layout
restart(options?, retainPositions?)Restart with new options; positions optional

Diff updates use PartialNode / PartialRelationship — only id is required:

javascript
nvl.updateElementsInGraph(
  [{ id: '1', color: '#f00', selected: true }],   // PartialNode
  [{ id: '12', width: 4 }]                         // PartialRelationship
)

Hit Testing (Manual)

Use when NOT using the interaction-handlers package. In 2.0, getHits() resolves nodes, relationships, and force-directed cluster hulls. Its default targets are ['node', 'relationship', 'cluster'].

javascript
const nvl = new NVL(container, nodes, rels)

container.addEventListener('click', (evt) => {
  const { nvlTargets } = nvl.getHits(evt, ['node', 'relationship', 'cluster'], { hitNodeMarginWidth: 4 })
  const hitNode = nvlTargets.nodes[0]
  const hitRel  = nvlTargets.relationships[0]
  const hitCluster = nvlTargets.clusters[0]
  if (hitNode) console.log('hit node', hitNode.data.id)
  else if (hitRel) console.log('hit rel', hitRel.data.id)
  else if (hitCluster) console.log('hit cluster', hitCluster.data.id, hitCluster.data.nodeIds)
  else console.log('hit canvas')
})

HitTargetNode / HitTargetRelationship carry element hit data. HitTargetCluster carries data, pointerCoordinates, and the fitted convex hull. See references/api-surface.md.


Common Mistakes

MistakeFix
Container with no height → invisible graphSet explicit width and height on the container
Pass driver.executeQuery result directlyUse nvlResultTransformer and consume { nodes, relationships }
WebGL for small label-rich graphsUse 'canvas'; labels are fully supported
Canvas for 10k+ nodesSwitch to 'webgl' via renderer option or setRenderer
New NVL per React renderUse <InteractiveNvlWrapper> / <BasicNvlWrapper> or wrap in useEffect + destroy()
Forgetting nvl.destroy() on teardownCall destroy() on unmount; React wrappers handle this automatically
Vanilla handlers not torn downCall .destroy() on every interaction before nvl.destroy()
Worker construction blocked (strict CSP / sandboxed runtime / older bundler)nvlOptions: { disableWebWorkers: true } (NVL has a non-worker fallback)
Telemetry enabled in regulated envnvlOptions: { disableTelemetry: true }
Layout never settlesPin anchor nodes with pinNode(id); tune layoutTimeLimit
selectOnClick fires doubleToggle once at mount; don't flip interactionOptions per render
Hit test misses near node edgePass { hitNodeMarginWidth: N } to getHits
Captions missing on WebGLExpected in 2.0; captions are Canvas-only, so use 'canvas' when labels matter
React wrapper ignores layout / layoutOptionsIn 2.0 these must be nested in nvlOptions
onZoom never firesIt was removed in 2.0; use onZoomAndPan
Cluster callback misses clicks on a nodeCluster callbacks target empty cluster-hull space; node hits take priority

References

Load on demand:

  • references/api-surface.md — complete 2.0 NVL method table; clustering, FPS, seeding, NodeWithClientPosition, hit target and interaction callback types; React props; named exports; nvlResultTransformer
  • references/troubleshooting.md — zero-height container, WebGL2 and Canvas trade-offs, clustering configuration, 1.x migration errors, worker fallback, context loss, telemetry, lifecycle, layout and hit-testing issues

Canonical web documentation (use WebFetch when references above are insufficient):


Checklist

  • Container has explicit width AND height CSS
  • Correct paradigm chosen from the decision table (vanilla / handlers / React)
  • Renderer matches expected node count (Canvas ≲1k / WebGL 100k+)
  • Canvas selected whenever captions are required
  • React layout and layoutOptions nested inside nvlOptions
  • Zoom handlers use onZoomAndPan, not removed onZoom
  • clusterBy is stable in React and placed correctly for the selected layout
  • Driver executeQuery results piped through nvlResultTransformer
  • database specified on every executeQuery call (delegate to neo4j-driver-javascript-skill)
  • All interaction handlers .destroy()-ed before nvl.destroy() on teardown
  • nvl.destroy() called on React unmount (manual instances only — wrappers handle it)
  • disableTelemetry: true set when in regulated / offline environments
  • disableWebWorkers: true set when bundler / CSP blocks worker construction
  • Graph updates use addAndUpdateElementsInGraph / updateElementsInGraph — not restart
  • License compatible: target is a Neo4j product

© neo4j-contrib, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 3 other files (references) in neo4j-nvl-skill of neo4j-contrib/neo4j-skills.

  • SKILL.md
  • README.md
  • references/api-surface.md
  • references/troubleshooting.md

Open the folder on GitHubat commit bb30e1f

Compare with similar skills

Neo4j Nvl Skill next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Neo4j Nvl Skill compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Neo4j Nvl Skill this skillneo4j-contrib/neo4j-skills114—~5kAutomated safety check: NotesMIT
Framework Wrapperslive-codes/livecodes1.5k—~2.8kAutomated safety check: PassMIT
Workos Widgetsusenotra/notra260—~2kAutomated safety check: PassAGPL-3.0
Getting Startedlive-codes/livecodes1.5k—~1.6kAutomated safety check: PassMIT
Deepagents Setup Configurationsoba-labs/langchain-agent-skills107—~1.9kAutomated safety check: PassMIT
Spline 3D Integrationsickn33/agentic-awesome-skills47k2 repos~1.2kAutomated safety check: PassMIT

Similar skills

  • Framework Wrappers

    live-codes/livecodes

    Use SDK with React, Vue, Svelte, Solid, Preact, and Web Components.

    1.5k GitHub stars~2.8k tokensUpdated today
    AI & LLM EngineeringAuto-check passed
  • Workos Widgets

    usenotra/notra

    A skill your agent uses when the user is implementing, embedding, or debugging a WorkOS Widget — specifically the User Management, User Profile, Admin Portal SSO Connection, or Admin Portal Domain…

    260 GitHub stars~2k tokensUpdated today
    AI & LLM EngineeringAuto-check passed
  • Getting Started

    live-codes/livecodes

    Quick start for standalone app at livecodes.io, embedding playgrounds with CDN or npm, and self-hosting basics.

    1.5k GitHub stars~1.6k tokensUpdated today
    AI & LLM EngineeringAuto-check passed
  • Deepagents Setup Configuration

    soba-labs/langchain-agent-skills

    Initialize, validate, and troubleshoot Deep Agents projects in Python or JavaScript using the deepagents package.

    107 GitHub stars~1.9k tokensUpdated 1 mo ago
    AI & LLM EngineeringAuto-check passed
  • Spline 3D Integration

    sickn33/agentic-awesome-skills

    A skill your agent uses when adding interactive 3D scenes from Spline.design to web projects, including React embedding and runtime control API.

    47k GitHub starsUsed in 2 repos~1.2k tokens
    AI & LLM EngineeringAuto-check passed
  • Polycss

    layoutit/polycss

    Build PolyCSS scenes that render 3D meshes, primitive shapes, or custom polygons as DOM/CSS polygon elements.

    767 GitHub stars~2.4k tokensUpdated 1 mo ago
    Game DevelopmentAuto-check passed

More from neo4j-contrib/neo4j-skills

All 28 skills in this repo
  • Neo4j Aura Agent Skill

    neo4j-contrib/neo4j-skills

    Manages Neo4j Aura Agents via the v2beta1 REST API — create, list, get, update, delete, and invoke Aura agents backed by an AuraDB instance.

    114 GitHub stars~4.4k tokensUpdated yesterday
    Auto-check: notes
  • Neo4j Cypher Skill

    neo4j-contrib/neo4j-skills

    Generates, optimizes, and validates Cypher 25 queries for Neo4j 2025.x and 2026.x.

    114 GitHub starsUsed in 1 repo~6.1k tokens
    Auto-check passed
  • Neo4j Aura Graph Analytics Skill

    neo4j-contrib/neo4j-skills

    Serverless Aura Graph Analytics (AGA) GDS Sessions — covers GdsSessions, AuraGraphDataScience, AuraAPICredentials, DbmsConnectionInfo, SessionMemory, getorcreate, remote graph projection with…

    114 GitHub stars~4.6k tokensUpdated yesterday
    Auto-check: notes
  • Neo4j Getting Started Skill

    neo4j-contrib/neo4j-skills

    Orchestrates zero-to-running-app in 8 stages — prerequisites → context → provision → model → load → explore → query → build.

    114 GitHub stars~4.3k tokensUpdated yesterday
    Auto-check: warnings
  • Neo4j Aura Provisioning Skill

    neo4j-contrib/neo4j-skills

    Provisions and manages Neo4j Aura instances via CLI (aura-cli v1.7+) or REST API.

    114 GitHub stars~3.7k tokensUpdated yesterday
    Auto-check: notes
  • Neo4j Driver Dotnet Skill

    neo4j-contrib/neo4j-skills

    Neo4j .NET Driver v6 — IDriver lifecycle, DI registration (singleton), ExecutableQuery fluent API, ExecuteReadAsync/ExecuteWriteAsync managed transactions, IResultCursor (FetchAsync/ ToListAsync)…

    114 GitHub stars~4.5k tokensUpdated yesterday
    Auto-check: notes

Questions about Neo4j Nvl Skill

What does Neo4j Nvl Skill do?

Neo4j Visualization Library (NVL) — framework-agnostic graph rendering for the browser. Neo4j Nvl Skill is an agent skill from neo4j-contrib/neo4j-skills. Neo4j Visualization Library (NVL) — framework-agnostic graph rendering for the browser.

When should I use Neo4j Nvl Skill?

Neo4j Nvl Skill fits situations like: rendering a Neo4j graph in a browser; feeding driver results through nvlResultTransformer; choosing Canvas vs WebGL; wiring node/relationship click/hover/drag handlers.

How do I install Neo4j Nvl Skill in Claude Code?

Run `npx skills add neo4j-contrib/neo4j-skills --skill neo4j-nvl-skill -a claude-code`. Or copy the skill folder (neo4j-nvl-skill in neo4j-contrib/neo4j-skills) into .claude/skills/neo4j-nvl-skill in your project. Claude Code loads it when a task matches its description.

How do I install Neo4j Nvl Skill in Codex?

Run `npx skills add neo4j-contrib/neo4j-skills --skill neo4j-nvl-skill -a codex`. Or copy the skill folder (neo4j-nvl-skill in neo4j-contrib/neo4j-skills) into .agents/skills/neo4j-nvl-skill in your project. Codex loads it when a task matches its description.

Can I use Neo4j Nvl Skill in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add neo4j-contrib/neo4j-skills --skill neo4j-nvl-skill -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/neo4j-nvl-skill, .gemini/skills/neo4j-nvl-skill, .github/skills/neo4j-nvl-skill and .opencode/skills/neo4j-nvl-skill in your project.

What does Neo4j Nvl Skill need to run?

Going by SKILL.md and its folder, Neo4j Nvl Skill needs the command-line tools its instructions call (npm) and credentials named NEO4J_PASSWORD. Our summary lists: Python 3; Node.js. Its frontmatter pre-approves these tools: Bash, WebFetch. Compatibility (from SKILL.md): @neo4j-nvl packages 2.0.x; React 19 for @neo4j-nvl/react; modern browsers with Canvas2D + WebGL2.

Does Neo4j Nvl Skill access the network?

SKILL.md names 2 domains. As links in the text: github.com and neo4j.com. This is read from the text; nothing was executed.

Is Neo4j Nvl Skill safe to install?

Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Neo4j Nvl Skill use?

Neo4j Nvl Skill is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Neo4j Nvl Skill use?

About 5k tokens (SKILL.md is roughly 20k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 7k tokens, read only when the agent opens those files.

What are the alternatives to Neo4j Nvl Skill?

Skills that share tags, products or a category with Neo4j Nvl Skill: Framework Wrappers (live-codes/livecodes, 1.5k stars), Workos Widgets (usenotra/notra, 260 stars), Getting Started (live-codes/livecodes, 1.5k stars) and Deepagents Setup Configuration (soba-labs/langchain-agent-skills, 107 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Neo4j Nvl Skill?

neo4j-contrib (a GitHub organization) maintains it in neo4j-contrib/neo4j-skills, which has 114 GitHub stars. The repository holds 28 skills in this directory. The repository was last updated on October 9, 2026.

Source: neo4j-contrib/neo4j-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.