Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
5873895
Add Kotlin to hero / front page
koverholt May 6, 2026
17fe0cb
Merge pull request #1 from koverholt/add-kotlin-to-hero
koverholt May 6, 2026
8be5d81
Add quickstart page for Kotlin
koverholt May 6, 2026
b018b47
Complete Kotlin quickstart guide and fix hero code sample (#2)
koverholt May 7, 2026
1ed48cb
Replace GitHub repo links with language icons in header (#3)
koverholt May 7, 2026
55376e0
Merge remote-tracking branch 'upstream/main'
koverholt May 7, 2026
69964fd
Fix header icon FOUC and homepage font weight regression (#4)
koverholt May 7, 2026
875dac0
Testing staging pipeline
koverholt May 7, 2026
1bc63c3
Revert test edit (for staging pipeline)
koverholt May 7, 2026
7c60611
Update language icon tooltips to indicate GitHub destination (#5)
koverholt May 7, 2026
65089b6
Merge remote-tracking branch 'upstream/main'
koverholt May 11, 2026
0883b36
Add link to ADK Kotlin release notes (#7)
koverholt May 11, 2026
dd6bb07
Initial commit of ADK Kotlin API reference docs (#6)
koverholt May 11, 2026
215baba
Add script to generate ADK Kotlin API reference docs (#8)
koverholt May 11, 2026
b88d0ef
Update links and link checker ignore list (temporarily) (#9)
koverholt May 11, 2026
1f8cb62
Add ADK Kotlin for Android getting started guide to Advanced setup pa…
koverholt May 12, 2026
9a9e22a
Merge remote-tracking branch 'upstream/main'
koverholt May 12, 2026
39c9e10
Add placeholder folder for adk-samples (#13)
koverholt May 13, 2026
10d85bf
adding linter/compilation checks for kotlin snippets (#12)
ToniCorinne May 13, 2026
6b2437e
Initial commit of Kotlin sample agents for adk-samples (#15)
koverholt May 13, 2026
cf82d3c
Adding kotlin snippet for llm agents (#16)
ToniCorinne May 14, 2026
1e38834
Adding kotlin snippets to Events (#17)
ToniCorinne May 14, 2026
0e19c17
Fix language tags (#19)
koverholt May 14, 2026
73f9941
Enable check_paths in PyMdown Snippets Extension to make the build fa…
koverholt May 14, 2026
9cf6b60
Update mkdocs config (#21)
koverholt May 14, 2026
be34d5e
Fix broken links, update URLs to adk.dev, and improve (temp) lychee c…
koverholt May 14, 2026
d361588
Merge remote-tracking branch 'upstream/main'
koverholt May 14, 2026
5da7476
Add Kotlin/maven badge to README (#23)
koverholt May 14, 2026
6d506af
Adding Kotlin snippets for artifacts (#18)
ToniCorinne May 15, 2026
f90ee85
Fix syntax error in build.gradle.kts by removing invalid placeholders…
ToniCorinne May 15, 2026
2d5d06e
Adding Kotlin snippets to google-gemini.md (#27)
ToniCorinne May 15, 2026
af37445
Add a warning about not adding an api key to production code. (#28)
JolandaVerhoef May 15, 2026
c867e86
Merge remote-tracking branch 'upstream/main'
koverholt May 15, 2026
49ed22e
Add ADK Demo App sample showcasing Gemini-powered agents (#29)
JolandaVerhoef May 15, 2026
de247e1
Update Kotlin docs and samples to align with adk-kotlin API changes (…
koverholt May 15, 2026
cc6ceb2
adding kotlin info to READMEs (#14)
ToniCorinne May 15, 2026
1d6ffcf
Reorganize Android sample agent and add READMEs (#31)
koverholt May 15, 2026
d048a0b
Minor edit to language support tags (#32)
koverholt May 15, 2026
9eecca3
Remove blog post link (#33)
koverholt May 15, 2026
dc1aa01
Remove examples link (#34)
koverholt May 15, 2026
211cf17
Adding Kotlin snippets for Sessions docs (#26)
ToniCorinne May 17, 2026
15cce1a
Fixing capital agent snippet (#35)
ToniCorinne May 17, 2026
d56d9d6
Adding kotlin snippets for tools docs (#36)
ToniCorinne May 18, 2026
fb0abe6
Adding kotlin snippets to observability docs (#37)
ToniCorinne May 18, 2026
7359ef7
adding observability snippets to file check (#38)
ToniCorinne May 18, 2026
384759c
Adding Kotlin snippets to Callbacks docs (#39)
ToniCorinne May 18, 2026
f4b44f1
Align Kotlin and KSP versions with published 0.1.0 artifacts (#40)
koverholt May 18, 2026
1c879ae
switch CLI entry points from InMemoryRunner to ReplRunner (#41)
koverholt May 18, 2026
cef7e93
Update API reference docs for Kotlin, 2026-05-18 (#42)
koverholt May 18, 2026
01bac76
Remove ADK on Android note until published (#43)
koverholt May 18, 2026
5bdbd4d
Update Kotlin code samples (#44)
koverholt May 18, 2026
dad66b3
Remove Android setup steps, moving to new property (#45)
koverholt May 18, 2026
642700c
Tutorial Kotlin agent (#46)
ToniCorinne May 18, 2026
ca5699b
Inline Kotlin get-started code sample
koverholt May 18, 2026
843d2fc
Merge remote-tracking branch 'upstream/main'
koverholt May 18, 2026
a65d38a
Kotlin Multi agents snippets (#47)
ToniCorinne May 18, 2026
ed0afca
Fix Kotlin language support tags, code samples, and google-gemini.md …
koverholt May 19, 2026
a6e8f2a
Merge remote-tracking branch 'upstream/main'
koverholt May 19, 2026
21984fb
Remove adk-samples directory (moved to google/adk-samples#1969)
koverholt May 19, 2026
a082589
Remove adk-samples directory (moved to google/adk-samples#1969) (#49)
koverholt May 19, 2026
fff553f
Merge remote-tracking branch 'refs/remotes/origin/main'
koverholt May 19, 2026
b612fbd
Update API reference docs for ADK Kotlin 0.1.0 (#50)
koverholt May 19, 2026
bfa879d
Merge remote-tracking branch 'refs/remotes/origin/main'
koverholt May 19, 2026
a08418a
Remove kotlin lycheeignore config (#51)
koverholt May 19, 2026
196ddab
Merge remote-tracking branch 'refs/remotes/origin/main'
koverholt May 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
72 changes: 72 additions & 0 deletions .github/workflows/kotlin-snippets-pr-check.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# Copyright 2026 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

name: Kotlin Snippets Build on PR

on:
# Run on pull requests targeting the main branch.
pull_request:
branches: [ "main" ]

jobs:
# This job builds the Kotlin snippets.
test:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v6
with:
# Fetch the entire history to compare branches in the PR.
fetch-depth: 0

- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4

# --- PR-Specific Checks ---
# These steps only run for pull request events.

- name: Find new, un-tested Kotlin files (PR only)
if: github.event_name == 'pull_request'
run: |
echo "Checking for any new Kotlin files that are not in the build script..."
./tools/kotlin-snippets/check_kotlin_snippets.sh

- name: Get changed Kotlin snippet files (PR only)
if: github.event_name == 'pull_request'
id: changed-files
run: |
# This command gets the list of changed .kt files in the snippets directory
# between the PR's head and the base branch.
CHANGED_FILES=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }} -- 'examples/kotlin/snippets/**/*.kt' | xargs)
echo "changed_files=${CHANGED_FILES}" >> $GITHUB_OUTPUT
echo "Detected changes in: ${CHANGED_FILES}"

- name: Build changed Kotlin snippets (PR only)
if: github.event_name == 'pull_request' && steps.changed-files.outputs.changed_files != ''
run: |
echo "Building only the changed Kotlin files..."
./tools/kotlin-snippets/runner.sh build ${{ steps.changed-files.outputs.changed_files }}

- name: Lint changed Kotlin snippets (PR only)
if: github.event_name == 'pull_request' && steps.changed-files.outputs.changed_files != ''
run: |
echo "Linting only the changed Kotlin files..."
./tools/kotlin-snippets/runner.sh lint ${{ steps.changed-files.outputs.changed_files }}
9 changes: 5 additions & 4 deletions .lycheeignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@
# Add regular expressions (one per line) for URLs to exclude from checking.
# See: https://github.com/lycheeverse/lychee-action

# Rate limits automated requests
^https://www\.gnu\.org/
^https://www\.markifact\.com
^https?://x\.com/

# Google Cloud Console (requires authentication, returns HTTP/2 errors)
^https://console\.(cloud\.google|developers\.google)\.com

Expand All @@ -10,7 +15,3 @@

# Requires authentication
^https://postman\.postman\.co/settings/me/

# Rate limits automated requests
^https://www\.gnu\.org/
^https://www\.markifact\.com
5 changes: 4 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
[![PyPI](https://img.shields.io/pypi/v/google-adk)](https://pypi.org/project/google-adk/)
[![NPM Version](https://img.shields.io/npm/v/@google/adk)](https://www.npmjs.com/package/@google/adk)
[![Go Doc](https://img.shields.io/badge/Go%20Package-Doc-blue.svg)](https://pkg.go.dev/google.golang.org/adk)
[![Maven Central](https://img.shields.io/maven-central/v/com.google.adk/google-adk)](https://search.maven.org/artifact/com.google.adk/google-adk)
[![Maven Central Java](https://img.shields.io/maven-central/v/com.google.adk/google-adk)](https://search.maven.org/artifact/com.google.adk/google-adk)
[![Maven Central Kotlin](https://img.shields.io/maven-central/v/com.google.adk/google-adk-kotlin-core)](https://search.maven.org/artifact/com.google.adk/google-adk-kotlin-core)

<html>
<h2 align="center">
Expand Down Expand Up @@ -55,6 +56,8 @@ You can use Agent Development Kit (ADK) with your preferred language:

- **[Get started with ADK Java](https://adk.dev/get-started/java/)**

- **[Get started with ADK Kotlin](https://adk.dev/get-started/kotlin/)**

## 📚 Documentation

Explore the full documentation for detailed guides on building, evaluating, and
Expand Down
36 changes: 26 additions & 10 deletions docs/_includes/homepage/_hero.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<div class="hero-grid">
<div class="hero-content">
<h1>Build production agents, <span class="hero-punchline">not prototypes.</span></h1>
<p>ADK is the open-source agent development framework that lets you build, debug, and deploy reliable AI agents at enterprise scale. Available in Python, TypeScript, Go, and Java.</p>
<p>ADK is the open-source agent development framework that lets you build, debug, and deploy reliable AI agents at enterprise scale. Available in Python, TypeScript, Go, Java, and Kotlin.</p>
<div class="hero-actions">
<a href="get-started/" class="btn btn-primary">Start building</a>
<!-- <a href="skills/" class="btn btn-accent">Agent skills</a> -->
Expand All @@ -17,6 +17,7 @@
<div class="iterm-tab" data-lang="typescript">TypeScript</div>
<div class="iterm-tab" data-lang="go">Go</div>
<div class="iterm-tab" data-lang="java">Java</div>
<div class="iterm-tab" data-lang="kotlin">Kotlin</div>
</div>
<div class="code-content" id="code-python"><pre><span class="kw">from</span> google.adk <span class="kw">import</span> <span class="fn">Agent</span>
<span class="kw">from</span> google.adk.tools <span class="kw">import</span> google_search
Expand All @@ -39,16 +40,15 @@ agent = <span class="fn">Agent</span>(

</pre></div>

<div class="code-content" id="code-go" style="display:none"><pre><span class="kw">import</span> <span class="str">"google.golang.org/adk/agent"</span>
<div class="code-content" id="code-go" style="display:none"><pre><span class="kw">import</span> <span class="str">"google.golang.org/adk/agent/llmagent"</span>

a := agent.<span class="fn">New</span>(<span class="str">"researcher"</span>,
agent.<span class="fn">WithModel</span>(<span class="str">"gemini-flash-latest"</span>),
agent.<span class="fn">WithInstruction</span>(<span class="str">"You help users research topics thoroughly."</span>),
agent.<span class="fn">WithTools</span>(googleSearch),
)


</pre></div>
model, _ := gemini.<span class="fn">NewModel</span>(context.<span class="fn">Background</span>(), <span class="str">"gemini-flash-latest"</span>, <span class="kw">nil</span>)
a, _ := llmagent.<span class="fn">New</span>(llmagent.<span class="fn">Config</span>{
Name: <span class="str">"researcher"</span>,
Model: model,
Instruction: <span class="str">"You help users research topics thoroughly."</span>,
Tools: []tool.Tool{geminitool.<span class="fn">GoogleSearch</span>{}},
})</pre></div>

<div class="code-content" id="code-java" style="display:none"><pre><span class="kw">import</span> com.google.adk.agents.<span class="fn">LlmAgent</span>;
<span class="kw">import</span> com.google.adk.tools.<span class="fn">GoogleSearchTool</span>;
Expand All @@ -60,6 +60,16 @@ a := agent.<span class="fn">New</span>(<span class="str">"researcher"</span>,
.tools(<span class="kw">new</span> <span class="fn">GoogleSearchTool()</span>)
.build();</pre></div>

<div class="code-content" id="code-kotlin" style="display:none"><pre><span class="kw">import</span> com.google.adk.kt.agents.<span class="fn">LlmAgent</span>
<span class="kw">import</span> com.google.adk.kt.tools.<span class="fn">GoogleSearchTool</span>

<span class="kw">val</span> agent = <span class="fn">LlmAgent</span>(
name = <span class="str">"researcher"</span>,
model = <span class="fn">Gemini</span>(name = <span class="str">"gemini-flash-latest"</span>),
instruction = <span class="fn">Instruction</span>(<span class="str">"You help users research topics thoroughly."</span>),
tools = listOf(<span class="fn">GoogleSearchTool</span>()),
)</pre></div>

</div>
<!-- Install info synced with tabs -->
<div class="install-info" id="install-python">
Expand All @@ -86,6 +96,12 @@ a := agent.<span class="fn">New</span>(<span class="str">"researcher"</span>,
<button class="copy-btn" data-copy="com.google.adk:google-adk" title="Copy to clipboard">📋</button>
</div>
</div>
<div class="install-info" id="install-kotlin" style="display:none">
<div class="install-cmd">
<code>com.google.adk:google-adk-kotlin-core</code>
<button class="copy-btn" data-copy="com.google.adk:google-adk-kotlin-core" title="Copy to clipboard">📋</button>
</div>
</div>
</div>
</div>
</div>
2 changes: 1 addition & 1 deletion docs/a2a/a2a-extension.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# A2A extension for improved reliability

<div class="language-support-tag">
<span class="lst-supported">Supported in ADK</span><span class="lst-python">Python 1.27.0</span>
<span class="lst-supported">Supported in ADK</span><span class="lst-python">Python v1.27.0</span>
</div>

ADK provides an extension for Agent2Agent (A2A) support to improved message and data handling as part of
Expand Down
41 changes: 35 additions & 6 deletions docs/agents/llm-agents.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,7 @@
# LLM Agent

<div class="language-support-tag">
<span class="lst-supported">Supported in ADK</span>
<span class="lst-python">Python v0.1.0</span>
<span class="lst-typescript">Typescript v0.2.0</span>
<span class="lst-go">Go v0.1.0</span>
<span class="lst-java">Java v0.1.0</span>
<span class="lst-supported">Supported in ADK</span><span class="lst-python">Python v0.1.0</span><span class="lst-typescript">Typescript v0.2.0</span><span class="lst-go">Go v0.1.0</span><span class="lst-java">Java v0.1.0</span><span class="lst-kotlin">Kotlin v0.1.0</span>
</div>

The `LlmAgent` (often aliased simply as `Agent`) is a core component in ADK,
Expand Down Expand Up @@ -88,6 +84,12 @@ First, you need to establish what the agent *is* and what it's *for*.
.build();
```

=== "Kotlin"

```kotlin
--8<-- "examples/kotlin/snippets/agents/llm-agent/CapitalAgent.kt:identity"
```

## Guiding the Agent: Instructions (`instruction`)

The `instruction` parameter is arguably the most critical for shaping an
Expand Down Expand Up @@ -183,6 +185,12 @@ tells the agent:
.build();
```

=== "Kotlin"

```kotlin
--8<-- "examples/kotlin/snippets/agents/llm-agent/CapitalAgent.kt:instruction"
```

*(Note: For instructions that apply to *all* agents in a system, consider using
`global_instruction` on the root agent, detailed further in the
[Multi-Agents](multi-agents.md) section.)*
Expand All @@ -194,7 +202,7 @@ reasoning. They allow the agent to interact with the outside world, perform
calculations, fetch real-time data, or execute specific actions.

* **`tools` (Optional):** Provide a list of tools the agent can use. Each item in the list can be:
* A native function or method (wrapped as a `FunctionTool`). Python ADK automatically wraps the native function into a `FunctionTool` whereas, you must explicitly wrap your Java methods using `FunctionTool.create(...)`
* A native function or method (wrapped as a `FunctionTool`). Python ADK automatically wraps the native function into a `FunctionTool` whereas, you must explicitly wrap your Java methods using `FunctionTool.create(...)`. In Kotlin, you can use the `@Tool` annotation to automatically generate a `FunctionTool` at compile-time.
* An instance of a class inheriting from `BaseTool`.
* An instance of another agent (`AgentTool`, enabling agent-to-agent delegation - see [Multi-Agents](multi-agents.md)).

Expand Down Expand Up @@ -302,6 +310,15 @@ on the conversation and its instructions.
.build();
```

=== "Kotlin"

```kotlin
--8<-- "examples/kotlin/snippets/agents/llm-agent/CapitalAgent.kt:tool_definition"

// Add the tool to the agent
--8<-- "examples/kotlin/snippets/agents/llm-agent/CapitalAgent.kt:tool_usage"
```

Learn more about Tools in [Custom Tools](/tools-custom/).

## Advanced Configuration & Control
Expand Down Expand Up @@ -373,6 +390,12 @@ You can adjust how the underlying LLM generates responses using `generate_conten
.build();
```

=== "Kotlin"

```kotlin
--8<-- "examples/kotlin/snippets/agents/llm-agent/CapitalAgent.kt:gen_config"
```

### Structuring Data (`input_schema`, `output_schema`, `output_key`)

For scenarios requiring structured data exchange with an `LLM Agent`, the ADK provides mechanisms to define expected input and desired output formats using schema definitions.
Expand Down Expand Up @@ -753,6 +776,12 @@ call_agent("If it's raining in New York right now, what is the current temperatu
--8<-- "examples/java/snippets/src/main/java/agents/LlmAgentExample.java:full_code"
```

=== "Kotlin"

```kotlin
--8<-- "examples/kotlin/snippets/agents/llm-agent/CapitalAgent.kt:full_example"
```

_(This example demonstrates the core concepts. More complex agents might incorporate schemas, context control, planning, etc.)_

## Related Concepts (Deferred Topics)
Expand Down
Loading
Loading