Skip to content

Release v0.23.0

Choose a tag to compare

@Edwardvaneechoud Edwardvaneechoud released this 10 Oct 13:27
· 13 commits to main since this release
58509e0

Changes since v0.22.3.

This release adds separate Data and Logs windows, Python support for visual groups, and a code-based Simple build. It also improves notebook exports, fixes several file-reading issues, and keeps open flows separate for users on shared servers.

What’s new

Data and Logs in separate windows (#817)

You can now open Data and Logs in their own windows, just like the notebook. Use the button in the dock header to move the active tab into a native window on desktop or a browser window on the web.

  • The Data window follows your canvas selection. Click or preview a node to see its rows; deselecting it leaves the current table visible.
  • With Logs in a separate window, the logs button in the header brings it to the front.
  • While a tab is in its own window, selecting nodes or starting runs won’t reopen that tab in the dock.
  • Use Return to designer to move a tab back.

Each flow can have one window of each kind. On desktop, they stay attached after Save As and close with the main window.

Visual groups from Python and the notebook (#819, #820)

Create canvas groups with ff.FlowGroup(...) and assign nodes with .add_to_group(...):

cleaning = ff.FlowGroup("Cleaning", color="blue")
paid = orders.filter(ff.col("status") == "paid").add_to_group(cleaning)

Groups support colours and nesting through parent_group. They appear on the canvas once they contain a node, and are preserved when you join or concatenate frames from separate graphs.

FlowFrame exports and the notebook now include group definitions and node assignments. Pushing notebook changes updates group names, colours, nesting and membership on the canvas. Untouched nodes keep their existing groups, and empty groups are removed.

Removing color= resets a group to its default canvas colour. The notebook editor also now offers autocomplete for FlowFrame methods and group colours.

Explore data from Python (#821)

Use ff.explore(frame, description="...") to add an Explore data node. You can also pass group= to place it in a visual group. The function returns None, since Explore data nodes have no output.

These nodes now appear as ff.explore(...) calls in the notebook and exports. Charts are still configured in the designer and are preserved when you push changes.

Existing Explore nodes with downstream connections remain placeholders. Reconnect those downstream nodes to the Explore node’s input to use the new export.

Simple build generates FlowFrame code (#809)

Simple build now writes flows as FlowFrame code—the same Python shown in the notebook. Flowfile converts that code into nodes without executing it.

Click Add to canvas to insert the generated flow in one undo step, or expand Generated code to inspect the Python. If your canvas already contains nodes, Simple build adds new steps connected to the existing flow.

Simple build never adds writer nodes. It also rejects database, cloud, catalog and Kafka sources, code nodes, collect(), and general Python such as function definitions, loops and imports. Rejected code gets one rewrite attempt.

The previous mode is still available under Settings → AI → Assistant → Simple build by choosing node settings.

Updated AI models (#809)

The new defaults are:

Provider Default model
Anthropic (default, explain, docgen, lineage) claude-sonnet-5-5
OpenRouter (default, agent_staged) qwen/qwen3.6-35b-a3b
Ollama (default) qwen3.5:9b
Ollama (agent_complex) qwen3.6:35b-a3b
On-device Qwen3.5 2B / 4B (default) / 9B

Features using Haiku 4.5 or Opus 4.7 continue to use those models. Thinking is disabled for Ollama and the on-device server.

On-device models now support up to 128k tokens of context and use a shorter system prompt. Reloading the page during a download also restores the download progress view.

Open flows are scoped to each user (#778)

Previously, a logged-in user could access another user’s open flow if they knew its ID. Open-flow routes now check that the flow belongs to the current user’s session. Requests for another user’s flow return 404.

When two users open the same file, each now gets a separate flow ID, log file and copy in memory. This mainly affects shared Docker deployments; desktop and single-user setups behave as before.

Fixes and maintenance

  • Column renaming: blank rename fields in Join and Select now preserve the original column name, including in saved flows. Actual name collisions produce clearer errors naming the affected columns. (#815, #816)
  • File readers: cloud storage paths now produce an error pointing to the appropriate cloud reader. HTTP and HTTPS URLs still work. ff.read_csv also now reads every file when given a list of paths. (#813)
  • Catalog Writers: writers configured in the designer no longer appear as changed in the notebook. Run all reads their rows from the canvas, and cosmetic edits no longer trigger updates. (#808)
  • Fuzzy Match: exports now handle column names consistently with the node, including empty inputs. The example template’s threshold is now 0.8, matching the 0–1 score range. (#808)
  • Logs and run startup: log streams remain open until a run finishes, even during quiet periods. Windows connecting immediately after a run starts see its logs from the first line. Stream errors no longer expose server paths. (#817)
  • Windows desktop: fixed blank notebook windows and backend processes remaining alive after the app crashes or is killed. (#810, #817)
  • Split the flow engine into smaller modules while preserving behaviour and existing import paths. (#812)
  • Updated Handlebars to 4.7.10 for security fixes. (#818, #822)
  • Added documentation for Simple build, the new models, visual groups and ff.explore.

Upgrade notes

  • Each app release has its own Notebook kernel image. Use Update notebook kernel after upgrading to switch images. This restarts the kernel and clears its memory.
  • Ollama: run ollama pull qwen3.5:9b and, for the complex agent, ollama pull qwen3.6:35b-a3b, or configure your preferred models.
  • OpenRouter: agent_staged now uses the paid qwen/qwen3.6-35b-a3b model, replacing the discontinued free Llama tier.
  • On-device: downloaded Qwen2.5 models still work. They appear as older model under Manage and are no longer offered for new installs.
  • Docker / multi-user: clients accessing another user’s open flow by ID now receive a 404.
  • GET /logs/{flow_id} now ignores idle_timeout.

Install with pip install flowfile, or download the desktop app.

Full changelog