Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions src/content/docs/flow/deploying.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ editUrl: false
---

Three ways in, all from the same image, `ghcr.io/hotloop-io/hotloop-flow`, built
for amd64, with arm64 following in 2.8.1:
for amd64 and arm64:

| You have | Use |
|---|---|
Expand Down Expand Up @@ -70,7 +70,7 @@ To choose your own instead:

```bash
helm install line3-flows hotloop-flow/hotloop-flow \
--set auth.passwordHash="$(podman run --rm ghcr.io/hotloop-io/hotloop-flow:2.8.0 hash-password -password 'something-long')" \
--set auth.passwordHash="$(podman run --rm ghcr.io/hotloop-io/hotloop-flow:2.8.1 hash-password -password 'something-long')" \
--set hotloopFlow.credentialSecret="$(openssl rand -hex 32)"
```

Expand Down Expand Up @@ -191,7 +191,7 @@ so the unit can be copied around, committed and reviewed without carrying
anything that matters.

```bash
printf '%s' "$(podman run --rm ghcr.io/hotloop-io/hotloop-flow:2.8.0 \
printf '%s' "$(podman run --rm ghcr.io/hotloop-io/hotloop-flow:2.8.1 \
hash-password -password 'something-long')" | podman secret create hotloop-flow-admin-hash -
printf '%s' "$(openssl rand -hex 32)" | podman secret create hotloop-flow-credential-secret -
```
Expand All @@ -210,7 +210,7 @@ After=network-online.target

[Container]
ContainerName=hotloop-flow
Image=ghcr.io/hotloop-io/hotloop-flow:2.8.0
Image=ghcr.io/hotloop-io/hotloop-flow:2.8.1
PublishPort=1880:1880
Volume=hotloop-flow-data:/data
Environment=HOTLOOP_FLOW_ADMIN_USER=admin
Expand Down Expand Up @@ -271,9 +271,9 @@ To try it, not to run a line on:
```bash
podman run --rm -p 1880:1880 -v hotloop-flow-data:/data \
-e HOTLOOP_FLOW_ADMIN_USER=admin \
-e HOTLOOP_FLOW_ADMIN_PASSWORD_HASH="$(podman run --rm ghcr.io/hotloop-io/hotloop-flow:2.8.0 hash-password -password 'something-long')" \
-e HOTLOOP_FLOW_ADMIN_PASSWORD_HASH="$(podman run --rm ghcr.io/hotloop-io/hotloop-flow:2.8.1 hash-password -password 'something-long')" \
-e HOTLOOP_FLOW_CREDENTIAL_SECRET="$(openssl rand -hex 32)" \
ghcr.io/hotloop-io/hotloop-flow:2.8.0
ghcr.io/hotloop-io/hotloop-flow:2.8.1
```

Then open <http://localhost:1880>. That credential secret is new every time you
Expand Down
10 changes: 5 additions & 5 deletions src/content/docs/flow/install.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
---
# generated by scripts/sync-docs.mjs
title: "Install HotLoop Flow with Podman or Helm"
description: "Run HotLoop Flow 2.8.0 with Podman or Quadlet, on Kubernetes with Helm, or from source. It starts locked, so set an admin password first."
description: "Run HotLoop Flow 2.8.1 with Podman or Quadlet, on Kubernetes with Helm, or from source. It starts locked, so set an admin password first."
sidebar:
label: "Install"
editUrl: false
---

HotLoop Flow 2.8.0 is current. It ships as `ghcr.io/hotloop-io/hotloop-flow:2.8.0`, a 45.64 MB image on amd64, with the arm64 build following in 2.8.1, plus a Helm chart and source you can build yourself. The image is distroless, runs as a non-root user, and has no shell in it, so there's nothing to drop into, for you or for anybody who shouldn't be there. There's no Docker or Compose path on this page: Podman for one box, Quadlet to make it a service, Helm for a cluster.
HotLoop Flow 2.8.1 is current. It ships as `ghcr.io/hotloop-io/hotloop-flow:2.8.1`, a 45.64 MB image on amd64 and an arm64 build as well, plus a Helm chart and source you can build yourself. The image is distroless, runs as a non-root user, and has no shell in it, so there's nothing to drop into, for you or for anybody who shouldn't be there. There's no Docker or Compose path on this page: Podman for one box, Quadlet to make it a service, Helm for a cluster.

Flow starts locked. It refuses to run without an admin account, because a flow can run commands. And it refuses to run without a credential secret, which encrypts every broker and database password stored with your flows. Every path below sets both.

Expand All @@ -18,7 +18,7 @@ From 2.2.0 context and durable wires live in a SQLite file, `state.db`, on the d
Make a password hash first. The image has no shell, so hashing is a subcommand of the binary itself, and it refuses anything under eight characters.

```bash
podman run --rm ghcr.io/hotloop-io/hotloop-flow:2.8.0 hash-password -password 'something-long'
podman run --rm ghcr.io/hotloop-io/hotloop-flow:2.8.1 hash-password -password 'something-long'
```

Then make the credential secret, and save it somewhere you'll still find it in a year:
Expand All @@ -34,7 +34,7 @@ podman run -d --name hotloop-flow -p 1880:1880 -v hotloop-flow-data:/data \
-e HOTLOOP_FLOW_ADMIN_USER=admin \
-e HOTLOOP_FLOW_ADMIN_PASSWORD_HASH='<the hash>' \
-e HOTLOOP_FLOW_CREDENTIAL_SECRET='<the secret>' \
ghcr.io/hotloop-io/hotloop-flow:2.8.0
ghcr.io/hotloop-io/hotloop-flow:2.8.1
```

Open `http://localhost:1880/` and sign in as `admin`. `/health` answers with the version once the process is up, and `/ready` says whether the runtime actually started.
Expand Down Expand Up @@ -64,7 +64,7 @@ After=network-online.target
Wants=network-online.target

[Container]
Image=ghcr.io/hotloop-io/hotloop-flow:2.8.0
Image=ghcr.io/hotloop-io/hotloop-flow:2.8.1
ContainerName=hotloop-flow
PublishPort=1880:1880
Volume=hotloop-flow-data:/data
Expand Down
4 changes: 2 additions & 2 deletions src/content/docs/flow/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ What that means on a bad night:
It runs your existing flows unchanged, too. That's [further down](/flow/migrating-from-node-red/),
because it's a feature, not the point.

Current release is `2.8.0`. The image is `ghcr.io/hotloop-io/hotloop-flow:2.8.0`
for amd64 (arm64 follows in 2.8.1), the Helm repo is `https://hotloop.io/hotloop-flow/`, and
Current release is `2.8.1`. The image is `ghcr.io/hotloop-io/hotloop-flow:2.8.1`
for amd64 and arm64, the Helm repo is `https://hotloop.io/hotloop-flow/`, and
[docs/deploying.md](/flow/deploying/) has Kubernetes, Podman and Quadlet. About
104,000 lines of Go, a little under 40 percent of it tests, 79 node types for messages and 28 for FlowLab diagrams, and the race
detector comes back clean on every package. Home and lab use is free, so is use by schools, nonprofits and government, and
Expand Down
4 changes: 2 additions & 2 deletions src/content/docs/flow/quick-start.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,10 @@ podman run --rm -p 1880:1880 -v hotloop-flow-data:/data \
-e HOTLOOP_FLOW_ADMIN_USER=admin \
-e HOTLOOP_FLOW_ADMIN_PASSWORD_HASH='<bcrypt hash>' \
-e HOTLOOP_FLOW_CREDENTIAL_SECRET="$(openssl rand -hex 32)" \
ghcr.io/hotloop-io/hotloop-flow:2.8.0
ghcr.io/hotloop-io/hotloop-flow:2.8.1
```

Generate the hash with `podman run --rm ghcr.io/hotloop-io/hotloop-flow:2.8.0
Generate the hash with `podman run --rm ghcr.io/hotloop-io/hotloop-flow:2.8.1
hash-password -password 'something-long'`. The image is distroless nonroot with
no shell in it, so there is nothing to `exec` into and nothing for anybody who
gets code execution to pivot with.
Expand Down
2 changes: 1 addition & 1 deletion src/content/docs/install/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ There are two ways to run a HotLoop product for real: Helm on k3s or any Kuberne
| [HotLoop Edge](/edge/overview/) | 4.18.11 | Yes | Yes | [Install Edge](/edge/install/) |
| [HotLoop Gateway](/gateway/overview/) | 4.18.11 | Yes | Yes | [Install the Gateway](/gateway/install/) |
| [HotLoop Edge Relay](/edge-relay/overview/) | 4.18.11 | Yes | Yes | [Install the Edge Relay](/edge-relay/install/) |
| [HotLoop Flow](/flow/overview/) | 2.8.0 | Yes | Yes | [Install Flow](/flow/install/) |
| [HotLoop Flow](/flow/overview/) | 2.8.1 | Yes | Yes | [Install Flow](/flow/install/) |
| [HotLoop Cascade](/cascade/overview/) | 1.0.2 | Yes, no login needed | Yes, no login needed, see [Cascade with Podman Quadlet](/cascade/quadlet/) | [Running Cascade](/cascade/running/) |

HotLoop IoT, Edge, Gateway, and the Edge Relay come out of one tag, in lockstep, so they share a version number. Flow and Cascade have their own. The IoT, Edge, and Gateway Quadlet units need Podman 5.0 or newer, and the relay's unit was run on Podman 4.9.3. Raspberry Pi OS Bookworm ships 4.3, which has no Quadlet at all, so a Pi wants Trixie or newer.
Expand Down
29 changes: 29 additions & 0 deletions src/content/docs/releases/flow-2-8-1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
---
# generated by scripts/sync-docs.mjs
title: "HotLoop Flow 2.8.1 release notes"
description: "What shipped in HotLoop Flow 2.8.1, what changed on upgrade, and what to read before you touch a running plant."
editUrl: false
sidebar:
label: "2.8.1"
---

HotLoop Flow 2.8.1 is 2.8.0 with the arm64 image added, and nothing else. 2.8.0 shipped amd64 only so it could get to production and read stable first, and this is the one small bump that builds both. There is no change to the code, the chart, the settings or your flows.

## What changed

- The image is built for linux/amd64 and linux/arm64 again. The `2.8.1`, `2.8` and `2` tags hold both.
- The README and the install pages name 2.8.1 and say amd64 and arm64, as they did before 2.8.0.

## New settings

None.

## Upgrade

A plain `helm upgrade` to the 2.8.1 image and chart, or the new tag in your Quadlet unit. If you are on arm64 and stayed on 2.7.1 while 2.8.0 was amd64 only, this is your move to the analysis nodes, the data acquisition node, the durable MQTT output and the TDMS log: read the 2.8.0 notes for what they are and what isn't proven. Nothing happens on first start and nothing needs migrating.

## What isn't proven

The arm64 image is built the way it was for 2.7.1, under emulation on the runner, and it starts and reports its version in the release run. It has not been run on an arm64 box for this release.

Image: `ghcr.io/hotloop-io/hotloop-flow:2.8.1`, linux/amd64 and linux/arm64. Chart: `https://hotloop.io/hotloop-flow/`. The README at this tag has the rest, with pictures: https://github.com/HotLoop-io/hotloop-flow/blob/v2.8.1/README.md
3 changes: 2 additions & 1 deletion src/content/docs/releases/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ description: "What shipped in every HotLoop core, HotLoop Flow and HotLoop Casca
editUrl: false
---

Every release has its own page, written the day it shipped. A note marked "on main, next release" describes a release that is not out yet, so nothing in it is in what you have installed. The latest HotLoop core release is 4.18.11, the latest Flow release is 2.8.0, and the latest Cascade release is 1.0.2.
Every release has its own page, written the day it shipped. A note marked "on main, next release" describes a release that is not out yet, so nothing in it is in what you have installed. The latest HotLoop core release is 4.18.11, the latest Flow release is 2.8.1, and the latest Cascade release is 1.0.2.

## HotLoop core

Expand All @@ -19,6 +19,7 @@ IoT, Edge, Gateway and Edge Relay release together from one tag, so they share t

## HotLoop Flow

- [HotLoop Flow 2.8.1 release notes](/releases/flow-2-8-1/)
- [HotLoop Flow 2.8.0 release notes](/releases/flow-2-8-0/)
- [HotLoop Flow 2.7.1 release notes](/releases/flow-2-7-1/)
- [HotLoop Flow 2.7.0 release notes](/releases/flow-2-7-0/)
Expand Down
21 changes: 16 additions & 5 deletions src/data/sync.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,13 @@
"flow": {
"slug": "HotLoop-io/hotloop-flow",
"ref": "origin/main",
"sha": "37f730bded1a7e2c0d4aba2bb79b3d59c9835a32",
"sha": "dd6a815f9dffd31420f6fd954808011e37b23d09",
"release": {
"tag": "v2.8.0",
"version": "2.8.0",
"tag": "v2.8.1",
"version": "2.8.1",
"prerelease": false,
"publishedAt": "2026-11-02T04:38:59Z",
"sha": "37f730bded1a7e2c0d4aba2bb79b3d59c9835a32"
"publishedAt": "2026-11-02T12:19:34Z",
"sha": "dd6a815f9dffd31420f6fd954808011e37b23d09"
}
},
"cascade": {
Expand Down Expand Up @@ -1044,6 +1044,17 @@
"source": "docs/releases/2.8.0.md",
"release": true
},
{
"slug": "releases/flow-2-8-1",
"product": "releases",
"group": "HotLoop Flow",
"title": "HotLoop Flow 2.8.1 release notes",
"label": "2.8.1",
"status": "released",
"repo": "flow",
"source": "docs/releases/2.8.1.md",
"release": true
},
{
"slug": "releases/cascade-0-1-1",
"product": "releases",
Expand Down
4 changes: 2 additions & 2 deletions src/pinned/flow/install.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
---
reviewed: flow=2.8.0
reviewed: flow=2.8.1
title: "Install HotLoop Flow with Podman or Helm"
description: "Run HotLoop Flow {{flow}} with Podman or Quadlet, on Kubernetes with Helm, or from source. It starts locked, so set an admin password first."
sidebar:
label: "Install"
---

HotLoop Flow {{flow}} is current. It ships as `ghcr.io/hotloop-io/hotloop-flow:{{flow}}`, a 45.64 MB image on amd64, with the arm64 build following in 2.8.1, plus a Helm chart and source you can build yourself. The image is distroless, runs as a non-root user, and has no shell in it, so there's nothing to drop into, for you or for anybody who shouldn't be there. There's no Docker or Compose path on this page: Podman for one box, Quadlet to make it a service, Helm for a cluster.
HotLoop Flow {{flow}} is current. It ships as `ghcr.io/hotloop-io/hotloop-flow:{{flow}}`, a 45.64 MB image on amd64 and an arm64 build as well, plus a Helm chart and source you can build yourself. The image is distroless, runs as a non-root user, and has no shell in it, so there's nothing to drop into, for you or for anybody who shouldn't be there. There's no Docker or Compose path on this page: Podman for one box, Quadlet to make it a service, Helm for a cluster.

Flow starts locked. It refuses to run without an admin account, because a flow can run commands. And it refuses to run without a credential secret, which encrypts every broker and database password stored with your flows. Every path below sets both.

Expand Down
Loading