
Google ADK review
Google's Agent Development Kit for building, testing and deploying agents in Python, TypeScript, Java and Go
Verdict
ADK is the most complete free toolkit from a large vendor: workflows, multi-agent delegation, tool confirmation, resumable runs, evaluations and a local dev UI, in Python, TypeScript, Java and Go. It is tuned for Gemini and Google Cloud, and other models go through LiteLLM or dedicated connectors.
Best for
Teams on Google Cloud, and teams that need the same framework in Python, Java, Go or TypeScript
Not for
Teams that want a framework with no lean towards one model vendor's cloud
Pros
- The same framework in Python, TypeScript, Java and Go
- Local web UI with event history, state inspection and a visual builder
- Tool confirmation and resumable runs built in, though confirmation is still experimental
- Evaluation tools for agent trajectories
Cons
- Tuned for Gemini, with other models through LiteLLM or connectors
- The web UI is for development only, and the visual builder is Python only
- Versions differ by language, and features land in Python first
Is Google ADK right for your project?
Describe what you need and AI will check the fit against this review.
Google ADK features and capabilities
Workflow runtime
A graph engine handles routing, fan-out, loops, retries and nested workflows, so fixed processes and free-form agents live in one app.
Multi-agent delegation
Agents hand tasks to specialist agents in a hierarchy, with structured results coming back to the parent.
Confirmation and resume
A tool call can wait for a person to confirm it, and resumable apps pick up after a dropped connection or crash instead of starting again.
adk web dev UI
A local browser UI lets you chat with agents, switch sessions, inspect state and events, and in Python sketch agents in a visual builder.
OpenTelemetry traces
Agent, model and tool spans follow the OpenTelemetry GenAI conventions, so they appear in Cloud Trace, Jaeger, Datadog or Langfuse.
- Any model providerWorks with OpenAI, Anthropic, Google and local models, not one vendor
- YesGemini first; others through LiteLLM, Claude and Ollama connectors
- Multi-agentSeveral agents can hand off or work together
- Yes
- MCP toolsCan use tools from MCP servers
- Yes
- Durable stateSaves progress so a run can resume after a crash or a pause
- YesResumable runs in Python and Kotlin; sessions in a database
- Human approvalCan pause for a person to approve or edit before continuing
- YesTool confirmation, still marked experimental
- TracingShows each step, tool call and token use
- YesOpenTelemetry to any backend
- Visual studioA UI to build, run or debug agents
- Yesadk web dev UI, with a visual builder in Python
At a glance
- Type
- Agent development kit
- Stack
- Python 3.11+ / TypeScript / Java / Go
- Databases
- PostgreSQL, MySQL, SQLite
- SSO
- No
- Roles and permissions
- No
- Audit logs
- No
Free vs paid editions
What you get when you self-host, and what needs a paid plan.
ADK is free under Apache 2.0 in all four languages, including the adk web dev UI, evaluation tools and the API server. Google charges for Agent Runtime on Google Cloud, which hosts ADK agents with managed sessions and memory, billed by vCPU and memory hours above a no-cost tier.
Self-hosting Google ADK
ADK for Python needs Python 3.11 or later. Running on Agent Runtime needs a Google Cloud project with billing enabled.
New cloud server to ready
1 min 17 s
Research task, median of 3
22.9 s, 349 MB peak
Version tested
2.12.0 · Oct 19, 2026
- Installing ADK with LiteLLM took 47 seconds in a fresh Python container and peaked at 349 MB.
- The first runs failed with No module named 'mcp': ADK's LiteLLM path to other providers imports the MCP package without installing it. Adding mcp to the install fixed it.
- ADK needs a runner and a session service even for one question, so the agent file is a little longer than the other Python agents. All three runs then passed in 21 to 30 seconds, at about $0.002 each.
# tools.py holds the shared web_search and read_page functions over Geekflare's APIs,
# common.py the model name, OpenRouter key, system prompt and task.
import asyncio
from google.adk.agents import Agent
from google.adk.models.lite_llm import LiteLlm
from google.adk.runners import InMemoryRunner
from google.genai import types
import tools
from common import KEY, MODEL, SYSTEM
model = LiteLlm(model=f"openrouter/{MODEL}", api_key=KEY, temperature=0, max_tokens=1024)
agent = Agent(name="researcher", model=model, instruction=SYSTEM, tools=[tools.web_search, tools.read_page])
runner = InMemoryRunner(agent=agent, app_name="research")
async def _run(task: str) -> str:
session = await runner.session_service.create_session(app_name="research", user_id="tester")
answer = ""
async for event in runner.run_async(user_id="tester", session_id=session.id,
new_message=types.Content(role="user", parts=[types.Part(text=task)])):
if event.is_final_response() and event.content and event.content.parts:
answer = "".join(p.text or "" for p in event.content.parts)
return answer
def run(task: str) -> str:
return asyncio.run(_run(task))Latest stable release: Scrapy 2.19.0, released September 10, 2026. GitHub marks it as "Latest."
Two notable changes:
- A new RemoteControl extension lets you inspect and control a running crawl over HTTP. The Scrapy MCP server uses it.
- The default priority queue is now DownloaderAwarePriorityQueue.
Sources: Release notes, Scrapy 2.19.0 docs and GitHub releases. I couldn't read the full release-notes text, so the changes come from search-result snippets.