// the find
dtm-labs/dtm
A distributed transaction framework, supports workflow, saga, tcc, xa, 2-phase message, outbox patterns, supports many languages.
DTM is a standalone transaction-coordinator service (plus client SDKs for Go, Java, PHP, C#, Python, Node) that implements saga, TCC, XA, 2-phase message, outbox, and workflow patterns for eventual consistency across microservices. It's for teams doing distributed transactions across separate databases/services who don't want to write their own saga orchestrator from scratch.
It doesn't force you into one pattern — saga, TCC, XA, and outbox all live under the same server and API, so you can pick per use case instead of betting the whole system on one approach. The barrier/anti-suspension mechanism (dtmcli/barrier.go) handles the actual hard part of sagas — idempotency, null compensation, dangling rollback — rather than leaving that to the caller. Storage backend is pluggable (MySQL, Redis, BoltDB for local dev), so you're not locked into running a heavyweight dependency just to try it. Real production users (Tencent, Bytedance) plus CI, codecov, and a large test/ directory covering every transaction type across HTTP/gRPC/JSON-RPC suggest this has actually been hardened against edge cases, not just demoed.
You're introducing a new centralized coordinator that every participating service now depends on for consistency — that's a fresh single point of failure and a new piece of infra to run HA, exactly the kind of coupling distributed transactions are supposed to help you avoid. Compensating-transaction logic (TransOutRevert, etc.) still has to be written and tested per business flow by hand; DTM orchestrates the calls but gives you no help writing correct compensations. Documentation and most real examples lean toward the Chinese microservice ecosystem (go-zero, kratos, polarismesh) — outside that stack you'll be reverse-engineering behavior from the source more than the docs. The bundled Vue admin dashboard is shipped in the same repo but is barely documented, so it reads like an afterthought bolted onto the core project.