mrkeyoor.com_
Sun 04 Oct 06:23 UTC
Self-Hostedevaluationupdated 04 Oct 2026

incubator-seata review

Apache Seata keeps one business operation from ending half-finished when it changes data through several services or databases. A separate coordinator tracks the whole transaction while application-side managers and resource adapters commit or undo each branch. It supports AT, TCC, Saga, and XA, which trade code changes, isolation, lock time, and compensation work differently.

Verdict

Our Seata subproject run installed 766 packages in 13 seconds and built in 23 seconds, but no tests ran, so it proves the Saga designer compiles rather than the transaction platform. Seata deserves a trial when a Java estate needs one coordinator and a deliberate choice among 4 transaction modes. Skip it when a local database transaction, an outbox, or a smaller Saga library already covers the failure you have.

We ran it

Lab card: what happened when we ran incubator-seataScreenshot of incubator-seata (seata.apache.org)
Install✓ · 13s766 packages · 170 MB
Build✓ · 23s
Testsn/ano test script
Known vulns00 critical · 0 high · 0 moderate · 0 low (npm audit)
Repo4041 files~414,478 lines of source · 26.1 MB · 12 CI workflows

Answers from our run

Does incubator-seata build from source?

Dependencies installed in 13 seconds (766 packages), and the build succeeded in 23 seconds. We cloned commit 4d7ba2e into a clean Debian container with 3 CPUs and no project-specific setup.

Does incubator-seata have tests you can run?

Not through a standard command: the project exposes no test script or target that our harness could run.

Does incubator-seata have known vulnerabilities in its dependencies?

npm audit found none in the dependency tree at the time of our run.

Who should not use incubator-seata?

Applications that update one local database: the README's own example says the database can provide the transaction without Seata.

What are the alternatives to incubator-seata?

DTM, Eventuate Tram, Narayana. Our Seata subproject run installed 766 packages in 13 seconds and built in 23 seconds, but no tests ran, so it proves the Saga designer compiles rather than the transaction platform.

Setup2/5Designer builds quickly; production adds a coordinator and storage
Docs4/5Mode guides are detailed, though the README still shows version 2.5.0
Community5/526,011 stars, an October 4 push, and active issue and PR work
Maturity4/5Four transaction modes and v2.6.0 stable, still Apache incubating

Who it’s for

Java and Spring teams that need one transaction boundary across multiple databases or microservices.
Platform groups prepared to operate a transaction coordinator, registry, storage backend, and client configuration.
Architects who need a choice among automatic database rollback, business-level TCC, long-running Saga compensation, and XA.
Teams modeling Saga flows visually and storing their state machines as JSON.

Who it’s NOT for

Applications that update one local database: the README's own example says the database can provide the transaction without Seata.
Teams unwilling to run a separate coordinator and configure storage, service groups, XID propagation, and client data-source proxies.
Long-running workflows that require strict isolation while using Saga: Seata's Saga guide says that mode does not guarantee isolation.
Latency-sensitive systems planning to use XA without testing lock behavior: the XA guide says branches block after prepare and hold resources until commit or rollback.
Spring Boot services that require GraalVM native images today: open issue 8226 reports that seata-spring-boot-starter cannot yet build one.

Setup reality

Our sandbox installed 766 npm packages for the Saga state-machine designer in 13 seconds and used 170 MB. Its production build succeeded in 23 seconds. The package defines no test target, so tests were skipped; npm audit reported 0 known vulnerabilities across all severity levels.

Those results cover saga/seata-saga-statemachine-designer, not Seata's Java server or transaction engine. The full commit 4d7ba2e checkout contained 4,041 files, about 414,478 source lines, and occupied 26.1 MB. Our scan found 12 CI workflows, no Dockerfile, and no tests directory.

A real deployment adds the Seata coordinator plus client libraries in each business service. You must choose file, database, Redis, or Raft state storage, configure registry and storage endpoints with their credentials, propagate XIDs, and create the AT undo_log table when that mode is used. TCC and Saga also require business-owned confirm, cancel, or compensation behavior.

Four transaction modes solve different failure problems

Seata coordinates a global transaction made of branch transactions. A transaction manager opens and closes the global scope, resource managers register the branches, and a transaction coordinator records their status and drives commit or rollback. That structure addresses a concrete failure: an order service commits while inventory or account work fails in another database. If all writes live in 1 database, the README says its local transaction is enough.

The product decision starts with 4 modes. AT proxies JDBC data sources and writes rollback information alongside business data. TCC asks the service to implement Try, Confirm, and Cancel. Saga commits local steps and runs compensating actions after a later failure. XA delegates prepare, commit, and rollback to XA-capable resources. These options share a coordinator, but their behavior under locks, long-running work, and partial failure differs enough that a team cannot treat them as interchangeable configuration flags.

What happened when we ran it

Our sandbox entered saga/seata-saga-statemachine-designer at commit 4d7ba2e. Npm installed 766 packages in 13 seconds and consumed 170 MB on a fresh Debian container with 3 CPUs, 8 GB of RAM, Node 22, no secrets, and no elevated privileges. The production webpack build succeeded in 23 seconds, and npm audit found 0 known vulnerabilities at every reported severity.

The designer's package.json has start and build scripts but no test target, so our test step was skipped. We did not compile the Java modules, start a transaction coordinator, connect a database, or force a rollback. The result establishes that the version 3.0.0 visual Saga designer builds in that environment. It says nothing about transaction throughput, recovery time, database compatibility, or the correctness of a production compensation routine.

The full checkout held 4,041 files, about 414,478 lines of source, and used 26.1 MB before npm dependencies. Our scan counted 12 CI workflow files and reported no Dockerfile or tests directory. Seata's broader repository and documentation contain many Java tests and deployment material, but those were outside the npm target selected by this run. No Java test count or server build result should be inferred from the green 23-second designer build.

AT reduces application changes but adds rollback tables

AT is the first mode to test for conventional Java services using supported relational databases. A DataSourceProxy intercepts database work, stores an undo_log in the same local transaction as the business change, and checks a global lock. The second phase can commit asynchronously or use the saved log to compensate. A Spring service marks the boundary with @GlobalTransactional, which keeps business code closer to an ordinary local transaction.

That convenience moves work into the data layer. Every participating data source needs the proxy, AT databases need an undo_log table, and SQL plus schema compatibility must be checked against the version you deploy. Seata's current README still puts 2.5.0 in its Maven example, while GitHub lists v2.6.0 as the latest stable release. Pin the client and server together, then test the exact drivers, SQL shapes, and rollback cases used by your services.

TCC and Saga make compensation your code

TCC works above the database. Each business resource implements 3 operations: Try reserves the resource, Confirm completes it, and Cancel releases or reverses the reservation. This gives precise control and short resource-hold times, but it changes service interfaces and pushes idempotence, empty rollback, and hanging cases into the design. Use it when the business can define reservation semantics clearly, such as holding credit or stock before final confirmation.

Saga fits longer work and participants that cannot provide TCC's 3 methods. Each step commits locally, and a later failure runs compensation for completed steps. Seata's engine stores the workflow as JSON, and the visual designer we built imports and exports that state language. The official guide warns that Saga does not guarantee isolation. A compensation can restore a balance after failure, yet another process may observe the intermediate state before that repair happens.

XA keeps isolation and holds resources longer

XA uses the transaction protocol supplied by the participating database or resource. For an application, switching from AT mainly means using DataSourceProxyXA. The attraction is strong isolation without writing TCC handlers or Saga compensation graphs. The cost appears after XA prepare: the branch blocks and keeps transaction resources until the global decision reaches commit or rollback. Seata's guide describes the resulting lock cycle and performance as poor.

That makes XA a migration option for systems already designed around XA-capable databases, not a default simply because it sounds stricter. Test coordinator loss, database restart, network delay, and recovery of prepared branches. A 23-second JavaScript build offers no evidence for any of those paths. If lock duration threatens user traffic, AT or a business-level pattern may fit better, provided its weaker points are acceptable.

Production adds a coordinator, storage, and XID plumbing

The coordinator is a separate server. File storage is a standalone option, while database, Redis, and Raft modes change availability and recovery behavior. The deployment guide calls for 2 GB of heap and 1 GB of off-heap memory, then adds registry, storage, and client configuration. AT needs database tables, and every service boundary must carry the XID so branches join the same global transaction.

GitHub showed 26,011 stars, 796 open issues, 125 open pull requests, and a push on October 4, 2026. The latest stable release is v2.6.0 from January 28, while a v2.7.0 release candidate was published on September 6. That combination shows active development despite the 921-item combined queue. Seata is the serious choice when its coordinator and 4-mode design solve a known cross-service failure. Otherwise, the operational surface is larger than the transaction problem.

Alternatives

ProjectWhat it isPick it when
DTMA Go-based distributed transaction manager with Saga, TCC, XA, workflow, and messaging patterns.pick this instead when polyglot HTTP or gRPC services fit better than a Java-centered Seata integration.
Eventuate TramA Java framework for transactional messaging, outbox delivery, and event-driven microservices.pick this instead when asynchronous messaging and choreographed or orchestrated sagas are the design center.
NarayanaA Java transaction manager implementing JTA, JTS, Web Services transactions, and compensation APIs.pick this instead when standards-based JTA or XA inside a Java application server matters more than Seata's AT mode.

What people are saying

  1. [velocity-scout] apache/incubator-seata

Sources

  1. Apache Seata repository README
  2. Apache Seata v2.6.0 release
  3. Seata Saga State Machine Designer README
  4. Seata AT mode guide
  5. Seata TCC mode guide
  6. Seata Saga mode guide
  7. Seata XA mode guide
  8. GraalVM native image feature request 8226

More self-hosted reviews

awesome-cloudflare-selfhosted · life · AgentVerse-OS · DocsGPT · glances · lunel · the whole board →