Ironflow is pre-1.0: APIs can change between releases. Pin a version. What is ready →
- Releases
- Ironflow v0.48.0
Ironflow v0.48.0
Ironflow v0.48.0 is the 1.0 groundwork release: pull workers pick up jobs at once through a long-poll, consumer groups get a bidirectional ack stream, and SDKs now tolerate values from a newer server. It also removes a set of deprecated APIs and makes ironflow skills sync write to the project by default.
Breaking Changes
Section titled “Breaking Changes”ironflow skills syncwrites to.agents/skillsat the project root, not$HOME/.agents/skills. Pass--globalfor the old location. Sync refuses, without--force, to replace a bundled skill it never wrote (#3024)PubSubService.SubscribeBidirectionaltakesSubscribeBidirectionalRequestand returnsSubscribeBidirectionalResponse. It was never implemented, so no working client breaks (#2982)- Removed
TriggerResultfrom@ironflow/core,@ironflow/nodeand@ironflow/browser. UseInvokeResult(#3011) - Removed
TimeTravelRunState,TimeTravelStepOutputandAuditTrailEntryfrom@ironflow/core. UseTimeTravelRunStateSnapshot,TimeTravelStepOutputSnapshotandAuditTrailResult(#3011) - Removed
RUN_STATUS.PENDING(JS) andRunStatusPending(Go). The engine has not producedpendingsince #1222 (#3011) - Removed the
recording_retentionfield from the API and every SDK. It never controlled deletion;IRONFLOW_AUDIT_RETENTION_DAYSdoes. Delete it from function definitions (#3011) - Removed the browser
agents.invoke()optionsreplayandonRunStarted. ReadrunIdfrom the result; openagents.subscribe(runId, { replay })to replay events (#3011) - Removed the
spec.licensekey from server YAML. A file that still has it failsironflow validateandserve. Delete thelicense:block (#3011) @ironflow/coreAckModeSchema,BackpressureModeSchemaandConsumerGroupStatusSchemaaccept unknown values, so their zod type is a union:.options,.enum,.extractand.excludeare gone (#3021)
Features
Section titled “Features”- Pull workers pick up new jobs at once.
GET /api/v1/workers/{workerId}/jobs?wait=<seconds>holds an idle poll up to 25 seconds, and the Go, Node and Python workers use a 20-second wait instead of sleeping 1 second after every empty poll. Options: NodepollWaitSeconds, GoPollWait, Pythonpoll_wait(#2995) SubscribeBidirectionaljoins a consumer group and carries its acks on one stream, in the Go SDK (WithJoinTransport("grpc")) and Node (@ironflow/node/consumer-group-stream). Each ack gets a server result (#2982)ironflow serve --headlessruns the engine without the dashboard, for apps that use Ironflow as a backend. YAML:spec.headless: true(#2976)- A newer SDK on an older server raises
SERVER_TOO_OLD, naming the first server version that serves the call (#2982, #3010) - Every SDK names itself on every HTTP request with
X-Ironflow-SDK(browser:X-User-Agent). The server reads neither (#3008) ironflow serverefuses a database whose schema is newer than the binary, instead of running on a schema it cannot read (#3009)ironflow versionlinks to the release notes for the running version (#3027)
- A subscription with
startAfterSequenceno longer skips events when the subscriber falls behind. The server and the Go SDK wait up to 5 seconds for room, then end the subscription so the SDK resumes from the last delivered event (#2985) - Entity stream appends no longer slow down as the stream grows. An append reads only the newest event, not the whole stream (#3019, #3026)
- PostgreSQL: concurrent appends to one entity stream no longer fail with
version conflict, and concurrent updates of one function both apply (#2974) - PostgreSQL: registering a deployment returns the stored creation time (#2981)
- Node and Python: a managed projection no longer loses events after a save whose response was lost (#2984)
- Go, Node and browser: an unknown run status or consumer-group enum value from a newer server no longer fails the call (#3021)
JoinConsumerGroupreturnsNotFound, notInternal, for a missing group- Go: a ConnectRPC event whose payload is not a JSON object now arrives with its data;
Nakwith an out-of-range delay returns anAckError - Consumer-group events over ConnectRPC carry
metadata, so Go and Node setevent.Metawith its sequence
Improvements
Section titled “Improvements”- Local
make ciandmake ci-fullrun independent groups concurrently and reuse builds (#2971) make test-upgraderuns the previous release’s data through the new binary on SQLite and PostgreSQL;make test-skewruns previous-release SDKs against the new server and the reverse (#3009, #3010)- Benchmarks cover embedded SQLite and PostgreSQL in every run, with a hardened harness (#2993, #2987)