← Back to experiments
Experiment31 August 2026

Dataflow Engine

A lightweight data integration engine with YAML-defined pipelines, visual flow monitoring, and reconciliation checks — built as an n8n-adjacent demo.

TypeScriptNode.jsSQLiteYAMLData Pipelines

Pipeline dashboard

Visual flow canvas with live run history

Local-only
Dataflow engine web UI showing a YAML-defined pipeline rendered as a visual node flow with run history.

Why this exists

Understanding pipeline orchestration from first principles

Rather than starting with a framework, this spike builds a data integration engine from scratch — sources, transforms, sinks, scheduling, and reconciliation — to understand the core abstractions that tools like n8n are built on.

The web UI renders YAML pipeline definitions as visual node flows, with one-click execution and a persistent run history backed by SQLite.

What it demonstrates

YAML pipeline definitionsSource/Transform/Sink modelVisual flow renderingReconciliation checksRun history (SQLite)REST, RSS, CSV, SQLite connectorsPluggable transformsCLI + Web UI

1. Define a pipeline in YAML — source, transforms, sinks, schedule.

2. The engine loads and validates the definition at startup.

3. The web UI renders each pipeline as a connected node flow.

4. Run pipelines from the UI and inspect results in the history table.

Pipeline architecture

YAML → Loader → Engine.register(pipeline)
Source.fetch() → TransformStep[] → Sink.write()
Reconciliation.check(fetched, written)
RunStore → SQLite → run history + stats

Connectors and transforms

SourcesREST API, RSS, CSV, SQLite
SinksCSV file, SQLite table
Transformspick, addField, timestamp, mapFields, dedupe, coerce
Monitoringcount-match reconciliation, run logs

What I learned

Building the engine first and the UI second made it clear which abstractions actually matter: the source/transform/sink pipeline model, reconciliation as a first-class concept, and YAML as a declarative interface all survived contact with real data. The visual flow was straightforward to layer on top because the domain model was already clean.

The reconciliation check — comparing records fetched to records written — is a small feature that punches above its weight. Most pipeline tools bolt this on later or leave it to the user. Making it declarative in the YAML definition keeps the pipeline author thinking about data quality from the start.