Hatchet v0.105.2 launches workflow pause and per-member payload visibility. It also ships an early beta of embedded mode for the TypeScript and Python SDKs, and a batch of engine and SDK fixes.
Highlights
- Workflows can now be paused: in-flight runs keep running, new runs stay queued until unpause (up to the queue TTL), and cron or scheduled triggers can either queue or drop their runs while paused. Useful for halting a workflow with a high error rate, or queueing jobs during the day and unpausing to run them overnight. See Pausing Workflows.
- Payload visibility can now be restricted per tenant member. Combined with the read-only
VIEWERrole, members can view runs, workflows, workers, events, logs, and metrics without seeing payload contents or modifying anything. - Early beta: Hatchet Embedded now supports the TypeScript and Python SDKs, running a full Hatchet engine directly next to your workers for local development, end-to-end testing, and CI. See Embedded Mode.
- Go SDK: stream listeners stay alive across exit races, and previously missing durable wait and webhook arguments were added.
hatchet-litenow handsSIGTERMthrough to the engine, so containers shut down gracefully instead of waiting to be killed.
Fixed
- Engine: evicted tasks can now time out instead of hanging (#4772).
- Engine: durable user events are isolated by scope (#4721).
- Engine: retry backoff no longer overflows on high retry counts (#4719).
- Engine: lookups of missing rows return
NotFoundinstead ofInternal(#4744, #4757).
What's Changed
- fix: load test dag results not printing by @juliusgeo in #4701
- fix(engine): prevent POWER overflow when computing retry backoff by @grutt in #4719
- fix: Small FE fixes for viewer role/tenant moving by @juliusgeo in #4720
- docs: show released tag for self hosting GHCR images instead of
latestby @mnafees in #4725 - fix(lite): exec hatchet-lite so SIGTERM reaches the engine by @BugFountain in #4613
- fix: more fixes for managed compute page by @juliusgeo in #4728
- fix: undo fixes for managed compute pages by @juliusgeo in #4729
- feat(analytics): support an account group on captured events by @abelanger5 in #4715
- feat: add per-member canViewPayloads for payload visibility by @grutt in #4718
- fix: reorder canViewPayloads goose migration after v1.0.144 by @grutt in #4732
- chore: enable filtered Prometheus scrapes by @igor-kupczynski in #4739
- fix(python): rest client ssl/tls creds, memory leak, durable callback ordering, improved shutdown behavior by @mrkaye97 in #4723
- chore(python): fix examples by @mrkaye97 in #4741
- chore: Bump github.com/moby/go-archive from 0.2.0 to 0.3.0 by @dependabot[bot] in #4735
- docs: use Inter sans-serif for body and sidebar text by @abelanger5 in #4743
- fix: return NotFound when RefreshTimeout misses a task runtime by @grutt in #4744
- refactor(engine): pub messages to mq to trigger child runs from durable tasks by @mrkaye97 in #4702
- refactor(engine): simplify child id gen for the durable path by @mrkaye97 in #4717
- fix: cache hashed frontend assets as immutable by @grutt in #4750
- feat(engine): workflow pause by @mrkaye97 in #4703
- fix(engine): add ordering + for update lock by @mrkaye97 in #4752
- fix(engine): rename migration by @mrkaye97 in #4753
- fix(engine): task stats query by @mrkaye97 in #4754
- feat: operators to support pluggable runtime destinations by @abelanger5 in #4151
- feat(engine): dags-as-durable-tasks by @mrkaye97 in #4266
- fix: return NotFound for missing rows instead of Internal by @grutt in #4757
- fix(go-sdk): keep listeners alive across exit races by @igor-kupczynski in #4730
- fix: add missing Go SDK durable wait and webhook args by @mnafees in #4738
- fix(engine): duplicate event-to-run records, increase durable dag slots by @mrkaye97 in #4758
- fix(python): revert tls change by @mrkaye97 in #4761
- ci: extend pytest timeout by @mrkaye97 in #4763
- chore: update PR template by @mrkaye97 in #4764
- refactor(engine): consolidate two more durable path queries by @mrkaye97 in #4759
- fix(engine): durable dag optimizations by @mrkaye97 in #4762
- fix(engine): create synthetic olap dags on both trigger paths by @mrkaye97 in #4767
- docs: temporal migration guide by @abelanger5 in #4745
- refactor: attribution changes for docs by @abelanger5 in #4747
- fix: Batch get dag parent outputs to avoid N+1 query by @juliusgeo in #4769
- fix(engine): durable dag optimization, ii by @mrkaye97 in #4766
- fix: taskfile latest tag computation by @mrkaye97 in #4765
- fix(dashboard): frontend + metering improvements for dag operator by @mrkaye97 in #4770
- fix(engine): durable dag child spawning breaks downstream steps by @mrkaye97 in #4768
- fix(engine): isolate durable user events by scope by @fidelix in #4721
- fix(sdks/python): retry aio_push/aio_bulk_push on retryable grpc errors by @harsh-sikarwar in #4737
- ci: remove optimistic scheduling from the sdk test matrices by @mrkaye97 in #4771
- fix(engine): allow evicted tasks to time out by @mrkaye97 in #4772
- fix(dashboard): lock payload visibility and move workflow pause into Settings by @grutt in #4781
- docs: auto-gen SDK references by @mnafees in #4672
- chore: regenerate SDK reference docs by @github-actions[bot] in #4782
- feat: add support for embedded mode to TS and Python SDKs by @mnafees in #4742
- feat: support private CA TLS for the NATS pub/sub by @igor-kupczynski in #4787
- chore: changelog for next release by @mnafees in #4788
- feat: embedded stop methods for TS and Py by @mnafees in #4786
- fix: generate docs snippets before building the embedded UI by @mnafees in #4789
New Contributors
- @BugFountain made their first contribution in #4613
- @fidelix made their first contribution in #4721
- @harsh-sikarwar made their first contribution in #4737
Full Changelog: v0.101.27...v0.105.2