Hatchet v0.98.9 is a feature release. It adds idempotency keys for tasks and workflows, and an embedded engine the Go SDK can run in-process, alongside a new default for concurrency scheduling and a batch of dashboard and hardening fixes.
Highlights
- Tasks can declare a slot cost, so a task that needs more memory or CPU consumes more than one worker slot. See Task Slot Cost.
- Engine rows in the run trace view now carry a badge with their workflow, task, or event name, and the retry number on retried tasks, so repeated spans such as
hatchet.engine.workflow_runare distinguishable at a glance. - CLI commands that take
--profilenow use the configured default or only profile without prompting, andhatchet server startsets its new profile as the default when none is configured. In sessions without a terminal, such as CI, a selection that would still need a prompt fails with an error that explains how to proceed. - Tasks and workflows can declare an idempotency key, so duplicate triggers no longer produce duplicate runs. Keys are held for a TTL or until the claiming run reaches a terminal status, in all four SDKs. Note, that idempotency is currently in beta and may be subject to change. See Idempotency Key Expression for more information.
- The Go SDK can run a full engine in-process given only a Postgres connection string, via
hatchet.WithEmbeddedPostgres(databaseURL). - Concurrency strategies are now evaluated against the in-memory index by default rather than querying Postgres on every scheduling pass, where
SERVER_CONCURRENCY_IN_MEMORY_INDEX_ENABLEDnow defaults totrue. - Best-effort pub/sub is now configured independently of the durable queue and can run on Postgres while durable messages stay on RabbitMQ. Existing deployments need no new configuration, see Task Queue Configuration for full list of options.
- Rate limits can be managed from the CLI with
hatchet rate-limits, and interactively from the TUI. - The CLI now reports anonymized usage data on invocation. See Anonymous Telemetry for more information.
- Added worker label filters, and reverted Monaco editor bundle to once again be fetched from a CDN.
- Sensitive request data and RabbitMQ credentials are now kept out of logs, and rate limiting is re-enabled on incoming webhook requests.
What's Changed
Added
- Batch flush
v0.98.0by @juliusgeo in #3975 - Add analytics for idempotency
v0.98.0by @mrkaye97 in #4490 - Make in-memory scheduling default
v0.97.0by @juliusgeo in #4489 - dashboard: Worker label filters, webhook 429 on limit exhausted
v0.96.1by @mrkaye97 in #4456 - Rate limit CRUD ops from the CLI/TUI
v0.96.1by @mnafees in #4474 - engine: Terminal status-based idempotency key release
v0.96.0by @mrkaye97 in #4460 - Library / embedded mode
v0.96.0by @mnafees in #4355 - Anonymized CLI telemetry
v0.96.0by @mnafees in #4455 - Add ability to use external workers for load test
v0.96.0by @juliusgeo in #4452 - engine: Idempotency
v0.95.0by @mrkaye97 in #4045 - Task slot cost
v0.94.15by @BloggerBust in #4393 - Change org member roles, tenant tag improvements
v0.94.15by @abelanger5 in #4440
Changed
- msgqueue: Split best-effort pub/sub from the durable queue
v0.98.9by @abelanger5 in #4480 - engine: Clean up a handful of empty raw json blobs we don't need anymore
v0.96.1by @mrkaye97 in #4488 - Bulk write meter tenant resources
v0.95.4by @grutt in #4468
Fixed
- Prevent missing limits from overwriting existing limits
v0.98.9by @igor-kupczynski in #4549 - Cleanup redundant batch cleanup mechanisms, improve ListDistinctBatchResources query
v0.98.8by @juliusgeo in #4542 - Add index for ListBatchedQueueItemsForStep, add FOR UPDATE OF qi to moveQueueItemsToBatchedQueue
v0.98.7by @juliusgeo in #4519 - ReserveTaskBatchRun does not need to lock v1_task_runtime
v0.98.6by @juliusgeo in #4516 - Loadtest--increase number of emit workers to support higher events numbers
v0.98.5by @juliusgeo in #4515 - Serialize sends on shared listener gRPC streams
v0.98.5by @igor-kupczynski in #4491 - Indicate env in load test slack messages
v0.98.4by @juliusgeo in #4511 - Namespace on external not matching expected in load test
v0.98.3by @juliusgeo in #4509 - Batch migration ordering
v0.98.2by @juliusgeo in #4507 - Hijack the multiplexed listener's LISTEN connection out of the pool
v0.96.1by @abelanger5 in #4486 - frontend: Harden exchange-token routing against transient control-plane failures
v0.96.1by @igor-kupczynski in #4472 - Remove SAML from the enterprise plan card
v0.96.0by @BloggerBust in #4470 - Fix all old golintci-lint errors, add check for un-generated files, regened all proto/rest files for SDKs
v0.96.0by @juliusgeo in #4457 - sdks/go: Recover durable waits after reconnect
v0.95.4by @igor-kupczynski in #4448 - Non tty profile selection
v0.95.4by @BloggerBust in #4453 - engine: Scheduled workflow idempotency insert conflict
v0.95.2by @mrkaye97 in #4454 - Usability issues on the backend for managing invites
v0.95.2by @abelanger5 in #4315 - Trace row labels
v0.95.2by @BloggerBust in #4443 - Cancel in progress has incorrect ordering with new in-memory index
v0.95.1by @abelanger5 in #4442 - Event key placeholder / empty state
v0.94.14by @mrkaye97 in #4410 - dashboard: Add copy to run page on redirect from trigger
v0.94.14by @mrkaye97 in #4423 - Improve cookie secret validation
v0.94.14by @juliusgeo in #4424 - Migration number
v0.94.14by @mrkaye97 in #4437 - dashboard: Bundle Monaco editor instead of fetching from CDN
v0.94.14by @koushik717 in #4247 - api: Use the
ANDoperator with the gin index when there's only one k-v pair setv0.94.13by @mrkaye97 in #4436 - Avoid nested RabbitMQ pub channel acquire on tenant register
v0.94.13by @grutt in #4433 - Query optimization
v0.94.13by @grutt in #4138 - Update trigger for runs status and update schema for consistency
v0.94.12by @abelanger5 in #4426 - Force gin for olap lists
v0.94.11by @grutt in #4403 - Avoid logging sensitive request data
v0.94.11by @igor-kupczynski in #4422 - Redact RabbitMQ credentials in dial failure logs
v0.94.11by @igor-kupczynski in #4418 - api: Re-enable rate limiting for incoming webhook requests
v0.94.11by @mrkaye97 in #4411
New Contributors
- @princed made their first contribution in #4284
- @koushik717 made their first contribution in #4247
🪓 New to Hatchet? See Get started quickly or the full documentation.