github hatchet-dev/hatchet v0.101.27
Hatchet 0.101.27

latest releases: v0.101.27-alpha.1, v0.101.28
5 hours ago

Hatchet v0.101.27 launches idempotency keys and batch tasks. It is otherwise a performance and operations release, adding a read-only VIEWER role, allowing the dashboard to be served from a subpath, alongside substantial durable task performance work, and new queue depth metrics.

Highlights

  • Launching Idempotency Keys and Batch Tasks. Batch tasks aggregate multiple tasks and spawn them as a single batch, reducing API calls and downstream resource usage. See documentation on Idempotency and Batch Tasks.
  • The dashboard can be served from a subpath rather than the domain root, via BASE_PATH on the static file server or LITE_FRONTEND_BASE_PATH on hatchet-lite.
  • A new read-only VIEWER tenant member role that cannot modify anything.
  • hatchet_tenant_queued_to_assigned and hatchet_tenant_queued_to_assigned_time_seconds are now also exported broken down by workflow name, and hatchet_tenant_queue_size carries a workflow_name label.
  • A new hatchet_tenant_additional_metadata_queue_size gauge reports queue depth per additional metadata key-value pair. Only keys prefixed with prom_ are exported, so opting a key in is explicit and cardinality stays bounded. An item counts towards every metadata key it carries, so series should not be summed across keys.
  • Per-tenant operation timers are now jittered across their full interval on startup, and persisted intervals are loaded lazily. This avoids query storms when controllers restart on deployments with many tenants. The idempotency lookup is also skipped when a task carries no keys.
  • /api/v1/stable/tasks/{task}/task-events endpoint no longer ignores its limit and offset parameters.
  • Tasks with equal worker label affinity are now round-robined across the tied workers instead of packing onto one worker until its slots fill.
  • The Go SDK warns when a child workflow result is still pending after its parent task context is cancelled.
  • Dashboard: onboarding use case selection, wider labels in the trace view, and a restored domain redirect modal.

What's Changed

  • fix: Increase batch scheduler max new items limit, exclude already buffered items in query, flush multiple times a tick by @juliusgeo in #4546
  • feat: add NATS pub/sub backend by @igor-kupczynski in #4550
  • chore: Prepare release notes for v0.98.9 by @gregfurman in #4552
  • feat: instrument the pub/sub layer with Prometheus histograms by @igor-kupczynski in #4548
  • feat: 4107 onboarding use case selection by @BloggerBust in #4539
  • docs: list all scheduled quickstart languages in the CLI reference by @BloggerBust in #4560
  • feat: allow running migrations against an explicit database URL by @grutt in #4562
  • chore: remove managed worker compute cost UI by @grutt in #4564
  • fix: clean up concurrency manager from tenant manager, bump pgoutbox by @abelanger5 in #4566
  • refactor(msgqueue): drop dead publish timeouts, correct pub/sub metric docs by @igor-kupczynski in #4561
  • fix: buffer and coalesce RefreshTimeout updates by @grutt in #4565
  • fix: Change v1_task/v1_task_runtime modification order to avoid deadlock by @juliusgeo in #4567
  • fix: Add exclusive locks for every table touched during batch migration by @juliusgeo in #4568
  • fix: split batch migrations by @juliusgeo in #4569
  • test(python): anchor test_waits on start completing by @igor-kupczynski in #4559
  • refactor(frontend): use control plane deployment flag by @grutt in #4570
  • fix(dashboard): restore domain redirect modal by @grutt in #4572
  • fix: TS SDK only error log after 3 network errors in heartbeat and action listener workers by @juliusgeo in #4574
  • chore: close unaccepted PRs by @mnafees in #4556
  • feat: Add docs for enterprise features (SSO & User groups) by @juliusgeo in #4575
  • fix(go): preserve result subscriptions across reconnect by @igor-kupczynski in #4571
  • feat: Batch tasks documentation by @juliusgeo in #4586
  • fix: auto-close PRs based on actual permissions by @mnafees in #4594
  • fix: dependabot alerts by @mnafees in #4603
  • chore: disable security endpoint in CI workloads by @mnafees in #4604
  • chore: Bump the npm-sdk-deps group in /sdks/typescript with 9 updates by @dependabot[bot] in #4598
  • chore: Bump the python-deps group across 1 directory with 6 updates by @dependabot[bot] in #4601
  • chore: Bump the github-actions group across 1 directory with 9 updates by @dependabot[bot] in #4599
  • fix(python): logging memory leak by @mrkaye97 in #4588
  • fix: Improve load test external worker timing collection by @juliusgeo in #4545
  • feat: add load test for durable tasks by @mrkaye97 in #4607
  • feat: tenant_queued_to_assigned broken down by workflow name, queue depth metric by @abelanger5 in #4576
  • fix: acquire step batch configs on the caller's transaction by @abelanger5 in #4617
  • feat: serve frontend from a different base url by @mnafees in #4558
  • fix: make prom keys opt-in by @abelanger5 in #4621
  • refactor: actor pattern for improving scheduling performance by @abelanger5 in #4578
  • refactor: move the extension contract into pkg/scheduling by @abelanger5 in #4623
  • fix: head-prepend frontend base path config by @mnafees in #4628
  • fix(engine): durable task performance improvements by @mrkaye97 in #4624
  • fix: durable satisfied callback order guarantees by @grutt in #4164
  • fix(dashboard): expand min width of the trace view labels by @mrkaye97 in #4596
  • fix: Handle DLQ for batch tasks by @juliusgeo in #4636
  • fix(engine): add unique index to v1_event, remove v1_event_lookup_table and v1_event_to_run by @mrkaye97 in #4627
  • fix(engine): validate jsonb for error messages too by @mrkaye97 in #4640
  • fix(engine): attempt II - reject invalid unicode in error message by @mrkaye97 in #4644
  • chore: remove references to the local embed package by @mnafees in #4647
  • fix: close dependabot alerts by @mnafees in #4646
  • chore: Require that PR author is assigned to issue by @gregfurman in #4637
  • chore: Bump the npm-dev-deps group across 2 directories with 1 update by @dependabot[bot] in #4649
  • chore: Bump the python-deps group in /sdks/python with 4 updates by @dependabot[bot] in #4653
  • chore: Bump the github-actions group with 3 updates by @dependabot[bot] in #4652
  • chore: Bump the npm-sdk-deps group in /sdks/typescript with 6 updates by @dependabot[bot] in #4650
  • fix(engine): park and evict idle MQ buffer flushers by @grutt in #4655
  • feat(dashboard): add CTAs pointing to Cloud on timeouts by @mrkaye97 in #4632
  • chore(dashboard): lockfile by @mrkaye97 in #4658
  • chore: migrate to fumadocs by @mnafees in #4633
  • fix(mcp): Include get_docs in tools list by @blakeofwilliam in #4662
  • fix(engine): jitter operation interval startup to avoid query storms by @grutt in #4663
  • refactor(scheduler): promote v1alpha event-loop scheduler to v1 by @grutt in #4638
  • chore(go-sdk): log pending workflow result waits by @igor-kupczynski in #4668
  • fix(engine): don't call idempotency query if there are no keys by @mrkaye97 in #4659
  • fix(api): treat client-aborted requests as 499 instead of server errors by @igor-kupczynski in #4667
  • fix: ListTaskRunEvents ignoring limit and offset params by @juliusgeo in #4664
  • chore(dispatcher): warn on task assigned bulk send failures by @grutt in #4669
  • fix: TS SDK hatchet.task constructor adds concurrency options at workflow level by @juliusgeo in #4661
  • fix(dashboard): hide github integration page if no managed workers exist by @mrkaye97 in #4670
  • fix(dashboard): additional meta operator logic by @mrkaye97 in #4641
  • chore: version override by @mrkaye97 in #4676
  • feat: posthog updates for docs site by @abelanger5 in #4677
  • fix(engine): send durable invocation count on cancel by @mrkaye97 in #4657
  • feat: Move tenants between organizations by @juliusgeo in #4616
  • fix(engine): small durable event ingest db optimizations by @mrkaye97 in #4681
  • docs: fix broken links and add CI crawler by @mnafees in #4682
  • docs: content negotiaiton for AI agents by @mnafees in #4686
  • fix(python): quiet down noisy action listener / heartbeat errors by @mrkaye97 in #4684
  • feat(frontend): ask onboarding questions before creating an organization by @abelanger5 in #4689
  • fix: stop resource limit alert spam when meter window is empty by @grutt in #4606
  • fix(engine): add indexes for concurrency slot schedule timeouts by @grutt in #4683
  • chore(msgqueue): fail pubsub Sub on subscriber channel pool saturation by @grutt in #4674
  • fix: Add dags to load test by @juliusgeo in #4692
  • fix(loadtest): stop rampup teardown from racing channel close by @grutt in #4695
  • test(e2e): wait for restore to clear eviction before the next cycle by @grutt in #4696
  • fix(engine): merge single-task workflow concurrency onto the task by @grutt in #4687
  • fix(engine): round-robin workers with equal label affinity by @grutt in #4697
  • chore: update quickstart CLI functionality by @mnafees in #4693
  • feat(engine): add triggered_at to durable event log and and write to it by @mrkaye97 in #4698
  • feat(engine): wire up split tx writes for durable events by @mrkaye97 in #4699
  • feat: Add VIEWER role by @juliusgeo in #4690
  • feat(analytics): emit tenant:connect when a CLI attaches to a tenant by @abelanger5 in #4705
  • chore: readme utm and posthog attribution by @mnafees in #4694
  • fix: tenant opt-out and landing page analytics by @mnafees in #4716
  • chore: release notes for v0.101.27 by @mnafees in #4678

New Contributors

Full Changelog: v0.98.9...v0.101.27

Don't miss a new hatchet release

NewReleases is sending notifications on new releases.