mrkeyoor.com_
Wed 16 Sept 10:17 UTC
Automationevaluationupdated 26 Aug 2026

temporal review

Temporal is a durable execution server for application workflows that must survive process crashes, network failures, retries, and long waits. Developers write workflow and activity code with a language SDK, run their own workers, and let the server persist event history and coordinate the next task.

+157stars / 7d
Verdict

Our Temporal build took 278 seconds, and 13 of 15 test targets passed before two PostgreSQL CLI tests failed, so source contributors should expect a large server with persistence-sensitive tests. Temporal is worth the conceptual and operating cost when a failed business process cannot simply be restarted from step one. For ordinary background jobs, use a queue; for long-lived, retry-heavy application state, Temporal is one of the safest default evaluations.

We ran it

Lab card: what happened when we ran temporalScreenshot of temporal (docs.temporal.io)
Install✓ · 76s467 packages
Build✓ · 278s
Tests✗ · 468s13 passed · 2 failed of 15 (go test)
Repo3835 files~1,012,819 lines of source · 39.9 MB · 20 CI workflows · tests dir

Answers from our run

Does temporal build from source?

Dependencies installed in 76 seconds (467 packages), and the build succeeded in 278 seconds. We cloned commit 6805cae into a clean Debian container with 3 CPUs and no project-specific setup.

Do temporal's tests pass?

Not all of them: 13 of 15 passed and 2 failed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use temporal?

Simple cron jobs or short queues whose failure recovery is already obvious: Temporal adds a server, SDK workers, task queues, histories, and replay rules.

What are the alternatives to temporal?

Cadence, Restate, Inngest. Our Temporal build took 278 seconds, and 13 of 15 test targets passed before two PostgreSQL CLI tests failed, so source contributors should expect a large server with persistence-sensitive tests.

Setup2/5Easy dev server, demanding production cluster and replay model
Docs5/5Deep guides for concepts, SDKs, operations, and architecture
Community5/5Daily development and active operator reports across SDKs
Maturity5/5Established durable engine with cloud and self-host paths

Who it’s for

Product teams building multi-step processes that may run for minutes, days, or months.
Engineers replacing hand-written retry tables, state machines, and recovery jobs inside application code.
Organizations that can operate a persistent service and worker fleet or pay for Temporal Cloud.
Teams willing to keep workflow code deterministic and make retryable activities idempotent.

Who it’s NOT for

Simple cron jobs or short queues whose failure recovery is already obvious: Temporal adds a server, SDK workers, task queues, histories, and replay rules.
Developers unwilling to separate deterministic workflow code from side-effecting activity code: the architecture document makes that split a core design requirement.
Self-hosters without database and service ownership: the cluster has Frontend, History, Matching, internal workers, persistence, and operational configuration.
Teams expecting application code to run inside this server repository: the README says user Workflows, Activities, and Workers use separate language SDKs and run in user-owned processes.
Replication operators who cannot test security upgrades before rollout: release v1.31.2 changes streaming authorization and documents an opt-out with security implications.

Setup reality

Our run at commit 6805cae installed 467 Go packages in 76 seconds. The server build passed in 278 seconds. Tests ran for 468 seconds: 13 passed and 2 failed out of 15, ending in tools/tests inside PostgresqlSuite; the supplied log tail does not show the underlying assertion.

A local trial is easier than a production cluster: install the Temporal CLI, run temporal server start-dev, then start sample workers from a language SDK. Real applications need worker processes, namespaces, task queues, retention choices, and client connection settings.

Self-hosting adds a supported persistence database, schema management, visibility, TLS and authorization, monitoring, backups, and upgrade planning. Temporal Cloud removes much of the server operation, but teams still own worker deployment and deterministic workflow changes.

Temporal persists progress as workflow history

Temporal records an append-only event history for each workflow execution. A worker replays that history through workflow code to rebuild state, then emits commands for the next timer or activity. If the worker disappears, another can continue from the recorded history. The server does not run arbitrary application functions itself. It coordinates tasks and stores enough state for user-hosted workers to resume them.

That model suits payment lifecycles, provisioning, order fulfillment, and other processes where partial completion matters. Our checkout contained about 1,012,819 source lines across 3,835 files, which reflects how much machinery sits below the SDK surface. The benefit is removing custom retry columns and recovery daemons from each product team. The cost is learning Temporal's execution rules and operating a system whose job is to preserve application progress.

Workflow code must replay to the same decisions

Temporal separates workflow definitions from activities. Workflow code coordinates and waits. It must be deterministic because the SDK may replay old events through newer code. Activities perform database writes, API calls, and other side effects. Since an activity can be retried, the architecture guidance says it should be idempotent or explicitly non-retryable. This is a programming model, not an annotation added after ordinary background code is written.

Versioning deserves design work before the first major workflow change. A deployment may have executions started under older logic while new workers run different code. With 467 Go packages installed in our server build, repository contributors face a large Go system, but application developers mainly face their chosen SDK and its replay checks. Teams should place business decisions in workflows, side effects in activities, and test histories from production-compatible versions during changes.

What happened when we ran it

We cloned commit 6805cae into an unprivileged Go 1.24 Debian container with 3 CPUs, 8 GB of RAM, and no secrets. The 39.9 MB checkout had 3,835 files and about 1,012,819 source lines. The repository included 20 CI workflow files and a tests directory. It did not have a root Dockerfile. The harness evaluated dependency installation, the server build, and the configured Go test targets.

Go dependency installation succeeded in 76 seconds and brought in 467 packages. The build completed in 278 seconds. Tests ran for 468 seconds and ended with exit code 1: 13 passed and 2 failed out of 15. The final lines show go.temporal.io/server/tools/tests.(*PostgresqlSuite).TestPostgreSQLConnTestSuite and a stack through testify/suite, followed by package failure.

The provided log tail does not contain the failed assertion, database error, or connection message. It would be guesswork to blame missing PostgreSQL, permissions, or server code from that fragment alone. We can say the measured suite was mostly successful and its two failures were in the PostgreSQL CLI test package. Contributors should reproduce that target with the repository's documented test services before deciding whether the container or code caused it.

A local dev server hides the production topology

The README's first run is pleasantly short: install the Temporal CLI and start its development server. Sample workers in Go or Java can then connect, and a web interface appears on the documented local port. This is enough to learn workflow, activity, signal, query, and retry behavior without building the server from source. Most application developers should start there or use Temporal Cloud.

Self-hosting means operating Frontend, History, Matching, and internal worker services with persistence underneath them. History shards own workflow executions. Matching holds task queues polled by SDK workers. Release and database schema upgrades need an order, while namespaces, retention, visibility, TLS, authorization, metrics, and backups need explicit policy. Our 278-second source build says little about that operational work; a failure drill and restore test say much more.

Persistence behavior is the operational risk

Temporal's value depends on its history and current-execution records remaining consistent. Issue 10841 reports a Cassandra deployment where an orphaned current-execution pointer caused SignalWithStart calls for one workflow ID to hit client deadlines indefinitely. An administrative deletion cleared the pointer in that report. The issue concerns an unusual corrupt state, yet it shows why persistence repair, compaction, backups, and admin tooling belong in a self-hosting plan.

PostgreSQL operators have different edges. Issue 11780 says the auto-setup template does not expose connection attributes for PostgreSQL, including a connection timeout, and describes a reconnect hanging while holding a shared database handle. Our own 2 failed targets were also in a PostgreSQL test package, though the log does not connect them to that issue. Search the tracker by database and pinned server version rather than treating the combined 930 issues and pull requests as a defect count.

Current security releases need careful rollout

Release v1.31.2 was published on July 8, 2026, and addresses CVE-2026-5724 in replication streaming authorization. The release warns that replication users may see connection errors and provides a dynamic-config opt-out, while noting the security implications of using it. Multi-cluster operators should test the authorization path and avoid copying an opt-out into permanent configuration just to finish an upgrade.

GitHub recorded a push on August 26, 2026, with issue activity the day before. The server is active even though the latest tagged release was several weeks earlier. Temporal remains the right shortlist choice when durable state is the requirement and teams accept deterministic workflows, idempotent activities, and worker operations. If a task can safely start over, a normal queue will be cheaper to learn and run.

Alternatives

ProjectWhat it isPick it when
CadenceUber's durable workflow orchestration platform and the project from which Temporal originated.pick this instead when an existing Cadence estate, SDK choice, or operating experience outweighs Temporal's ecosystem.
RestateA durable execution system built around services, handlers, durable promises, and stateful coordination.pick this instead when Restate's service-oriented programming model fits better than replayed workflow definitions.
InngestAn event-driven workflow platform for background functions with retries and step state.pick this instead when event-triggered application functions and a lighter adoption path matter more than Temporal's server model.

Sources

  1. Temporal repository and README
  2. Temporal server architecture
  3. Temporal v1.31.2 release
  4. Issue 10841 on an orphaned execution pointer
  5. Issue 11780 on PostgreSQL connection attributes

More automation reviews

goldie · TikTokDownloader · goreleaser · obscura · ios_rule_script · background-agents · the whole board →