npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@flowdrop/flowdrop

v1.2.2

Published

A drop-in visual workflow editor for any web application. You own the backend. You own the data. You own the orchestration.

Downloads

524

Readme

Why FlowDrop?

Most workflow tools are SaaS platforms that lock you in. Your data lives on their servers. Your execution logic runs in their cloud. You pay per workflow, per user, per run.

FlowDrop is different.

FlowDrop is a pure visual editor. You implement the backend. You control the orchestration. Your workflows run on your infrastructure, with your security policies, at your scale.

No vendor lock-in. No data leaving your walls. No surprise bills.

npm install @flowdrop/flowdrop

Note: FlowDrop supports one editor instance per page (module-level singleton stores). See Architecture Notes for details.

You get a production-ready workflow UI. You keep full control of everything else.

Quickstart

<script lang="ts">
  import { WorkflowEditor } from "@flowdrop/flowdrop";
  import "@flowdrop/flowdrop/styles/base.css";
</script>

<WorkflowEditor />

5 lines. One fully-functional workflow editor.

Features

| | | | ---------------------------- | ------------------------------------------------------------------------- | | 🎨 Visual Editor Only | Pure UI component. No hidden backend, no external dependencies | | 🔐 You Own Everything | Your data, your servers, your orchestration logic, your security policies | | 🔌 Backend Agnostic | Connect to any API: Drupal, Laravel, Express, FastAPI, or your own | | 🧩 7 Built-in Node Types | From simple icons to complex gateway logic | | 🎭 Framework Flexible | Use as Svelte component or mount into React, Vue, Angular, or vanilla JS | | 🐳 Deploy Anywhere | Runtime config means build once, deploy everywhere |

Architecture Notes

  • Single instance per page. FlowDrop uses module-level singleton stores for state management. Only one FlowDrop editor instance can exist on a page at a time.
  • Svelte 5 required. FlowDrop uses Svelte 5 runes ($state, $derived, $effect) throughout. Svelte 4 is not supported.
  • Modern browsers only. The library targets ES2020+ and does not include polyfills for older browsers.

Node Types

FlowDrop ships with 7 beautifully designed node types:

| Type | Purpose | | ---------- | --------------------------------------- | | default | Full-featured nodes with inputs/outputs | | simple | Compact, space-efficient layout | | square | Icon-only minimal design | | tool | AI agent tool nodes | | gateway | Conditional branching logic | | terminal | Start/end workflow points | | note | Markdown documentation blocks |

Integration

Svelte (Native)

<script>
  import { WorkflowEditor, NodeSidebar } from "@flowdrop/flowdrop";
</script>

<div class="flex h-screen">
  <NodeSidebar {nodes} />
  <WorkflowEditor {nodes} />
</div>

Vanilla JS / React / Vue / Angular

import { mountFlowDropApp, createEndpointConfig } from "@flowdrop/flowdrop";

const app = await mountFlowDropApp(document.getElementById("editor"), {
  workflow: myWorkflow,
  endpointConfig: createEndpointConfig("/api/flowdrop"),
  eventHandlers: {
    onDirtyStateChange: (isDirty) => console.log("Unsaved changes:", isDirty),
    onAfterSave: (workflow) => console.log("Saved!", workflow),
  },
});

// Full control over the editor
app.save();
app.getWorkflow();
app.destroy();

Enterprise Integration

import { mountFlowDropApp, CallbackAuthProvider } from "@flowdrop/flowdrop";

const app = await mountFlowDropApp(container, {
  // Dynamic token refresh
  authProvider: new CallbackAuthProvider({
    getToken: () => authService.getAccessToken(),
    onUnauthorized: () => authService.refreshToken(),
  }),

  // Lifecycle hooks
  eventHandlers: {
    onBeforeUnmount: (workflow, isDirty) => {
      if (isDirty) saveDraft(workflow);
    },
  },

  // Auto-save, toasts, and more
  features: {
    autoSaveDraft: true,
    autoSaveDraftInterval: 30000,
  },
});

API Configuration

Connect to any backend in seconds:

import { createEndpointConfig } from "@flowdrop/flowdrop";

const config = createEndpointConfig({
  baseUrl: "https://api.example.com",
  endpoints: {
    nodes: { list: "/nodes", get: "/nodes/{id}" },
    workflows: {
      list: "/workflows",
      get: "/workflows/{id}",
      create: "/workflows",
      update: "/workflows/{id}",
      execute: "/workflows/{id}/execute",
    },
  },
  auth: { type: "bearer", token: "your-token" },
});

Customization

Make it yours with CSS custom properties:

:root {
  --flowdrop-background-color: #0a0a0a;
  --flowdrop-primary-color: #6366f1;
  --flowdrop-border-color: #27272a;
  --flowdrop-text-color: #fafafa;
}

Deploy

Docker (Recommended)

cd ../../apps/example-client-docker
cp env.example .env
docker-compose up -d

Node.js

npm run build
FLOWDROP_API_BASE_URL=http://your-backend/api node build

Runtime configuration means you build once and deploy to staging, production, or anywhere else with just environment variables.

Documentation

| Resource | Description | | ------------------------------------------------------------ | ------------------------ | | API Documentation | REST API specification | | Docker Guide | Docker deployment guide | | QUICK_START.md | Get running in 5 minutes | | CHANGELOG.md | Version history |

Development

pnpm install         # Install dependencies
pnpm dev             # Start dev server
pnpm build           # Build library
pnpm test            # Run all tests

Contributing

FlowDrop is stabilizing. Contributions will open soon. Star the repo to stay updated.