Repository navigation
Releases: google/adk-kotlin
Releases · google/adk-kotlin
Release list
v1.5.0
1.5.0 (2026-10-28)
Features
- add
CHATandSINGLE_TURNmodes toLlmAgent(cefb13b) - add
TASKmode toLlmAgent(8dc2f62) - add CompletableFuture wrappers for the session, artifact, and memory services (2f50281)
- add isolation scopes for agents (7bc2057)
- add NodeInfo.name, runId, and parentRunId, and Event.nodeName (408f038)
- add parallel worker fan-out to workflow nodes (282c68a)
- auth: add an internal serializer for API key and HTTP credentials (a8ee84c)
- auth: add AuthConfig (c01be47)
- auth: add AuthScheme with API key and HTTP schemes (855aed0)
- auth: add EventActions.requestedAuthConfigs (9a43913)
- auth: add the OAuth2 scheme (68d89e7)
- auth: add the OpenID Connect schemes (d93eb79)
- auth: derive a credential key when none is given (3855a99)
- Expand BigQueryAgentAnalyticsPlugin to support full agent execution lifecycle logging (0ba6825)
- firebase: bump Firebase BOM to 35.0.2 (firebase-ai 18.0.0) and add ADK usage label (4426528)
- follow
transfer_to_agenthandoffs as workflow nodes (8058f6d) - keep a node agent's history to its own node path (7e4ee2d)
- let a typed node ask the user to approve a run (b565666)
- let a typed workflow node body ask for human input with requestInput (af8ad2c)
- live: add RunConfig.saveLiveBlob to record live audio as artifacts (29694fa)
- live: add Runner.runLive, the public entrypoint (79396fa)
- live: decode live client frames and encode live events (d8ef5d8)
- live: deliver a streaming tool's Events to the caller only (0ee2f30)
- live: persist user turns and resume live runs across connections (f18c62c)
- live: record a final answer for each stream that ends (ec60fae)
- live: run SequentialAgent in live mode (c65cc1b)
- live: stop a streaming tool when the model calls stop_streaming (ae938af)
- live: stream a repeated tool call once (0355356)
- live: stream a run to Java with PublisherRunner.runLive (bc40fdd)
- live: stream results from tools that return a Flow (3f1afd0)
- live: support transfer_to_agent in live runs (2a087fd)
- move BigQuery agent analytics to its own integrations-bigquery module (5383188)
- reject a workflow node output that has no JSON form at the node (c40cc40)
- replay finished workflow children when a node retries (7b26476)
- run a parentless
LlmAgentworkflow node as a single turn (ae85023) - run a root
LlmAgentpassed as a node as a workflow node (7c696c4) - run a single-turn
LlmAgentnode without history by default (d6559ae) - schema: read schema values as JSON and check schema compatibility (e7e9541)
- sessions: add an optional read cache to BufferedSessionService (34f0016)
- sessions: add BufferedSessionService to persist session writes in the background (1fc0124)
- typed workflow node outputs travel as JSON, with Context.setOutput (8b21add)
- types: add Schema.additionalProperties (5381372)
- workflow: check workflow edges by assignability (f5c25d9)
- workflow: hand on the checked value of custom node, join, workflow and state schemas (a13dd8d)
- workflow: Java interop for FunctionNode (1955435)
- workflow: make a returned Content a function node's output and reject other output paths (32a7482)
- workflow: read resume answers as JSON (5c07112)
- workflow: read typed node ports as JSON with quoted literals only (9a03757)
Bug Fixes
- bump google-genai-kotlin to 1.7.0 (69f6096)
- bump LiteRT-LM to 0.16.1 and support 0.15 through 0.18.1 (60c4527)
- drop a delegating node's own output, as adk-python does (445f3a1)
- extend tracking headers on Vertex AI OpenAI-compatible and Claude calls (7e60b20)
- fail Chat Completions streams cut mid-body (2924f6f)
- hold the retry limit when another callback answers the error (d89b915)
- keep a function response out of a paused task's scope (60bedcd)
- keep model output out of LlmAgent's outputSchema mismatch log (bd056b2)
- keep temp: state for the rest of an invocation in workflows (a995844)
- live: run before-model callbacks on speech before after-model callbacks can transfer (ec8c9a1)
- live: screen the user's speech before any tool call runs (b55f16d)
- live: start no stream answered alongside a handover (d595404)
- make the experimental Workflow.runAsync internal so workflows run only through a Runner (d9dfe23)
- never retry a WorkflowConfigurationException (7b80a90)
- omit caller values from artifact and Vertex AI ...
v1.4.0
1.4.0 (2026-10-14)
Features
- accept workflow node groups as varargs in the edges builder (5578be3)
- add a Kotlin DSL for building workflow graphs (1feff45)
- add Anthropic Claude model backend (4e07995)
- add chain(...) to the workflow edges DSL, and Kotlin workflow graph examples including ports of adk-python's workflow samples (5f72bb8)
- add Chat Completions model backend (af736a7)
- add dynamic node dispatch via Context.runNode to workflows (cffe728)
- add Environment interface (762da2f)
- add EnvironmentToolset for file I/O and command execution (240e28b)
- add extended thinking, image input, prompt caching, and structured output to Claude (5046161)
- add FinishReason.TOO_MANY_TOOL_CALLS (8ac466b)
- add FunctionNode and the node(...) factory for typed workflow steps (d6ab0e3)
- add GlobalInstructionPlugin to give every agent an app-wide instruction (ea17a82)
- add Java ports of the workflow graph examples (cc23c02)
- add JVM LocalEnvironment implementation (94a6dbe)
- add parallelNode workflow nodes that fan out over list inputs (a86f913)
- add ReflectAndRetryToolPlugin to retry failed tool calls with reflection guidance (081ea5d)
- add resume, rehydration, and human-in-the-loop input to workflows (d454827)
- add SaveFilesAsArtifactsPlugin to save uploaded files as artifacts (040f602)
- add Vertex AI backend for the Claude model (0f4ef3b)
- auth: add AuthCredential with API key and HTTP credentials (32b78f6)
- auth: add Secret and the experimental auth opt-in annotations (a24edbc)
- auth: add the OAuth2 credential (e878e5c)
- auth: add the service account credential (83be43d)
- draw workflow graphs in the Dev UI (7b5e4b4)
- events: add live session fields to Event (20bdd4d)
- infer workflow schemas from Kotlin types through their serializers, and persist Content in workflow outputs (1ffee7f)
- live: add a Java-interop builder for LiveRequest (aefdbba)
- live: add live server fields to LlmResponse (da3eb68)
- live: add the live connection interfaces and request queue (6450f67)
- live: implement live connections on Gemini (0015305)
- live: let Java models implement live connections (d6fbe1f)
- live: run a live conversation on an agent, from queue to caller's events (9ddab7f)
- live: trace live history seeding in a send_data span (621a6ed)
- load apps, agents and workflows through the new AppLoader and InMemoryAppLoader; deprecate AgentLoader (469288c)
- make workflows, the edges DSL, node config and a Java node base class available to Java callers (a973bdf)
- mcp: add shared JVM and Android MCP toolset (ff010b6)
- port adk-python's state, node_output and retry workflow samples, and build the workflow examples from function nodes (1a9de8c)
- retry: add RetryPolicy and ExponentialBackoff (a8e5bb3)
- run skill scripts in an Environment via SkillToolset (df8c670)
- runners: flush buffered session writes before final responses and at the end of each run (d49ead0)
- serve an app's structure, including workflow graphs, to the Dev UI (fe051b4)
- sessions: add OrderedEventWriter, which writes one session's events in order (8731464)
- sessions: add SessionService.flush for services that buffer writes (49dcf35)
- sessions: add SessionWriteBuffer, which buffers the writes of many sessions (ffb8b5b)
- upgrade Ktor to 3.6.0 and google-genai-kotlin to 1.6.0 (75619d3)
- webserver: flush buffered session writes on shutdown and after seeding a session (4035d0a)
- webserver: refresh the bundled Development UI to adk-web 1.0.7 (89c796c)
- webserver: serve the development endpoints under the /dev/apps prefix (2808a6b)
Bug Fixes
- a2a: skip an unconvertible remote A2A part instead of failing the turn (377d21b)
- agents: route only model failures to onModelError (9ed4244)
- apply edge styles in the event graph's DOT source (043e3a1)
- close the tools of workflow nodes when a runner closes (7bb7b7c)
- core: keep an event's id when an onEvent plugin replaces it (f899671)
- emit events for model responses carrying only an error code or grounding metadata (195cb88)
- end a turn on set_model_response only when ADK's own tool validated it (ba1a880)
- honor workflow-context interrupts in runNode, validate run IDs on every dispatch path, and rename WorkflowConfigurationError to WorkflowConfigurationException (d1c0a00)
- mcp: skip MCP server tools that reuse ADK's own tool names (efbd4f7)
- reject the default route sentinel as a Route.Tag value (3492476)
- replay stored live transcriptions and narrate live events as context (3ecb554)
- resolve function responses to their invocation on workflow node roots ([a76dc4c](a76dc4...
v1.3.1
v1.3.0
1.3.0 (2026-10-02)
Features
- core: add @ExperimentalLiveApi opt-in marker (bd44d44)
- default Event.author to an empty string (c6dfd80)
- resume Gemini 4 Argon generations paused with a continuation token (4247201)
- retry transient failures in the clients Gemini builds (d1146cc)
Bug Fixes
- accept snake_case spellings for every EventActions property (296ac5c)
- core: keep one event id across the chunks of a streamed reply (a320392)
- keep a differently cased user turn out of the context cache (4322839)
- never send empty contents after applying a context cache (5fb949c)
- record the last emitted model event id on the call_llm span (efd571b)
- record the thinking level on the call_llm telemetry span (9206972)
- use the server-reported context cache expiry (6d9a622)
- wrap ReflectiveTools results under "result" to match KSP @tool tools (87e1030)
Reverts
- keep one generated id per streamed function call (75b6298)
v1.2.0
1.2.0 (2026-09-28)
Features
- accept a session initialization body when creating a session (79d07e0)
- accept Context as a @tool injected parameter (07f3d04)
- accept snake_case and camelCase in web server request bodies (94dcdd1)
- accept snake_case names and fractional-second timestamps when decoding events (8500c42)
- add a client-side Vertex AI RAG retrieval tool (2ac2835)
- add a setting for enforcing camelCase spelling for webserver (0e9de9d)
- add an identity processor that tells the model the agent's name (894e56f)
- add BaseTool.asNode to run a tool as a workflow node (d74d83c)
- add input, output, and state schemas to workflow nodes (bdf576c)
- add JoinNode to join parallel workflow branches (86b1a73)
- add node retry policies and timeouts to the workflow engine (084e102)
- add Spring AI ChatModel adapter (SpringAiModel) (393919e)
- add Spring AI tool bridge (SpringAiTool) (7834dd0)
- add the experimental workflow graph structure (5c3d97d)
- add the experimental workflow scheduler and runtime (3ee51c3)
- add the workflow single-node runner and node execution context (c71629e)
- add toBuilder() to data classes with Java builders (db703e7)
- added agents.md and useful skill (77623f7)
- allow a Node to be an application root, deprecating the agent field (8bf96f0)
- expose MCP tool annotations as an SDK-agnostic data class (e0b109a)
- introduce experimental workflow event seams (183a212)
- introduce the experimental Node and BaseNode workflow abstractions (146b779)
- live: add the live conversation types and their Gen AI SDK converters (a5900c6)
- mark the app-info endpoint experimental (eca8b55)
- record a @tool's source class and method in its generated metadata (ce6bc85)
- report every LLM agent from the app-info endpoint (5ab36b4)
- run any workflow Node as an invocation root (84b234c)
- upgrade the GenAI SDK to 1.1 and map additional SDK fields in ADK Kotlin and Firebase (c15bc0c)
- validate workflow graphs at construction time (9d585be)
Bug Fixes
- align getEvents(currentBranch) with the reference branch-scoping rule (1f83223)
- allow a text instruction together with staticInstruction (1d03c68)
- answer 400 rather than 415 for an empty request body (a43fe9e)
- answer 400 when a request sends no body and no Content-Type (4284355)
- answer 422 when a request body parses but does not match the endpoint (61838c1)
- apply temp-prefixed session state to the live session without persisting it (254d05b)
- apply Vertex session state only after the remote append succeeds (1bc97e4)
- count tool call and response payloads in the prompt token estimate (498a938)
- emit an SSE error frame when a run fails after the stream opens (4cd9aea)
- fire every default route edge of a workflow node (a1061ae)
- give each streamed model event its own EventActions snapshot (56b5ced)
- give tool response events the id recorded on their execute_tool span (20a91dd)
- honor the
StreamableHttpurl path instead of always sending requests to<host>/mcp(a0f51a0) - keep one generated id for a function call streamed over several chunks (e1aa212)
- key the LiteRT-LM conversation cache on system instruction and tools (5cea50f)
- measure the compaction token threshold against the agent's own prompt (772b2e5)
- render null state values as empty strings in instruction placeholders (e73dd23)
- require an artifact service for artifact placeholders in instructions (ebd4e4b)
- require opt-in for every workflow member of Node (21c967f)
- restore the 1.1.0 constructor parameter order of App and InvocationContext (4750540)
- rethrow CancellationException instead of swallowing it in error recovery (af252f9)
- route beforeRun early-exit events through onEvent plugin callbacks (12564f8)
- scope app, user and temp prefixes in a Room session's initial state (efdf8f6)
- scope app, user and temp prefixes in an InMemory session's initial state (c95b5c0)
- send
{"result": null}for tools that return nothing (159087d) - sessions: reject a duplicate session id instead of overwriting the session (22b0584)
- set an invocation id on compaction events created by LlmEventSummarizer (8209deb)
- skip compaction when summarization fails instead of failing the turn (b15c7da)
- skip persisting partial events in InMemorySessionService (a613325)
- stop a rejected request body appearing in the resulting error (591f487)
- stop the LlmAgent turn loop when a model stream ends on a partial event (1b5157f)
- stop the prompt token count scan at a compaction event (a303484)
Documentation
- add placeholder AGENT...
v1.1.0
1.1.0 (2026-09-15)
Features
- add a custom SkillSource example and a BaseFutureSkillSource base for Java (2992b26)
- add an app's AppFunctions guidance to the model's instructions (7620e9f)
- add AppFunctionsToolset for Android AppFunctions (6f349ef)
- add Java ports of the dynamic and resumable-value long-running tool examples (b1eb988)
- add Plugin onRunError notification callback (77aea89)
- add the Android AppFunctions conversion layer (cc2928f)
Bug Fixes
- answer an unknown tool name instead of ending the invocation (93c4beb)
- answer an unknown tool name instead of ending the invocation (22c1af4)
- correct session-resumability completion and resume for workflow agents (00de2d5)
- drop non-ASCII characters from the LiteRT-LM Java example (53185de)
- keep the agent turn alive when an MCP server rejects a request (245a74a)
- runner: persist the post-onEvent event, not the pre-callback one (7c8a801)
- sessions: forward the caller-supplied session id in VertexAiSessionService (6ca8185)
Documentation
v1.0.1
v1.0.0
1.0.0 (2026-09-07)
ADK for Kotlin 1.0 is generally available. This release brings full feature parity with ADK 1.0 Core to Kotlin, Java, and Android developers through an idiomatic Kotlin API, and adds Android-first, on-device extensions for building agents on the JVM or on-device.
Full ADK 1.0 core parity
- Hierarchical multi-agent systems: chain agents and delegate to specialized child agents
- Context compaction and multi-turn conversations to stay within token limits
- Human-in-the-loop (HITL) and confirmation flows: pause, confirm, and resume
- Long-running and annotation-based tools with compile-time schema generation (
@Tool/@Param, KSP, zero runtime reflection) - Session resumability: pause, serialize, and restore active interactions
- First-party Java interoperability
- Gemini Enterprise Agent Platform (formerly Vertex AI) integration:
VertexAiSessionService,VertexAiRagMemoryService,VertexAiMemoryBankService
Android-first and on-device extensions
- On-device Gemini Nano via ML Kit GenAI (beta):
google-adk-kotlin-mlkit-android - On-device LLMs such as Gemma via the LiteRT-LM engine:
google-adk-kotlin-litertlm - Cloud Gemini via Firebase AI Logic:
google-adk-kotlin-firebase-android - Persistent sessions with Room / SQLite and semantic on-device memory with AppSearch
- Local file artifacts and APK asset-packaged skills
Changes since 0.9.0
Features
- add a Java web server example, MultiAgentLoader, and an AdkServerConfig Java builder (2cca5bb)
- add Content.text and Event.contentText accessors (c73935e)
- add Java examples for the Publisher/Future interop base classes (363ed89)
- add Java ports of the callbacks, memory, compaction, HITL, and long-running examples (e3fd625)
- add Java ports of the structural, service, MCP, and BigQuery examples (d016357)
- add Java-friendly interop base classes and MCP/BigQuery config builders (87eedc6)
- build tools from @Tool-annotated Java methods via ReflectiveTools (ce72036)
- remove the deprecated AdkWebServer surface, deprecated since 0.9.0: removes
com.google.adk.kt.webserver.AdkWebServer,.adkModule,.AgentGraphGenerator, and incom.google.adk.kt.webserver.routesdebugRoutes,evalRoutes,graphRoutes,extractGraphParams,GraphRoutesError,GraphRoutesErrors,GraphParamsandGraphRoutesResult; replacements live incom.google.adk.kt.webserver.devandcom.google.adk.kt.webserver.dev.routes(a3e9eb3)
Bug Fixes
- always serialize Event timestamp and id (683d517)
- continue a resumable invocation after a long-running tool returns a value (2af60cf)
- enhance Gemini quota (429) errors with mitigation guidance (f880351)
- resume into a transferred peer or parent agent, not only a descendant (4143a77)
- scope
user:-prefixed artifacts to the user in InMemoryArtifactService (258cd34) - serialization: serialize Blob and thought-signature bytes as base64 (0e79ca7)
- serialization: serialize video metadata offsets as duration strings (9abcec8)
Documentation
- add long-running tool examples (dynamic, and resumable value return) (7ea0c11)
- log persistence in the Java service examples instead of reading back through the service (6225c7a)
- note the stable release cycle (6169014)
- show the PublisherRunner event stream and its RxJava/Reactor adapters in the Java examples (ee8af34)
- use the new Content and Event text accessors in the examples (3445ba3)
v0.9.0
0.9.0 (2026-08-28)
Features
- accept Java List/Map params in @tool and add a Java function-tool example (bc89fb2)
- add AdkApiServer and AdkDevServer (0f2a76e)
- add Java-friendly builders for LlmRequest and Session (dc1c3b6)
- add minProperties and maxProperties to Schema (3a824fc)
- add streaming response mode to the Firebase AI Android example (d259617)
- allow disabling the ADK Development UI with adk.web.ui.enabled (ba02d25)
- mlkit: support thinking mode on the on-device Gemini Nano model (f8d502c)
- serve example agents over HTTP with runServer (0a892e3)
- sessions: support session expiry in VertexAiSessionService (776351a)
- show Gemini Nano's thinking in the Android ML Kit chat example (9e5dea7)
Bug Fixes
- AdkWebServer.stop() when started with wait = true (e554455)
- align aggregation of LiteRT-LM streaming responses with the other model backends (2e34319)
- bind AdkApiServer and AdkDevServer to loopback by default (b4e83ad)
- omit empty content from an LlmResponse built from a content-less candidate (e856bce)
- restore the deprecated graph route types at their previous package (91b653d)
Performance Improvements
- read session events from memory instead of re-fetching them each step (a560b38)
Documentation
v0.8.0
0.8.0 (2026-08-15)
Features
- add a BigQuery agent analytics plugin (485f1f8)
- add an on-device LiteRT-LM chat example to the Android examples app (39fd962)
- add first batch of Java-friendly builders to ADK Kotlin (f8308fc)
- add Java ports of the first wave of ADK Kotlin examples (e13b607)
- add Java-friendly interop layer to ADK Kotlin (d6e4fb7)
- add MCP tool demo example (c04d6d9)
- add streaming response support in the Firebase model backend (805a131)
- capture the place-answer text on Maps grounding chunks (a47dda0)
- carry the JSON Schema constraint fields on Schema (d0547f9)
- keep thought signature and tool call parts through streaming and history (17e7519)
- mcp: keep MCP tool schema constraints and surface tool output schemas (cbc9d0a)
- preserve nested null values when converting to the GenAI SDK (22e1d59)
- preserve null values in event custom metadata (b3cfe8f)
- preserve null values in tool arguments (d698275)
- preserve null values in tool FunctionResponse (9164ed7)
- processor: declare the response shape of @tool functions (6f1009a)
Bug Fixes
- a2a: put JSpecify on the compile classpath (72731ca)
- align ML Kit streaming responses with the other model backends (c597ded)
- carry model-callback actions onto the emitted event (35f04af)
- core: only resume tool confirmations for calls this agent emitted (00cbc52)
- emit a final streaming response when a turn ends without text (cb236b4)
- mcp: stop failing on null-typed MCP tool schemas and keep enum values (06e7926)
- mcp: stop toolFilter dropping the tools useMcpResources adds (07e7fb7)
- processor: stop generating an unchecked cast for data class parameters (80b2dd8)
- propagate the model response error code and custom metadata to events (be9ecec)
- release a cancelled LiteRT-LM conversation promptly instead of stalling (df91e30)
- stop the ML Kit model echoing role markers and earlier turns (f02a07c)
- update Kotlin ADK RemoteA2AAgent to handle all terminal and interrupted task states (e1d3474)
Performance Improvements
- Improved the InMemorySessionService performance (7e07177)
Documentation
- add runnable long-running tool examples (resumable and non-resumable) (21340d2)