PermissiveApache-2.0Tested by Geekflare

Google ADK review

Google's Agent Development Kit for building, testing and deploying agents in Python, TypeScript, Java and Go

Data refreshedMethodologyHow we tested
Director of Geekflare

Rity Anand is a director of Geekflare. She has extensive experience managing business technology and a special interest in emerging technologies.

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
Ask Sparkian

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.
agent.py, after pip install google-adk litellm mcp httpx
# 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))
Agent's answerPassedRun 2 of 3 · 22.9 s · $0.0026
Asked: What is the latest stable release of Scrapy, when was it released, and what are two notable changes in it? Use the tools, cite the release notes URL, and answer in under 120 words.

Latest stable release: Scrapy 2.19.0, released September 10, 2026. GitHub marks it as "Latest."

Two notable changes:

  1. A new RemoteControl extension lets you inspect and control a running crawl over HTTP. The Scrapy MCP server uses it.
  2. 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.