10xGraph vs Google ADK: Open-Source Alternative
In short10xGraph vs Google ADK compared with sources: API server, auth, thread isolation, replay-safe tools, sessions, and where ADK is the better pick.
- 6 min read
- 13 sections
- Updated
- v0.9.2
- Markdown
This page is written by the 10xGraph team, so read it with that in mind. Claims about ADK link to its documentation or package metadata, checked on 2026-10-06.
Google Agent Development Kit (ADK) is an Apache-2.0 licensed, code-first framework for building, evaluating and deploying agents (PyPI). It has Python, TypeScript, Java and Go variants, an adk api_server command and several deployment paths (API server docs, deployment docs). 10xGraph is a graph runtime that also generates a secured production server, in the open-source install, under the MIT license.
Production layer compared
The first rows are where the two differ most. Orchestration basics are at the bottom.
| Item | 10xGraph | Google ADK |
|---|---|---|
| Production server (REST, SSE, WebSocket) in the open-source install | Yes. 10xgraph api generates REST, SSE, WebSocket and realtime-audio endpoints from the compiled graph |
Yes, REST and SSE. adk api_server exposes session endpoints and /run and /run_sse (API server docs) |
| Auth (JWT or custom) | JWT ("auth": "jwt") or a custom BaseAuth subclass |
Not documented on the API server page (API server docs) |
| Authorization | Role scopes (such as graph:invoke, checkpointer:read) or a custom AuthorizationBackend |
Not documented |
| Thread ownership isolation | Built-in "authorization": "ownership" backend, with a two-tier cached owner check |
Not documented |
| Rate limiting | Memory or Redis sliding-window limits on the API, set in 10xgraph.json |
Not documented |
| Replay-safe tool calls after a crash | Tool ledger in the checkpointer: a tool that already ran is not executed again on resume. Needs a checkpointer | Not documented |
| Versioned (compare-and-swap) state writes | Optimistic version check on durable writes in PgCheckpointer |
DatabaseSessionService uses in-process locking, and row-level locking on PostgreSQL and MySQL, to prevent races (sessions docs) |
| Node and tool timeouts | node_timeout and tool_timeout, with defaults of 900 s and 300 s |
Not documented |
| Docker Compose and Kubernetes manifests | 10xgraph build --docker-compose --k8s writes Dockerfile, docker-compose.yml, k8s.yaml |
Documented deployment targets are Agent Runtime, Cloud Run, GKE and any container host (deployment docs) |
| License | MIT, including API/CLI and client | Apache-2.0 (PyPI) |
| TypeScript | Typed 10xgraph-client for the 10xGraph API |
ADK for TypeScript, an agent framework for Node.js and browsers, Apache-2.0 (adk-js). It is a framework, not a client for a Python server |
| Model providers | OpenAI, Anthropic (direct, Vertex AI, Bedrock), Google (Gemini, Vertex AI), OpenAI-compatible endpoints | Gemini first-party, plus OpenAI, Anthropic and others through LiteLLM (LiteLLM docs) |
| Orchestration | Typed StateGraph with conditional edges and sub-graphs |
SequentialAgent, ParallelAgent and LoopAgent workflow agents (workflow agents docs) |
| Sessions and persistence | InMemoryCheckpointer, PgCheckpointer (Postgres plus Redis), SQLite, keyed by thread_id |
InMemorySessionService, VertexAiSessionService, DatabaseSessionService for PostgreSQL, MySQL and SQLite (sessions docs) |
| Python version | 3.12 or newer | 3.10 or newer (PyPI) |
Why teams choose 10xGraph over ADK
- Auth and isolation are generated. The
adk api_serverpage documents session and run endpoints but no authentication (API server docs). 10xGraph’s production template turns on JWT auth, owner-only threads and a Redis rate limit in10xgraph.json. - Side effects survive crashes. 10xGraph’s tool ledger skips tools that already ran when a run resumes. See replay-safe tools.
- Compare-and-swap on durable writes.
PgCheckpointerchecks a state version on write and guards the Redis cache write by version, so a stale run cannot overwrite a newer one. - Deploy files for two targets.
10xgraph build --docker-compose --k8swrites the files you would otherwise write by hand.
A support agent in 10xGraph on Gemini
from tenxgraph.prebuilt.agent import ReactAgent
from tenxgraph.storage.checkpointer import InMemoryCheckpointer
def lookup_order(order_id: str) -> dict:
"""Return status and total for an order."""
return {"order_id": order_id, "status": "delivered", "total": 59.0}
def refund_order(order_id: str, amount: float) -> str:
"""Refund part or all of an order."""
return f"Refunded {amount} on {order_id}"
agent = ReactAgent(
model="google/gemini-2.5-flash", # add use_vertex_ai=True to route through Vertex AI
provider="google",
system_prompt=[{"role": "system", "content": "You are a support agent. Confirm the order before refunding."}],
tools=[lookup_order, refund_order],
)
app = agent.compile(checkpointer=InMemoryCheckpointer())The model string selects the provider, so the same graph and tools can run on another provider by changing the string and installing its extra. See the Google provider docs for Vertex AI configuration. For the ADK version, see ADK’s documentation.
Workflow patterns
ADK’s workflow agents run sub-agents in sequence, in parallel or in a loop (docs). The 10xGraph equivalents use graph primitives:
| ADK pattern | 10xGraph equivalent |
|---|---|
SequentialAgent |
add_edge("A", "B"); add_edge("B", "C") |
ParallelAgent |
Two nodes that both write to state, joined by a fan-in node |
LoopAgent |
A self-looping node plus recursion_limit in the invoke config |
| Sub-agents and transfer | Router node plus create_handoff_tool |
Sessions and threads
ADK keys conversations by session. 10xGraph keys them by thread_id with a checkpointer:
from tenxgraph.core.state import Message
from tenxgraph.storage.checkpointer import PgCheckpointer
checkpointer = PgCheckpointer(
postgres_dsn="postgresql://user:password@localhost:5432/agents",
redis_url="redis://localhost:6379/0",
)
checkpointer.setup()
app = agent.compile(checkpointer=checkpointer)
app.invoke(
{"messages": [Message.text_message("Where is my refund for order A-1042?")]},
config={"thread_id": "user-42"},
)Serving as an API
pip install 10xgraph 10xgraph-api google-genai
10xgraph init --yes --template production --auth jwt --rate-limit redis
10xgraph api --host 0.0.0.0 --port 8000
10xgraph build --docker-compose --k8sEndpoints include POST /v1/graph/invoke, POST /v1/graph/stream (SSE), a WebSocket endpoint and thread state endpoints. The server is a container you can run on Cloud Run, GKE or any other host.
TypeScript client
import { AgentFlowClient, Message, StreamEventType, bearerAuth } from "10xgraph-client";
const client = new AgentFlowClient({
baseUrl: "http://127.0.0.1:8000",
auth: bearerAuth(token),
});
for await (const chunk of client.stream(
[Message.text_message("Where is order A-1042?")],
{ config: { thread_id: "ts-stream-1" } },
)) {
if (chunk.event === StreamEventType.MESSAGE && chunk.message) {
process.stdout.write(chunk.message.text());
}
}Migrating from Google ADK
LlmAgent(model=..., instruction=..., tools=[...])becomesAgent(model="google/gemini-2.5-flash", system_prompt=[{"role": "system", "content": ...}], tool_node="TOOL"), orReactAgentfor a tool-calling loop.- Tool functions go into
ToolNode([fn]). SequentialAgentbecomes a chain ofadd_edgecalls,ParallelAgentbecomes fan-out and fan-in nodes, andLoopAgentbecomes a self-loop withrecursion_limit.- A session service becomes a checkpointer (
PgCheckpointer, orInMemoryCheckpointerfor development) plusthread_idin the config. - Deployment becomes
10xgraph apior the generated container files. Keep the Google provider configuration and route it through Vertex AI withuse_vertex_ai=True.
Where Google ADK is the better choice
- You are invested in Google Cloud. ADK documents Agent Runtime, Cloud Run and GKE deployment, and a Vertex AI session service (deployment docs, sessions docs). 10xGraph has no managed Google runtime.
- You want a managed agent runtime. Agent Runtime is a managed, auto-scaling service for ADK agents (deployment docs).
- You want the same framework in several languages. ADK documents Python, TypeScript, Java and Go variants (API server docs). 10xGraph’s core is Python only.
- You need Python 3.10 or 3.11. 10xGraph requires 3.12 or newer.
Weak spots of 10xGraph
- Smaller community and fewer integrations.
- Pre-1.0: pin versions and read changelogs before upgrading.
- Renamed from Agentflow, so the 10xGraph name has little search history yet.
- No Google-managed runtime or visual tooling. The playground is a test chat.
- Code-first only, and Python 3.12 or newer.
Sources
Verified on 2026-10-06.
- google-adk on PyPI (license, Python version)
- ADK API server
- ADK deployment
- ADK sessions
- ADK workflow agents
- ADK with LiteLLM
- ADK for TypeScript
Next steps
Frequently asked questions
- Does 10xGraph support Vertex AI as well as Google AI Studio?
- Yes. The 10xGraph Google provider supports both the Gemini API and Vertex AI. Switch with use_vertex_ai=True on the Agent or the GOOGLE_GENAI_USE_VERTEXAI environment variable. See the providers/google docs for the configuration.
- Can I run 10xGraph on Google Cloud Run or GKE?
- Yes. The API server is a standard Python ASGI app, and 10xGraph build generates a Dockerfile, a Docker Compose file and a Kubernetes manifest. Package it and deploy it on Cloud Run, GKE or any Kubernetes cluster.
- Does 10xGraph have anything like ADK's SequentialAgent, ParallelAgent and LoopAgent?
- These patterns are graph primitives in 10xGraph. Sequential is a chain of edges, parallel is a fan-out and fan-in, and a loop is a self-edge capped by recursion_limit.
- Is ADK limited to Gemini?
- No. ADK documents LiteLLM integration for models from other providers such as OpenAI and Anthropic, alongside first-party Gemini support. 10xGraph also supports several providers behind one model string.
- Is 10xGraph free for commercial use?
- Yes. 10xGraph, including the API server, CLI and TypeScript client, is MIT-licensed. ADK is Apache-2.0 licensed per its PyPI metadata.