Skip to content
ISSUE 001·LIVE·12:49 IL
← Journal/2026-10-27·8 min·google adk

ADK for Kotlin: What Google's README Says About Android, Java Interop and an Unauthenticated Server

Google's Agent Development Kit for Kotlin is an Apache 2.0 toolkit with Java interop, on-device Android models and an HTTP server. What the README says, where it contradicts itself on stability, and what to check first.

By Harel Asaf·AI Builder·Tel Aviv

Google's Agent Development Kit (ADK) now has a Kotlin version, published as open source under Apache 2.0. Its README says you can build the same agent from Kotlin or plain Java, run models on-device on Android, and serve agents over HTTP. It also says two things that do not sit easily together: the project "now follows a stable release cycle" under semantic versioning, and a closing section says the feature is Pre-GA and "available as is" with limited support. If you plan to build on it, treat that gap as the first thing to resolve.

I read the repository page and README only. I did not build anything, run the examples, or read the docs site, release notes or source. Everything below is what the README says.

What it is

The README calls ADK for Kotlin "an open-source, code-first Kotlin toolkit for building, evaluating, and deploying sophisticated AI agents". You define agent behavior, orchestration and tool use in code. It links to the Python and Java versions of ADK as siblings.

On the repository page I saw: Apache 2.0, created May 12, 2026, about 294 stars, 43 open issues, and languages including Kotlin, Java, Python, JavaScript and HTML. The README's install snippets use version 1.4.0 of the com.google.adk artifacts.

The README's feature list:

  • A tool ecosystem: pre-built tools, custom functions, OpenAPI specs or existing tools.
  • Code-first agent logic that can be tested and versioned.
  • Multi-agent systems composed as hierarchies.
  • On-device and cloud agents on Android.
  • Java interop, so you can build the same agents from plain Java.

The modules

The README lists a core artifact (agents, models, tools, sessions, memory, artifacts, runners) as the only dependency most projects need. The rest are optional:

  • processor: a KSP processor that generates tools from @Tool-annotated functions.
  • webserver: HTTP serving, headless or with the development UI.
  • integrations: Spring AI, Anthropic Claude (via the official Anthropic Java SDK), OpenAI and compatible Chat Completions endpoints, and a BigQuery plugin that logs agent invocation events. The README marks most as JVM only.
  • a2a: Agent2Agent support for talking to remote agents.
  • litertlm, firebase, mlkit: the Android and on-device pieces.

The README's example agent uses gemini-3.8-flash on Vertex AI with Application Default Credentials and the GOOGLE_CLOUD_PROJECT variable. I did not check that model name against anything.

Java interop

The README says every builder-style API mirrors the Kotlin one and that "coroutines stay out of the way". A com.google.adk.kt.interop package replaces suspend functions and Flow with CompletableFuture and Reactive Streams Publisher. It names wrappers for runners, session, artifact and memory services, base classes for implementing tools, toolsets, plugins and models from Java, and @Tool and @Param annotations that work from Java. One piece, BaseFutureLiveConnection, is marked experimental.

Android: three backends, one is limited

The README gives a table:

  • LiteRT-LM: on-device, with tool calling. It runs open models such as Gemma, and on Android and the desktop JVM. It needs JDK 21 or later.
  • ML Kit (Gemini Nano): on-device, Android-only, published as a -beta pre-release. The README says tool calling is not supported yet, and that functionCall and functionResponse parts are dropped, so it is for plain chat and generation for now.
  • Firebase AI: cloud, with tool calling. The README calls it the recommended way to call Gemini from Android without embedding an API key.

It also says on-device and cloud models are interchangeable Model implementations, so one agent hierarchy can mix them: an on-device agent for offline or privacy-sensitive turns, delegating harder tasks to a cloud agent. The README says it supports this design. I have not tried it.

A detail worth noting: a tool-calling agent on ML Kit would silently lose its tool calls, per the README's own wording. If you switch backends "in one line", check which backends support tools.

Serving agents over HTTP

The webserver module's AdkApiServer serves app discovery, sessions, artifacts, run endpoints, health and version. The README says it listens on port 8080 and that inMemory keeps session and artifact state in the process, so it suits a local run.

The security note is the part I would read twice. The README says the server "binds loopback, because these endpoints are unauthenticated" and tells you to put your own authentication in front of it before widening that. Its next example sets host = "0.0.0.0" in one line. That example is there to show the setting, and the README does not add an authentication step to it. If you copy it, you expose unauthenticated session and run endpoints on every interface.

The development UI has a precedence rule

AdkDevServer adds a development UI at /dev-ui plus trace and agent-graph endpoints. The README says three things decide whether the UI is mounted, highest first:

1. The adk.web.ui.enabled system property.

2. The webUiEnabled field on AdkServerConfig.

3. The server class: AdkApiServer leaves it off, AdkDevServer turns it on.

So a stray -Dadk.web.ui.enabled=true in the launch environment turns the UI on even if your config says off. The README says this is deliberate, so a deployment that cannot change code can still turn it off. For a production launch script, check the system properties you pass.

The stability gap

Two statements in the same README:

  • "ADK for Kotlin now follows a stable release cycle, with regular releases published to Maven Central under semantic versioning."
  • A closing "Preview" section: the feature "is subject to the 'Pre-GA Offerings Terms'", and Pre-GA features are available "as is" and "might have limited support".

The README does not say which parts the second statement covers. It could be boilerplate that applies to all of it, or to only some modules such as the beta ML Kit one. I could not tell. If you need support terms, read the linked terms and ask Google.

What I would check

These are my untested suggestions, not results.

1. Support status. Read the Pre-GA terms the README links to, and decide whether "as is" is acceptable for your use.

2. Authentication in front of the server. Before you set host = "0.0.0.0", put real authentication and a network rule in front of it.

3. System properties. In any deployment, list the JVM flags and confirm the development UI is off.

4. Backend tool support. Run one tool-calling agent on each Android backend, and confirm tool calls arrive.

5. JDK version. The LiteRT-LM module needs JDK 21 or later. Check that against your build.

6. Pin the version. The README shows 1.4.0. Pin it and read the release notes when you move.

What I would not conclude

  • That it is production-ready. The README says both "stable release cycle" and "Pre-GA, as is".
  • That on-device agents work with tools on every backend. ML Kit does not yet, per the README.
  • That the server is safe to expose. The README says it is unauthenticated.
  • That the examples run as written. I did not run them.

Frequently asked questions

What is ADK for Kotlin?

An open-source Kotlin toolkit from Google for building, evaluating and deploying AI agents, under Apache 2.0. It follows the Python and Java ADKs.

Can I use it from Java?

The README says yes. It describes Java-facing builder APIs and an interop package based on CompletableFuture and Reactive Streams Publisher.

Does it run models on the device?

On Android, yes, through LiteRT-LM or ML Kit. Per the README, LiteRT-LM supports tool calling and ML Kit does not yet.

Which models can it use?

The README shows Gemini on Vertex AI, and lists integrations for Spring AI models, Anthropic Claude, and OpenAI or compatible endpoints. I did not test any of them.

Is the HTTP server secure?

The README says the endpoints are unauthenticated and that the server binds loopback by default. Put authentication in front of it before widening that.

Is it stable?

The README says it follows a stable release cycle with semantic versioning, and also carries a Pre-GA, "as is" notice. It does not reconcile the two.

How do I install it?

Add the com.google.adk core artifact, version 1.4.0 in the README, through Maven or Gradle. The README gives snippets for both.

Sources

All pages read on October 27, 2026.

Not read: the Kotlin ADK documentation site, release notes, source code, and the linked Pre-GA terms.

Related reading

The build log

Follow the work.

New essays and prototypes, in your feed reader. Email subscriptions are paused while I connect a working delivery service. No email is collected here.

Follow via RSS