Originally published on JavaScript in Plain English:https://javascript.plainenglish.io/inside-foblex-flow-part-1-library-architecture-and-design-principles-3c0a6ed81087

Node-based interfaces are everywhere today: low-code platforms, workflow editors, chatbot builders, business automation systems, ETL tools. Visual logic modeling allows users to “assemble a program” without code by dragging blocks and connecting them with arrows.
But if you work with Angular, you’ll quickly face a problem:
That’s why we built Foblex Flow — a library that fills this gap.
In this series, we’ll look inside the library — how it works, which principles guide its design, and which architectural decisions make it lightweight and universal.
We’ll start with the foundation: architecture and design principles.
https://github.com/Foblex/f-flow
Most node-based libraries give you everything “out of the box”: a data store, JSON graph, APIs for saving and loading. That’s convenient at first, but becomes a limitation once you try to integrate it into a real application.
Foblex Flow takes a different approach:
📌 In short: the library handles the UI layer, while your application owns the business logic.
The golden rule of Foblex Flow: the library never mutates your data silently.
Every user action is emitted as an Angular event:
This means every action is a signal to your application:
“This happened. You decide what to do.”
That makes the library predictable and easy to integrate with any state management — from Signals to NgRx.
We can break down Foblex Flow into four layers:
The root component (<f-flow>) — coordinates context, events, and canvas state.
The workspace: holds all nodes and connections. Manages zoom, pan, and selections.
Nodes are not predefined components, but directives you can attach to any Angular element.
An SVG path connecting an output to an input. Supports Bezier curves, straight lines, and arrows.
Positions (x, y) are mandatory — without them a node won’t render.
But where and how you store them (Signals, NgRx, Firestore, a plain service) is entirely up to you.
Instead of hiding complexity behind black boxes, the API is transparent: directives and events are explicit.
Foblex Flow works outside the browser.
All window, document, and localStorage references go through DI and can be mocked for SSR.
The library never dictates your persistence strategy.
The diagram illustrates the boundary: Foblex Flow only handles UI state, while your app owns the graph model and business logic.
The core philosophy: Foblex Flow is not a “platform inside a platform.”
It focuses on what it does best — interactive UI.
This separation makes the library universal. You can build anything — from workflow editors to no-code chatbot builders.
Foblex Flow is not a black box — it’s a transparent tool for building node-based UIs in Angular.
In the next part, we’ll dive into the drag-and-drop engine: