Files
app/backend
stroblmeandClaude Opus 5 f8a7dfb101
Docs / docs (push) Successful in 32s
Playwright Tests / test-playwright (1, 2) (push) Successful in 2m58s
Playwright Tests / test-playwright (2, 2) (push) Successful in 2m9s
pre-commit / pre-commit (push) Failing after 2m23s
Test Backend / test-backend (push) Successful in 3m17s
Playwright Tests / merge-reports (push) Canceled after 0s
Compose Smoke Test / test-compose (push) Canceled after 28s
A sync that changed nothing says so again
Comparing the per-node digest against an engine that does not record one is
comparing against nothing, and reporting every node as changed on every sync
for ever — which is what a client newer than its engine did, since `NodeDef`
drops fields it has never heard of. A node is named now only when both sides
carry a digest, so a no-op sync is `unchanged` again and the signal one syncs
for is back.

That silence had also been the only sign of the mismatch, so sync now names
it: one line saying the engine stored no record of what a node's code reaches,
with both versions in it and what to run. Bumped to 0.1.6 — the digest changed
the stored document's shape, and a version that does not move makes two
different engines indistinguishable, which is the thing it was made
load-bearing for a day ago.

`— draft` was printed whenever there was simply nothing to publish, which
reads as work left unfinished. It is said only when a draft is genuinely
there, and `— published` when one was.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A9Hdrmf2cwNABCnE5x9UJa
2026-08-27 22:58:31 +02:00
..
2026-08-27 08:59:10 +02:00
gc
2026-08-24 19:06:54 +02:00

Fluksio

Fluksio is a node-based automation software that brings trust and reliability to your flow. It just works and looks good. Get started by running

pip install fluksio
fluksio serve

and you're ready to go.

For data science

You can turn your existing data science project into a flow by decorating your functions with @node ...

# myresearch/train.py
import fluksio
from fluksio import Port, node

@node(
    requires=["dataset", Port("lr", "float")],
    provides=[Port("loss", "float", stream=True), Port("weights", "artifact")],
    device="gpu", device_policy="prefer",
)
def fit(dataset, lr, epochs=25):
    for epoch in range(epochs):
        loss = step(...)
        yield {"loss": loss}          # published as it happens, kept as a series
    return {"weights": fluksio.save_artifact("weights.pt")}

... and passing them to a Flow:

# myresearch/pipeline.py
from fluksio import Flow, Port
from myresearch.data import prepare
from myresearch.evaluate import evaluate
from myresearch.train import fit

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

Fluksio will automatically infer the order of nodes based on the inputs and outputs you defined. When everything is set, you can launch your first run as follows:

fluksio run train --lr 0.05 --wait

Checkout our documentation for more infos.

Some other features

  • 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.

Fluksio can also be used for facility automation. Visit us on fluksio.com or go straight to our documentation.

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).