Skip to content

Flow-Like Architecture

Flow-Like is a modular, type-safe workflow automation platform built primarily in Rust with a TypeScript/React frontend. This document covers the high-level architecture and how the different components fit together.

┌─────────────────────────────────────────────────────────────────────┐
│ Desktop App (Tauri) │
│ apps/desktop (React + Vite) │
└────────────────────────────────┬────────────────────────────────────┘
┌────────────┴────────────┐
│ Tauri Commands │
│ (src-tauri/src/*.rs) │
└────────────┬────────────┘
┌────────────────────────────────┴────────────────────────────────────┐
│ Core Rust Packages │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────────┐ │
│ │ flow-like │ │ flow-like- │ │ flow-like-catalog │ │
│ │ (core) │──│ storage │──│ (node implementations) │ │
│ └──────────────┘ └──────────────┘ └──────────────────────────┘ │
│ │ │ │ │
│ ┌──────┴──────┐ ┌──────┴──────┐ ┌─────────────┴───────────┐ │
│ │ flow-like- │ │ flow-like- │ │ Sub-catalogs: │ │
│ │ types │ │ bits │ │ core, std, data, web, │ │
│ └─────────────┘ └─────────────┘ │ media, ml, onnx, llm, │ │
│ │ processing │ │
│ └─────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
┌────────────────────────────────┴────────────────────────────────────┐
│ Backend Services │
│ │
│ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │
│ │ flow-like-api │ │ flow-like- │ │ Deployment │ │
│ │ (REST API) │ │ executor │ │ Backends │ │
│ └──────────────────┘ └──────────────────┘ └──────────────────┘ │
│ │
│ Deployable via: Docker Compose, Kubernetes, AWS Lambda │
└─────────────────────────────────────────────────────────────────────┘

Flow-Like uses a monorepo structure with Cargo workspaces for Rust and Bun workspaces for TypeScript.

PackageDescription
flow-like (core)Core library for workflow execution, board management, credentials, and state
flow-like-typesShared type definitions, protobuf schemas, and utility types
flow-like-storageStorage abstraction layer supporting S3, Azure Blob, GCS, and LanceDB for vectors
flow-like-bitsReusable workflow components (“bits”)
flow-like-model-providerAI/ML model integrations (embeddings, LLMs, local inference)
flow-like-apiREST API with authentication, multi-tenancy, and execution backends
flow-like-executorEnvironment-agnostic workflow execution runtime
flow-like-catalogNode implementations for the visual workflow editor
flow-like-catalog-macrosProcedural macros for node registration

Node Catalog Sub-packages (packages/catalog/)

Section titled “Node Catalog Sub-packages (packages/catalog/)”

The catalog is split into domain-specific sub-crates:

Sub-packageDescription
coreCore execution types and traits
stdStandard nodes: control flow, math, variables, logging
dataData manipulation, events, transformations
webHTTP requests, webhooks, email
mediaImage processing, bits for media files
mlMachine learning: classification, clustering, regression
onnxONNX model inference
llmLLM integrations: generative AI, embeddings, agents
processingDocument processing, text extraction
ApplicationDescription
desktopTauri desktop app with React/Vite frontend
backend/docker-composeDocker Compose deployment for self-hosting
backend/kubernetesKubernetes deployment with Helm charts
backend/awsAWS Lambda deployment
backend/localLocal development API server
docsDocumentation website (Astro/Starlight)
websiteMarketing website (Astro)
embeddedEmbeddable widget (Next.js)
web-appWeb-based workflow editor (Next.js)
schema-genJSON schema generation utility
1. User creates workflow in visual editor (Desktop/Web App)
2. Workflow saved as "Board" (JSON) → Storage (S3/Local)
3. Execution triggered via API or Desktop
4. Executor loads Board + Catalog nodes
5. ExecutionContext manages state per node
6. Results stored back to Storage

Flow-Like workflows are fully typed. Every pin on every node has a defined type:

  • Execution pins: Control flow triggers
  • Data pins: Boolean, Integer, Float, String, Struct, Array, Generic
  • Struct pins: Can enforce JSON Schema validation

This enables compile-time-like safety in a visual editor.

Flow-Like uses a two-bucket model:

BucketPurpose
MetaSmall, frequent reads (board definitions, user configs) — S3 Express One Zone recommended
ContentLarge objects (bits, media, ML models) — Standard S3

Supported backends:

  • AWS S3 (with STS temporary credentials)
  • Azure Blob Storage (ADLS Gen2 with Directory SAS)
  • Google Cloud Storage
  • Cloudflare R2
  • MinIO (S3-compatible)

Flow-Like supports multiple execution backends:

BackendIsolationUse Case
Local (Desktop)ProcessSingle-user, offline
HTTP Warm PoolContainer/PodTrusted workloads
LambdaMicroVMMulti-tenant SaaS
Kubernetes JobPod (Kata optional)Untrusted code

→ See Execution Backends for details.

The API package (flow-like-api) supports:

  • Cognito (AWS)
  • JWT validation
  • Scoped credentials (per-user storage paths)
  • Stripe integration for billing

The desktop app uses:

  • Tauri: Rust backend with webview frontend
  • React: UI components
  • Vite: Build tooling
  • Tailwind CSS: Styling
  • shadcn/ui: Component library
  • Zustand/React Query: State management

The visual workflow editor is built with custom canvas rendering and node connection logic.

Many packages support feature flags for conditional compilation:

# flow-like (core)
[features]
tauri = ["flow-like-storage/tauri"]
local-ml = ["flow-like-model-provider/local-ml"]
flow = ["flow-runtime"]
hub = []
bit = ["hub"]
model = ["bit"]
app = ["bit", "model", "hub"]
# flow-like-api
[features]
aws = ["aws-config", "aws-sdk-sts"]
azure = ["hmac", "sha2", "base64", "urlencoding"]
gcp = ["sha2", "base64", "rsa", "urlencoding"]
kubernetes = ["kube", "k8s-openapi"]
lambda = ["aws-config", "aws-sdk-lambda"]
cognito = ["aws-sdk-cognitoidentityprovider"]