Ironflow is pre-1.0: APIs can change between releases. Pin a version. What is ready →
- Releases
- Ironflow v0.45.0
Ironflow v0.45.0
Ironflow v0.45.0 fixes 54 defects found in a full repository audit. It changes behavior in secrets, environment deletion, sessions, event-sourcing reads, run lifecycle, consumer groups and WebSockets. It also adds a readiness page and a branded ironflow version.
Breaking Changes
Section titled “Breaking Changes”- A declared secret that cannot be read now fails the run. The run fails with
SECRETS_UNAVAILABLEand the secret’s name, on push, REST pull and streaming pull. Before, one undecryptable secret made the engine drop every declared secret and run the function anyway. A secret that does not exist is still skipped with a warning. The secrets API answers404(GET,PATCH) or204(DELETE) in an environment with no secrets, not500. A secret’screated_atis now its first write time (#2865) - A deleted environment no longer leaks state to the next environment with the same ID. Deleting an environment, project, org or tenant now deletes its NATS KV buckets and purges its
PUBSUBmessages, consumer-group and projection durables, and pending debounce entries. A new environment whose ID is already taken by another project getsenv_<project slug>-<hash>_<name>instead of a 409 (#2864) - Engine NATS subjects now carry the environment ID:
ironflow.{project name}.{env ID}.…, not the environment name. The ingest router still accepts a name from external publishers. During a rolling upgrade,TriggerSyncon a new node can wait until its timeout for a result from an old node (#2864) - Sessions are checked against the current account on every request. Deleting a user, or rotating or deleting the API key behind a desktop session, revokes the session on its next request. Role and email changes apply at once. User role updates validate every role name first and apply in one transaction. An unknown role returns 400. The organization’s last admin cannot lose
adminor be deleted (409) (#2872) - Event-sourcing reads changed. A projection rebuild over
StreamProjectionEventssends each batch once and no longer double-counts events in non-idempotent reducers.from_versionis now an inclusive start in the read direction, so backward entity paging no longer repeats the first page.GetEntityHistory.total_eventsis the stream size on every page.ListProjections.total_countis the number of matching projections (#2870) - Re-registering a function no longer resumes a paused or archived function. It also no longer bumps the version when the config is unchanged.
UpdateFunctionStatuswith a missing or unknown status returnsInvalidArgument. Integers above 2^53 stay exact instep.invokeinput and in the config API (#2869) - Run lifecycle fixes.
waitForEventmatching keeps exact numbers, and an engine-rejected push yield now fails the run withYIELD_REJECTED.TriggerSyncreturns at once when a run fails or is cancelled outside the executor. Push requests carry the real attempt inattemptandX-Ironflow-Attempt. Cron ORs day-of-month and day-of-week when both are set, and rejects dates that never occur (#2868) - Consumer groups no longer lose events when a member reads slower than events arrive.
UpdateConsumerGroupvalidates the pattern likeCreateConsumerGroup. Replay of the last N events scans back from the newest message. Filtered groups keep events with array or scalar payloads (#2867) - WebSocket and KV watch fixes. A client disconnect no longer crashes the server with
send on closed channel. Unsubscribing a group subscription now leaves the group. WithIRONFLOW_WS_ALLOWED_ORIGINSset, SDK clients that send noOriginheader can connect again. KV and config watch sockets cap incoming frames at 4 KB (#2866)
Features
Section titled “Features”ironflow versionprints a branded banner with build info (#2879)- A per-capability readiness column and a generated readiness page show what is pre-1.0. The docs site carries a pre-1.0 banner, and the release workflow guards the readiness data (#2907, #2908)
CHANGELOG.mduses one spelling for breaking changes, and the release notes read it (#2910)- The SDK parity matrix shows status cells as colored chips (#2920)
- The landing page has a Field notes newsletter sign-up (#2911)
- New blog post: a push handler in Rust (#2900)
- Environment IDs stay unique across orgs, and deleted environment state is purged (#2878)
- Secrets fail closed when unreadable, and answer “absent” for environments with no secrets (#2881)
- Go SDK: exact step replay, re-register when the server forgot the worker, unencodable output, step timing (#2873)
- SDKs: heartbeats drain, failed-step outputs, unencodable output and upcast failures are handled (#2874)
- Store: a run delete releases its lane slot and worker credit. Webhook lookup prefers the accepted delivery (#2871)
- Dashboard: UTF-8 base64, per-run state, webhook paging, runs past the end of a list, account save order. The analytics page no longer links to a misleading test event (#2875, #2861)
- Cloud: per-customer tofu state, a module variable contract and a
create_boxcompensator (#2876). Per-request dispatch keys, first JWT rotation, resize rollback andsubscription.deletedmid-transition (#2877). The onboarding email is skipped when provisioning schedules a deprovision (#2906).subscription.deletedbefore the cluster is active is honored (#2895). Auto-remediation attempts are capped per cluster (#2896). The deprovision dispatch chains past a cancelled run (#2897)
Improvements
Section titled “Improvements”- The docs now match the current implementation after a docs-audit pass (#2882)
- Added the push-pull explainer video (#2880) and the 2026-10-14 repository bug audit report (#2863)
- Ironflow Desktop ships on its own cadence. See the Desktop changelog.