github.com/hatchet-dev/hatchet
v0.104.7
#518 most downloaded on Go modules
hatchet-dev/hatchet
What this package is like to depend on
Last release 2 days ago
22 Aug 2026
Ships on a steady schedule
a new release about every 8 days
Some releases are documented
notes for 324 of 939 stable releases
Nothing withdrawn
no release was ever pulled
3 years old
2241 releases · first in 2023
1108 releases in the last 12 months
see the full history below
Release timeline
2241 releases · Jul 2025 to Aug 2026Releases
latest 60 of 2241-
v0.104.8-0.20260822020104-e95fdde6209922 Aug 2026 pre-releaseNothing published for this version
-
v0.104.721 Aug 2026Release notes
Open source →-
fix(engine): isolate durable user events by scope
-
ci: retrigger commitlint after PR title fix
Co-authored-by: Cursor [email protected]
-
test: regression test
-
fix: improve test
-
refactor: simplify lookback query
-
chore: rm useless test
-
fix: simplify diff more
-
fix: unwind
-
fix: nil uuid issue
-
fix: improve query to use index + pk
-
chore: gen
-
refactor: simplify test
-
fix: remove another inlined query
-
fix: remove the rest of the raw sql
-
chore: lint
Co-authored-by: Cursor [email protected]
Co-authored-by: mrkaye97 [email protected] -
-
v0.104.621 Aug 2026Release notes
Open source →-
test: regression test
-
chore: add fixme
-
fix: dag spawn bug
-
test: add unit test for child keys
-
fix: fixme
-
fix: couple more small issues, adding more tests
-
ci: run with entitlement
-
chore: lint
-
-
v0.104.521 Aug 2026Release notes
Open source →- Scope consent defaults to the visitor's region on docs and the app
Both properties asked every visitor for consent regardless of where they
were, so anyone outside the EEA who never clicked the banner was counted
cookielessly — a measurement loss rather than a privacy win, given that is
most of the traffic.Defaults are now denied in the EEA, the UK and Switzerland and granted
elsewhere, with an explicit choice always winning. The docs site resolves
the country in proxy.ts fromx-vercel-ip-countryand publishes it as
ht_regionon.hatchet.run.cloud.hatchet.run cannot resolve a country of its own — it sits behind no
edge that provides one — so it reads that cookie and falls back to
"restricted" when it is absent, which is exactly how it behaved before
regions existed. A miss is never a regression, only an unrealised gain.The stored choice moves to an
ht_consentcookie on the same shared domain,
so one decision now covers hatchet.run, docs.hatchet.run and
cloud.hatchet.run instead of each origin asking separately. The docs banner
previously wrote three overlapping stores — acookieConsentcookie dated
to the year 9999, a localStorage key, and React state — which is collapsed
to the one cookie, with the old values migrated on first load.Tenant-level
analyticsOptOutstill wins over everything in the app.Co-Authored-By: Claude Opus 5 (1M context) [email protected]
Claude-Session: https://claude.ai/code/session_01PybVM54Fq1MSsNCLeknoBk- Record the campaign that produced a visit, gated on consent
The ad click that brings someone to Hatchet almost never lands on the page
they sign up from: they arrive on docs.hatchet.run from an ad, read for a
while, and create an account on cloud.hatchet.run days later. Without
somewhere durable to keep it, that click is unattributable by the time it
matters.ht_attrholds it in a first-party cookie on.hatchet.run, which the
control plane reads back at signup. The docs site writes it at the edge in
proxy.ts, where the landing query string is; the app writes it at startup
for anyone who lands there directly.It is a marketing cookie with a 90-day life, so it follows consent rather
than being written on arrival: nothing for an unaccepted visitor in a
consent-required region, nothing for a visit carrying no campaign at all,
and a decline deletes it. First touch wins.Every field is re-validated server-side when it is read, so nothing here is
trusted; this end only decides what to offer.Co-Authored-By: Claude Opus 5 (1M context) [email protected]
Claude-Session: https://claude.ai/code/session_01PybVM54Fq1MSsNCLeknoBk- Stop capturing attribution in the app; keep it honouring consent
Two separate things were bundled here and only one earns its place.
The attribution capture goes. Every ad lands on hatchet.run, so a visitor
arriving directly at cloud.hatchet.run with a campaign on the URL is a case
that barely exists, and when it does the marketing site and the docs have
already written the shared cookie. The app was writing a cookie nobody was
waiting for.Reading consent stays, because without it the shared decision is a fiction.
Today the app calls opt_in_capturing() unconditionally once a tenant loads,
so a user who clicks Decline on hatchet.run and then signs up is opted back
in on cloud.hatchet.run. Anht_consentcookie on.hatchet.runis only
worth having if the product actually reads it.That is not really about analytics on the login page, which is what the
unauthenticated surface here amounts to. It is about product analytics for
signed-in users respecting a choice made somewhere else.Co-Authored-By: Claude Opus 5 (1M context) [email protected]
Claude-Session: https://claude.ai/code/session_01PybVM54Fq1MSsNCLeknoBk
Co-authored-by: Claude Opus 5 (1M context) [email protected]
-
v0.104.421 Aug 2026 -
v0.104.320 Aug 2026Release notes
Open source →-
refactor: use cache for step lookup
-
fix: limit update churn on workers
-
feat: add cache for step match conditions
-
feat: report started async
-
fix: avoid race
-
-
v0.104.220 Aug 2026 -
v0.104.120 Aug 2026 -
v0.104.1-0.20260820155532-d0738e9ada2520 Aug 2026 pre-releaseNothing published for this version
-
v0.104.1-0.20260820152526-ba1c568e54ac20 Aug 2026 pre-releaseNothing published for this version
-
v0.104.1-0.20260820142609-11785b4b31d620 Aug 2026 pre-releaseNothing published for this version
-
v0.104.020 Aug 2026Release notes
Open source →-
feat: sql, move some logic over from my old branch
-
feat: call
ensureDAGOperatoronPutWorkflowso we know the operator is created -
chore: gen
-
feat: first pass at operator implementation
-
feat: task repo wiring
-
feat: more initial wiring, still very buggy
-
feat: it sort of works?
-
fix: handle panic and shutdown / cancel
-
fix: get rid of the need to flatten workflow tasks into standalones
-
feat: pass user message through to fe
-
feat: add
TriggerDagStepmethod on the dispatcher -
feat: triggerDagStep wrapper
-
chore: lint, internals
-
feat: start wiring up the olap side
-
feat: map dag tasks to their parents so we get proper nesting
-
fix: handle expansion in side panel
-
Revert "fix: handle expansion in side panel"
This reverts commit abc0dc7.
-
fix: render minimap correctly
-
feat: task events on the dag view
-
chore: rm unused proto change
-
chore: gen
-
feat: pass
IsSkippedandIsCancelledinitial states through into trigger -
feat: pass params through
-
feat: wire conditions through to
triggerStep -
feat: more wiring
-
feat: conditions
-
feat: add additional cancellation test
-
fix: naming
-
fix: return output as expected in current impl
-
feat: env var to control operator use
-
fix: check for operator enabled on workflow registration
-
fix: backwards compat logic
-
fix: some typing issues
-
refactor: clean up some cel logic and other internals, naming, etc.
-
refactor: more naming fixes
-
refactor: cel logic
-
refactor: clean up a bit more
-
feat: add isUsingDagOperator to WorkflowVersion
-
fix: checksum / version creation logic
-
fix: trigger path fix for recursive explosion caused by env var toggle
-
fix: handle outputs properly on the dispatcher
-
chore: gen
-
feat: filter orchestrator tasks out of workflow run id fetch
-
fix: simplify / correct fetch query
-
feat: lookup query for orchestrator tasks
-
feat: finish wiring up runs list api
-
fix: ordering
-
fix: count query
-
fix: workflow input bug
-
chore: migration version
-
feat: add a bunch of condition tests to cover additional cases
-
fix: update dag logic to match new tests
-
fix: bad merge
-
fix: output on skip
-
fix: make getdetails endpoint work properly
-
fix: additional meta propagation, failure handling
-
fix: concurrency (workflow level), desired label propagation
-
fix: propagate labels
-
fix: couple more issues
-
fix: migration version
-
fix: api for dag
-
fix: ignore spans for orchestrator tasks
-
feat: add orchestrator flag to task meta query
-
fix: allow or groups to contain parent conditions
-
chore: remove annoying cron
-
feat: add col to v1_task to track if task belongs to a durable dag
-
feat: use new col on olap side
-
fix: tie workflow run ids back to dag parent
-
fix: otel spans
-
fix: couple more bugs
-
fix: name
-
feat: parse dag shape to json graph so we can read it in other places
-
feat: wire up dag shape logic
-
fix: clean up some tests
-
fix: replays
-
feat: render dag even when empty
-
feat: more slice helpers
-
fix: improve error handling a bit
-
feat: fable one-shot rewire to spoof the OLAP DAGs
-
chore: gen
-
fix: propagate metadata
-
fix: parent propagation
-
fix: retry config, timeout config
-
fix: handle replay / failure bug
-
fix: clean up detail getter test
-
chore: rm comment
-
fix: conflicts
-
fix: bug in the disable path where durable task ends up hanging
-
chore: gen
-
chore: gen
-
chore: gen
-
chore: lint
-
feat: boolean cel helper
-
refactor: use bool evaluator
-
fix: memory improvements on the dag operator
-
fix: memory use
-
fix: skip if all parents are skipped
-
chore: migration ver
-
feat: use entitlements to check if operator is enabled or not
-
fix: replay children properly
-
fix: idempotency tests
-
chore: gen
-
fix: cancellation behavior
-
chore: fix migration ver
-
fix: broken tests, exports, eviction policy
-
fix: deprecation warnings
-
chore: gen a whole bunch
-
chore: lint
-
fix: test?
-
chore: migration
-
fix: deadlock on req/resp channels
-
fix: bunch more bugs / issues
-
fix: version
-
feat: whole bunch of unit tests for the operator
-
test: consolidate, add a bit of coverage
-
chore: lint
-
chore: remove some unused stuff
-
chore: cleanup
-
chore: go deps
-
fix: prop
-
fix: migration
-
fix
-
see if this fixes flake
-
fix for durable task request
-
generate
Co-authored-by: Julius Park [email protected]
-
-
v0.103.219 Aug 2026Nothing published for this version
-
v0.103.119 Aug 2026Nothing published for this version
-
v0.103.019 Aug 2026Nothing published for this version
-
v0.102.519 Aug 2026Nothing published for this version
-
v0.102.419 Aug 2026Nothing published for this version
-
v0.102.319 Aug 2026Nothing published for this version
-
v0.102.219 Aug 2026Nothing published for this version
-
v0.102.118 Aug 2026Nothing published for this version
-
v0.102.018 Aug 2026Nothing published for this version
-
v0.101.33-0.20260818193536-933de4252c8018 Aug 2026 pre-releaseNothing published for this version
-
v0.101.3218 Aug 2026Nothing published for this version
-
v0.101.3118 Aug 2026Nothing published for this version
-
v0.101.3018 Aug 2026Nothing published for this version
-
v0.101.2918 Aug 2026Nothing published for this version
-
v0.101.2817 Aug 2026Nothing published for this version
-
v0.101.28-alpha.118 Aug 2026 pre-releaseNothing published for this version
-
v0.101.28-alpha.018 Aug 2026 pre-releaseNothing published for this version
-
v0.101.28-0.20260817204501-ae56104610bd17 Aug 2026 pre-releaseNothing published for this version
-
v0.101.2717 Aug 2026Release notes
Open source →Hatchet v0.101.27 launches idempotency keys and batch tasks. It is otherwise a performance and operations release, adding a read-only
VIEWERrole, 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_PATHon the static file server orLITE_FRONTEND_BASE_PATHonhatchet-lite. - A new read-only
VIEWERtenant member role that cannot modify anything. hatchet_tenant_queued_to_assignedandhatchet_tenant_queued_to_assigned_time_secondsare now also exported broken down by workflow name, andhatchet_tenant_queue_sizecarries aworkflow_namelabel.- A new
hatchet_tenant_additional_metadata_queue_sizegauge reports queue depth per additional metadata key-value pair. Only keys prefixed withprom_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-eventsendpoint 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.
-
v0.101.27-alpha.118 Aug 2026 pre-releaseNothing published for this version
-
v0.101.27-alpha.017 Aug 2026 pre-releaseNothing published for this version
-
v0.101.27-0.20260818191821-9ed6022de00618 Aug 2026 pre-releaseNothing published for this version
-
v0.101.27-0.20260817185856-724c24c058f117 Aug 2026 pre-releaseNothing published for this version
-
v0.101.27-0.20260817183258-cc32263939c417 Aug 2026 pre-releaseNothing published for this version
-
v0.101.27-0.20260817173121-3351a1883f1c17 Aug 2026 pre-releaseNothing published for this version
-
v0.101.2617 Aug 2026Nothing published for this version
-
v0.101.26-0.20260817163745-01aa5d57d74917 Aug 2026 pre-releaseNothing published for this version
-
v0.101.2517 Aug 2026Nothing published for this version
-
v0.101.2417 Aug 2026Nothing published for this version
-
v0.101.2314 Aug 2026Nothing published for this version
-
v0.101.2214 Aug 2026Nothing published for this version
-
v0.101.2114 Aug 2026Nothing published for this version
-
v0.101.2013 Aug 2026Nothing published for this version
-
v0.101.1912 Aug 2026Nothing published for this version
-
v0.101.19-0.20260812161602-0ebe680e5a9f12 Aug 2026 pre-releaseNothing published for this version
-
v0.101.19-0.20260812145555-30349109f7e212 Aug 2026 pre-releaseNothing published for this version
-
v0.101.19-0.20260812131502-6605f673320812 Aug 2026 pre-releaseNothing published for this version
-
v0.101.19-0.20260811200937-67e03eac447211 Aug 2026 pre-releaseNothing published for this version
-
v0.101.19-0.20260811154259-9f70725206aa11 Aug 2026 pre-releaseNothing published for this version
-
v0.101.1811 Aug 2026Nothing published for this version
-
v0.101.1711 Aug 2026Nothing published for this version
-
v0.101.1610 Aug 2026Nothing published for this version
-
v0.101.1510 Aug 2026Nothing published for this version
-
v0.101.1410 Aug 2026Nothing published for this version
-
v0.101.1309 Aug 2026Nothing published for this version
-
v0.101.1209 Aug 2026Nothing published for this version
-
v0.101.1107 Aug 2026Nothing published for this version
-
v0.101.1007 Aug 2026Nothing published for this version