
Product
Introducing Tier 1 Reachability: Precision CVE Triage for Enterprise Teams
Socket’s new Tier 1 Reachability filters out up to 80% of irrelevant CVEs, so security teams can focus on the vulnerabilities that matter.
@dschz/solid-flow
Advanced tools
Solid Flow - A highly customizable Solid library for building node-based editors, workflow systems, diagrams and more.
Solid Flow is a port of React Flow and Svelte Flow for SolidJS.
☣️ Solid Flow is alpha and currently under development. The API intends to follow React/Svelte Flow closely but some things might change for the sake of SolidJS. ☣️
onlyRenderVisibleElements
prop: the ability to only render visible elements on screen.
SolidFlow
but it is a no-op. During development and benchmarking, it was revealed that use of it degraded rendering performance due to the amount of work done to actually achieve the outcome of the feature. We need to innovate on the implementation to make the performance comparable (ideally better) to the normal performance of rendering all the nodes/edges on screen. As such it is a no-op prop for now.The easiest way to get the latest version of Solid Flow is to install it via npm, yarn or pnpm:
npm install @dschz/solid-flow
This is a basic example to get you started. For more advanced examples and full API documentation, explore the playground examples included in this repository.
import {
SolidFlow,
Controls,
Background,
MiniMap,
addEdge,
type EdgeConnection,
createEdgeStore,
createNodeStore,
} from "@dschz/solid-flow";
import "@dschz/solid-flow/styles"; // Required styles
export default function Flow() {
// Use createNodeStore and createEdgeStore for reactive state management
const [nodes, setNodes] = createNodeStore([
{
id: "1",
type: "input",
data: { label: "Input Node" },
position: { x: 250, y: 0 },
},
{
id: "2",
type: "default",
data: { label: "Default Node" },
position: { x: 100, y: 100 },
},
{
id: "3",
type: "output",
data: { label: "Output Node" },
position: { x: 250, y: 200 },
},
]);
const [edges, setEdges] = createEdgeStore([
{ id: "e1-2", source: "1", target: "2" },
{ id: "e2-3", source: "2", target: "3" },
]);
const onConnect = (connection: EdgeConnection) => {
/**
* Solid Flow updates the node/edge stores internally. The user-land edge store will have the connection inserted by the time onConnect fires so we can just go ahead and update the state of it
*/
setEdges(
(edge) => edge.id === connection.id,
produce((edge) => {
edge.animated = true;
}),
);
};
return (
<SolidFlow nodes={nodes} edges={edges} onConnect={onConnect} fitView>
<Controls />
<MiniMap />
<Background variant="dots" />
</SolidFlow>
);
}
// Main flow instance with full API
const solidFlow = useSolidFlow();
// Reactive access to nodes and edges
const nodes = useNodes();
const edges = useEdges();
// Viewport control and monitoring
const viewport = useViewport();
// Connection state during drag operations
const connection = useConnection();
// Reactive access to node data
const nodeData = useNodesData(["node-1", "node-2"]);
// Node connection information
const connections = useNodeConnections("node-1");
// Create reactive stores (replaces signals)
const [nodes, setNodes] = createNodeStore(initialNodes);
const [edges, setEdges] = createEdgeStore(initialEdges);
// Update stores with SolidJS patterns
import { produce } from "solid-js/store";
setNodes(
(node) => node.id === "1",
produce((node) => {
node.position.x += 20;
}),
);
// Add new connections
setEdges(addEdge(connection, edges));
// Coordinate transformations (via useSolidFlow)
const { screenToFlowPosition, flowToScreenPosition } = useSolidFlow();
// Node/edge utilities
getNodesBounds(nodes);
getIntersectingNodes(node, nodes);
Create fully customized components with multiple handles:
import { Handle, type NodeProps } from "@dschz/solid-flow";
// Type-safe custom node component
function CustomNode(props: NodeProps<{ label: string }, "custom">) {
return (
<div class="custom-node" style={{ padding: "10px", background: "white" }}>
<Handle type="target" position="top />
<div>{props.data.label}</div>
<Handle type="source" position="bottom" id="output-a" />
<Handle type="source" position="bottom id="output-b" style={{ left: "80%" }} />
</div>
);
}
// Create type-safe node types
const nodeTypes = {
custom: CustomNode,
} satisfies NodeTypes;
// Use with typed store
const [nodes] = createNodeStore<typeof nodeTypes>([...]);
<SolidFlow nodeTypes={nodeTypes} nodes={nodes} ... />
import { type Connection } from "@dschz/solid-flow";
const isValidConnection = (connection: Connection) => {
// Custom validation logic
return connection.source !== connection.target;
};
const onConnect = (connection: Connection) => {
console.log("New connection:", connection);
setEdges(addEdge(connection, edges));
};
<SolidFlow
isValidConnection={isValidConnection}
onConnect={onConnect}
...
/>
<SolidFlow
onNodeClick={(event, node) => console.log("Node clicked:", node)}
onNodeDrag={(event, node) => console.log("Node dragged:", node)}
onEdgeClick={(event, edge) => console.log("Edge clicked:", edge)}
onPaneClick={(event) => console.log("Pane clicked")}
onSelectionChange={(params) => console.log("Selection changed:", params)}
/>
Solid Flow includes comprehensive accessibility features:
The repository includes a comprehensive playground with 25+ examples:
Run the examples locally:
bun start
Some pre-requisites before install dependencies:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
curl -fsSL https://bun.sh/install | bash
nvm use
bun install
bun start
bun run lint # checks source for lint violations
bun run format # checks source for format violations
bun run lint:fix # fixes lint violations
bun run format:fix # fixes format violations
The only requirements when contributing are:
main
instead of making merge commits.main
0.1.4
FAQs
Solid Flow - A highly customizable Solid library for building node-based editors, workflow systems, diagrams and more.
The npm package @dschz/solid-flow receives a total of 23 weekly downloads. As such, @dschz/solid-flow popularity was classified as not popular.
We found that @dschz/solid-flow demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Socket’s new Tier 1 Reachability filters out up to 80% of irrelevant CVEs, so security teams can focus on the vulnerabilities that matter.
Research
/Security News
Ongoing npm supply chain attack spreads to DuckDB: multiple packages compromised with the same wallet-drainer malware.
Security News
The MCP Steering Committee has launched the official MCP Registry in preview, a central hub for discovering and publishing MCP servers.