Skip to main content
skill

react-flow-node-ts — Claude Code skill: what it does, how to install

Creates typed React Flow canvas node components with Handle connections and Zustand store integration. Useful when building node-based workflow editors.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add microsoft/skills --skill react-flow-node-ts -a claude-code
Open on GitHub

What react-flow-node-ts does

This skill streamlines creating TypeScript node components for React Flow canvases. It provides base patterns for component logic and type declarations. Placeholders handle PascalCase component naming and kebab-case node identifiers. The generated component wraps the element in memo, mounts NodeResizer, and configures target and source Handle elements.

The setup relies directly on Zustand. It also expects code inside src/frontend/src/. The node calls useAppStore to track canvas edit modes and run node updates. If your project uses a different state library or directory layout, you must adapt the store hooks and import paths manually.

Setup follows a six-step integration path. It guides you from typing node data and exporting the component to updating store defaults, registering nodeTypes, and wiring the block into UI creation menus.

What it helps with

  • scaffold a React Flow node component with target and source handles
  • define typed TypeScript interfaces for node data
  • bind canvas node updates to a Zustand store
  • register custom node types in canvas configs and UI menus

Example prompts for the agent

  • Create a VideoNode component for React Flow with TypeScript types and handles
  • Generate a custom canvas node and wire its actions to the Zustand store
  • Scaffold a resizable workflow node following the react-flow-node-ts pattern

How to install react-flow-node-ts

1Skills CLI (Vercel)

npx skills add microsoft/skills --skill react-flow-node-ts -a claude-code

2Manually: put the files in place

~/.claude/skills/react-flow-node-ts/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/react-flow-node-ts/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about react-flow-node-ts

How to install react-flow-node-ts in Claude Code?

Run npx skills add microsoft/skills --skill react-flow-node-ts -a claude-code in your terminal. You can also place the specification file directly at ~/.claude/skills/react-flow-node-ts/SKILL.md.

What is included in the node template?

The template includes a memoized React component with Handle ports and a dedicated TypeScript definition file for custom node data.

Can this skill be used without Zustand?

The template directly imports useAppStore to check canvas modes and update node state. If your project does not use Zustand, you must replace those store calls manually.

Source text

SKILL.md · MIT
---
name: react-flow-node-ts
description: Create React Flow node components with TypeScript types, handles, and Zustand integration. Use when building custom nodes for React Flow canvas, creating visual workflow editors, or implementing node-based UI components.
license: MIT
metadata:
  author: Microsoft
  version: "1.0.0"
---

# React Flow Node

Create React Flow node components following established patterns with proper TypeScript types and store integration.

## Quick Start

Copy templates from [assets/](assets/) and replace placeholders:
- `{{NodeName}}` → PascalCase component name (e.g., `VideoNode`)
- `{{nodeType}}` → kebab-case type identifier (e.g., `video-node`)
- `{{NodeData}}` → Data interface name (e.g., `VideoNodeData`)

## Templates

- [assets/template.tsx](assets/template.tsx) - Node component
- [assets/types.template.ts](assets/types.template.ts) - TypeScript definitions

## Node Component Pattern

```tsx
export const MyNode = memo(function MyNode({
  id,
  data,
  selected,
  width,
  height,
}: MyNodeProps) {
  const updateNode = useAppStore((state) => state.updateNode);
  const canvasMode = useAppStore((state) => state.canvasMode);
  
  return (
    <>
      <NodeResizer isVisible={selected && canvasMode === 'editing'} />
      <div className="node-container">
        <Handle type="target" position={Position.Top} />
        {/* Node content */}
        <Handle type="source" position={Position.Bottom} />
      </div>
    </>
  );
});
```

## Type Definition Pattern

```typescript
export interface MyNodeData extends Record<string, unknown> {
  title: string;
  description?: string;
}

export type MyNode = Node<MyNodeData, 'my-node'>;
```

## Integration Steps

1. Add type to `src/frontend/src/types/index.ts`
2. Create component in `src/frontend/src/components/nodes/`
3. Export from `src/frontend/src/components/nodes/index.ts`
4. Add defaults in `src/frontend/src/store/app-store.ts`
5. Register in canvas `nodeTypes`
6. Add to AddBlockMenu and ConnectMenu

© Microsoft · MIT · microsoft/skills

Similar skills

All skills for Frontend and UI →

From the same set242

The whole set →

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor