Learn
Quickstart

Quickstart

Svelte Flow is a highly customizable component for building interactive graphs and node-based editors, built by the creators of React Flow.

💡

This package is currently in an alpha state and under heavy development. The API is likely to change. You can read about the latest changes in the "What's New" section.

Play online

You can try Svelte Flow without setting anything up locally by checking out the starter projects we have on Stackblitz (opens in a new tab):

Vite template

If you want to get started right away, you can use our vite template (opens in a new tab):

npx degit xyflow/vite-svelte-flow-template app-name

Installation

The easiest way to get the latest version of Svelte Flow is to install it via npm, yarn or pnpm:

npm install @xyflow/svelte

What is “xyflow”? Learn more here (opens in a new tab).

Creating your first flow

We get started by stacking together the most important components of Svelte Flow: SvelteFlow, Controls, Background and MiniMap. A basic flow looks like this:

<script lang="ts">
  import { writable } from 'svelte/store';
  import {
    SvelteFlow,
    Controls,
    Background,
    BackgroundVariant,
    MiniMap
  } from '@xyflow/svelte';
 
  // 👇 this is important! You need to import the styles for Svelte Flow to work
  import '@xyflow/svelte/dist/style.css';
 
  // We are using writables for the nodes and edges to sync them easily. When a user drags a node for example, Svelte Flow updates its position.
  const nodes = writable([
    {
      id: '1',
      type: 'input',
      data: { label: 'Input Node' },
      position: { x: 0, y: 0 }
    },
    {
      id: '2',
      type: 'default',
      data: { label: 'Node' },
      position: { x: 0, y: 150 }
    }
  ]);
 
  // same for edges
  const edges = writable([
    {
      id: '1-2',
      type: 'default',
      source: '1',
      target: '2',
      label: 'Edge Text'
    }
  ]);
 
  const snapGrid = [25, 25];
</script>
 
<!--
👇 By default, the Svelte Flow container has a height of 100%.
This means that the parent container needs a height to render the flow.
-->
<div style:height="500px">
  <SvelteFlow
    {nodes}
    {edges}
    {snapGrid}
    fitView
    on:nodeclick={(event) => console.log('on node click', event.detail.node)}
  >
    <Controls />
    <Background variant={BackgroundVariant.Dots} />
    <MiniMap />
  </SvelteFlow>
</div>

How to Contribute

Show us what you make: Drop it in into our Discord Server (opens in a new tab), tweet (opens in a new tab) at us, or email us at info@xyflow.com

Community Participation: Ask and answer questions in our Discord Server (opens in a new tab) or jump in on Github discussions.

Squash Bugs: We can’t catch them all. Check existing issues and discussions first, then create a new issue to tell us what’s up.

Financial Support: If you are an organization who wants to make sure Svelte Flow continues to be maintained, reach out to us at info@xyflow.com

And of course, we love Github stars ⭐