Files
app/backend
stroblme b8a15e4133 Code editor: CodeMirror 6 replaces Monaco
Node source (Python) and the JSON dialog share one CodeMirror editor with
find and replace, autocomplete, folding, indent guides, comment toggle and a
JSON lint, themed from the CSS tokens so light and dark follow the .dark class
without a second palette. Programmatic value changes no longer fire onChange,
blur ignores focus moving into the find bar, readOnly keeps selection and copy.

The editor chunk is 470 kB (157 kB gzipped) against 2.7 MB (704 kB) for Monaco,
which also pulled in a 1.2 MB JSON mode, two workers and a font. At 4x CPU on
slow 4G a node panel is ready in 5.7 s instead of 10.8 s, the JSON dialog in
1.5 s instead of 6.7 s. Typing without a key delay keeps every character.

monaco-editor, @monaco-editor/react and the dompurify override are removed.
Specs: typed code reaches the node source, a JSON setting saves only text that
parses. Docs name Tab and Ctrl-M.

Claude-Session: https://claude.ai/code/session_01SSi5AvZ7pFmySK8zy3NPMh
2026-10-28 17:32:49 +01:00
..

Fluksio

Turn Python functions into connected nodes, run experiments, and keep their metrics and artifacts together. Start an engine with Python 3.12 or newer on Linux or macOS:

pip install fluksio
fluksio serve

The first start prints an admin password and opens a terminal dashboard. For a browser dashboard, connect the instance to the optional portal.

For data science

Save this small experiment as study.py. No dataset or GPU needed:

import math

from fluksio import Flow, Port, node

@node(
    requires=[Port("lr", "float")],
    provides=[Port("loss", "float", stream=True), Port("final_loss", "float")],
)
def fit(lr, epochs=25):
    for epoch in range(epochs):
        loss = math.exp(-lr * (epoch + 1))
        yield {"loss": loss}
    return {"final_loss": loss}


train = Flow(
    "train",
    nodes=[fit],
    inputs=[Port("lr", "float", initial=0.01)],
    outputs=["final_loss"],
)

Matching message names connect the nodes and determine their order. After syncing the project, start a run:

fluksio sync study
fluksio run train --lr 0.05 --wait

Each yield records a point on the loss curve. Replace the toy calculation with your own training code when you're ready. For artifacts and comparisons, try the data science guide.

More to explore

  • Flows: typed messages between nodes, wired by name, edited on a canvas or declared in code. Every change is a commit in a git repository you own.
  • Runs: an experiment and a CI-style job are the same entity. Parameters, seed, result, per-node timings, artifacts and the commit it ran at.
  • Dashboards: charts and controls bound to the same messages the flows carry, with no separate metrics pipeline.
  • Remote workers: pip install fluksio-worker on the GPU box; it dials out over one websocket, so nothing there has to be reachable.

For sensors, devices and live automation, try the facility automation guide.

License

Copyright (C) 2026 Melvin Strobl - GNU Affero General Public License v3.0 or later. Running a modified version over a network obliges you to offer its users the corresponding source (AGPL §13).