Seata-go needs a Java TC, and v2.0.0 will not resolve as a module
Go Implementation For Seata
At a glance
- What is it?
- Seata-go is the Go client half of the Seata distributed transaction framework: it supplies the Transaction Manager and Resource Manager while the Java Transaction Coordinator is reused. The README is thin on configuration and the module history has a versioning gap worth knowing before you upgrade.
- Who is it for?
- Adopt Seata-go if you run Go microservices that must join transactions already coordinated by a Java Seata server, and you can accept an Apache incubating dependency with an RC for its newest tag. Do not adopt it for a Go only stack, since there is no Go TC in this repository.
- Can I use it commercially?
- Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 1 day ago.
- What is it written in?
- Mainly Go, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on November 7, 2026, and from our analysis. They are not legal advice.
Star history
- apache/incubator-seata-go1,745 ★ · +7
| Repository | 2026-10-17 | 2026-11-07 |
|---|---|---|
| apache/incubator-seata-go | 1.7k | 1.7k |
7 Stars in the last 21 days, measured from the daily GitHub snapshot. Compare with other projects
Editorial analysis
One coordinator in Java, two roles in Go
Seata-go does not implement the whole Seata architecture. The README is explicit about the split: the Transaction Coordinator is reused from Java, and the Transaction Manager and Resource Manager are implemented in Go and connected to Seata-java.
That is the single most important fact for anyone evaluating this project. A Go service can begin a global transaction, propagate it and report branch status, but it cannot do so on its own. You need a Seata server running, and it is the Java implementation. A team that decided to leave the JVM out of its stack is out of scope here.
The framing in the README is that Apache Seata is the de facto standard distributed transaction platform in the Java field, and seata-go is the Go implementation inside Seata's multilingual ecosystem, existing so Go services can interoperate with Java ones. That interoperability, not Go only support, is the pitch.
The last push was on 2026-10-15. The repository is not archived, and it carries the Apache incubator prefix in its path.
The XID is what makes a branch a branch
The three roles are conventional, but the data flow through them is the part worth being precise about.
The Transaction Manager defines the scope of a global transaction: it begins one, and it commits or rolls it back. The Resource Manager owns the resources a branch transaction works on; it registers the local transaction as a branch with the coordinator and then drives the branch commit or rollback. The Transaction Coordinator maintains the status of global and branch transactions and drives the global decision.
The lifecycle the README lays out has five steps. The TM asks the TC to begin a global transaction, and the TC generates an XID. That XID is propagated along the invocation chain through the microservices. Each RM registers its local transaction as a branch of the corresponding global transaction identified by that XID. The TM then asks the TC to commit or roll back the global transaction. Finally the TC drives every branch under that XID to finish.
A global transaction, in the README's definition, is made up of a batch of branch transactions, and a branch transaction is normally just a local transaction. The XID is the only thread connecting them, which means anything that drops it, from an uninstrumented HTTP call to a message consumer, quietly severs the transaction from its coordinator.
Installing the module, and the v2.0.0 gap
There is one documented install line.
go get seata.apache.org/seata-go/v2@latestThe README attaches a warning to it that is easy to miss and expensive to rediscover: v2.0.0 cannot be installed as a Go module because its go.mod does not declare the /v2 major version suffix. The recommendation is to use v2.1.0 or later. Anyone who pinned v2.0.0 from a pre-release announcement will hit a resolution failure rather than a helpful error.
The module path in go.mod is seata.apache.org/seata-go/v2, which matches the import path, and the declared language level is go 1.20.
For usage the README does not explain anything itself. It sends you to the Seata official website for the quick start and documentation, to docs/quickstart.md in the repository, and to apache/incubator-seata-go-samples for integration examples. Version discovery is handled the same way: look at the GitHub Releases page, where the latest tag is the latest stable version.
AT, TCC, XA and Saga in the repository topics
The repository topics list four transaction modes: at, saga, tcc and xa. The README does not walk through any of them, and it does not say which are fully implemented, which are experimental, or which require a matching Java server version. That gap is worth naming plainly, because choosing a mode is usually the first decision a team makes and the README will not make it for you.
What go.mod does show is the surface area around those modes. The dependency list includes a SQL parser from arana-db, CEL from google/cel-go, and a set of database drivers: go-sql-driver/mysql, pgx v5, and the SQLite driver mattn/go-sqlite3. Compression libraries pierrec/lz4/v4, dsnet/compress and golang/snappy are present, and etcd client and API v3 packages appear as direct requirements, which suggests coordinator interaction and possibly a registration or configuration backend rather than a pure in-process library.
Integration is not limited to plain HTTP. dubbo.apache.org/dubbo-go/v3, apache/rocketmq-client-go/v2 and gin are all direct dependencies, so XID propagation is expected across RPC frameworks and message queues, not only across an HTTP chain.
An Apache incubator project with a release cadence you can read
The release history is short enough to state. v2.0.0 was tagged on 2025-10-06, v2.1.0 on 2026-02-12, and v2.2.0-rc01 on 2026-10-09. An rc tag as the most recent entry is a signal to pin deliberately rather than to follow @latest blindly, especially given that the last stable line, v2.1.0, is the minimum the README tells you to use.
The project sits under Apache License 2.0, with the NOTICE file, DISCLAIMER, licenses/ directory and a.licenserc.yaml present in the tree.
The history section in the README traces the lineage rather than the roadmap: TXC from the Alibaba middleware team starting in 2014, published as GTS from 2016, Fescar open sourced from 2019, Ant Financial's XTS from 2007 and DTX on Ant Financial Cloud from 2013, then Fescar renamed to Seata after Ant joined. Useful context for judging maturity of the design; it says nothing about how complete the Go implementation is.
The repository also carries an integrate_test.sh script, a testdata/ directory and a makefile, which indicate that cross language integration is treated as a testable concern rather than an aspiration.
Editorial conclusion
Adopt Seata-go if you run Go microservices that must join transactions already coordinated by a Java Seata server, and you can accept an Apache incubating dependency with an RC for its newest tag. Do not adopt it for a Go only stack, since there is no Go TC in this repository. Before wiring it in, check the versions page against your Java server version, install v2.1.0 or later rather than v2.0.0, and read docs/quickstart.md, because the README itself points there rather than documenting configuration.
Frequently asked questions
Does Seata-go include a Transaction Coordinator, or do I need Java?
You need the Java side. The README states that the functions of the Transaction Coordinator are reused from Java, while the Transaction Manager and Resource Manager functions are implemented in Go and connected to Seata-java.
Which version of seata-go should I install?
Use v2.1.0 or later. The README notes that v2.0.0 cannot be installed as a Go module because its go.mod does not declare the /v2 major version suffix, and the install line given is go get seata.apache.org/seata-go/v2@latest.
Which transaction modes does Seata-go support?
The repository topics list at, saga, tcc and xa. The README does not document the implementation status of each mode, so the mode specific details have to come from docs/quickstart.md and the Seata official website.
How does the global transaction identifier reach other services?
The Transaction Manager asks the coordinator to begin the global transaction, the coordinator generates an XID, and that XID is propagated through the microservices invocation chain. Resource Managers then register their local transactions as branches under that XID.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/apache-incubator-seata-go)Star history chart for your README
[](https://hysenlabs.com/projects/apache-incubator-seata-go)Was this useful?