๐ v0.5.0 Released! Structured error envelope (
AdkError redesign), OpenAI Responses API client, OpenRouter deep integration, config validation, typed Runner::run() parameters, labs feature preset, provider_from_env() auto-detection, adk::run() one-liner, encrypted sessions with key rotation, graph durable resume, MCP resource API, Deepgram streaming STT, ToolSearchConfig for Anthropic. Breaking: AdkError is now a multi-axis struct, Runner::run() takes UserId/SessionId types. See CHANGELOG for full details and migration guide.
Contributors: Many thanks to @mikefaille โ AdkIdentity design, realtime audio, LiveKit bridge, skill system. @rohan-panickar โ OpenAI-compatible providers, xAI, multimodal content. @dhruv-pant โ Gemini service account auth. @danielsan โ Google deps issue & PR (#181, #203), RAG crash report (#205). @CodingFlow โ Gemini 3 thinking level, global endpoint, citationSources (#177, #178, #179). @ctylx โ skill discovery fix (#204). @poborin โ project config proposal (#176). Get started โ
Announcements: ADK-Rust Roadmap launched for 2026, we welcome suggestions, comments and ideas. ADK Playground launched! You can now run 70+ ADK-Rust AI Agents online for free. Compile and click. No login, no install. https://playground.adk-rust.com (https://playground.adk-rust.com) And many more discussions, feel free to discuss: A production-ready Rust framework for building AI agents enabling you to create powerful and high-performance AI agent systems with a flexible, modular architecture. Model-agnostic. Type-safe. Async.
cargo install cargo-adk
cargo adk new my-agent
cd my-agent && cargo runOr pick a template: --template tools | rag | api | openai. See Quick Start for details.
ADK-Rust provides a comprehensive framework for building AI agents in Rust, featuring:
- Type-safe agent abstractions with async execution and event streaming
- Multiple agent types: LLM agents, workflow agents (sequential, parallel, loop), and custom agents
- Realtime voice agents: Bidirectional audio streaming with OpenAI Realtime API and Gemini Live API
- Tool ecosystem: Function tools, Google Search, MCP (Model Context Protocol) integration
- RAG pipeline: Document chunking, vector embeddings, semantic search with 6 vector store backends
- Security: Role-based access control, declarative scope-based tool security, SSO/OAuth, audit logging
- Agentic commerce: ACP and AP2 payment orchestration with durable transaction journals and evidence-backed recall
- Production features: Session management, artifact storage, memory systems, REST/A2A APIs
- Developer experience: Interactive CLI, 120+ working examples, comprehensive documentation
Status: Production-ready, actively maintained
ADK-Rust follows a clean layered architecture from application interface down to foundational services.
LLM Agents: Powered by large language models with tool use, function calling, and streaming responses.
Workflow Agents: Deterministic orchestration patterns.
SequentialAgent: Execute agents in sequenceParallelAgent: Execute agents concurrentlyLoopAgent: Iterative execution with exit conditions
Custom Agents: Implement the Agent trait for specialized behavior.
Realtime Voice Agents: Build voice-enabled AI assistants with bidirectional audio streaming.
Graph Agents: LangGraph-style workflow orchestration with state management and checkpointing.
ADK supports multiple LLM providers with a unified API:
| Provider | Model Examples | Feature Flag |
|---|---|---|
| Gemini | gemini-2.5-flash, gemini-2.5-pro, gemini-3-pro-preview, gemini-3-flash-preview |
(default) |
| OpenAI | gpt-5, gpt-5-mini, gpt-5-nano |
openai |
| OpenAI Responses API | gpt-4.1, o3, o4-mini |
openai |
| Anthropic | claude-opus-4-6, claude-sonnet-4-6, claude-haiku-4-5 |
anthropic |
| DeepSeek | deepseek-chat, deepseek-reasoner |
deepseek |
| Groq | meta-llama/llama-4-scout-17b-16e-instruct, llama-3.3-70b-versatile |
groq |
| Ollama | llama3.2:3b, qwen2.5:7b, mistral:7b |
ollama |
| Fireworks AI | accounts/fireworks/models/llama-v3p1-8b-instruct |
openai (preset) |
| Together AI | meta-llama/Llama-3.3-70B-Instruct-Turbo |
openai (preset) |
| Mistral AI | mistral-small-latest |
openai (preset) |
| Perplexity | sonar |
openai (preset) |
| Cerebras | llama-3.3-70b |
openai (preset) |
| SambaNova | Meta-Llama-3.3-70B-Instruct |
openai (preset) |
| xAI (Grok) | grok-3-mini |
openai (preset) |
| Amazon Bedrock | anthropic.claude-sonnet-4-20250514-v1:0 |
bedrock |
| Azure AI Inference | (endpoint-specific) | azure-ai |
| mistral.rs | Phi-3, Mistral, Llama, Gemma, LLaVa, FLUX | git dependency |
All providers support streaming, function calling, and multimodal inputs (where available).
Define tools with zero boilerplate using the #[tool] macro:
use adk_tool::{tool, AdkError};
use schemars::JsonSchema;
use serde::Deserialize;
use serde_json::{json, Value};
#[derive(Deserialize, JsonSchema)]
struct WeatherArgs {
/// The city to look up
city: String,
}
/// Get the current weather for a city.
#[tool]
async fn get_weather(args: WeatherArgs) -> std::result::Result<Value, AdkError> {
Ok(json!({ "temp": 72, "city": args.city }))
}
// Use it: agent_builder.tool(Arc::new(GetWeather))The macro reads the doc comment as the description, derives the JSON schema from the args type, and generates a Tool impl. No manual schema writing, no boilerplate.
Built-in tools:
#[tool]macro (zero-boilerplate custom tools)- Function tools (custom Rust functions)
- Google Search
- Artifact loading
- Loop termination
MCP Integration: Connect to Model Context Protocol servers for extended capabilities. Supports MCP Elicitation โ servers can request additional user input at runtime via structured forms or URLs.
- Session Management: In-memory and SQLite-backed sessions with state persistence, encrypted sessions with AES-256-GCM and key rotation
- Memory System: Long-term memory with semantic search and vector embeddings
- Servers: REST API with SSE streaming, A2A protocol for agent-to-agent communication
- Guardrails: PII redaction, content filtering, JSON schema validation
- Payments: ACP and AP2 commerce support through
adk-payments - Observability: OpenTelemetry tracing, structured logging
| Crate | Purpose | Key Features |
|---|---|---|
adk-core |
Foundational traits and types | Agent trait, Content, Part, error types, streaming primitives |
adk-agent |
Agent implementations | LlmAgent, SequentialAgent, ParallelAgent, LoopAgent, builder patterns |
adk-skill |
AgentSkills parsing and selection | Skill markdown parser, .skills discovery/indexing, lexical matching, prompt injection helpers |
adk-model |
LLM integrations | Gemini, OpenAI, Anthropic, DeepSeek, Groq, Ollama, Bedrock, Azure AI + OpenAI-compatible presets (Fireworks, Together, Mistral, Perplexity, Cerebras, SambaNova, xAI) |
adk-gemini |
Gemini client | Google Gemini API client with streaming and multimodal support |
adk-anthropic |
Anthropic client | Dedicated Anthropic API client with streaming, thinking, caching, citations, vision, PDF, pricing |
adk-mistralrs |
Native local inference | mistral.rs integration, ISQ quantization, LoRA adapters (git-only) |
adk-tool |
Tool system and extensibility | FunctionTool, Google Search, MCP protocol with elicitation, schema validation |
adk-session |
Session and state management | SQLite/in-memory backends, conversation history, state persistence |
adk-artifact |
Artifact storage system | File-based storage, MIME type handling, image/PDF/video support |
adk-memory |
Long-term memory | Vector embeddings, semantic search, Qdrant integration |
adk-payments |
Agentic commerce orchestration | ACP/AP2 adapters, canonical transaction kernel, durable journals, evidence-backed payment flows |
adk-rag |
RAG pipeline | Document chunking, embeddings, vector search, reranking, 6 backends |
adk-runner |
Agent execution runtime | Context management, event streaming, session lifecycle, callbacks |
adk-server |
Production API servers | REST API, A2A protocol, middleware, health checks |
adk-cli |
Command-line interface | Interactive REPL, session management, MCP server integration |
adk-realtime |
Real-time voice agents | OpenAI Realtime API, Gemini Live API, bidirectional audio, VAD |
adk-graph |
Graph-based workflows | LangGraph-style orchestration, state management, checkpointing, human-in-the-loop |
adk-browser |
Browser automation | 46 WebDriver tools, navigation, forms, screenshots, PDF generation |
adk-eval |
Agent evaluation | Test definitions, trajectory validation, LLM-judged scoring, rubrics |
adk-guardrail |
Input/output validation | PII redaction, content filtering, JSON schema validation |
adk-auth |
Access control | Role-based permissions, declarative scope-based security, SSO/OAuth, audit logging |
adk-telemetry |
Observability | Structured logging, OpenTelemetry tracing, span helpers |
Extracted to standalone repos: adk-ui (dynamic UI generation), adk-studio (visual agent builder), adk-playground (120+ examples).
cargo install cargo-adk
cargo adk new my-agent # basic Gemini agent
cargo adk new my-agent --template tools # agent with #[tool] custom tools
cargo adk new my-agent --template rag # RAG with vector search
cargo adk new my-agent --template api # REST server
cargo adk new my-agent --template openai # OpenAI-powered agent
cd my-agent
cp .env.example .env # add your API key
cargo runRequires Rust 1.85 or later (Rust 2024 edition). Add to your Cargo.toml:
[dependencies]
adk-rust = "0.5.0" # Standard: agents, models, tools, sessions, runner, server, CLI
# Need graph, browser, eval, realtime, audio, RAG?
# adk-rust = { version = "0.5.0", features = ["full"] }Set your API key:
# For Gemini (default)
export GOOGLE_API_KEY="your-api-key"
# For OpenAI
export OPENAI_API_KEY="your-api-key"
# For Anthropic
export ANTHROPIC_API_KEY="your-api-key"
# For DeepSeek
export DEEPSEEK_API_KEY="your-api-key"
# For Groq
export GROQ_API_KEY="your-api-key"
# For Fireworks AI
export FIREWORKS_API_KEY="your-api-key"
# For Together AI
export TOGETHER_API_KEY="your-api-key"
# For Mistral AI
export MISTRAL_API_KEY="your-api-key"
# For Perplexity
export PERPLEXITY_API_KEY="your-api-key"
# For Cerebras
export CEREBRAS_API_KEY="your-api-key"
# For SambaNova
export SAMBANOVA_API_KEY="your-api-key"
# For Azure AI Inference
export AZURE_AI_API_KEY="your-api-key"
# For Amazon Bedrock (uses AWS IAM credentials)
# Configure via: aws configure
# For Ollama (no key, just run: ollama serve)The simplest way to run an agent โ one function call, auto-detects your provider from environment variables:
use adk_rust::run;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
dotenvy::dotenv().ok();
// Set ANTHROPIC_API_KEY, OPENAI_API_KEY, or GOOGLE_API_KEY
let response = run("You are a helpful assistant.", "What is 2 + 2?").await?;
println!("{response}");
Ok(())
}provider_from_env() checks env vars in order: ANTHROPIC_API_KEY โ OPENAI_API_KEY โ GOOGLE_API_KEY. First match wins.
use adk_rust::prelude::*;
use adk_rust::Launcher;
#[tokio::main]
async fn main() -> AnyhowResult<()> {
dotenvy::dotenv().ok();
let api_key = std::env::var("GOOGLE_API_KEY")?;
let model = GeminiModel::new(&api_key, "gemini-2.5-flash")?;
let agent = LlmAgentBuilder::new("assistant")
.description("Helpful AI assistant")
.instruction("You are a helpful assistant. Be concise and accurate.")
.model(Arc::new(model))
.build()?;
Launcher::new(Arc::new(agent)).run().await?;
Ok(())
}use adk_rust::prelude::*;
use adk_rust::Launcher;
#[tokio::main]
async fn main() -> AnyhowResult<()> {
dotenvy::dotenv().ok();
let api_key = std::env::var("OPENAI_API_KEY")?;
let model = OpenAIClient::new(OpenAIConfig::new(api_key, "gpt-5-mini"))?;
let agent = LlmAgentBuilder::new("assistant")
.instruction("You are a helpful assistant.")
.model(Arc::new(model))
.build()?;
Launcher::new(Arc::new(agent)).run().await?;
Ok(())
}Uses the /v1/responses endpoint โ recommended for reasoning models (o3, o4-mini) and built-in tools:
use adk_rust::prelude::*;
use adk_rust::Launcher;
use adk_model::openai::{OpenAIResponsesClient, OpenAIResponsesConfig};
#[tokio::main]
async fn main() -> AnyhowResult<()> {
dotenvy::dotenv().ok();
let api_key = std::env::var("OPENAI_API_KEY")?;
let config = OpenAIResponsesConfig::new(api_key, "gpt-4.1-mini");
let model = OpenAIResponsesClient::new(config)?;
let agent = LlmAgentBuilder::new("assistant")
.instruction("You are a helpful assistant.")
.model(Arc::new(model))
.build()?;
Launcher::new(Arc::new(agent)).run().await?;
Ok(())
}use adk_rust::prelude::*;
use adk_rust::Launcher;
#[tokio::main]
async fn main() -> AnyhowResult<()> {
dotenvy::dotenv().ok();
let api_key = std::env::var("ANTHROPIC_API_KEY")?;
let model = AnthropicClient::new(AnthropicConfig::new(api_key, "claude-sonnet-4-6"))?;
let agent = LlmAgentBuilder::new("assistant")
.instruction("You are a helpful assistant.")
.model(Arc::new(model))
.build()?;
Launcher::new(Arc::new(agent)).run().await?;
Ok(())
}use adk_rust::prelude::*;
use adk_rust::Launcher;
#[tokio::main]
async fn main() -> AnyhowResult<()> {
dotenvy::dotenv().ok();
let api_key = std::env::var("DEEPSEEK_API_KEY")?;
// Standard chat model
let model = DeepSeekClient::chat(api_key)?;
// Or use reasoner for chain-of-thought reasoning
// let model = DeepSeekClient::reasoner(api_key)?;
let agent = LlmAgentBuilder::new("assistant")
.instruction("You are a helpful assistant.")
.model(Arc::new(model))
.build()?;
Launcher::new(Arc::new(agent)).run().await?;
Ok(())
}use adk_rust::prelude::*;
use adk_rust::Launcher;
#[tokio::main]
async fn main() -> AnyhowResult<()> {
dotenvy::dotenv().ok();
let api_key = std::env::var("GROQ_API_KEY")?;
let model = GroqClient::new(GroqConfig::llama70b(api_key))?;
let agent = LlmAgentBuilder::new("assistant")
.instruction("You are a helpful assistant.")
.model(Arc::new(model))
.build()?;
Launcher::new(Arc::new(agent)).run().await?;
Ok(())
}use adk_rust::prelude::*;
use adk_rust::Launcher;
#[tokio::main]
async fn main() -> AnyhowResult<()> {
dotenvy::dotenv().ok();
// Requires: ollama serve && ollama pull llama3.2
let model = OllamaModel::new(OllamaConfig::new("llama3.2"))?;
let agent = LlmAgentBuilder::new("assistant")
.instruction("You are a helpful assistant.")
.model(Arc::new(model))
.build()?;
Launcher::new(Arc::new(agent)).run().await?;
Ok(())
}Examples live in the dedicated adk-playground repo (120+ examples covering every feature and provider).
git clone https://github.com/zavora-ai/adk-playground.git
cd adk-playground
cargo run --example quickstart| Project | Description |
|---|---|
| adk-studio | Visual agent builder โ drag-and-drop canvas, code generation, live testing |
| adk-ui | Dynamic UI generation โ 28 components, React client, streaming updates |
| adk-playground | 120+ working examples for every feature and provider |
Build voice-enabled AI assistants using the adk-realtime crate:
use adk_realtime::{RealtimeAgent, openai::OpenAIRealtimeModel, RealtimeModel};
use std::sync::Arc;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let model: Arc<dyn RealtimeModel> = Arc::new(
OpenAIRealtimeModel::new(&api_key, "gpt-4o-realtime-preview-2024-12-17")
);
let agent = RealtimeAgent::builder("voice_assistant")
.model(model)
.instruction("You are a helpful voice assistant.")
.voice("alloy")
.server_vad() // Enable voice activity detection
.build()?;
Ok(())
}Supported Realtime Models:
| Provider | Model | Transport | Feature Flag |
|---|---|---|---|
| OpenAI | gpt-4o-realtime-preview-2024-12-17 |
WebSocket | openai |
| OpenAI | gpt-realtime |
WebSocket | openai |
| OpenAI | gpt-4o-realtime-* |
WebRTC | openai-webrtc |
gemini-live-2.5-flash-native-audio |
WebSocket | gemini |
|
| Gemini via Vertex AI | WebSocket + OAuth2 | vertex-live |
|
| LiveKit | Any (bridge to Gemini/OpenAI) | WebRTC | livekit |
Features:
- OpenAI Realtime API and Gemini Live API support
- Vertex AI Live with Application Default Credentials (ADC)
- LiveKit WebRTC bridge for production-grade audio routing
- OpenAI WebRTC transport with Opus codec and data channels
- Bidirectional audio streaming (PCM16, G711, Opus)
- Server-side Voice Activity Detection (VAD)
- Mid-session context mutation โ swap instructions and tools without dropping the call
- Real-time tool calling during voice conversations
- Multi-agent handoffs for complex workflows
- Zero-allocation LiveKit audio output path
Run realtime examples (from adk-playground):
# OpenAI Realtime (WebSocket)
cargo run --example realtime_basic --features realtime-openai
cargo run --example realtime_tools --features realtime-openai
cargo run --example realtime_handoff --features realtime-openai
# Vertex AI Live (requires gcloud auth application-default login)
cargo run -p adk-realtime --example vertex_live_voice --features vertex-live
cargo run -p adk-realtime --example vertex_live_tools --features vertex-live
# LiveKit Bridge (requires LiveKit server)
cargo run -p adk-realtime --example livekit_bridge --features livekit,openai
# OpenAI WebRTC (requires cmake)
cargo run -p adk-realtime --example openai_webrtc --features openai-webrtc
# Mid-session context mutation
cargo run -p adk-realtime --example openai_session_update --features openai
cargo run -p adk-realtime --example gemini_context_mutation --features geminiBuild complex, stateful workflows using the adk-graph crate (LangGraph-style):
use adk_graph::{prelude::*, node::AgentNode};
use adk_agent::LlmAgentBuilder;
use adk_model::GeminiModel;
// Create LLM agents for different tasks
let translator = Arc::new(LlmAgentBuilder::new("translator")
.model(Arc::new(GeminiModel::new(&api_key, "gemini-2.5-flash")?))
.instruction("Translate the input text to French.")
.build()?);
let summarizer = Arc::new(LlmAgentBuilder::new("summarizer")
.model(model.clone())
.instruction("Summarize the input text in one sentence.")
.build()?);
// Create AgentNodes with custom input/output mappers
let translator_node = AgentNode::new(translator)
.with_input_mapper(|state| {
let text = state.get("input").and_then(|v| v.as_str()).unwrap_or("");
adk_core::Content::new("user").with_text(text)
})
.with_output_mapper(|events| {
let mut updates = HashMap::new();
for event in events {
if let Some(content) = event.content() {
let text: String = content.parts.iter()
.filter_map(|p| p.text())
.collect::<Vec<_>>()
.join("");
updates.insert("translation".to_string(), json!(text));
}
}
updates
});
// Build graph with parallel execution
let agent = GraphAgent::builder("text_processor")
.description("Translates and summarizes text in parallel")
.channels(&["input", "translation"Release HistoryVersion Changes Urgency Date v0.9.0 ## ADK-Rust v0.9.0 ### Added - **Composable Template System** โ 8 base templates, 9 addons, 5 enterprise patterns via `cargo adk new --addon` - **Cargo Adk Build** โ Compile-without-deploy subcommand for pre-deployment verification - **A2A Simple Scaffolding** โ `A2aServer::quick_start`, `A2aServer::builder`, `cargo adk new --template a2a` ### Changed - Version bump from 0.8.5 to 0.9.0 ### Security - hickory-proto 0.26.1 (moderate โ DNS cache poisoning) - openssl 0.10.80 (moderate โ certif High 5/24/2026 v0.8.4 ## Fixed - **Gemini schema: array types require `items`**: v0.8.3 stripped tuple-style `items` entirely, causing Gemini to reject arrays with "missing field" errors. Now tuple `items` (`[{type:number},{type:number}]`) are converted to a single schema using the first element (`{type:number}`). Arrays without any `items` field also get a default `{type:string}` added. ## Upgrade ```toml adk-gemini = "0.8.4" ``` **Full Changelog**: https://github.com/zavora-ai/adk-rust/compare/v0.8.3...v0.8.4 High 5/18/2026 v0.8.1 ## Highlights **Agent Client Protocol (ACP) support** โ connect ADK agents to Claude Code, Codex, Kiro CLI, and any ACP-compatible agent as tools. ### New Crate: `adk-acp` ```rust use adk_acp::AcpAgentTool; let kiro = AcpAgentTool::new("kiro-cli acp --trust-all-tools") .description("Delegate coding tasks to Kiro CLI"); let agent = LlmAgentBuilder::new("orchestrator") .tool(Arc::new(kiro)) .build()?; ``` - `AcpAgentTool` โ wraps any ACP agent as an ADK Tool - `AcpToolset` โ mult High 5/13/2026 v0.8.0 ## Highlights **Performance release** โ default builds are 32% lighter with new feature tiers. ### Breaking Changes - **Default feature changed from `standard` to `minimal`**: `adk-rust = "0.8.0"` now activates only `agents`, `models`, `gemini`, `runner`, and `sessions`. Add `features = ["standard"]` for the full production preset. ### New Feature Tiers | Tier | Includes | Use case | |------|----------|----------| | `minimal` (default) | Gemini, agents, runner, sessions | Fast starter agent High 5/7/2026 v0.7.0 ## ADK-Rust v0.7.0 ### Highlights - **Agentic Web Protocol (AWP)** โ Two new crates (`awp-types`, `adk-awp`) implementing the full AWP protocol: discovery, capability manifests, trust levels, rate limiting, consent, events, health monitoring, and version negotiation. [AWP Docs](https://github.com/zavora-ai/adk-rust/blob/main/docs/official_docs/deployment/awp.md) - **DeepSeek V4 Provider** โ `ThinkingMode`, `ReasoningEffort`, strict tool mode, beta URL support, `v4_pro`/`v4_flash` constructors High 4/26/2026 v0.6.0 ## ๐ ADK-Rust v0.6.0 **31 crates published to crates.io** ยท [Listen to the podcast โ](https://github.com/zavora-ai/adk-rust#-rust--beyond-podcast--episode-1-what-is-adk-rust) ### ๐ง Rust & Beyond Podcast Episode 1 is live on the README โ a 2:21 podcast about ADK-Rust generated entirely by the framework using Gemini 3.1 Flash TTS. Two AI hosts, natural voices, zero manual editing. ### โจ Highlights #### Multimodal Function Responses (`adk-core`, `adk-gemini`, `adk-model`, `adk-agent`) Tools High 4/16/2026 v0.5.0 # ADK-Rust v0.5.0 **31 crates published to crates.io** โ the largest ADK-Rust release to date. ## Highlights ### Zero-Config Ergonomics - **`provider_from_env()`** โ auto-detect LLM provider from environment variables (Anthropic โ OpenAI โ Gemini precedence) - **`adk::run(instructions, input)`** โ single-function agent invocation with auto provider detection, session creation, and execution ### Prompt Caching Enabled by Default - **Anthropic**: `prompt_caching` now defaults to `true` (cache_ Medium 3/29/2026 v0.4.0 ## Highlights **ADK-Rust is now a focused, lean Rust framework.** UI, Studio, and 120+ examples extracted to standalone repos. Default builds dropped from ~2min to ~50s. New `cargo-adk` scaffolding CLI and `#[tool]` proc macro for zero-boilerplate DX. ### Get Started ```bash cargo install cargo-adk cargo adk new my-agent cd my-agent && cargo run ``` Templates: `--template tools` | `rag` | `api` | `openai` --- ## Breaking Changes - **Default preset:** `full` โ `standard`. Server/CLI includ Low 3/16/2026 v0.3.1 ## ADK-Rust v0.3.1 ### โญ Highlights - **Vertex AI Streaming**: `adk-gemini` refactored with `GeminiBackend` trait โ pluggable `StudioBackend` (REST) and `VertexBackend` (REST SSE streaming + gRPC fallback) - **Realtime Audio Transport**: Three new transports for `adk-realtime` โ Vertex AI Live (OAuth2/ADC), LiveKit WebRTC bridge, OpenAI WebRTC (str0m + Opus) - **Vertex AI Live Tool Calling**: New `vertex_live_tools` example demonstrating real-time voice agents with function calling via Vertex Low 2/15/2026 v0.3.0 ## โญ Highlights - **Context Compaction**: Sliding-window summarization of older events to reduce LLM context size (ADK Python parity) - **Workflow Agent Hardening**: ConditionalAgent, LlmConditionalAgent, and ParallelAgent production fixes - **adk-core Production Hardening**: Security limits, validation, provider-agnostic Event, hand-written template parser - **Action Node Code Generation**: Full Rust codegen for HTTP, Database, Email, and Code action nodes - **Workflow Triggers**: Complete trig Low 2/10/2026 v0.2.1 ## โญ Highlights - **OpenAI Structured Output**: `output_schema` now works with OpenAI/Azure via `response_format` API - **Ralph Autonomous Agent**: New example showcasing spec-driven development with loop agents - **Local Model Support**: New examples for Ollama and OpenAI-compatible local APIs - **Improved Error Handling**: Replaced `unwrap()` calls with proper error handling across crates ## Added - **adk-model**: OpenAI/Azure clients now wire `output_schema` to `response_format` with `json_s Low 1/22/2026 v0.2.0 ## Release v0.2.0 - Major Documentation & Feature Update ### ๐ New Features **Streaming Mode Control** - Implement `StreamingMode.None` and SSE per ADK spec - Add streaming mode control to Launcher API - Use stable event IDs for all streaming chunks **Tracing & Observability** - Add `call_llm` span in llm_agent.rs for all model types - Fix async tool execution tracing to match adk-go pattern - Group spans by invocation_id in trace UI - Add get_event endpoint for trace-event linking **Agents Low 1/7/2026 v0.1.8 ## โญ Highlights - **ADK Studio**: Complete visual agent builder with drag-and-drop workflow design - **Real-Time Streaming**: Live SSE streaming with agent animations and trace events - **Code Generation**: Compile visual workflows to production Rust code - **Rust 2024 Edition**: Migrated to Rust 2024 edition for latest language features ## Added - **ADK Studio** (`adk-studio`): Visual agent development environment - Drag-and-drop agent creation with ReactFlow-based canvas - Full agent pale Low 12/28/2025 v0.1.7 ## ๐ก๏ธ Guardrails Framework This release introduces **adk-guardrail**, a new crate for agent safety and validation. ### New Crate: adk-guardrail - **`Guardrail` trait** - Async validation returning `Pass`, `Fail`, or `Transform` - **`GuardrailSet`** - Collection with parallel execution and early exit on `Critical` severity - **`Severity` levels** - `Low`, `Medium`, `High`, `Critical` ### Built-in Guardrails | Guardrail | Description | |-----------|-------------| | `PiiRedactor` | Detects an Low 12/14/2025 v0.1.6 # Release v0.1.6 ๐ฆ ## ๐จ Introducing adk-ui: Dynamic UI Generation for AI Agents This release introduces **adk-ui**, a complete framework for AI agents to generate rich, interactive user interfaces through tool calls. Give your agents the power to render forms, tables, charts, dashboards, and more! ### Why adk-ui? Traditional AI chatbots are limited to text responses. With adk-ui, your agents can: - **Collect structured data** via forms (registration, settings, surveys) - **Display data** w Low 12/12/2025 v0.1.5 ## Added - **DeepSeek provider support**: Native integration with DeepSeek's LLM models - `DeepSeekClient` and `DeepSeekConfig` for easy configuration - Support for `deepseek-chat` (standard) and `deepseek-reasoner` (thinking mode) - Thinking mode with chain-of-thought reasoning - Context caching for 10x cost reduction on repeated prefixes - Full function calling/tool support - Feature flag: `adk-model = { features = ["deepseek"] }` - 8 new DeepSeek examples: - `deepseek_basic` - B Low 12/10/2025 v0.1.4 Release v0.1.4 - Graph Workflows, Browser Automation, Evaluation This release adds three major new crates: adk-graph for LangGraph-style workflows, adk-browser for browser automation, and adk-eval for agent evaluation. โจ New Features adk-graph Crate - StateGraph for building complex agent workflows with state channels - AgentNode for wrapping LLM agents as graph nodes with input/output mappers - Conditional routing with Router::by_field and custom predicates - Human- Low 12/9/2025 v0.1.3 ## Release v0.1.3 - Real-time Voice-Enabled AI Agents This release introduces the `adk-realtime` crate for building voice-enabled AI agents with real-time audio streaming. ### โจ New Features #### adk-realtime Crate - **RealtimeAgent** implementing `adk_core::Agent` trait with full callback/tool/instruction support - **OpenAI Realtime API** support (`gpt-4o-realtime-preview-2024-12-17`, `gpt-realtime`) - **Gemini Live API** support (`gemini-2.0-flash-live-preview-04-09`) Low 12/9/2025 v0.1.2 ## Release v0.1.2 - Multi-Provider LLM Support This release adds support for OpenAI and Anthropic providers, making ADK-Rust a truly multi-provider LLM framework supporting Gemini, OpenAI, and Claude. ### โจ New Features #### OpenAI Provider Support - Full integration with OpenAI GPT models (GPT-4o, GPT-4o-mini, GPT-4-turbo, GPT-3.5-turbo) - `OpenAIClient` and `OpenAIConfig` for easy configuration - Streaming support with proper tool call accumulation - Feature flag: `adk-model = { features = Low 12/7/2025

