On this pageContents1. The thesis2. Architecture crosswalk3. The divergences that matter day to day4. Temporal concerns by code area5. Quick mapping table6. Guarantees side by side7. Reading order in the Temporal repo8. Relation to fireline / firegrid9. Caveats about the DeepWiki pages10. Glossary

Restate / Effect Cluster → Temporal: a mapping for onboarding

A reference for engineers who know Restate or Effect Cluster and are ramping up on upstream Temporal. It lives next to the architecture diagrams, which overlay section 4 onto the upstream package graph.

Sources: Temporal server at aaa291ba3, sdk-typescript at 8161cd1c; Restate server at 29f74c1ce (v1.8), sdk-typescript at 2433827; Effect monorepo at f79b23118 (Effect 4.0.0, @stability unstable for workflow/cluster); DeepWiki pages for Temporal and Restate (read 2026-10-05). Paths are relative to each repo root. T/ = temporal server, TS/ = temporal sdk-typescript packages, R/ = restate server, RS/ = restate sdk-typescript packages/libs, E/ = packages/effect/src in the Effect repo.

Contents

  1. The thesis
  2. Architecture crosswalk
  3. The divergences that matter day to day
  4. Temporal concerns by code area
  5. Quick mapping table
  6. Guarantees side by side
  7. Reading order in the Temporal repo
  8. Relation to fireline / firegrid
  9. Caveats about the DeepWiki pages
  10. Glossary: Part A, Temporal terms and Part B, internal and other-system terms

1. The thesis

All three are "journal + replay" durable execution engines, but they sit at three different points on two axes:

  1. Source of truth. Restate owns a replicated log (Bifrost) and every partition is a deterministic state machine replaying that log into RocksDB. Temporal has no log: a pluggable database is the truth, fenced by a per-shard RangeID compare-and-swap, with side effects written as task rows in the same transaction as state (a transactional outbox). Effect Cluster is also database-as-truth, but at a far thinner layer: two SQL tables (cluster_messages, cluster_replies) hold persisted RPC requests and their replies, and the "journal" is just the set of replies keyed by step name.
  2. Dispatch direction. Restate pushes: the partition leader's invoker opens HTTP/2 to your endpoint and streams the journal at it. Temporal pulls: workers long-poll task queues owned by Matching, and the server never dials user code. Effect has no server at all: every runner is both the engine and the user code, and the owner of a shard polls the messages table for work addressed to its entities.
  3. Fencing. Restate fences at the log (stale leader epochs are applied then ignored). Temporal fences at the DB (stale RangeID writes fail). Effect Cluster has leases (advisory locks or a cluster_locks row) but no fencing token on writes, so a paused old owner can still write replies; the only guard is UNIQUE(request_id, kind) on replies.

A useful way to hold the three: Effect Cluster is what you get if you keep Temporal's "DB is truth, replay the body" idea but delete history events, Matching, versioning, and fencing, and fold activities into the owner's process. Restate is what you get if you replace the DB with a log and make the server dial you.

2. Architecture crosswalk

Concern Restate Temporal Effect Cluster
Unit of sharding PartitionId (default 24), key range of PartitionKey = xxh3(key) History shard, farm.Fingerprint32(nsID+"_"+wfID) % numShards (T/common/util.go:418) Shard = abs(djb2(entityId) % 300) + 1 per shard group (E/cluster/Sharding.ts, ShardingConfig.ts:38)
Who owns a shard Cluster controller scheduler places replica sets; LeaderEpoch via read_modify_write on pp_epoch_{pid}; leader announces itself in the log shard.ControllerImpl reacts to the Ringpop ring; ContextImpl.renewRangeLocked CASes RangeID on the shard row No coordinator. Every runner builds a weighted HashRing from cluster_runners every 3s and computes placement locally; ownership is a Postgres advisory lock or a 35s cluster_locks lease (E/cluster/SqlRunnerStorage.ts)
Fencing Log-level: DedupInformation with (leader_epoch, seq); stale records applied and ignored. Invoker-level: FencingTokens DB-level: every execution write carries RangeID; mismatch → ShardOwnershipLostError None. saveReply/clearReplies do not check ownership; UNIQUE(request_id, kind) is the only guard
Durable record Bifrost log per partition (Envelope{Header, Command}), 1:1 LogId History events in history_node/history_tree + mutable state in executions cluster_messages (persisted requests, dedup key entityType/entityId/tag/primaryKey) + cluster_replies (one WithExit per request)
Materialized per-execution state RocksDB partition store: InvocationStatus, JournalV2, State, Timers, Outbox, Promise, VQueue*, Lock, Deduplication MutableStateImpl: ExecutionInfo/State, activity/timer/child/signal maps, HSM substates, CHASM tree None beyond replies. The WorkflowInstance (E/workflow/WorkflowEngine.ts:231) is rebuilt by replaying the body
Replication within a cluster Replicated loglet: single sequencer, write quorum over a nodeset; Raft metadata store Delegated to the DB Delegated to the DB
Multi-region Not in core XDC: per-shard streams, failover versions, conflict resolution (T/service/history/ndc/) Not present
Side-effect scheduling Leader Actions after apply (VQInvoke, RegisterTimer, NewOutboxMessage) Transfer/Timer/Visibility/Outbound tasks in the same persistence call; per-shard queue processors (T/service/history/queues/) Persisted messages are the outbox. Sender saves the row, then best-effort Notifys the owner; owner's storage poll (unprocessedMessages, UPDATE … FOR UPDATE) finds it regardless
Timers Leader TimerService fed from Timers table; fires self-propose Command::Timer Per-shard timer queue by (FireTime, TaskID); timer_sequence.go persists only the next timer per activity DurableClock.sleep: ≤60s is an in-process Activity (restarts in full on crash); >60s is a persisted run to entity Workflow/-/DurableClock with a deliver_at column, precision ≈ 10s poll interval
Dispatch to user code Invoker POSTs /invoke/{svc}/{handler} to the pinned deployment; bidi HTTP/2 or request/response Transfer task → Matching AddWorkflowTask → sync-match to a long-poller or spool to tasks → worker completes via Frontend Owner runner's RpcServer per resident entity; run/activity/deferred/resume RPCs (E/cluster/ClusterWorkflowEngine.ts:843). Activities always execute in the workflow owner's process
Cross-entity messaging Outbox + leader Shuffle → IngestionClient to target leader; dedup by (ProducerId, seq) Transfer tasks: SignalExecutionTask, StartChildExecutionTask, RecordChildExecutionCompleted RPCs Persisted message to the target entity address; child completion sends resume{childExecutionId} to the parent entity
Cross-service RPC Call command to another service Nexus: endpoint registry, outbound queue, HTTP StartOperation, callback URL Any entity RPC; EntityProxy/WorkflowProxy expose over RPC/HTTP
Start dedup / idempotency idempotency-key → deterministic InvocationId = sha256(scope, service, key, handler, idemKey) Workflow ID + reuse/conflict policies; RequestId on start executionId = sha256(tag.length:tag:idempotencyKey(payload))[0:16] (E/workflow/Workflow.ts:325); same payload always attaches to the same execution
Introspection DataFusion SQL over live partition state Visibility store (ES/SQL), async projection Raw SQL on the two tables; poll returns only the final result
Control plane metadata Raft store: nodes_config, bifrost_config, partition_table, schema_registry DB tables + Ringpop + dynamic config YAML cluster_runners (also hands out snowflake machine_id), cluster_locks; a RunnerHealth singleton marks runners unhealthy
Dev mode restate-lite, restate dev temporal server start-dev (SQLite, one process) WorkflowEngine.layerMemory, TestRunner, SingleRunner + SQLite

3. The divergences that matter day to day

3.1 Log-first vs database-first vs "two tables"

Restate's PartitionProcessor::run_inner is a select! over a Bifrost read stream; every record goes through apply_record → StateMachine::apply → RocksDB txn commit, identically on leaders and followers. Failover is "stop ignoring Actions". Durability is the loglet's write quorum; trimming is gated by replica durable LSNs plus object-store snapshots.

Temporal's equivalent is api/update_workflow_util.go:GetAndUpdateWorkflowWithNew: lock the execution in the host-level cache, mutate MutableState, CloseTransactionAsMutation, then one persistence call carrying RangeID, the mutation, new events, and Tasks map[Category][]Task. Events are appended to history_node before the mutable-state write (T/common/persistence/cassandra/execution_store.go:110); orphans are unreachable until mutable state points at them.

Effect's equivalent is Sharding.sendOutgoing → MessageStorage.saveRequest (returns Success | Duplicate{lastReceivedReply}), and on the handler side saveReply which sets processed and inserts the reply in one transaction. There is no per-execution row at all. Resume is clearReplies on the run message (guarded by last_reply_id = expected, a CAS against concurrent resets) followed by redelivery of the original message, which replays the body.

Tradeoffs:

3.2 Push vs pull vs self-hosted

Restate's invoker opens the connection, sends StartMessage + eager state, replays the journal, then streams bidirectionally; SuspensionMessage{awaiting_on} closes the stream. Backpressure is the invoker's per-node concurrency limit and memory pools. Endpoints are passive: Lambda, Cloudflare Workers, tunnels.

Temporal's Matching owns task queues. AddTask tries TrySyncMatch to a parked long-poller and spools to tasks on miss. Sticky queues give each worker a private partition so its V8-cached workflow is reused instead of replayed. Partitions form a tree (default 4) with forwarding; fairness/priority backlogs are in pri_*/fair_*.

Effect has no separation. Workflow entities register with { concurrency: 2, maxIdleTime: 10s }; activities are RPCs to the same entity address, so they run on the owner, under Rpc.wrap({fork: true, uninterruptible: true}). If the owner dies, the next owner's resetShards nulls last_read, the poll redelivers both run and activity, and the activity re-executes with the same attempt number (at-least-once). Read-but-unfinished messages are also reclaimable after a 10-minute last_read window.

Tradeoffs:

3.3 Programming model and determinism

Restate Temporal Effect
Unit of code Service / Virtual Object / Workflow handlers with ctx Workflow function (sandboxed) + Activities Workflow.make(tag, {payload, success, error, idempotencyKey}) + Activity.make({name, execute}); an Activity is itself an Effect
Side effect ctx.run(name, fn) journaled in-line; next run waits for previous ack Activity scheduled by command, run by a different poller, result arrives as an event. Local activity is closest to ctx.run Activity keyed by name/attempt; result memoized as the reply. Runs on the owner, like a local activity. WithTransaction wraps handler + reply in the DB txn for exactly-once DB-only effects
Determinism Not enforced; journal mismatch (code 570) → retry/pause/fail. ctx.rand, ctx.date opt-in Enforced: V8 sandbox overrides Date, Math.random, timers, WeakRef; sdk-core flags mismatches Not enforced and not detected. Body replays from the start; non-activity code (Date.now, I/O) just re-runs. Correctness depends on stable, unique step names; renaming or reordering silently changes which results are reused
Retry Per-service retry policy; TerminalError ends it; RetryableError.retryAfter; PauseError Activity RetryPolicy; workflow task failure retries forever No default retry on failure. Activity.retry opts in and bumps CurrentAttempt. Interrupts retry by default (10×, 400ms ×1.5, cap 10s)
Waiting ctx.sleep, ctx.awakeable(), ctx.promise(name), RestatePromise.all/race/any sleep, condition, setHandler, Trigger, CancellationScope DurableClock.sleep, DurableDeferred.await (registers in awaitedDeferreds, then Workflow.suspend), Activity.raceAll via DurableDeferred.raceAll
Inbound messages Shared handlers; ctx.signal; awakeables Signals, Updates (speculative WFT), Queries Only DurableDeferred tokens: base64url [workflowName, executionId, deferredName], completed via deferredDone from anywhere with an engine. No queries, no updates
Suspension SuspensionMessage, status Suspended{awaiting_on} Workflow just has no in-flight task; nothing special Explicit: Workflow.suspend self-interrupts; intoResult yields Suspended; reply persisted and run marked processed. SuspendOnFailure turns any failure into a suspension for manual resume (a "fix and replay" workflow)
Children serviceClient().handler() durable promise startChild/executeChild execute with hidden parent key; child completion sends resume{childExecutionId} to parent; parent suspends while waiting
Compensation user code user code (saga pattern) Workflow.withCompensation registers finalizers on instance.scope, run only if final exit is a failure; stack rebuilt on replay from cached activity values; top-level only
Code versioning Immutable deployments; invocation pinned to PinnedDeployment on first attempt patched()/deprecatePatch(), or Worker Deployments with PINNED/AUTO_UPGRADE None. No patch/getVersion anywhere
Caller semantics Ingress returns on commit (Appended) or completion start returns run ID; result long-polls execute without discard polls: on Suspended it sleeps suspendedRetrySchedule (200ms ×1.5, cap 30s) and re-sends run until complete

The deepest difference remains the unit of execution. Restate: the invocation and its own command journal. Temporal: the workflow task, with the server batching events and the worker returning commands, which is what enables buffered events, speculative tasks for Updates, and transient tasks. Effect: the entity RPC; a workflow is literally four persisted RPCs (run, activity, deferred, resume) and the engine is a thin layer that turns replies into a memo table.

3.4 State and keying

Restate has first-class keyed state: Virtual Objects give ctx.get/set K/V per key, exclusive handlers get single-writer semantics (per-key vqueue holding a Lock), and state lives beside the journal in the partition.

Temporal's only state container is the workflow execution; "entity workflows" keyed by workflow ID, driven by signals/updates and bounded by continueAsNew, are the idiom. CHASM (T/chasm/) is the move to make "workflow" one archetype among many on the same shard/routing/atomic-write substrate; standalone activities and the V2 scheduler already run on it.

Effect Cluster is closest to Restate here, but one level down: Entity is the general actor (one RpcServer per resident ID, concurrency 1 by default, entityMaxIdleTime 1 min, EntityReaper), Singleton and ClusterCron are built on it, and Workflow/<tag> is just an entity type whose ID is the execution ID. There is no durable K/V on an entity, so "virtual object state" is either in your own DB or in replies.

3.5 Control plane

Restate's admin role owns the schema registry, cluster controller (placement, leader election, seal/extend, snapshots/trim) and SQL introspection; schema changes are also appended to each partition log as UpsertSchema.

Temporal spreads it across Frontend operator/admin APIs, the Worker service's system workflows, Matching's root partition for versioning user data, one Matching node for the Nexus endpoint registry, and dynamic config.

Effect Cluster has no control plane. Placement is a pure function of the cluster_runners rows; health is one singleton pinging runners (layerPing, layerK8s); there is no admin API, no UI, no namespaces, no rate limits.

4. Temporal concerns by code area

Which Temporal concepts live in which part of the server. One subsection per top-level area of the upstream repository (the same areas as the architecture diagrams), listing the glossary terms that area implements, the specific packages that own them, and links to the Temporal docs and to the glossary entry in section 10. A term can appear under several areas when its implementation spans them. sdk marks concerns implemented in the SDKs rather than the server. Package links are pinned to upstream commit 4db93cd73e.

The same data drives the Temporal concerns panel on the generated architecture pages (pnpm deps:graph, then dist/architecture/index.html): selecting an area or node shows this list filtered to it, with each owner package linked to its diagram node. Source of truth: scripts/concerns.json; regenerate this section with python3 scripts/architecture.py --concerns-markdown.

service/frontend

Concern Meaning Owning packages Links
Asynchronous Activity Completion An Activity returns pending and an external system completes it later by Task Token. service/frontend (+2 in other areas) docs · glossary
Frontend Service The stateless gateway that authenticates, rate-limits, validates the namespace, and routes every call to History or Matching. service/frontend, service/frontend/configs (+1 in other areas) docs · glossary
Namespace The unit of isolation that scopes workflow IDs, task queues, retention, search attributes, and replication. service/frontend (+4 in other areas) docs · glossary
Nexus Async Completion Callback The HTTP callback a handler posts to when an async operation finishes, routed to the caller's History. service/frontend (+3 in other areas) docs · glossary
Nexus Endpoint A named reverse proxy routing a Nexus Service to a namespace and task queue or an external URL. service/frontend (+2 in other areas) docs · glossary
Nexus Machinery At-least-once delivery of operation start, cancel, and completion across namespace boundaries. service/frontend (+3 in other areas) docs · glossary
Nexus Operation Handler / Nexus Service Worker code implementing operations; dispatched from Frontend through Matching to a polling worker. service/frontend (+2 in other areas) docs · glossary
Requests Per Second (RPS) Service-level and namespace-level rate limits applied in Frontend interceptors and persistence clients. service/frontend (+3 in other areas) docs · glossary
Search Attribute An indexed key usable in List Filters, set at start or upserted from workflow code. service/frontend (+4 in other areas) docs · glossary
Standalone Activity An Activity started directly from a client with no enclosing workflow, implemented as a CHASM archetype. service/frontend (+2 in other areas) docs · glossary

service/history

Concern Meaning Owning packages Links
Ack level The checkpointed position below which all tasks in a category are complete. service/history/queues, service/history/shard docs · glossary
Activity Execution The full chain of attempts for one scheduled Activity, from schedule to final result. service/history/workflow, service/history/api/respondactivitytaskcompleted, service/history/api/respondactivitytaskfailed, service/history/api/respondactivitytaskcanceled, service/history/api/pauseactivity, service/history/api/resetactivity, service/history/api/updateactivityoptions docs · glossary
Activity Heartbeat A periodic progress ping recorded in mutable state and checked by the heartbeat timeout timer. service/history/api/recordactivitytaskheartbeat, service/history/queues docs · glossary
Activity Task A task carrying the input and context for one Activity attempt, dispatched by Matching after History schedules it. service/history/queues, service/history/api/recordactivitytaskstarted, service/history/api/isactivitytaskvalid (+1 in other areas) docs · glossary
Archival Copies closed histories and visibility records to blob storage after retention, driven by the history archival queue. service/history/archival (+6 in other areas) docs · glossary
Asynchronous Activity Completion An Activity returns pending and an external system completes it later by Task Token. service/history/api/respondactivitytaskcompleted (+2 in other areas) docs · glossary
Buffered events Events that arrive while a Workflow Task is in flight, held until the task completes. service/history/historybuilder, service/history/workflow docs · glossary
CHASM Coordinated Heterogeneous Application State Machines: a component-tree framework that lets non-workflow archetypes share the shard substrate. service/history (+5 in other areas) docs · glossary
Child Workflow A workflow started from inside another; the parent is notified of its close through a cross-shard RPC. service/history/queues, service/history/api/recordchildworkflowcompleted, service/history/api/verifychildworkflowcompletionrecorded docs · glossary
Command A requested action a worker returns after a Workflow Task; the server validates it and writes Events. service/history/workflow, service/history/api/respondworkflowtaskcompleted docs · glossary
Continue-As-New Closes the current run and atomically starts a new run of the same Workflow ID with a fresh Event History. service/history/workflow, service/history/api/respondworkflowtaskcompleted docs · glossary
Delay Workflow Execution A start option that delays the first Workflow Task by a backoff timer. service/history/api/startworkflow, service/history/queues docs · glossary
Event A record the server appends to history from an external occurrence or a Command. service/history/historybuilder, service/history/events (+1 in other areas) docs · glossary
Event History The append-only log of Events for one execution, stored as a tree of branches of event batches. service/history/events, service/history/api/getworkflowexecutionhistory, service/history/api/getworkflowexecutionrawhistoryv2 (+1 in other areas) docs · glossary
Failover version / version history Per-event version numbers tied to the active cluster so replication can detect and resolve conflicting branches. service/history/ndc (+2 in other areas) docs · glossary
Global Namespace / Failover A namespace replicated to a standby cluster, and the handover of its active cluster. service/history/shard (+4 in other areas) docs · glossary
Heartbeat / Start-To-Close / Schedule-To-Close / Schedule-To-Start Timeouts Activity timeouts, each persisted as the next timer task per activity and enforced by the timer queue. service/history/queues, service/history/workflow docs · glossary
History branch / tree Executions can fork on reset or conflict resolution; the tree records branches and nodes store event batches. service/history/ndc (+2 in other areas) docs · glossary
History Service The stateful core that owns execution state and Event History and runs the internal task queues. service/history, service/history/api, service/history/configs (+1 in other areas) docs · glossary
History Shard A fixed-count partition of the execution space, owned by one History host at a time; requests route by hashing namespace and workflow ID. service/history/shard (+2 in other areas) docs · glossary
HSM (hierarchical state machines) The older framework for typed state machines inside mutable state, used for callbacks and Nexus operations. service/history/hsm, service/history/hsm/callbacks, service/history/hsm/nexusoperations docs · glossary
Local Activity An Activity executed inside the worker's Workflow Task, recorded as a marker Event. service/history/workflow (+1 in other areas) docs · glossary
Memo Non-indexed user metadata on an execution, returned by describe and list. service/history/workflow (+1 in other areas) docs · glossary
Message protocol (Update) The worker-to-server message protocol carrying Update requests and responses alongside Workflow Tasks. service/history/workflow/update (+1 in other areas) docs · glossary
Multi-Cluster Replication Async replication of executions to passive clusters over per-shard streams, with version-history conflict resolution. service/history/replication, service/history/replication/eventhandler, service/history/ndc, service/history/api/replication (+3 in other areas) docs · glossary
Mutable state The materialized per-execution state record held in the executions row and cached on the owning History host. service/history/workflow, service/history/workflow/cache, service/history/interfaces, service/history/api/describemutablestate (+1 in other areas) docs · glossary
Nexus Async Completion Callback The HTTP callback a handler posts to when an async operation finishes, routed to the caller's History. service/history/hsm/callbacks (+3 in other areas) docs · glossary
Nexus Machinery At-least-once delivery of operation start, cancel, and completion across namespace boundaries. service/history/queues (+3 in other areas) docs · glossary
Nexus Operation One operation on a Nexus Service; the caller side is a state machine (HSM today, CHASM behind a flag) driven by the outbound queue. service/history/hsm/nexusoperations, service/history/hsm/nexusoperations/workflow, service/history/queues (+1 in other areas) docs · glossary
Parent Close Policy What happens to children when the parent closes: terminate, cancel, or abandon. service/history/queues (+1 in other areas) docs · glossary
Patching SDK markers in history so new code can branch on whether an old execution passed a change point. service/history/workflow (+1 in other areas) docs · glossary
Query A synchronous read answered by a worker from cached state; dispatched through the sticky queue or attached to the next Workflow Task. service/history/api/queryworkflow, service/history/workflow (+1 in other areas) docs · glossary
Queue processor The per-shard loop that reads a task category from its ack level, schedules, retries, and dead-letters tasks. service/history/queues, service/history/queues/common, service/history/api/listqueues, service/history/api/getdlqtasks (+1 in other areas) docs · glossary
RangeID The per-shard fencing token: a host claims a shard by compare-and-swapping it and every write carries it. service/history/shard (+3 in other areas) docs · glossary
Replication Lag The delay between active and standby clusters, tracked by the replication streams. service/history/replication docs · glossary
Reset Terminates an execution and starts a new run from a chosen history point by forking a history branch. service/history/api/resetworkflow, service/history/ndc, service/history/api/reapplyevents docs · glossary
Retention Period How long a closed execution's history stays in persistence before a cleanup timer deletes it. service/history/deletemanager, service/history/queues, service/history/workflow docs · glossary
Retry Policy Server-side retry attributes for Activities and Workflows; activity retries go straight back to Matching via a retry timer. service/history/workflow, service/history/queues (+2 in other areas) docs · glossary
Run ID A platform-generated ID for one run of a Workflow ID; new runs come from continue-as-new, retry, cron, and reset. service/history/api/startworkflow, service/history/workflow docs · glossary
Shard controller Watches cluster membership and acquires or releases the shards a History host should own. service/history/shard docs · glossary
Side Effect A short non-deterministic snippet whose result is recorded as a marker Event. service/history/workflow (+1 in other areas) docs · glossary
Signal An asynchronous message to a running execution, written as an Event and triggering a Workflow Task. service/history/api/signalworkflow, service/history/queues, service/history/api/removesignalmutablestate docs · glossary
Signal-With-Start Atomically start an execution if absent, then deliver a Signal. service/history/api/signalwithstartworkflow, service/history/api/multioperation docs · glossary
Speculative Workflow Task A Workflow Task that is never persisted, so a rejected Update costs zero writes; its timeout runs on an in-memory queue. service/history/workflow, service/history/queues docs · glossary
State Transition One unit of progress of an execution, counted in the transition history that acts as a logical clock. service/history/workflow (+1 in other areas) docs · glossary
Sticky Execution Routing follow-up Workflow Tasks to a worker-private queue so cached state is reused instead of replayed. service/history/api/resetstickytaskqueue (+3 in other areas) docs · glossary
Temporal Cron Job Legacy cron by chaining runs under one Workflow ID with a backoff timer between them. service/history/workflow, service/history/queues docs · glossary
Timer Durable workflow time APIs; the server fires user timers from the per-shard timer queue even with no worker running. service/history/queues, service/history/workflow (+1 in other areas) docs · glossary
Transfer / timer / visibility / outbound / replication tasks Task categories written in the same transaction as mutable state and executed by per-shard queue processors. service/history/tasks, service/history/queues, service/history/workflow docs · glossary
Transient Workflow Task A retried Workflow Task whose scheduled and started events are withheld until completion. service/history/workflow docs · glossary
Update A synchronous request-and-response that may mutate state, with validation, accepted, and completed phases. service/history/workflow/update, service/history/api/updateworkflow, service/history/api/pollupdate (+1 in other areas) docs · glossary
Versioned transition The (failover version, transition count) logical clock for mutable state and CHASM. service/history/workflow (+2 in other areas) docs · glossary
Visibility Listing, counting, and searching executions through an eventually consistent store written by the visibility queue. service/history/queues (+6 in other areas) docs · glossary
Workflow Execution One durable run of a Workflow Definition, identified by Workflow ID plus Run ID, with its own Event History. service/history/workflow, service/history/api/startworkflow, service/history/api/describeworkflow, service/history/api/terminateworkflow docs · glossary
Workflow Execution Timeout Max total time for a Workflow ID across all runs. service/history/queues, service/history/workflow docs · glossary
Workflow ID A user-chosen identifier; at most one open execution per ID per namespace, enforced through the current-execution record. service/history/api/startworkflow (+1 in other areas) docs · glossary
Workflow ID Conflict Policy What to do when starting a Workflow ID that is currently running: fail, use existing, or terminate existing. service/history/api/startworkflow, service/history/api/multioperation docs · glossary
Workflow ID Reuse Policy Whether a new execution may reuse a Workflow ID from a closed execution. service/history/api/startworkflow docs · glossary
Workflow Run Timeout Max time for one run. service/history/queues, service/history/workflow docs · glossary
Workflow Task A task telling a worker to advance an execution; History schedules it, Matching dispatches it, the worker replays and returns Commands. service/history/workflow, service/history/api/scheduleworkflowtask, service/history/api/recordworkflowtaskstarted, service/history/api/respondworkflowtaskcompleted, service/history/api/respondworkflowtaskfailed (+1 in other areas) docs · glossary
Workflow Task Timeout How long the server waits for a worker to start a Workflow Task before rescheduling it. service/history/queues, service/history/workflow docs · glossary

service/matching

Concern Meaning Owning packages Links
Activity Task A task carrying the input and context for one Activity attempt, dispatched by Matching after History schedules it. service/matching (+3 in other areas) docs · glossary
Backlog / spool Tasks persisted because no poller was waiting; classic, priority, and fairness variants. service/matching (+2 in other areas) docs · glossary
Matching Service Hosts Task Queues and matches tasks from History to worker long-polls, in memory or via a persisted backlog. service/matching, service/matching/configs (+1 in other areas) docs · glossary
Nexus Machinery At-least-once delivery of operation start, cancel, and completion across namespace boundaries. service/matching (+3 in other areas) docs · glossary
Nexus Operation Handler / Nexus Service Worker code implementing operations; dispatched from Frontend through Matching to a polling worker. service/matching (+2 in other areas) docs · glossary
Nexus Registry The cluster-wide endpoint store, owned by one Matching node and polled by others. service/matching (+2 in other areas) docs · glossary
Query A synchronous read answered by a worker from cached state; dispatched through the sticky queue or attached to the next Workflow Task. service/matching (+2 in other areas) docs · glossary
Sticky Execution Routing follow-up Workflow Tasks to a worker-private queue so cached state is reused instead of replayed. service/matching (+3 in other areas) docs · glossary
Sync match Matching handing a task directly to a parked long-poller without writing the backlog. service/matching docs · glossary
Task Queue A dynamically created FIFO queue workers poll; the routing key between server and workers. service/matching (+4 in other areas) docs · glossary
Task queue partition One of N physical sub-queues of a Task Queue, arranged as a tree with forwarding to the root; load balanced by the Matching client. service/matching (+2 in other areas) docs · glossary
Task Routing Using distinct Task Queues to send specific Activities to specific workers. service/matching (+1 in other areas) docs · glossary
Worker / Worker Process / Worker Entity / Worker Program The user-run process that polls Task Queues, executes code, and responds to the server. service/matching/workers (+2 in other areas) docs · glossary
Worker Versioning / Worker Deployment / Build ID Routing Workflow Tasks only to workers running compatible code; PINNED keeps an execution on its starting version. service/matching (+4 in other areas) docs · glossary
Workflow Task A task telling a worker to advance an execution; History schedules it, Matching dispatches it, the worker replays and returns Commands. service/matching (+5 in other areas) docs · glossary

service/worker

Concern Meaning Owning packages Links
Global Namespace / Failover A namespace replicated to a standby cluster, and the handover of its active cluster. service/worker/replicator, service/worker/migration (+3 in other areas) docs · glossary
Multi-Cluster Replication Async replication of executions to passive clusters over per-shard streams, with version-history conflict resolution. service/worker/replicator (+6 in other areas) docs · glossary
Parent Close Policy What happens to children when the parent closes: terminate, cancel, or abandon. service/worker/parentclosepolicy (+1 in other areas) docs · glossary
Schedule A first-class resource that starts executions on a spec, with pause, backfill, and overlap policies; V1 is a system workflow, V2 is CHASM. service/worker/scheduler, service/worker/scanner/scheduleinvariants (+2 in other areas) docs · glossary
Search Attribute An indexed key usable in List Filters, set at start or upserted from workflow code. service/worker/addsearchattributes (+4 in other areas) docs · glossary
System workflows Temporal workflows the Worker service runs against the server itself. service/worker/scanner, service/worker/batcher, service/worker/deletenamespace, service/worker/parentclosepolicy, service/worker/addsearchattributes (+1 in other areas) docs · glossary
Worker Service Runs system workflows and background jobs (scanner, batcher, schedules V1, worker deployments, migrations) against the Frontend. service/worker, service/worker/scanner, service/worker/batcher, service/worker/migration, service/worker/dlq docs · glossary
Worker Versioning / Worker Deployment / Build ID Routing Workflow Tasks only to workers running compatible code; PINNED keeps an execution on its starting version. service/worker/workerdeployment, service/worker/scanner/build_ids (+3 in other areas) docs · glossary

client

Concern Meaning Owning packages Links
History Shard A fixed-count partition of the execution space, owned by one History host at a time; requests route by hashing namespace and workflow ID. client/history (+2 in other areas) docs · glossary
Internal service clients Typed gRPC clients between services, layered with metrics and retries, that resolve the owning host through membership. client, client/history, client/matching, client/frontend, client/admin, client/operator (+1 in other areas) docs · glossary
Task queue partition One of N physical sub-queues of a Task Queue, arranged as a tree with forwarding to the root; load balanced by the Matching client. client/matching (+2 in other areas) docs · glossary

common/persistence

Concern Meaning Owning packages Links
Backlog / spool Tasks persisted because no poller was waiting; classic, priority, and fairness variants. common/persistence (+2 in other areas) docs · glossary
Dual Visibility Running a secondary Visibility store during a migration. common/persistence/visibility/manager docs · glossary
Event History The append-only log of Events for one execution, stored as a tree of branches of event batches. common/persistence (+3 in other areas) docs · glossary
Failover version / version history Per-event version numbers tied to the active cluster so replication can detect and resolve conflicting branches. common/persistence/versionhistory (+2 in other areas) docs · glossary
History branch / tree Executions can fork on reset or conflict resolution; the tree records branches and nodes store event batches. common/persistence, common/persistence/versionhistory (+1 in other areas) docs · glossary
History Shard A fixed-count partition of the execution space, owned by one History host at a time; requests route by hashing namespace and workflow ID. common/persistence (+2 in other areas) docs · glossary
List Filter The SQL-like query string accepted by list and count APIs. common/persistence/visibility/store/query (+1 in other areas) docs · glossary
Memo Non-indexed user metadata on an execution, returned by describe and list. common/persistence/visibility (+1 in other areas) docs · glossary
Nexus Endpoint A named reverse proxy routing a Nexus Service to a namespace and task queue or an external URL. common/persistence (+2 in other areas) docs · glossary
Nexus Registry The cluster-wide endpoint store, owned by one Matching node and polled by others. common/persistence (+2 in other areas) docs · glossary
Persistence store The pluggable database (Cassandra, MySQL, Postgres, SQLite) that is the source of truth for shards, executions, history, tasks, and metadata. common/persistence, common/persistence/client, common/persistence/serialization, common/persistence/cassandra, common/persistence/sql, common/persistence/sql/sqlplugin, common/persistence/schema (+1 in other areas) docs · glossary
RangeID The per-shard fencing token: a host claims a shard by compare-and-swapping it and every write carries it. common/persistence, common/persistence/cassandra, common/persistence/sql (+1 in other areas) docs · glossary
State Transition One unit of progress of an execution, counted in the transition history that acts as a logical clock. common/persistence/transitionhistory (+1 in other areas) docs · glossary
Task Queue A dynamically created FIFO queue workers poll; the routing key between server and workers. common/persistence (+4 in other areas) docs · glossary
Versioned transition The (failover version, transition count) logical clock for mutable state and CHASM. common/persistence/transitionhistory (+2 in other areas) docs · glossary
Visibility Listing, counting, and searching executions through an eventually consistent store written by the visibility queue. common/persistence/visibility, common/persistence/visibility/manager, common/persistence/visibility/store, common/persistence/visibility/store/elasticsearch, common/persistence/visibility/store/sql (+2 in other areas) docs · glossary
Workflow ID A user-chosen identifier; at most one open execution per ID per namespace, enforced through the current-execution record. common/persistence (+1 in other areas) docs · glossary

common

Concern Meaning Owning packages Links
Archival Copies closed histories and visibility records to blob storage after retention, driven by the history archival queue. common/archiver, common/archiver/provider, common/archiver/filestore, common/archiver/s3store, common/archiver/gcloud (+2 in other areas) docs · glossary
Asynchronous Activity Completion An Activity returns pending and an external system completes it later by Task Token. common/tasktoken (+2 in other areas) docs · glossary
Authorizer Plugin / Claim Mapper Server plugins that extract claims from a JWT and authorize each API call. common/authorization, common/rpc/auth, common/rpc/encryption docs · glossary
Backlog / spool Tasks persisted because no poller was waiting; classic, priority, and fairness variants. common/persistence (+2 in other areas) docs · glossary
Dual Visibility Running a secondary Visibility store during a migration. common/persistence/visibility/manager docs · glossary
Dynamic config Typed, hot-reloadable settings keyed by namespace, task queue, or shard. common/dynamicconfig (+1 in other areas) docs · glossary
Event History The append-only log of Events for one execution, stored as a tree of branches of event batches. common/persistence (+3 in other areas) docs · glossary
Failover version / version history Per-event version numbers tied to the active cluster so replication can detect and resolve conflicting branches. common/persistence/versionhistory, common/cluster (+1 in other areas) docs · glossary
Failure / Failure Converter Temporal's typed error model carried in Events and across SDKs. common/failure, common/serviceerror (+2 in other areas) docs · glossary
Frontend Service The stateless gateway that authenticates, rate-limits, validates the namespace, and routes every call to History or Matching. common/rpc/interceptor (+2 in other areas) docs · glossary
Global Namespace / Failover A namespace replicated to a standby cluster, and the handover of its active cluster. common/namespace/nsreplication, common/rpc/interceptor (+3 in other areas) docs · glossary
History branch / tree Executions can fork on reset or conflict resolution; the tree records branches and nodes store event batches. common/persistence, common/persistence/versionhistory (+1 in other areas) docs · glossary
History Shard A fixed-count partition of the execution space, owned by one History host at a time; requests route by hashing namespace and workflow ID. common/persistence (+2 in other areas) docs · glossary
Internal service clients Typed gRPC clients between services, layered with metrics and retries, that resolve the owning host through membership. common/resource (+6 in other areas) docs · glossary
List Filter The SQL-like query string accepted by list and count APIs. common/persistence/visibility/store/query, common/sqlquery docs · glossary
Memo Non-indexed user metadata on an execution, returned by describe and list. common/persistence/visibility (+1 in other areas) docs · glossary
Message protocol (Update) The worker-to-server message protocol carrying Update requests and responses alongside Workflow Tasks. common/protocol (+1 in other areas) docs · glossary
Multi-Cluster Replication Async replication of executions to passive clusters over per-shard streams, with version-history conflict resolution. common/cluster (+6 in other areas) docs · glossary
Namespace The unit of isolation that scopes workflow IDs, task queues, retention, search attributes, and replication. common/namespace, common/namespace/nsregistry, common/namespace/nsmanager (+2 in other areas) docs · glossary
Nexus Async Completion Callback The HTTP callback a handler posts to when an async operation finishes, routed to the caller's History. common/callbacks (+3 in other areas) docs · glossary
Nexus Endpoint A named reverse proxy routing a Nexus Service to a namespace and task queue or an external URL. common/nexus, common/persistence (+1 in other areas) docs · glossary
Nexus Machinery At-least-once delivery of operation start, cancel, and completion across namespace boundaries. common/nexus (+3 in other areas) docs · glossary
Nexus Registry The cluster-wide endpoint store, owned by one Matching node and polled by others. common/nexus, common/persistence (+1 in other areas) docs · glossary
Nexus RPC The open protocol for arbitrary-duration operations with sync and async completion. common/nexus/nexusrpc, common/nexus docs · glossary
Payload / Payload Converter / Payload Codec / Data Converter The wire representation of values and the SDK-side serialization and encoding pipeline. common/payload, common/payloads, common/codec (+2 in other areas) docs · glossary
Persistence store The pluggable database (Cassandra, MySQL, Postgres, SQLite) that is the source of truth for shards, executions, history, tasks, and metadata. common/persistence, common/persistence/client, common/persistence/serialization, common/persistence/cassandra, common/persistence/sql, common/persistence/sql/sqlplugin, common/persistence/schema (+1 in other areas) docs · glossary
Queue processor The per-shard loop that reads a task category from its ack level, schedules, retries, and dead-letters tasks. common/tasks (+4 in other areas) docs · glossary
RangeID The per-shard fencing token: a host claims a shard by compare-and-swapping it and every write carries it. common/persistence, common/persistence/cassandra, common/persistence/sql (+1 in other areas) docs · glossary
Requests Per Second (RPS) Service-level and namespace-level rate limits applied in Frontend interceptors and persistence clients. common/quotas, common/quotas/calculator, common/rpc/interceptor (+1 in other areas) docs · glossary
Retry Policy Server-side retry attributes for Activities and Workflows; activity retries go straight back to Matching via a retry timer. common/retrypolicy, common/backoff (+2 in other areas) docs · glossary
Ringpop Gossip membership plus a consistent hash ring per service, used to find which host owns a shard or partition. common/membership, common/membership/ringpop, common/membership/static docs · glossary
Search Attribute An indexed key usable in List Filters, set at start or upserted from workflow code. common/searchattribute, common/searchattribute/sadefs (+3 in other areas) docs · glossary
State Transition One unit of progress of an execution, counted in the transition history that acts as a logical clock. common/persistence/transitionhistory (+1 in other areas) docs · glossary
Sticky Execution Routing follow-up Workflow Tasks to a worker-private queue so cached state is reused instead of replayed. common/tqid (+3 in other areas) docs · glossary
System workflows Temporal workflows the Worker service runs against the server itself. common/sdk (+5 in other areas) docs · glossary
Tag A key-value label on an emitted metric. common/metrics, common/log/tag (+1 in other areas) docs · glossary
Task Queue A dynamically created FIFO queue workers poll; the routing key between server and workers. common/tqid, common/taskqueue, common/persistence (+2 in other areas) docs · glossary
Task queue partition One of N physical sub-queues of a Task Queue, arranged as a tree with forwarding to the root; load balanced by the Matching client. common/tqid (+2 in other areas) docs · glossary
Task Token An opaque identifier for one Activity Task Execution used for async completion and heartbeats. common/tasktoken (+1 in other areas) docs · glossary
Temporal SDK / Core SDK / Temporal Client Language libraries providing the Client and Worker, with a shared Rust core for several languages. common/sdk (+1 in other areas) docs · glossary
Temporal Service configuration The static YAML configuration for persistence, services, membership, TLS, and archival. common/config (+2 in other areas) docs · glossary
Timer Durable workflow time APIs; the server fires user timers from the per-shard timer queue even with no worker running. common/timer (+2 in other areas) docs · glossary
Update A synchronous request-and-response that may mutate state, with validation, accepted, and completed phases. common/protocol (+3 in other areas) docs · glossary
Versioned transition The (failover version, transition count) logical clock for mutable state and CHASM. common/persistence/transitionhistory (+2 in other areas) docs · glossary
Visibility Listing, counting, and searching executions through an eventually consistent store written by the visibility queue. common/persistence/visibility, common/persistence/visibility/manager, common/persistence/visibility/store, common/persistence/visibility/store/elasticsearch, common/persistence/visibility/store/sql (+2 in other areas) docs · glossary
Worker / Worker Process / Worker Entity / Worker Program The user-run process that polls Task Queues, executes code, and responds to the server. common/workercommands (+2 in other areas) docs · glossary
Worker Versioning / Worker Deployment / Build ID Routing Workflow Tasks only to workers running compatible code; PINNED keeps an execution on its starting version. common/worker_versioning (+4 in other areas) docs · glossary
Workflow ID A user-chosen identifier; at most one open execution per ID per namespace, enforced through the current-execution record. common/persistence (+1 in other areas) docs · glossary

temporal

Concern Meaning Owning packages Links
Temporal Server The four horizontally scalable services (Frontend, History, Matching, Worker) composed with Uber fx and started from one binary. temporal (+1 in other areas) docs · glossary
Temporal Service configuration The static YAML configuration for persistence, services, membership, TLS, and archival. temporal, temporal/environment (+1 in other areas) docs · glossary

api

Concern Meaning Owning packages Links
Archival Copies closed histories and visibility records to blob storage after retention, driven by the history archival queue. api/archiver/v1 (+6 in other areas) docs · glossary
CHASM Coordinated Heterogeneous Application State Machines: a component-tree framework that lets non-workflow archetypes share the shard substrate. api/chasm/v1 (+5 in other areas) docs · glossary
Event A record the server appends to history from an external occurrence or a Command. api/history/v1 (+2 in other areas) docs · glossary
Failure / Failure Converter Temporal's typed error model carried in Events and across SDKs. api/errordetails/v1 (+3 in other areas) docs · glossary
History Service The stateful core that owns execution state and Event History and runs the internal task queues. api/historyservice/v1 (+3 in other areas) docs · glossary
Matching Service Hosts Task Queues and matches tasks from History to worker long-polls, in memory or via a persisted backlog. api/matchingservice/v1 (+2 in other areas) docs · glossary
Multi-Cluster Replication Async replication of executions to passive clusters over per-shard streams, with version-history conflict resolution. api/replication/v1 (+6 in other areas) docs · glossary
Mutable state The materialized per-execution state record held in the executions row and cached on the owning History host. api/persistence/v1 (+4 in other areas) docs · glossary
Namespace The unit of isolation that scopes workflow IDs, task queues, retention, search attributes, and replication. api/namespace/v1 (+4 in other areas) docs · glossary
Payload / Payload Converter / Payload Codec / Data Converter The wire representation of values and the SDK-side serialization and encoding pipeline. api/common/v1 (+4 in other areas) docs · glossary
Persistence store The pluggable database (Cassandra, MySQL, Postgres, SQLite) that is the source of truth for shards, executions, history, tasks, and metadata. api/persistence/v1 (+7 in other areas) docs · glossary
Schedule A first-class resource that starts executions on a spec, with pause, backfill, and overlap policies; V1 is a system workflow, V2 is CHASM. api/schedule/v1 (+3 in other areas) docs · glossary
Tag A key-value label on an emitted metric. api/metrics/v1 (+2 in other areas) docs · glossary
Task Queue A dynamically created FIFO queue workers poll; the routing key between server and workers. api/taskqueue/v1 (+4 in other areas) docs · glossary
Task Token An opaque identifier for one Activity Task Execution used for async completion and heartbeats. api/token/v1 (+1 in other areas) docs · glossary
Temporal CLI / tctl The user CLI lives in a separate repository; tdbg is the in-repo admin debugging tool. api/cli/v1 (+1 in other areas) docs · glossary
Visibility Listing, counting, and searching executions through an eventually consistent store written by the visibility queue. api/visibilityservice/v1 (+6 in other areas) docs · glossary
Worker Versioning / Worker Deployment / Build ID Routing Workflow Tasks only to workers running compatible code; PINNED keeps an execution on its starting version. api/deployment/v1 (+4 in other areas) docs · glossary

cmd

Concern Meaning Owning packages Links
Backlog / spool Tasks persisted because no poller was waiting; classic, priority, and fairness variants. cmd/tools/fairsim (+2 in other areas) docs · glossary
CHASM Coordinated Heterogeneous Application State Machines: a component-tree framework that lets non-workflow archetypes share the shard substrate. cmd/tools/protoc-gen-go-chasm (+5 in other areas) docs · glossary
Dynamic config Typed, hot-reloadable settings keyed by namespace, task queue, or shard. cmd/tools/gendynamicconfig (+1 in other areas) docs · glossary
Search Attribute An indexed key usable in List Filters, set at start or upserted from workflow code. cmd/tools/gensearchattributehelpers (+4 in other areas) docs · glossary
Temporal CLI / tctl The user CLI lives in a separate repository; tdbg is the in-repo admin debugging tool. cmd/tools/tdbg (+1 in other areas) docs · glossary
Temporal Server The four horizontally scalable services (Frontend, History, Matching, Worker) composed with Uber fx and started from one binary. cmd/server (+1 in other areas) docs · glossary

sdk

Concern Meaning Owning packages Links
Activity Definition / Activity Type The user function implementing an Activity and the name that maps to it; registered on the worker. sdk docs · glossary
Failure / Failure Converter Temporal's typed error model carried in Events and across SDKs. sdk (+3 in other areas) docs · glossary
Idempotency Designing Activities so repeats have one effect, because delivery is at-least-once. sdk docs · glossary
Local Activity An Activity executed inside the worker's Workflow Task, recorded as a marker Event. sdk (+1 in other areas) docs · glossary
Nexus Operation Handler / Nexus Service Worker code implementing operations; dispatched from Frontend through Matching to a polling worker. sdk (+2 in other areas) docs · glossary
Patching SDK markers in history so new code can branch on whether an old execution passed a change point. sdk (+1 in other areas) docs · glossary
Payload / Payload Converter / Payload Codec / Data Converter The wire representation of values and the SDK-side serialization and encoding pipeline. sdk (+4 in other areas) docs · glossary
Side Effect A short non-deterministic snippet whose result is recorded as a marker Event. sdk (+1 in other areas) docs · glossary
Sticky Execution Routing follow-up Workflow Tasks to a worker-private queue so cached state is reused instead of replayed. sdk (+3 in other areas) docs · glossary
Task Routing Using distinct Task Queues to send specific Activities to specific workers. sdk (+1 in other areas) docs · glossary
Temporal SDK / Core SDK / Temporal Client Language libraries providing the Client and Worker, with a shared Rust core for several languages. sdk (+1 in other areas) docs · glossary
Worker / Worker Process / Worker Entity / Worker Program The user-run process that polls Task Queues, executes code, and responds to the server. sdk (+2 in other areas) docs · glossary
Worker Session Go SDK feature running a sequence of Activities on one worker via a host-specific Task Queue. sdk docs · glossary
Workflow cache The worker-side cache of executions backing Sticky Execution. sdk docs · glossary
Workflow Definition Deterministic user code that defines a workflow; replayed by the SDK against history. sdk docs · glossary

chasm

Concern Meaning Owning packages Links
CHASM Coordinated Heterogeneous Application State Machines: a component-tree framework that lets non-workflow archetypes share the shard substrate. chasm, chasm/lib/workflow, chasm/lib/all (+3 in other areas) docs · glossary
Nexus Async Completion Callback The HTTP callback a handler posts to when an async operation finishes, routed to the caller's History. chasm/lib/callback (+3 in other areas) docs · glossary
Nexus Operation One operation on a Nexus Service; the caller side is a state machine (HSM today, CHASM behind a flag) driven by the outbound queue. chasm/lib/nexusoperation (+3 in other areas) docs · glossary
Nexus Standalone Activity An operation backed by a Standalone Activity. chasm/lib/activity, chasm/lib/nexusoperation docs · glossary
Schedule A first-class resource that starts executions on a spec, with pause, backfill, and overlap policies; V1 is a system workflow, V2 is CHASM. chasm/lib/scheduler (+3 in other areas) docs · glossary
Standalone Activity An Activity started directly from a client with no enclosing workflow, implemented as a CHASM archetype. chasm/lib/activity, chasm/lib/activity/model (+1 in other areas) docs · glossary
Versioned transition The (failover version, transition count) logical clock for mutable state and CHASM. chasm (+2 in other areas) docs · glossary

5. Quick mapping table

One line per concept for fast lookup. Each linked term jumps to its entry in section 10, which has the full definition and source links.

Restate Temporal Effect Cluster Caveat
Partition / partition processor History shard / shard.ContextImpl (shard controller) Shard (300 per group) owned by a runner
Leader epoch RangeID Advisory lock / cluster_locks lease Effect's lease is not a fencing token
Bifrost log (none) ≈ DB txn log + history events cluster_messages + cluster_replies
Journal entry Event + Command Reply row keyed by step name
StartMessage + replay Workflow Task with history Redelivered run message after a reset; body replays from scratch
Invocation Workflow Execution run request for the Workflow/<tag> entity
Service (unkeyed) Activity Type, or stateless workflow Plain Entity RPC, volatile or persisted
Virtual Object Entity workflow keyed by Workflow ID; CHASM Entity (no durable state)
Exclusive handler Workflow Task (implicitly single writer) Entity concurrency: 1
Shared handler Query / Update handler (none)
ctx.run Local Activity / Side Effect Activity.make
ctx.sleep Timer DurableClock.sleep Effect: ≤60s in-process, >60s via deliver_at
Awakeable Signal / async activity completion DurableDeferred token
Durable promise Update / Query over a Trigger DurableDeferred + DurableQueue
One-way call / delayed send Signal, child without await, Schedule execute(..., {discard: true}), DeliverAt
Inbox / vqueue Matching backlog + per-workflow serialization Entity mailbox (4096) + maxResidentEntities
Outbox + Shuffle Transfer tasks Persisted message + best-effort Notify + owner poll
Deployment (immutable, pinned) Worker Deployment Version / Build ID (none)
Service revision patched() (none)
Ingress Frontend WorkflowProxy HTTP / RPC groups
Idempotency key Workflow ID + reuse / conflict policies idempotencyKey(payload) → execution ID; Activity.idempotencyKey for external systems
Admin REST / cluster controller Operator gRPC + Worker Service workflows + Ringpop (none); RunnerHealth singleton
DataFusion SQL Visibility (ES/SQL) raw SQL on the cluster tables
Snapshot / trim Archival / retention delete (none)
Cron / schedules Schedule (V1 workflow, V2 CHASM) ClusterCron
restate-lite temporal server start-dev (Temporal CLI) layerMemory, TestRunner, SingleRunner
Exactly-once for DB effects (user: idempotent activities) WithTransaction on the same SQL DB

6. Guarantees side by side

Restate Temporal Effect
Delivery of a durable step At-least-once invoke; journal makes replay exactly-once-observed At-least-once activity execution; events exactly-once At-least-once; exactly one reply per request
Duplicate side effects possible On retry before ack (guarded by JournalTracker::can_retry) On activity retry / timeout On runner crash, split brain (no fencing), 10-min reclaim, and for activities that suspend (body re-runs)
Non-determinism Detected (journal mismatch) Detected and sandboxed Neither
Ordering Per key via vqueue/lock Per workflow via single in-flight WFT Per entity via concurrency (workflow entities use 2 with forked handlers)
Unbounded history Journal trimmed on completion; retention continueAsNew None; replay cost grows with step count

7. Reading order in the Temporal repo

Start with docs/architecture/ (history-service.md, workflow-lifecycle.md, chasm.md, nexus.md, workflow-update.md, speculative-workflow-task.md) and service/matching/fairness.md. Then follow a start request:

  1. service/frontend/workflow_handler.go → client/history/client.go (shard routing) → service/history/handler.go.
  2. service/history/api/startworkflow/, then api/update_workflow_util.go for the generic lock/mutate/persist loop.
  3. service/history/workflow/mutable_state_impl.go, workflow_task_state_machine.go, historybuilder/.
  4. common/persistence/data_interfaces.go (UpdateWorkflowExecutionRequest), schema/cassandra/temporal/schema.cql.
  5. service/history/queues/ (queue_base.go, queue_immediate.go, queue_scheduled.go, scheduler.go), transfer_queue_active_task_executor.go, timer_queue_active_task_executor.go.
  6. service/matching/matching_engine.go → task_queue_partition_manager.go → physical_task_queue_manager.go → pri_matcher.go, pri_backlog_manager.go.
  7. service/history/shard/context_impl.go (renewRangeLocked, acquireShard), shard/controller_impl.go.
  8. chasm/ (tree.go, engine.go, lib/scheduler), then service/history/hsm/.
  9. service/history/ndc/ and replication/ only for XDC.

Side-by-side counterparts:

8. Relation to fireline / firegrid

Both of your projects are log-first: one append-only stream is the truth and everything else is a projection replayed from it. That is Restate's shape, not Temporal's or Effect's. In Temporal there is no stream to tail; queue processors read task rows, not events. In Effect there is no stream either; the message table is an outbox that gets polled.

Firegrid's primitive surface against all three:

firegrid Restate Temporal Effect
wait_for(event) awakeable / ctx.promise signal + condition, or Update DurableDeferred.await + token
wait_until(time) ctx.sleep / delayed send timer; Schedule for far-future DurableClock.sleep / DeliverAt
spawn / spawn_all serviceClient() + RestatePromise.all executeChild + Promise.all; Nexus child execute + Activity.raceAll; parent suspends
execute(target) ctx.run activity Activity
approval = suspend + permission event awakeable resolved externally Update blocked on a Trigger DurableDeferred completed by token
sessions coordinate via core, never call each other direct Call direct signals/children direct entity RPC

Firegrid's "model owns control flow, log makes the chosen schedule replayable" is closest to Effect's stance (no determinism checks; whatever replays, replays) and to Restate's (mismatch detected after the fact), and furthest from Temporal's (code must re-derive identical commands). The Effect engine is also the most directly reusable for firegrid's shape: wait_for is exactly a DurableDeferred, and a durable wait_until(prompt) is scheduleClock + a deferred, which is how DurableClock is already built. The thing Effect would not give you that Temporal and Restate do is detection when the model makes a different choice on replay; with Effect, a renamed or reordered step just silently binds to a different reply, which for an LLM-driven schedule means you'd want the step name to be a hash of the model's decision, not an ordinal.

Fireline's conductor/middleware chain has analogues in Temporal's interceptor chains and Restate's tower layers on ingress; Effect's closest match is Rpc.wrap middleware around entity handlers. None of the three put policy middleware around the execution stream itself.

9. Caveats about the DeepWiki pages

Both wikis are LLM-generated and lag migrations. Temporal (indexed 2026-09-23) still cites a removed components/ directory, describes Nexus only via the CHASM path even though HSM is still the default behind nexusoperation.enableChasmWorkflowOperations, and wrongly says workers can report to History directly. Restate's mixes the polling LegacyClusterState with gossip FdState without saying which is authoritative. Prefer in-repo docs/architecture/ for Temporal. There is no DeepWiki read for Effect; the Effect notes above are from source only.

10. Glossary

Every entry explains the concept, links an authoritative source, and then says what the nearest thing is in Restate and in Effect Cluster. Link conventions:

Part A follows the official Temporal glossary (https://docs.temporal.io/glossary). Section 4 maps the same terms onto the owning packages. Part B covers internal and other-system terms used in this document.

Part A: Temporal glossary terms

A.1 Core model

Temporal — A runtime for "reentrant processes": functions whose state and progress survive process and host failure because the server records every step and can replay them on any worker. The platform is the server (four services plus persistence) and the workers you run. https://docs.temporal.io/temporal

Durable Execution — The property that a Workflow Execution keeps its state and progress across failures. Implemented by journaling the results of non-deterministic steps and replaying the code against that journal. https://docs.temporal.io/temporal#durable-execution

Temporal Platform / Temporal Application — The Platform is a Temporal Service plus Worker Processes. An Application is the set of Workflow Executions your code produces. https://docs.temporal.io/temporal#temporal-platform

Temporal Service (formerly Temporal Cluster) — A Temporal Server paired with a Persistence store (Cassandra, MySQL, Postgres, SQLite) and a Visibility store. "Cluster" is being phased out in favour of "Service". https://docs.temporal.io/temporal-service

Temporal Server — The four horizontally scalable services (Frontend, History, Matching, Worker) that together implement the server. https://docs.temporal.io/temporal-service/temporal-server

Frontend Service — The stateless gRPC (and HTTP) gateway. It authenticates, rate-limits, validates the Namespace, and routes each call to the right History shard or Matching partition. All SDK traffic goes through it. https://docs.temporal.io/temporal-service/temporal-server#frontend-service

History Service — The stateful core. It owns Workflow Execution state (mutable state and Event History), decides what to do next, and runs the internal task queues (transfer, timer, visibility, outbound, replication). Scaled by History Shards. https://docs.temporal.io/temporal-service/temporal-server#history-service

History Shard — A fixed-count partition of the execution space. Each shard is owned by exactly one History host at a time and is the unit of throughput scaling. Shard count cannot be changed after the cluster is created. https://docs.temporal.io/temporal-service/temporal-server#history-shard

Matching Service — Hosts Task Queues. It matches tasks produced by History to Worker long-polls, either in memory (sync match) or via a persisted backlog. https://docs.temporal.io/temporal-service/temporal-server#matching-service

Worker Service — The server-side service that runs system Workflows (scanner, batch operations, schedules V1, worker deployments, migrations) and other background jobs using the Go SDK against the Frontend. https://docs.temporal.io/temporal-service/temporal-server#worker-service

Namespace — The unit of isolation. Workflow IDs, Task Queues, retention, search attributes, and replication settings are scoped per Namespace. https://docs.temporal.io/namespaces

Temporal Service configuration — The YAML config for a self-hosted server (persistence, services, membership, TLS, archival), separate from dynamic config. https://docs.temporal.io/temporal-service/configuration

A.2 Workflows

Workflow — Day-to-day shorthand for Workflow Type, Workflow Definition, or Workflow Execution. https://docs.temporal.io/workflows

Workflow Definition — The user code that defines a Workflow. It must be deterministic: on replay it must issue the same Commands in the same order. Non-deterministic work goes in Activities. https://docs.temporal.io/workflow-definition

Workflow Type — The name that maps to a Workflow Definition, used when starting executions and registering workers. https://docs.temporal.io/workflow-definition#workflow-type

Workflow Execution — One durable run of a Workflow Definition, identified by Workflow ID plus Run ID. It is the main unit of execution: it has an Event History, can be signalled, queried, updated, and can spawn Activities and children. https://docs.temporal.io/workflow-execution

Workflow ID — A user-chosen, application-level identifier. Within a Namespace, at most one execution with that ID can be open at a time, which is how Temporal provides entity-style uniqueness. https://docs.temporal.io/workflow-execution/workflowid-runid#workflow-id

Run ID — A platform-generated, globally unique ID for one run of a Workflow ID. Continue-As-New, retries, cron, and reset all produce new Run IDs under the same Workflow ID. https://docs.temporal.io/workflow-execution/workflowid-runid#run-id

Workflow ID Reuse Policy — Controls whether a new execution may reuse a Workflow ID that belongs to a closed execution (allow, allow only if the previous failed, reject). https://docs.temporal.io/workflow-execution/workflowid-runid#workflow-id-reuse-policy

Workflow ID Conflict Policy — Controls what happens when starting a Workflow ID that is currently running: fail, return the existing run, or terminate the existing run and start fresh. https://docs.temporal.io/workflow-execution/workflowid-runid#workflow-id-conflict-policy

Continue-As-New — Closes the current run and atomically starts a new run of the same Workflow ID with a fresh Event History and the state you pass along. Used to bound history size for long-lived workflows. https://docs.temporal.io/workflow-execution/continue-as-new

Child Workflow — A Workflow Execution started from inside another. The parent gets the child's result as an Event and can control what happens to the child when the parent closes. https://docs.temporal.io/child-workflows

Parent Close Policy — What happens to a child when its parent closes: terminate, request cancel, or abandon. https://docs.temporal.io/parent-close-policy

Delay Workflow Execution — A start option that delays the first Workflow Task by a duration. https://docs.temporal.io/workflow-execution/timers-delays

Temporal Cron Job — A legacy way to run a Workflow on a cron spec by chaining runs under one Workflow ID. Schedules supersede it. https://docs.temporal.io/cron-job

Schedule — A first-class server resource that starts Workflow Executions on a calendar or interval spec, with pause, backfill, overlap policies, and jitter. https://docs.temporal.io/schedule

Reset — Terminates an execution and starts a new run from a chosen point in its Event History, discarding later progress. https://docs.temporal.io/workflow-execution/event#reset

State Transition — One unit of progress of a Workflow Execution, as counted by the server (used for Cloud billing and the transition count clock). https://docs.temporal.io/workflow-execution#state-transition

Retention Period — How long a closed execution's Event History stays in persistence before deletion (default 72 hours on self-hosted). https://docs.temporal.io/temporal-service/temporal-server#retention-period

Archival — A self-hosted feature that copies closed Event Histories and visibility records to blob storage after retention expires. https://docs.temporal.io/temporal-service/archival

Workflow History Export — Temporal Cloud feature exporting closed histories to a customer storage sink. https://docs.temporal.io/cloud/export

Memo — Non-indexed, user-supplied metadata attached to an execution and returned by describe and list. https://docs.temporal.io/workflow-execution#memo

Workflow cache — The worker-side in-memory cache of Workflow Executions that lets Sticky Execution skip replay. https://docs.temporal.io/workflow-execution#workflow-cache

A.3 Events, commands, tasks

Event — A record the server writes into Event History, either from an external occurrence (a Signal arrived, a timer fired) or from a Command the workflow issued. https://docs.temporal.io/workflow-execution/event#event

Event History — The append-only log of Events for one execution. It is the full state of the execution and is what workers replay. https://docs.temporal.io/workflow-execution/event#event-history

Command — A requested action a worker returns after a Workflow Task: schedule an Activity, start a timer, signal another workflow, complete the workflow. The server validates it and writes Events. https://docs.temporal.io/workflow-execution#command

Task — The context a worker needs to make progress on one execution: either a Workflow Task or an Activity Task. https://docs.temporal.io/tasks#task

Workflow Task — A Task telling a worker to advance a Workflow Execution. It carries the Event History (or the delta since the sticky cache) and expects Commands back. https://docs.temporal.io/tasks#workflow-task

Workflow Task Execution — A worker picking up a Workflow Task, replaying history in the sandbox, running the code until it blocks, and responding with Commands. https://docs.temporal.io/tasks#workflow-task-execution

Workflow Task Timeout — The maximum time the server waits for a worker to start processing a Workflow Task before rescheduling it (default 10 seconds). https://docs.temporal.io/encyclopedia/detecting-workflow-failures#workflow-task-timeout

Activity Task — A Task carrying the input and context for one Activity attempt. https://docs.temporal.io/tasks#activity-task

Activity Task Execution — One attempt of running an Activity Definition with the Activity Task's context. https://docs.temporal.io/tasks#activity-task-execution

Task Token — An opaque identifier for one Activity Task Execution, used to complete it asynchronously or send heartbeats from outside the worker. https://docs.temporal.io/activity-execution#task-token

Side Effect — A way to run a short non-deterministic snippet inside workflow code and record its result as an Event so replay reuses it. No retries, no separate task. https://docs.temporal.io/workflow-execution/event#side-effect

A.4 Activities

Activity — Shorthand for Activity Type, Definition, or Execution: the unit of non-deterministic, retryable work. https://docs.temporal.io/activities

Activity Definition — The function that implements an Activity. It may do anything: I/O, randomness, long blocking calls. The server retries it per Retry Policy. https://docs.temporal.io/activity-definition

Activity Type — The name mapping to an Activity Definition. https://docs.temporal.io/activity-definition#activity-type

Activity Execution — The full chain of attempts for one scheduled Activity, from schedule to final result. https://docs.temporal.io/activity-execution

Activity ID — The unique ID of an Activity Execution within its workflow. https://docs.temporal.io/activity-execution#activity-id

Workflow Activity — An Activity orchestrated by a Workflow, as opposed to a Standalone Activity. https://docs.temporal.io/workflow-activity

Standalone Activity — An Activity started directly from a client with no enclosing workflow, backed by CHASM. https://docs.temporal.io/standalone-activity

Local Activity — An Activity executed inside the worker's workflow task, skipping the Task Queue round trip. Cheaper but bounded by the Workflow Task Timeout. https://docs.temporal.io/local-activity

Asynchronous Activity Completion — An Activity returns "will complete later" and an external system completes it by Task Token. https://docs.temporal.io/activity-execution#asynchronous-activity-completion

Activity Heartbeat — A periodic ping from the worker running an Activity, carrying optional progress details, so the server can detect a dead worker and the Activity can resume from the last heartbeat. https://docs.temporal.io/encyclopedia/detecting-activity-failures#activity-heartbeat

Heartbeat Timeout — Max time between heartbeats before the server fails the attempt. https://docs.temporal.io/encyclopedia/detecting-activity-failures#heartbeat-timeout

Schedule-To-Start Timeout — Max time an Activity Task may wait in a Task Queue before a worker picks it up. Usually left unset. https://docs.temporal.io/encyclopedia/detecting-activity-failures#schedule-to-start-timeout

Start-To-Close Timeout — Max duration of one Activity attempt. Required unless Schedule-To-Close is set. https://docs.temporal.io/encyclopedia/detecting-activity-failures#start-to-close-timeout

Schedule-To-Close Timeout — Max duration for the whole Activity Execution including retries. https://docs.temporal.io/encyclopedia/detecting-activity-failures#schedule-to-close-timeout

Retry Policy — Server-side retry attributes: initial interval, backoff coefficient, max interval, max attempts, non-retryable error types. Applied to Activities by default and to Workflows if set. https://docs.temporal.io/encyclopedia/retry-policies

Idempotency — Designing Activities so repeating them has the same effect as running once, which is required because delivery is at-least-once. https://docs.temporal.io/activity-definition#idempotency

A.5 Messages into a running execution

Signal — An asynchronous, fire-and-forget message to a running execution. It is written as an Event and triggers a Workflow Task; the workflow handles it with a registered handler. https://docs.temporal.io/sending-messages#sending-signals

Signal-With-Start — Atomically start the execution if absent, then deliver a Signal. https://docs.temporal.io/sending-messages#signal-with-start

Query — A synchronous, read-only request answered by a worker from its cached workflow state. It writes no Events and cannot change state. https://docs.temporal.io/sending-messages#sending-queries

Update — A synchronous request-and-response to a running execution that may mutate state. It has validation, accepted, and completed phases, and the caller can wait for either. https://docs.temporal.io/sending-messages#sending-updates

Dynamic Handler — A catch-all Workflow, Activity, Signal, or Query handler invoked when no registered name matches. https://docs.temporal.io/dynamic-handler

Timer — Durable, deterministic time APIs inside workflow code (sleep, timeouts on condition). The server fires them even if no worker is running. https://docs.temporal.io/workflow-execution/timers-delays

Workflow Execution Timeout — Max total time for a Workflow ID across all runs, including retries and Continue-As-New. https://docs.temporal.io/encyclopedia/detecting-workflow-failures#workflow-execution-timeout

Workflow Run Timeout — Max time for one run. https://docs.temporal.io/encyclopedia/detecting-workflow-failures#workflow-run-timeout

A.6 Workers and dispatch

Worker — Shorthand for Worker Program or Worker Process: the thing that runs your code. https://docs.temporal.io/workers#worker

Worker Process — A long-running process that polls Task Queues, executes workflow and activity code, and reports results. https://docs.temporal.io/workers#worker-process

Worker Entity — One worker within a process, bound to one Task Queue and one Namespace. https://docs.temporal.io/workers#worker-entity

Worker Program — The static code that defines the Worker Process (which workflows and activities it hosts). https://docs.temporal.io/workers#worker-program

Task Queue — A lightweight, dynamically created FIFO queue that workers poll. It is the routing key between server and workers; workflows and activities name one at schedule time. https://docs.temporal.io/task-queue

Task Routing — Using distinct Task Queues to send specific Activities to specific workers (for example, host-specific or GPU-bearing). https://docs.temporal.io/task-routing

Worker Session — A Go SDK feature to run a sequence of Activities on the same worker without hand-naming a Task Queue. https://docs.temporal.io/task-routing#worker-session

Sticky Execution — After a worker processes a Workflow Task, the server routes subsequent tasks for that execution to a worker-specific Task Queue so the cached state is reused instead of replaying from scratch. https://docs.temporal.io/sticky-execution

A.7 Nexus

Nexus RPC — An open protocol for arbitrary-duration operations with both synchronous and asynchronous completion, designed so durable executions can call across service and namespace boundaries. https://github.com/nexus-rpc/api/blob/main/SPEC.md

Nexus Service — A named collection of Nexus Operations forming a service contract. https://docs.temporal.io/nexus/services

Nexus Operation — One operation in a Nexus Service; may complete synchronously or return an operation token and complete later via callback. https://docs.temporal.io/nexus/operations

Nexus Operation Handler — Handler code in a worker implementing an Operation. https://docs.temporal.io/nexus/operations

Temporal Operation Handler — A handler kind that backs an Operation with a Workflow, Update, or Activity, giving durable execution on the handler side. https://docs.temporal.io/nexus/temporal-operation-handler

Nexus Standalone Activity — An Operation backed by a Standalone Activity that completes when the activity returns. https://docs.temporal.io/nexus/standalone-activity

Nexus Endpoint — A named reverse proxy that routes a Nexus Service to a target Namespace and Task Queue (or an external URL). Callers reference endpoints, not workers. https://docs.temporal.io/nexus/endpoints

Nexus Registry — The cluster-wide store of Endpoints, owned by one Matching node and polled by others. https://docs.temporal.io/nexus/registry

Nexus Machinery — The built-in at-least-once delivery of Operation start, cancel, and completion across Namespace boundaries (outbound queue, callbacks, retries). https://docs.temporal.io/nexus

Nexus Async Completion Callback — The HTTP callback a handler invokes when an async Operation finishes; the server routes it to the caller's History. https://docs.temporal.io/nexus/operations

Nexus Operation Events — Events in the caller's history recording Operation lifecycle (scheduled, started, completed, failed, cancelled, timed out). https://docs.temporal.io/nexus/execution-debugging

Nexus Service Contract — The shared code package, schema, or docs that let a caller use a Service. https://docs.temporal.io/nexus/services

NexGen — A code generator producing typed Nexus clients from a schema file. https://docs.temporal.io/nexus/nexgen

A.8 Data conversion and failures

Payload — The wire representation of a value: bytes plus metadata (encoding, type). All inputs and outputs are Payloads. https://docs.temporal.io/dataconversion#payload

Payload Converter — Serializes a value to a Payload and back (JSON, protobuf, binary). https://docs.temporal.io/payload-converter

Payload Codec — Transforms Payloads to Payloads after serialization, typically for encryption or compression. Runs outside the workflow sandbox. https://docs.temporal.io/payload-codec

Data Converter — The bundle of Payload Converters, Payload Codecs, and Failure Converter an SDK uses. https://docs.temporal.io/dataconversion

Default Data Converter / Custom Data Converter — The built-in chain (null, binary, protobuf JSON, protobuf binary, JSON) versus a user-supplied replacement. https://docs.temporal.io/default-custom-data-converters

Codec Server / Remote data encoding — An HTTP server exposing your Payload Codec so the Web UI and CLI can decode encrypted payloads. https://docs.temporal.io/codec-server

Failure — Temporal's typed error model carried in Events and across SDKs: ApplicationFailure, CancelledFailure, TimeoutFailure, TerminatedFailure, ServerFailure, ActivityFailure, ChildWorkflowFailure, NexusOperationFailure. https://docs.temporal.io/references/failures

Failure Converter — Converts language error objects to proto Failures and back. https://docs.temporal.io/failure-converter

A.9 Visibility and observability

Visibility — The subsystem and APIs for listing, counting, and searching executions. Written asynchronously to Elasticsearch or SQL, so it is eventually consistent. https://docs.temporal.io/temporal-service/visibility

List Filter — The SQL-like query string accepted by list and count APIs. https://docs.temporal.io/list-filter

Search Attribute — An indexed key usable in List Filters, set at start or upserted from workflow code. https://docs.temporal.io/search-attribute

Dual Visibility — Running a secondary Visibility store during a migration. https://docs.temporal.io/dual-visibility

Tag — A key-value label on an emitted metric. https://docs.temporal.io/references/sdk-metrics

Temporal Web UI — The UI for inspecting executions, histories, task queues, and schedules. https://docs.temporal.io/web-ui

Temporal CLI / tctl — The temporal command-line tool; tctl is its deprecated predecessor. https://docs.temporal.io/cli

A.10 SDKs and clients

Temporal SDK — A language library providing the Client and the Worker, including the deterministic workflow runtime. https://docs.temporal.io/encyclopedia/architecture/temporal-sdks

Core SDK — The shared Rust library (sdk-core) implementing polling, state machines, and replay for the TypeScript, Python, .NET, and Ruby SDKs via FFI. https://temporal.io/blog/why-rust-powers-core-sdk

Temporal Client — The SDK API to start, signal, query, update, describe, and list executions. https://docs.temporal.io/encyclopedia/temporal-client

A.11 Replication and high availability

Multi-Cluster Replication — Self-hosted asynchronous replication of executions from an active cluster to passive ones, with namespace-level failover. https://docs.temporal.io/self-hosted-guide/multi-cluster-replication

Global Namespace — A Namespace configured to replicate to a standby cluster. https://docs.temporal.io/global-namespace

Failover / Failback — Switching a Namespace's active cluster or region to the standby and back. https://docs.temporal.io/cloud/high-availability

Replication Lag — The delay between active and standby regions. https://docs.temporal.io/cloud/metrics/openmetrics/metrics-reference#temporal_cloud_v1_replication_lag_p99

High Availability / High Availability features / Multi-region, Multi-cloud, Same-region Replication — Cloud offerings that replicate a Namespace to a second region, cloud, or cell for failover. https://docs.temporal.io/cloud/high-availability

Availability Zone — Placement unit for Cloud HA. https://docs.temporal.io/cloud/high-availability

A.12 Security and limits

Authorizer Plugin / Claim Mapper — Self-hosted server plugins: the Claim Mapper extracts claims from a JWT, the Authorizer decides per API call. https://docs.temporal.io/self-hosted-guide/security

Audit Logging — Cloud feature recording forensic access information. https://docs.temporal.io/cloud/audit-logs

Requests Per Second (RPS) — Service-level rate limits configured via dynamic config. https://docs.temporal.io/references/dynamic-configuration#service-level-rps-limits

Action / Actions Per Second (APS) — Cloud's billing unit (roughly one per state transition that creates work) and its per-namespace rate limit. https://docs.temporal.io/cloud/pricing#action

A.13 Temporal Cloud and release stages

Temporal Cloud; Account ID; Namespace ID; Namespace Name; gRPC Endpoint — The managed offering and its identifiers and per-namespace connection address. https://docs.temporal.io/cloud/namespaces

General Availability / Public Preview / Pre-release — Product release stages. https://docs.temporal.io/evaluate/product-release-stages

Part B: internal and other-system terms used in this document

B.1 Temporal server internals

Mutable state — The materialized record of one execution (execution info, pending activities, timers, children, signals, versioning info), stored in the executions row and cached on the owning History host. Events are the log; mutable state is the fold over it. https://github.com/temporalio/temporal/blob/main/docs/architecture/history-service.md

RangeID — A monotonically increasing integer on each shard row. A History host claims a shard by compare-and-swapping it, and every write for that shard carries it; a mismatch means another host owns the shard and the write fails. Temporal's fencing token. https://github.com/temporalio/temporal/blob/main/docs/architecture/history-service.md

Shard controller — Per-History-host component that watches cluster membership and acquires or releases the shards it should own. https://github.com/temporalio/temporal/blob/main/docs/architecture/history-service.md

Ringpop — Gossip-based membership (SWIM) with a consistent hash ring, one ring per service, used to find which host owns a shard, task-queue partition, or registry. https://github.com/temporalio/ringpop-go

Transfer / timer / visibility / outbound / replication tasks — The task categories History writes in the same transaction as mutable state. Transfer tasks are immediate (dispatch to Matching, start a child, deliver a signal); timer tasks fire at a time; visibility tasks update the index; outbound tasks make Nexus and callback HTTP calls; replication tasks feed XDC. https://github.com/temporalio/temporal/blob/main/docs/architecture/history-service.md

Queue processor — The per-shard loop that reads one task category from its ack level, schedules tasks with priority and per-execution serialization, retries with backoff, and sends terminal failures to a dead-letter queue. https://github.com/temporalio/temporal/blob/main/docs/architecture/history-service.md

Ack level — The checkpointed position in a task category below which every task is complete, persisted in shard info so a new owner resumes from there. https://github.com/temporalio/temporal/blob/main/docs/architecture/history-service.md

Buffered events — Events (signals, activity completions) that arrive while a Workflow Task is in flight. They are held and appended after the task completes so the worker's view stays consistent. https://github.com/temporalio/temporal/blob/main/docs/architecture/workflow-lifecycle.md

Speculative Workflow Task — A Workflow Task that is never persisted, used by Update so that a rejected Update costs zero database writes. https://github.com/temporalio/temporal/blob/main/docs/architecture/speculative-workflow-task.md

Transient Workflow Task — A retried Workflow Task after a failure whose scheduled and started events are not written until it completes, so repeated failures do not bloat history. https://github.com/temporalio/temporal/blob/main/docs/architecture/workflow-lifecycle.md

Sticky queue — A Task Queue private to one worker so Workflow Tasks for cached executions return to it. See Sticky Execution. https://docs.temporal.io/sticky-execution

Sync match — Matching handing a task directly to a parked long-poller without writing it to the backlog. https://github.com/temporalio/temporal/blob/main/docs/architecture/matching-service.md

Backlog / spool — Tasks persisted in the tasks table because no poller was waiting. https://github.com/temporalio/temporal/blob/main/docs/architecture/matching-service.md

Task queue partition — One of N physical sub-queues (default 4) of a Task Queue, arranged as a tree with forwarding to the root partition; the unit of Matching ownership. https://github.com/temporalio/temporal/blob/main/docs/architecture/matching-service.md

Worker Versioning / Worker Deployment / Build ID — Mechanisms to route Workflow Tasks only to workers running compatible code. A Deployment Version is a named build; PINNED keeps an execution on its starting version, AUTO_UPGRADE moves it to the current one. https://docs.temporal.io/worker-versioning

Patching (patched / deprecatePatch) — SDK markers written to history so new code can branch on whether an old execution has already passed a change point. https://docs.temporal.io/patching

HSM (hierarchical state machines) — The older framework for embedding typed state machines (callbacks, Nexus operations) inside mutable state. Being replaced by CHASM. https://github.com/temporalio/temporal/tree/main/service/history/hsm

CHASM (Coordinated Heterogeneous Application State Machines) — A component-tree framework that lets non-workflow archetypes (standalone activities, schedules, callbacks) share the shard, routing, atomic-write, and replication substrate. https://github.com/temporalio/temporal/blob/main/docs/architecture/chasm.md

Versioned transition — A (failover version, transition count) pair acting as the logical clock for mutable state and CHASM, used by replication and conflict resolution. https://github.com/temporalio/temporal/blob/main/docs/architecture/chasm.md

Failover version / version history — Per-event version numbers tied to the active cluster so XDC can detect and resolve conflicting branches. https://docs.temporal.io/self-hosted-guide/multi-cluster-replication

History branch / tree — An execution's events can fork on reset or conflict resolution; history_tree tracks branches and history_node stores event batches per branch. https://github.com/temporalio/temporal/blob/main/docs/architecture/history-service.md

Dynamic config — Typed, hot-reloadable settings keyed by namespace, task queue, or shard, read from YAML. https://docs.temporal.io/references/dynamic-configuration

System workflows — Temporal workflows the Worker service runs against the server itself (scanner, batcher, schedules V1, worker deployments, migrations). https://docs.temporal.io/temporal-service/temporal-server#worker-service

Message protocol (Update) — The worker-to-server protocol for Update requests, acceptance, and completion carried alongside Workflow Tasks. https://github.com/temporalio/temporal/blob/main/docs/architecture/message-protocol.md

B.2 Restate internals

Bifrost — Restate's replicated, segmented log abstraction. Each partition has one log, and that log is the write-ahead log for every state change in the partition. https://docs.restate.dev/references/architecture

Loglet — One segment of a Bifrost log with a fixed provider (in-memory, local RocksDB, or replicated). A log is a chain of loglets. https://docs.restate.dev/server/clusters

Sealing / chain extension — Making the current loglet read-only and appending a new loglet to the chain, used to reconfigure (new nodeset, new sequencer) or recover. Consensus is needed only on the metadata-store compare-and-swap that extends the chain. https://github.com/restatedev/restate/blob/main/crates/bifrost/src/bifrost_admin.rs

Sequencer — The single node ordering appends for a replicated loglet and replicating them to a write quorum of log-servers. https://docs.restate.dev/server/clusters

Nodeset / replication property — The log-server nodes a loglet writes to and how many must acknowledge. https://docs.restate.dev/server/clusters

Log-server — The node role that stores replicated loglet records in RocksDB. https://docs.restate.dev/server/overview

Metadata store — A Raft-replicated (or etcd, S3, DynamoDB backed) versioned key-value store holding nodes config, partition table, log chains, schema registry, and per-partition epochs. https://docs.restate.dev/server/metadata

Partition / partition processor — A key range of the 64-bit partition key space and the state machine that applies that partition's log into RocksDB. https://docs.restate.dev/server/clusters

Partition leader / leader epoch — The replica allowed to produce side effects. It claims a new epoch through the metadata store and announces itself by appending to the log; records from stale epochs are applied and ignored. https://docs.restate.dev/server/clusters

Partition store — Per-partition RocksDB with tables for invocation status, journal, key-value state, timers, inbox and outbox, promises, locks, deduplication, and FSM metadata. https://github.com/restatedev/restate/blob/main/crates/partition-store/src/keys.rs

Invocation — One durable execution of a handler, identified by an InvocationId, with a status lifecycle (scheduled, inboxed, invoked, suspended, paused, completed). https://docs.restate.dev/foundations/invocations

Journal — The invocation's ordered command and notification entries, stored in the partition store and replayed to the SDK on every attempt. https://docs.restate.dev/foundations/key-concepts

Invoker — The leader-side component that drives invocations against endpoints over HTTP/2, replays the journal, forwards new commands to the state machine, and retries on failure. https://docs.restate.dev/references/architecture

Service protocol — The versioned wire protocol (V1 to V7) between invoker and SDK: start message, commands, notifications, suspension, run completion proposals, acks. https://github.com/restatedev/restate/blob/main/service-protocol/dev/restate/service/protocol.proto

Deployment — An immutable registered endpoint (URL or Lambda ARN) discovered via /discover. Invocations pin to the deployment they started on. https://docs.restate.dev/services/versioning

Schema registry — The metadata-store record of services, handlers, and deployments, also appended to each partition log so replicas agree on schema at the same point. https://docs.restate.dev/server/metadata

Service / Virtual Object / Workflow (Restate) — The three service kinds. Services are unkeyed and concurrent. Virtual Objects are keyed with K/V state and exclusive single-writer handlers plus shared read handlers. Workflows are keyed, single-run objects with a run handler, shared handlers, and durable promises. https://docs.restate.dev/foundations/services

Exclusive / shared handler — On a Virtual Object or Workflow, exclusive handlers serialize per key; shared handlers run concurrently and may read state and promises. https://docs.restate.dev/foundations/handlers

Virtual queue (vqueue) — Per-key or per-service admission queue with a lock and deficit-round-robin scheduling, on by default in v1.8; replaces the older inbox. https://docs.restate.dev/services/flow-control

Inbox / outbox / shuffle — The inbox holds queued invocations for a locked key (legacy). The outbox holds cross-partition messages. The shuffle is the leader task that delivers outbox messages to other partitions. https://docs.restate.dev/references/architecture

Awakeable — An ID handed to an external system that, when resolved or rejected, delivers a completion into the invocation's journal. https://docs.restate.dev/develop/ts/external-events

Durable promise — A named promise on a Workflow that any handler of that workflow key can resolve, reject, peek, or await. https://docs.restate.dev/develop/ts/external-events

Idempotency key (Restate) — A request header that makes the invocation ID deterministic so retries attach to the same invocation and get its stored result. https://docs.restate.dev/services/invocation/http

Snapshot / trim — Periodic upload of a partition's RocksDB to object store, and truncation of the log below the durable LSN. https://docs.restate.dev/server/snapshots

Cluster controller — The admin-role component that places partition replica sets, picks leaders, seals and extends log chains, and triggers snapshots. https://docs.restate.dev/server/clusters

restate-lite — An embeddable single-process server with a local loglet and one partition, used by restate dev. https://github.com/restatedev/restate/tree/main/lite

B.3 Effect Cluster internals

Runner — A process that registers in cluster_runners, owns shards, hosts entities, and serves the runner RPCs (Ping, Notify, Effect, Stream, Envelope). E/cluster/Runner.ts, E/cluster/Runners.ts

Shard / shard group — One of 300 hash buckets per group; an entity's shard is hash(entityId) % 300 + 1. Groups restrict entity types to subsets of runners. E/cluster/ShardId.ts, E/cluster/ShardingConfig.ts

Hash ring assignment — Every runner computes shard placement locally from the runner table with a weighted consistent hash ring; there is no central shard manager in this snapshot. E/cluster/Sharding.ts

Runner storage / shard lock — acquire, refresh, release on a shard, implemented as Postgres or MySQL advisory locks, or a cluster_locks row with 35-second expiry. A lease, not a fencing token. E/cluster/RunnerStorage.ts, E/cluster/SqlRunnerStorage.ts

Entity — The actor primitive: a type plus an ID with an RPC group as its interface, one RPC server per resident ID, serialized by default, reaped after idle time. E/cluster/Entity.ts

Entity address / envelope — (entityType, entityId, shardId) plus the wrapped request, interrupt, or ack-chunk message. E/cluster/EntityAddress.ts, E/cluster/Envelope.ts

Message storage — The cluster_messages and cluster_replies tables (or an in-memory driver). Persisted requests deduplicate on entityType/entityId/tag/primaryKey; replies are unique per (request_id, kind). E/cluster/MessageStorage.ts, E/cluster/SqlMessageStorage.ts

Persisted vs volatile — A per-RPC annotation. Persisted requests go through storage (at-least-once); volatile ones go straight over the wire (at-most-once). E/cluster/ClusterSchema.ts

Uninterruptible / WithTransaction / ShardGroup / DeliverAt — RPC annotations controlling interrupt handling, running the handler inside the storage transaction, placement, and delayed delivery. E/cluster/ClusterSchema.ts, E/cluster/DeliverAt.ts

Storage poll — The owner's loop claiming unprocessed messages for its shards (UPDATE ... FOR UPDATE), with last_read reclaim after 10 minutes and deliver_at filtering. E/cluster/SqlMessageStorage.ts

Notify — Best-effort RPC telling an owner that a persisted message was written so it polls sooner. E/cluster/Runners.ts

Snowflake — A 64-bit time-ordered ID with a machine ID handed out by the runner table. E/cluster/Snowflake.ts

Singleton — An effect that runs on whichever runner owns the shard for its name. E/cluster/Singleton.ts

ClusterCron — Cron built from a singleton seed plus a self-rescheduling persisted run message. E/cluster/ClusterCron.ts

WorkflowEngine — The interface (register, execute, poll, interrupt, resume, activityExecute, deferredResult, deferredDone, scheduleClock) with an in-memory implementation and the cluster implementation. E/workflow/WorkflowEngine.ts

ClusterWorkflowEngine — Implements a workflow as entity type Workflow/<tag> with four persisted RPCs: run, activity, deferred, resume. E/cluster/ClusterWorkflowEngine.ts

WorkflowInstance — Per-run in-memory state (execution ID, scope, suspended, interrupted, abandoned, awaited and completed deferreds, activity state), rebuilt on every replay. E/workflow/WorkflowEngine.ts

Execution ID — sha256("<tag.length>:<tag>:<idempotencyKey(payload)>") truncated to 16 bytes; identical payloads always map to the same execution. E/workflow/Workflow.ts

Activity (Effect) — A named durable step whose result is memoized as the reply to the activity{name, attempt} request; runs on the owner runner. E/workflow/Activity.ts

Attempt — A counter bumped by Activity.retry, part of the dedup key so each retry is its own durable request. E/workflow/Activity.ts

DurableDeferred — A named external completion slot. Awaiting it suspends the workflow; completing it by token wakes it. E/workflow/DurableDeferred.ts

DurableClock — A sleep that is in-process under 60 seconds and a deliver_at message above it. E/workflow/DurableClock.ts

DurableQueue — A persisted queue plus a deferred, for handing work to external consumers at-least-once. E/workflow/DurableQueue.ts

Suspend / Suspended result — The workflow self-interrupts, a Suspended reply is stored, and the run message is marked processed until something resets it. E/workflow/Workflow.ts

Reset (clearReplies) — Deleting the run's exit reply and clearing processed and last_read so the storage poll redelivers the original run and the body replays. E/cluster/SqlMessageStorage.ts

SuspendOnFailure / CaptureDefects — References controlling whether failures become suspensions for manual resume, and whether defects are stored as results. E/workflow/Workflow.ts

Compensation — withCompensation registers finalizers on the workflow scope that run only if the final exit is a failure; rebuilt on replay. E/workflow/Workflow.ts

Abandon — Marking an instance as no longer owned (shard lost) so it skips parent resume and durable finalizers. E/cluster/internal/clusterAbandon.ts

WorkflowProxy — Generated RPC and HTTP groups (execute, discard, resume) exposing workflows to external callers. E/workflow/WorkflowProxy.ts

layerMemory / TestRunner / SingleRunner — The in-process engine, the all-in-memory cluster, and the one-process-plus-SQL cluster for tests and small deployments. E/workflow/WorkflowEngine.ts, E/cluster/TestRunner.ts, E/cluster/SingleRunner.ts

B.4 Shared vocabulary

Journal and replay — The technique all three use: record the results of non-deterministic steps, re-run the code, and substitute recorded results so the code reaches the same point without redoing side effects. https://docs.temporal.io/temporal#durable-execution

Determinism — The requirement that workflow code issues the same durable steps in the same order on every replay. Enforced by Temporal, detected by Restate, assumed by Effect. https://docs.temporal.io/workflow-definition#deterministic-constraints

Fencing token — A monotonically increasing value a writer must present so a stale owner's writes are rejected. Temporal's RangeID and Restate's leader epoch are fencing tokens; Effect's lease is not. https://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html

Transactional outbox — Writing the intent to perform a side effect in the same transaction as the state change, then having a separate consumer perform it. Temporal's task rows, Restate's actions-from-log, and Effect's persisted messages are all instances. https://microservices.io/patterns/data/transactional-outbox.html

At-least-once / at-most-once / exactly-once — Delivery guarantees. All three deliver durable steps at least once; only side effects inside the same database transaction (Effect's WithTransaction) are exactly-once. https://docs.temporal.io/activity-definition#idempotency

Push vs pull dispatch — Whether the engine calls user code (Restate; Temporal for Nexus and callbacks) or user code polls the engine (Temporal workers). Effect runs both in one process. https://docs.temporal.io/task-queue

Single-writer — At most one in-flight mutation per key or execution. Temporal: one Workflow Task at a time. Restate: exclusive handlers via the vqueue lock. Effect: entity concurrency. https://docs.restate.dev/foundations/handlers

Log-first vs database-first — Whether the authoritative record is an ordered replicated log (Restate, fireline, firegrid) or rows in a database with conditional writes (Temporal, Effect). https://docs.restate.dev/references/architecture