npm / @google/adk
@google/adk
What changed in @google/adk 2, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-19.
4 breaking1 security1 deprecations12 new APIs and options4 behavior and defaults32 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli init@google/adk 254 changes
Breaking changes 4
Code executors now run client-side code by default and match adk-python output.
Implicit Google API authentication now requires HTTPS.
Boolean nodes in JSON Schema are converted to object schemas.
Boolean branches in anyOf are converted to object schemas.
Security 1
Fetched agent card RPC URLs are pinned to the origin from which the card was fetched.
Deprecations 1
Custom metadata keys prefixed with __adk_internal_ are reserved for ADK; developers should avoid using them.
New APIs and options 12
Adds opt-in automatic session creation in the runner.
Adds DebugLoggingPlugin with full Python parity for developers who want debug logging through a plugin.
Adds ToolCallIntegrityPlugin with adk-python parity.
The code-execution skill is published on the agent card.
Ports the BasePlanner planner API.
Ports the BuiltInPlanner planner API.
customMetadata is declared for memory entries.
LlmAgent gains planner support, allowing developers to configure an agent with a planner.
The logger facade is exported from the @google/adk public API.
Ports the PlanReActPlanner planner API.
Adds a module aliasing ToolContext to Context.
Adds a toolset for Chrome WebMCP document.modelContext tools.
Behavior and default changes 4
ExampleTool examples are validated when the tool is constructed, surfacing invalid examples earlier.
Session metadata is attached to task, working, and input-required events.
ADK tracking headers are sent on MCP HTTP requests.
MemoryEntry.id is forwarded as the Vertex memoryId.
Fixes and other changes 32
Aborted invocations are sealed in session history.
Tool responses are normalized before afterToolCallback runs.
Base64 is decoded as UTF-8 in the browser.
In-memory artifact versions now have canonicalUri populated.
The sandbox name is persisted in the code execution context state delta.
Instruction strings containing ${...} and escaped braces are kept as literal text.
Planners now keep all leading parallel function calls.
llmRequest.model is set to the selected route model.
RoutedLlm.generateContentAsync now forwards abortSignal.
The call_llm span is ended in a finally block when runAsync exits early.
Runner now prefers an explicit appName over app.name.
VertexAiSessionService now gives Session.state a null prototype.
Partial chunks of a streamed response now share one event ID.
Falsy tool errors are preserved.
In SSE mode, the parent step loop stops after transfer_to_agent.
An explicit vertexai: false is respected even when enterprise environment variables are set.
Event listing now follows nextPageToken when retrieving a session.
Numeric log levels are mapped to Winston names.
Closes the Chrome reply envelope and prevents it from being shown.
An empty text part is rendered when a code execution result has no output.
Stringifies customMetadata values in GcsArtifactService.
Routes Gemini 3.x live audio by model family rather than the '-flash-live' spelling.
Emits one input transcription on Gemini 3.x Live.
Gemini 3.5 Live Translate is excluded from Gemini 3.x Live routing.
Keeps tool and code execution events in Memory Bank writes.
Fixes nested artifacts leaking versions into their parent.
Emits the body argument for a schema-less media type.
Scans every 2xx media type for the return schema.
Makes safeStringify total.
Closes the skill registry when the skill toolset closes.
Drops a null member from an enum when converting with toGeminiSchema.
Boolean branches in type arrays are converted to object schemas.