Skip to content

Creating and Managing Boards

Boards are the heart of IONFLOW. A Board is the visual workspace where you design, test, and manage your automations. Inside each Board you can create one or several Flows — sets of connected nodes that represent processes with their own logic, triggers, and outcomes.

Think of a Board as a project that groups all flows related to a business goal. For example, a Board called “Email Marketing” could contain a Flow that receives incoming emails and classifies them, another that generates personalized responses with AI, and another that sends weekly reports.

Everything is built without writing code, by dragging nodes onto the canvas and connecting them visually. For advanced users, IONFLOW offers a powerful commands and expressions system that allows data transformation within nodes.

  • Business operators: Who need to create simple automations without technical expertise
  • Process specialists: Who design complex flows with conditional logic and loops
  • Power Users: Who leverage versioning, scripting, and subflows for advanced solutions

A Board is your automation canvas. Its main characteristics are:

  • Visual drag-and-drop editor
  • No limit on nodes or flows within a Board
  • Nodes are connected with lines (edges) to define data flow and execution order
  • Versioning system with saved states, separate drafts, and change history
  • Two execution modes: Dev (visual preview) and Live (automatic production)
  • Identified by name and description (currently no folders or tags)

Note: Nodes that aren’t connected to any flow simply do nothing — they don’t generate errors when saving.

  1. Log in to IONFLOW
  2. In the left sidebar, click Boards
  3. You’ll see the list of all your boards with their name, description, and status (active/inactive)
  4. Use + Create Board to create a new one, or click the edit icon (✏️) to open an existing one
  1. Click + Create Board in the top right corner
  2. Enter a descriptive name (e.g., Shopify-Inventory Sync)
  3. Optionally add a description of the board’s purpose
  4. Click Create
  5. The visual editor will open with an empty canvas ready for design

Nodes are the building blocks of your flows. Each node has a specific task and is configured through a sidebar panel with forms.

Nodes are divided into three categories:

Node (UI Label)Description
SchedulerSchedule-based trigger. Executes the flow automatically at a defined interval.
JSON: ion.trigger.scheduler
HTTP RequestMakes HTTP requests to any REST API. Configure URL, method, headers, and body.
JSON: ion.action.http
WebhookTrigger that fires when an external application sends data to a URL generated by IONFLOW.
JSON: ion.trigger.webhook
Webhook ResponseSends a custom response to the service that fired the webhook.
JSON: ion.action.webhook_response
Node (UI Label)Description
Simple DecisionBinary evaluation (true/false). If all conditions are met, takes the then output; if any fails, takes the false output.
JSON: ion.action.condition
Multiple DecisionMultiple routing (N paths). Each rule creates a different output, with a default path when none matches. Ideal for classifying data.
JSON: ion.action.switch
FormCollects user data through a structured form.
JSON: ion.action.form
MapperVisual data transformation. Allows restructuring information before passing it to the next node.
JSON: ion.action.mapper
IteratorLoops through array elements one by one (sequential). Each element is processed as an independent execution.
JSON: ion.action.iterator
TimerIntroduces an execution delay (maximum 15 minutes). Useful for respecting external API rate limits.
JSON: ion.action.timer
Call Component-FlowExecutes a subflow (flow within a flow). Allows reusing logic already built in other boards.
JSON: ion.action.flow
On Call Component-Flow TriggerTrigger that fires when another flow calls this one as a component.
JSON: ion.trigger.flow
Node (UI Label)Description
Persistent Data SaveCreate a new record in the Data Store.
JSON: ion.store.add
Persistent Data GetRead a record by its key.
JSON: ion.store.get
Persistent Data UpdateUpdate an existing record.
JSON: ion.store.update
Persistent Data DeleteDelete a record.
JSON: ion.store.delete
Persistent Data CheckVerify if a record exists.
JSON: ion.store.check
Persistent Data SearchQuery records with filters.
JSON: ion.store.search
Persistent Data CountCount records matching criteria.
JSON: ion.store.count
Persistent Data Delete AllDelete all records from a table.
JSON: ion.store.delete_all

These are nodes specific to each application registered in IONFLOW (Shopify, FedEx, Gmail, Slack, etc.). They are dynamically configured based on the application and its available modules.

About error handling: There is no dedicated “Error Handler” node. Instead, all nodes have an output handle called error that you can connect to handle failures individually.

Connections are the lines that join nodes together. They determine:

  • Data flow: the output of one node becomes the input of the next
  • Execution order: nodes execute following the direction of the connections
  • They connect from the output port (right side of the node) to the input port (left side of the next node)

Each node receives a unique automatic ID generated by the visual editor (e.g., $51, $52, n_1744393764259). Users don’t define these IDs manually.

The Simple Decision node evaluates one or more expressions and produces two paths:

┌── then ──→ [Action if true]
[Data] → [Simple Decision]
└── false ──→ [Action if false]

The Multiple Decision node allows routing data through N different paths, ideal for classifications:

┌── pending ───→ [Process Pending]
[Data] → [Multiple Decision] ┼── shipped ───→ [Track Shipment]
├── cancelled ─→ [Refund]
└── default ───→ [Unknown Status]

The Multiple Decision node has two operation modes:

  • Rules: Visual rule builder (no code)
  • Expression: Custom expression evaluation using the commands language

The Iterator node loops through array elements sequentially (one by one). Each element is emitted as a separate entry in the execution queue.

[Array of orders] → [Iterator] → [Process each order individually]

One of IONFLOW’s most powerful features is the ability to reference data from any previous node in the flow, not just the immediately preceding one.

When you open a node’s configuration, you can place your cursor in any text field. A pop-up with information from all previously executed nodes will appear. Simply drag the reference to the field where you need it.

PatternDescription
{{$1}}Complete data from the node at position 1 in the stack
{{$1.field}}Specific field from the node at position 1
{{n_1.response}}Direct reference by node name/ID
{{toBase64(value)}}Built-in functions applied to the value

References are resolved using the execution stack, which stores the complete history. This means you can access data from any previous node in the chain.

Note on global variables: The flow data structure includes a variables field for future global variables, but this feature is not yet implemented. Currently everything is passed from node to node via the stack.

For more information on available operations and transformations, see Command Definitions.

The visual editor consists of:

  • Central canvas: The main area where you drag and connect nodes
  • (+) Button: To add new nodes to the canvas
  • Sidebar panel: Opens when you click a node to configure its parameters
  • Bottom bar: Shows the flow name, active draft (e.g., main), and action buttons
  1. Click the + button or drag a node from the library
  2. Click a node to configure its parameters in the sidebar
  3. Connect nodes by dragging a line from the output port to the input port of the next one
  4. Use the context pop-up to reference data from previous nodes
  5. Save with Save when you’re done

IONFLOW includes a versioning system that lets you manage changes professionally. The concepts are similar to version control systems like Git, but with its own terminology.

Action in the interfaceDescriptionGit Equivalent
SaveSaves the current state of the board with a descriptive message. Each save is recorded as a “Saved State” with date and hash.Similar to a commit
Separate DraftsCreates parallel versions of the board to work without affecting the main one.Similar to creating branches
HistoryShows the list of all saved states (Saved States), with their message, date, and hash. Allows comparing the saved state with current changes (Board Diffs, Code Diffs).Similar to git log
Discard ChangesDiscards current changes and reverts to the last saved state.Similar to git checkout / git restore

In the editor’s bottom bar you’ll see the active draft name (e.g., main) and the flow name. You can create separate drafts to:

  • Experiment with changes without affecting the production version
  • Work on improvements while the main flow keeps running
  • Maintain separate test versions

When you open History, you’ll see the Board Saves screen with:

  • List of Saved States: Each shows the message, date, and an identifying hash
  • Available Separate Drafts: Dropdown selector to view saved states for each draft
  • Board Diffs: Visual comparison between the saved board and current changes
  • Code Diffs: JSON code comparison between the saved state and the current one

Before activating a board, always test it in Dev (Preview) mode:

  1. Click the Preview button in the bottom bar
  2. The board executes once in visual mode
  3. You can see data flowing between nodes in real-time
  4. Use pause, resume, and stop controls to debug

⚠️ Important: Preview mode makes real calls to external APIs. There is no mock or simulation mode. If you need to avoid side effects (like sending real emails), configure your connections to point to the corresponding API sandbox.

ModeDescription
🛠️ Dev (Preview)Visual execution in the editor. You can see data at each node in real-time, pause and resume.
🚀 Live (Active)Background execution. The flow runs automatically according to its trigger (schedule or webhook) without user intervention.

IONFLOW allows exporting and importing boards as JSON files:

  • Export: Downloads the complete board as a .json file
  • Import: Loads a board from a .json file

This functionality also serves to clone boards: export an existing one and import it as a new one.

📋 A dedicated “Duplicate Board” button is planned for future versions.

StatusDescription
Active (ON)The board runs automatically according to its trigger. The toggle is blue.
Inactive (OFF)The board doesn’t run. You can edit and test it without it activating.

To change the status, use the toggle in the boards list or in the top corner of the editor.

ErrorCauseSolution
”Board not running”Trigger not configured or board inactiveVerify the trigger is configured and the toggle is ON
”Data not passing between nodes”Incorrectly referenced variable or wrong data typeUse the context pop-up to verify references. Check that data types match (string vs number)
“Node not appearing in library”Application (Grapp) not installed or missing connectionCreate the connection first in the Connections section, or use HTTP Request as an alternative
”Connection not authorized”Expired OAuth tokenGo to Connections and click Re-authorize
  • Board: Workspace that groups one or several related flows
  • Flow: Set of connected nodes representing a process with start and end (can have multiple of both)
  • Node: Individual block that performs a specific task (condition, transformation, API call, etc.)
  • Edge (Connection): Line connecting two nodes that defines data flow and execution order
  • Trigger: Start node that determines when the flow executes (schedule, webhook, manual)
  • Save: Action that saves the current board state as a “Saved State” (works like a commit in Git)
  • Saved State: Specific point in the board’s history, with message, date, and hash
  • Separate Draft: Parallel version of the board for working without affecting the main one (works like a branch in Git)
  • History: View of all saved states of the board with change comparison

Q: How many nodes can a board have? A: There is no defined node limit. You can add as many as you need.

Q: Can I use a flow inside another (subflow)? A: Yes. The Call Component-Flow node lets you execute a subflow, reusing logic already built in other boards.

Q: How do I monitor my boards? A: Go to Execution History in the sidebar. There you can see the execution history with status (success, error, in progress) and data from each step.

Q: Does the Iterator process elements in parallel? A: No. The Iterator processes elements sequentially (one by one), following FIFO order in the execution queue.

Q: Can I clone a board? A: Currently you can simulate it with Export + Import: export the board as JSON and import it as a new one. A dedicated duplicate button is planned.