PageSourceSearch

https://genkit.dev/docs/js/get-started/

html genkit.dev collected 2026-10-01 13:15:49 UTC 127,871 bytes, 257 lines download raw bytes

1<!DOCTYPE html><html lang="en" dir="ltr" data-theme="dark" data-has-toc data-has-sidebar class="astro-tflm2sh5"> <head><link rel="expect" href="#footer" blocking="render"><meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><title>Get started with Genkit | Genkit</title><link rel="canonical" href="https://genkit.dev/docs/js/get-started/"/><link rel="sitemap" href="/sitemap-index.xml"/><link href="https://genkit.dev/blog/rss.xml" rel="alternate" title="Blog" type="application/rss+xml"/><link rel="shortcut icon" href="/favicon.ico" type="image/x-icon"/><meta name="generator" content="Astro v6.4.6"/><meta name="generator" content="Starlight v0.40.0"/><meta property="og:title" content="Get started with Genkit"/><meta property="og:type" content="article"/><meta property="og:url" content="https://genkit.dev/docs/js/get-started/"/><meta property="og:locale" content="en"/><meta property="og:description" content="Start building with Genkit by picking the guide that matches your stack."/><meta property="og:site_name" content="Genkit"/><meta name="twitter:card" content="summary_large_image"/><meta name="description" content="Start building with Genkit by picking the guide that matches your stack."/><meta name="twitter:site" content="@GenkitFramework"/><meta property="og:image" content="https://genkit.dev/ogimage.png?v=1" width="1085" height="377"/><style>@font-face{font-family:"Google Sans Flex-66a11cfe58cfa40b";src:url("/_astro/fonts/3d57964f99d53374.woff2") format("woff2");font-display:swap;font-weight:100 900;font-style:normal;}@font-face{font-family:"Google Sans Flex-66a11cfe58cfa40b fallback: Arial";src:local("Arial");font-display:swap;font-weight:100 900;font-style:normal;size-adjust:101.2784%;ascent-override:95.3806%;descent-override:28.239%;line-gap-override:0%;}:root{--font-google-sans-text:"Google Sans Flex-66a11cfe58cfa40b","Google Sans Flex-66a11cfe58cfa40b fallback: Arial",Arial,sans-serif;}</style><link rel="preload" href="/_astro/fonts/3d57964f99d53374.woff2" as="font" type="font/woff2" crossorigin> <style>@font-face{font-family:"Google Sans-8583e5c6016affd1";src:url("/_astro/fonts/b155c9a84087d30c.woff2") format("woff2");font-display:swap;font-weight:400 700;font-style:normal;}@font-face{font-family:"Google Sans-8583e5c6016affd1 fallback: Arial";src:local("Arial");font-display:swap;font-weight:400 700;font-style:normal;size-adjust:100.9419%;ascent-override:95.6986%;descent-override:28.3331%;line-gap-override:0%;}:root{--font-google-sans:"Google Sans-8583e5c6016affd1","Google Sans-8583e5c6016affd1 fallback: Arial",Arial,sans-serif;}</style><link rel="preload" href="/_astro/fonts/b155c9a84087d30c.woff2" as="font" type="font/woff2" crossorigin> <style>@font-face{font-family:"Google Sans Code-c6405ddecc835838";src:url("/_astro/fonts/0226a328246f3fa2.woff2") format("woff2");font-display:swap;font-weight:300 800;font-style:normal;}@font-face{font-family:"Google Sans Code-c6405ddecc835838 fallback: Courier New";src:local("Courier New");font-display:swap;font-weight:300 800;font-style:normal;size-adjust:99.9837%;ascent-override:96.6157%;descent-override:28.6047%;}:root{--font-google-sans-mono:"Google Sans Code-c6405ddecc835838","Google Sans Code-c6405ddecc835838 fallback: Courier New",monospace;}</style>
1<script id="genkit-doc-language-config" type="application/json">{"docLanguageSupport":{"/docs/overview":["js","go","dart","python"],"/docs/get-started":["js","go","dart","python"],"/docs/devtools":["js","go","dart","python"],"/docs/flows":["js","go","dart","python"],"/docs/models":["js","go","dart","python"],"/docs/tool-calling":["js","go","dart","python"],"/docs/dotprompt":["js","go","dart","python"],"/docs/context":["js","go","dart"],"/docs/concurrency":["go"],"/docs/middleware":["js","go","dart","python"],"/docs/agentic-patterns":["js","go","dart"],"/docs/interrupts":["js","go","dart","python"],"/docs/chat":["js","go"],"/docs/multi-agent":["js"],"/docs/rag":["js","go","python"],"/docs/model-context-protocol":["js","go"],"/docs/durable-streaming":["js","go"],"/docs/client":["js","go","dart","python"],"/docs/testing":["js","go"],"/docs/evaluation":["js","go","dart","python"],"/docs/error-types":["js","go","dart","python"],"/docs/local-observability":["js","go","dart","python"],"/docs/agents/overview":["js","go","dart","python"],"/docs/agents/define":["js","go","dart","python"],"/docs/agents/run":["js","go","dart","python"],"/docs/agents/http":["js","go","dart","python"],"/docs/agents/a2ui":["js","go","dart"],"/docs/agents/state":["js","go","dart","python"],"/docs/agents/session-stores":["js","go","dart","python"],"/docs/agents/interrupts":["js","go","dart","python"],"/docs/agents/background":["js","go","dart","python"],"/docs/agents/multi-agent":["js","go","dart"],"/docs/agents/custom-orchestration":["js","go","dart","python"],"/docs/agents/errors":["js","go","dart","python"],"/docs/mcp-server":["js","go","dart","python"],"/docs/develop-with-ai":["js","go","dart","python"],"/docs/backend-frameworks/overview":["js","go","dart","python"],"/docs/backend-frameworks/chi":["go"],"/docs/backend-frameworks/django":["python"],"/docs/backend-frameworks/echo":["go"],"/docs/backend-frameworks/express":["js"],"/docs/backend-frameworks/fastapi":["python"],"/docs/backend-frameworks/fastify":["js"],"/docs/backend-frameworks/flask":["python"],"/docs/backend-frameworks/gin":["go"],"/docs/backend-frameworks/hono":["js"],"/docs/backend-frameworks/nestjs":["js"],"/docs/backend-frameworks/nethttp":["go"],"/docs/backend-frameworks/shelf":["dart"],"/docs/app-frameworks/overview":["js","go","dart","python"],"/docs/app-frameworks/angular":["js","go","dart","python"],"/docs/app-frameworks/astro":["js","go","dart","python"],"/docs/app-frameworks/flutter":["js","go","dart","python"],"/docs/app-frameworks/nextjs":["js","go","dart","python"],"/docs/app-frameworks/nuxt":["js","go","dart","python"],"/docs/app-frameworks/react":["js","go","dart","python"],"/docs/app-frameworks/remix":["js","go","dart","python"],"/docs/app-frameworks/sveltekit":["js","go","dart","python"],"/docs/app-frameworks/tanstack-start":["js","go","dart","python"],"/docs/integrations/model-providers":["js","go","dart","python"],"/docs/integrations/google-genai":["js","go","dart","python"],"/docs/integrations/vertex-ai":["js","go","dart","python"],"/docs/integrations/openai":["js","go","dart","python"],"/docs/integrations/openai-compatible":["js","go","python"],"/docs/integrations/anthropic":["js","go","dart","python"],"/docs/integrations/aws-bedrock":["js","go","python"],"/docs/integrations/azure-foundry":["js","go"],"/docs/integrations/xai":["js","go","python"],"/docs/integrations/deepseek":["js","go","python"],"/docs/integrations/openrouter":["go"],"/docs/integrations/kimi":["go"],"/docs/integrations/zai":["go"],"/docs/integrations/dashscope":["go"],"/docs/integrations/ollama":["js","go","python"],"/docs/integrations/toolbox":["js","go"],"/docs/integrations/dev-local-vectorstore":["js","go"],"/docs/integrations/pinecone":["js","go"],"/docs/integrations/chroma":["js"],"/docs/integrations/pgvector":["js","go"],"/docs/integrations/lancedb":["js"],"/docs/integrations/astra-db":["js"],"/docs/integrations/neo4j":["js"],"/docs/integrations/alloydb":["go"],"/docs/integrations/cloud-sql-postgresql":["js","go"],"/docs/integrations/cloud-firestore":["js","go"],"/docs/integrations/vectorsearch-bigquery":["js","go"],"/docs/integrations/vectorsearch-firestore":["js","go"],"/docs/deployment/overview":["js","go","dart","python"],"/docs/deployment/firebase":["js"],"/docs/deployment/cloud-run":["js","go","dart","python"],"/docs/deployment/azure-functions":["js"],"/docs/deployment/aws-lambda":["js"],"/docs/deployment/any-platform":["js","go","dart","python"],"/docs/deployment/authorization":["js","go","dart"],"/docs/integrations/auth0":["js"],"/docs/plugin-authoring/overview":["js","go","dart","python"],"/docs/observability/getting-started":["js","go"],"/docs/observability/authentication":["js","go"],"/docs/observability/telemetry-collection":["js","go","python"],"/docs/observability/advanced-configuration":["js","go"],"/docs/observability/troubleshooting":["js","go"],"/docs/integrations/google-cloud":["js","go","python"],"/docs/observability/otel-genai-semantic-conventions":["dart"],"/docs/tutorials/chat-with-pdf":["js"],"/docs/tutorials/summarize-youtube-videos":["js"],"/docs/api-references":["js","go","dart","python"],"/docs/api-stability":["js","go","dart","python"],"/docs/roadmap":["js","go","dart","python"],"/docs/feedback":["js","go","dart","python"]},"docLanguageAgnostic":{"/docs/overview":false,"/docs/get-started":false,"/docs/devtools":false,"/docs/flows":false,"/docs/models":false,"/docs/tool-calling":false,"/docs/dotprompt":false,"/docs/context":false,"/docs/concurrency":false,"/docs/middleware":false,"/docs/agentic-patterns":false,"/docs/interrupts":false,"/docs/chat":false,"/docs/multi-agent":false,"/docs/rag":false,"/docs/model-context-protocol":false,"/docs/durable-streaming":false,"/docs/client":true,"/docs/testing":false,"/docs/evaluation":false,"/docs/error-types":false,"/docs/local-observability":false,"/docs/agents/overview":false,"/docs/agents/define":false,"/docs/agents/run":false,"/docs/agents/http":false,"/docs/agents/a2ui":false,"/docs/agents/state":false,"/docs/agents/session-stores":false,"/docs/agents/interrupts":false,"/docs/agents/background":false,"/docs/agents/multi-agent":false,"/docs/agents/custom-orchestration":false,"/docs/agents/errors":false,"/docs/mcp-server":true,"/docs/develop-with-ai":false,"/docs/backend-frameworks/overview":false,"/docs/backend-frameworks/chi":false,"/docs/backend-frameworks/django":false,"/docs/backend-frameworks/echo":false,"/docs/backend-frameworks/express":false,"/docs/backend-frameworks/fastapi":false,"/docs/backend-frameworks/fastify":false,"/docs/backend-frameworks/flask":false,"/docs/backend-frameworks/gin":false,"/docs/backend-frameworks/hono":false,"/docs/backend-frameworks/nestjs":false,"/docs/backend-frameworks/nethttp":false,"/docs/backend-frameworks/shelf":false,"/docs/app-frameworks/overview":false,"/docs/app-frameworks/angular":false,"/docs/app-frameworks/astro":false,"/docs/app-frameworks/flutter":true,"/docs/app-frameworks/nextjs":false,"/docs/app-frameworks/nuxt":false,"/docs/app-frameworks/react":true,"/docs/app-frameworks/remix":false,"/docs/app-frameworks/sveltekit":false,"/docs/app-frameworks/tanstack-start":false,"/docs/integrations/model-providers":false,"/docs/integrations/google-genai":false,"/docs/integrations/vertex-ai":false,"/docs/integrations/openai":false,"/docs/integrations/openai-compatible":false,"/docs/integrations/anthropic":false,"/docs/integrations/aws-bedrock":false,"/docs/integrations/azure-foundry":false,"/docs/integrations/xai":false,"/docs/integrations/deepseek":false,"/docs/integrations/openrouter":false,"/docs/integrations/kim
1i":false,"/docs/integrations/zai":false,"/docs/integrations/dashscope":false,"/docs/integrations/ollama":false,"/docs/integrations/toolbox":false,"/docs/integrations/dev-local-vectorstore":false,"/docs/integrations/pinecone":false,"/docs/integrations/chroma":false,"/docs/integrations/pgvector":false,"/docs/integrations/lancedb":false,"/docs/integrations/astra-db":false,"/docs/integrations/neo4j":false,"/docs/integrations/alloydb":false,"/docs/integrations/cloud-sql-postgresql":false,"/docs/integrations/cloud-firestore":false,"/docs/integrations/vectorsearch-bigquery":false,"/docs/integrations/vectorsearch-firestore":false,"/docs/deployment/overview":false,"/docs/deployment/firebase":false,"/docs/deployment/cloud-run":false,"/docs/deployment/azure-functions":false,"/docs/deployment/aws-lambda":false,"/docs/deployment/any-platform":false,"/docs/deployment/authorization":false,"/docs/integrations/auth0":false,"/docs/plugin-authoring/overview":false,"/docs/observability/getting-started":false,"/docs/observability/authentication":false,"/docs/observability/telemetry-collection":false,"/docs/observability/advanced-configuration":false,"/docs/observability/troubleshooting":false,"/docs/integrations/google-cloud":false,"/docs/observability/otel-genai-semantic-conventions":false,"/docs/tutorials/chat-with-pdf":false,"/docs/tutorials/summarize-youtube-videos":false,"/docs/api-references":false,"/docs/api-stability":false,"/docs/roadmap":true,"/docs/feedback":true}}</script>
1<script type="module" src="/_astro/DocsLanguageClient.astro_astro_type_script_index_0_lang.BawiTTpR.js"></script>
1<style>
2  /* Hide alternate language blocks until UnifiedPageManager sets data-genkit-lang. */
3  .lang-content {
4    display: none !important;
5    visibility: hidden !important;
6  }
7
8  html[data-genkit-lang='js'] .lang-content[data-lang~='js'],
9  html[data-genkit-lang='go'] .lang-content[data-lang~='go'],
10  html[data-genkit-lang='python'] .lang-content[data-lang~='python'],
11  html[data-genkit-lang='dart'] .lang-content[data-lang~='dart'] {
12    display: block !important;
13    visibility: visible !important;
14  }
15
16  /* Highlight the SDK selector card that matches the active language. */
17  html[data-genkit-lang='js'] .framework-card[data-selected-lang='js'],
18  html[data-genkit-lang='go'] .framework-card[data-selected-lang='go'],
19  html[data-genkit-lang='python'] .framework-card[data-selected-lang='python'],
20  html[data-genkit-lang='dart'] .framework-card[data-selected-lang='dart'] {
21    border-color: var(--sl-color-text-accent);
22    background: var(--sl-color-gray-6);
23  }
24
25  html[data-genkit-lang='js'] .framework-card[data-selected-lang='js'] .selected-indicator,
26  html[data-genkit-lang='go'] .framework-card[data-selected-lang='go'] .selected-indicator,
27  html[data-genkit-lang='python'] .framework-card[data-selected-lang='python'] .selected-indicator,
28  html[data-genkit-lang='dart'] .framework-card[data-selected-lang='dart'] .selected-indicator {
29    display: inline-flex;
30  }
31</style>
31<script>
32	window.StarlightThemeProvider = (() => {
33		const storedTheme =
34			typeof localStorage !== 'undefined' && localStorage.getItem('starlight-theme');
35		const theme =
36			storedTheme ||
37			(window.matchMedia('(prefers-color-scheme: light)').matches ? 'light' : 'dark');
38		document.documentElement.dataset.theme = theme === 'light' ? 'light' : 'dark';
39		return {
40			updatePickers(theme = storedTheme || 'auto') {
41				document.querySelectorAll('starlight-theme-select').forEach((picker) => {
42					const select = picker.querySelector('select');
43					if (select) select.value = theme;
44					/** @type {HTMLTemplateElement | null} */
45					const tmpl = document.querySelector(`#theme-icons`);
46					const newIcon = tmpl && tmpl.content.querySelector('.' + theme);
47					if (newIcon) {
48						const oldIcon = picker.querySelector('svg.label-icon');
49						if (oldIcon) {
50							oldIcon.replaceChildren(...newIcon.cloneNode(true).childNodes);
51						}
52					}
53				});
54			},
55		};
56	})();
57</script>
57<template id="theme-icons"><svg aria-hidden="true" class="light astro-gbrymhch" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M5 12a1 1 0 0 0-1-1H3a1 1 0 0 0 0 2h1a1 1 0 0 0 1-1Zm.64 5-.71.71a1 1 0 0 0 0 1.41 1 1 0 0 0 1.41 0l.71-.71A1 1 0 0 0 5.64 17ZM12 5a1 1 0 0 0 1-1V3a1 1 0 0 0-2 0v1a1 1 0 0 0 1 1Zm5.66 2.34a1 1 0 0 0 .7-.29l.71-.71a1 1 0 1 0-1.41-1.41l-.66.71a1 1 0 0 0 0 1.41 1 1 0 0 0 .66.29Zm-12-.29a1 1 0 0 0 1.41 0 1 1 0 0 0 0-1.41l-.71-.71a1.004 1.004 0 1 0-1.43 1.41l.73.71ZM21 11h-1a1 1 0 0 0 0 2h1a1 1 0 0 0 0-2Zm-2.64 6A1 1 0 0 0 17 18.36l.71.71a1 1 0 0 0 1.41 0 1 1 0 0 0 0-1.41l-.76-.66ZM12 6.5a5.5 5.5 0 1 0 5.5 5.5A5.51 5.51 0 0 0 12 6.5Zm0 9a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7Zm0 3.5a1 1 0 0 0-1 1v1a1 1 0 0 0 2 0v-1a1 1 0 0 0-1-1Z"/></svg><svg aria-hidden="true" class="dark astro-gbrymhch" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21.64 13a1 1 0 0 0-1.05-.14 8.049 8.049 0 0 1-3.37.73 8.15 8.15 0 0 1-8.14-8.1 8.59 8.59 0 0 1 .25-2A1 1 0 0 0 8 2.36a10.14 10.14 0 1 0 14 11.69 1 1 0 0 0-.36-1.05Zm-9.5 6.69A8.14 8.14 0 0 1 7.08 5.22v.27a10.15 10.15 0 0 0 10.14 10.14 9.784 9.784 0 0 0 2.1-.22 8.11 8.11 0 0 1-7.18 4.32v-.04Z"/></svg><svg aria-hidden="true" class="auto astro-gbrymhch" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21 14h-1V7a3 3 0 0 0-3-3H7a3 3 0 0 0-3 3v7H3a1 1 0 0 0-1 1v2a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3v-2a1 1 0 0 0-1-1ZM6 7a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v7H6V7Zm14 10a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-1h16v1Z"/></svg></template><link rel="stylesheet" href="/_astro/print.DNXP8c50.css" media="print"><link rel="stylesheet" href="/_astro/middleware.o8kiKIAk.css">
58<link rel="stylesheet" href="/_astro/Header.BKyVBNXD.css">
59<link rel="stylesheet" href="/_astro/Code.jpKYEXY9.css">
60<style>@layer starlight.components{svg:where(.astro-gbrymhch){color:var(--sl-icon-color);font-size:var(--sl-icon-size, 1em);width:1em;height:1em}}
61</style>
61<script type="module" src="/_astro/page.B_tncCx8.js"></script>
61<style>.framework-card:where(.astro-aluzozqj){position:relative;display:flex;align-items:flex-start;gap:.875rem;padding:1rem;border:1px solid var(--sl-color-gray-5);border-radius:.5rem;background:var(--sl-color-black);text-decoration:none;color:inherit;transition:border-color .15s ease,background-color .15s ease,transform .15s ease}.selected-indicator:where(.astro-aluzozqj){display:none;position:absolute;top:.75rem;right:.75rem;align-items:center;padding:.1rem .5rem;font-size:var(--sl-text-xs);font-weight:600;line-height:1.5;color:var(--sl-color-text-invert);background:var(--sl-color-text-accent);border-radius:999px}.framework-card:where(.astro-aluzozqj):hover{border-color:var(--sl-color-gray-2);background:var(--sl-color-gray-7, var(--sl-color-gray-6))}.icon:where(.astro-aluzozqj){display:block;width:2rem;height:2rem;flex-shrink:0}.icon-mask:where(.astro-aluzozqj){background-color:var(--icon-color);-webkit-mask-image:var(--icon-url);mask-image:var(--icon-url);-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center}.icon-img:where(.astro-aluzozqj){object-fit:contain;object-position:center}.text:where(.astro-aluzozqj){display:flex;flex-direction:column;gap:.25rem;min-width:0}.title:where(.astro-aluzozqj){color:var(--sl-color-white);font-weight:600;font-size:var(--sl-text-base);line-height:var(--sl-line-height-headings)}.description:where(.astro-aluzozqj){color:var(--sl-color-gray-3);font-size:var(--sl-text-sm);line-height:1.5}
62</style></head> <body class="astro-tflm2sh5"> <a href="#_top" class="astro-r4hsx2k4">Skip to content</a> <div class="page sl-flex astro-yqx6a56b"> <header class="header astro-yqx6a56b"><div class="genkit-header flex items-center justify-between h-full text-foreground"> <div class="flex items-center gap-6 min-w-0"> <a href="/" class="flex items-center shrink-0" aria-label="Genkit home"> <img src="/_astro/genkit_logo_horizontal_knockout.D6s66avI_ZDuFi0.webp" alt="Genkit" loading="lazy" decoding="async" width="3312" height="1792" class="genkit-logo genkit-logo-knockout relative top-[-1.5px] h-16 w-auto"> <img src="/_astro/genkit_logo_horizontal_light.bvp0L3tq_Z1mT46V.webp" alt="Genkit" loading="lazy" decoding="async" width="3312" height="1792" class="genkit-logo genkit-logo-light relative top-[-1.5px] h-16 w-auto"> </a> <div class="hidden font-medium gap-6 *:text-base *:text-muted *:no-underline *:whitespace-nowrap *:transition-colors *:duration-200 *:hover:text-foreground *:aria-[current=page]:text-genkit-primary min-[50rem]:flex"> <a href="/docs/get-started" data-genkit-docs-entry aria-current="page">Docs</a> <a href="/blog">Blog</a> <a href="/docs/roadmap">Roadmap</a> </div> </div> <div class="flex items-center gap-3"> <div> <site-search class=" astro-4qhoeflg" data-translations="{&quot;placeholder&quot;:&quot;Search&quot;}"> <button data-open-modal disabled aria-label="Search" aria-keyshortcuts="Control+K" class="astro-4qhoeflg"> <svg aria-hidden="true" class="astro-4qhoeflg astro-gbrymhch" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21.71 20.29 18 16.61A9 9 0 1 0 16.61 18l3.68 3.68a.999.999 0 0 0 1.42 0 1 1 0 0 0 0-1.39ZM11 18a7 7 0 1 1 0-14 7 7 0 0 1 0 14Z"/></svg> <span class="sl-hidden md:sl-block astro-4qhoeflg" aria-hidden="true">Search</span> <kbd class="sl-hidden md:sl-flex astro-4qhoeflg" style="display: none;"> <kbd class="astro-4qhoeflg">Ctrl</kbd><kbd class="astro-4qhoeflg">K</kbd> </kbd> </button> <dialog style="padding:0" aria-label="Search" class="astro-4qhoeflg"> <div class="dialog-frame sl-flex astro-4qhoeflg">  <button data-close-modal class="sl-flex md:sl-hidden astro-4qhoeflg"> Cancel </button> <div class="search-container astro-4qhoeflg"> <div id="starlight__search" class="astro-4qhoeflg"></div> </div> </div> </dialog> </site-search>  
62<script>
63	(() => {
64		const openBtn = document.querySelector('button[data-open-modal]');
65		const shortcut = openBtn?.querySelector('kbd');
66		if (!openBtn || !(shortcut instanceof HTMLElement)) return;
67		const platformKey = shortcut.querySelector('kbd');
68		if (platformKey && /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)) {
69			platformKey.textContent = '⌘';
70			openBtn.setAttribute('aria-keyshortcuts', 'Meta+K');
71		}
72		shortcut.style.display = '';
73	})();
74</script>
74 
74<script type="module" src="/_astro/Search.astro_astro_type_script_index_0_lang.lq3t8uE2.js"></script>
74  </div> <div class="items-center gap-1 *:inline-flex *:items-center *:justify-center *:w-8 *:h-8 *:text-muted *:transition-colors *:duration-200 *:hover:text-foreground hidden min-[50rem]:flex"> <a href="https://github.com/genkit-ai/genkit" aria-label="GitHub"> <svg viewBox="0 0 24 24" fill="currentColor" class="w-4 h-4">
75  <path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z" />
76</svg> </a><a href="https://discord.gg/qXt5zzQKpc" aria-label="Discord"> <svg viewBox="6 6 23 23" fill="currentColor" class="w-4 h-4">
77  <path d="M25.4728 10.3104C23.9963 9.62077 22.4176 9.1196 20.767 8.83423C20.5643 9.20006 20.3275 9.69212 20.1642 10.0836C18.4097 9.82015 16.6712 9.82015 14.9489 10.0836C14.7857 9.69212 14.5435 9.20006 14.339 8.83423C12.6867 9.1196 11.1061 9.62261 9.62959 10.314C6.65146 14.8064 5.84414 19.1872 6.2478 23.5058C8.22305 24.9782 10.1373 25.8727 12.0193 26.458C12.4839 25.8196 12.8983 25.141 13.2553 24.4258C12.5754 24.1679 11.9242 23.8497 11.3088 23.4802C11.4721 23.3594 11.6318 23.2332 11.786 23.1034C15.5392 24.8557 19.6171 24.8557 23.3254 23.1034C23.4815 23.2332 23.6411 23.3594 23.8026 23.4802C23.1854 23.8515 22.5324 24.1697 21.8525 24.4277C22.2095 25.141 22.6221 25.8215 23.0885 26.4598C24.9723 25.8745 26.8883 24.9801 28.8636 23.5058C29.3372 18.4994 28.0545 14.1589 25.4728 10.3104ZM13.7667 20.8499C12.64 20.8499 11.7161 19.7999 11.7161 18.5214C11.7161 17.2428 12.6203 16.1911 13.7667 16.1911C14.9131 16.1911 15.837 17.241 15.8173 18.5214C15.819 19.7999 14.9131 20.8499 13.7667 20.8499ZM21.3447 20.8499C20.2181 20.8499 19.2941 19.7999 19.2941 18.5214C19.2941 17.2428 20.1983 16.1911 21.3447 16.1911C22.4911 16.1911 23.4151 17.241 23.3953 18.5214C23.3953 19.7999 22.4911 20.8499 21.3447 20.8499Z" />
78</svg> </a><a href="https://x.com/GenkitFramework" aria-label="X"> <svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor" class="w-4 h-4"><path d="M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z" /></svg> </a><a href="https://www.linkedin.com/company/genkit" aria-label="LinkedIn"> <svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor" class="w-4 h-4"><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z" /></svg> </a><a href="https://reddit.com/r/GenkitFramework" aria-label="Reddit"> <svg width="24" height="24" viewBox="0.5 3.5 23 17" fill="currentColor" class="w-4 h-4"><path d="M22 11.816c0-1.256-1.02-2.277-2.277-2.277-.593 0-1.122.24-1.526.613-1.48-.965-3.455-1.594-5.647-1.69l1.171-3.702 3.18.748c.008.89.727 1.609 1.617 1.609.896 0 1.623-.727 1.623-1.623S19.414 4.87 18.518 4.87c-.63 0-1.174.362-1.44.889l-3.592-.844a.39.39 0 0 0-.46.276L11.751 9.46c-2.264.065-4.31.695-5.835 1.677A2.263 2.263 0 0 0 4.277 9.54C3.02 9.54 2 10.56 2 11.816c0 .889.518 1.652 1.265 2.022a4.028 4.028 0 0 0-.053.648c0 3.396 4.053 6.155 9.042 6.155 4.99 0 9.042-2.76 9.042-6.155 0-.203-.017-.403-.049-.6A2.272 2.272 0 0 0 22 11.816zM18.518 5.814a.679.679 0 1 1 0 1.358.679.679 0 0 1 0-1.358zM7.895 13.452c0-.748.607-1.355 1.355-1.355.748 0 1.355.607 1.355 1.355 0 .748-.607 1.355-1.355 1.355a1.356 1.356 0 0 1-1.355-1.355zm7.594 3.673c-.916.916-2.694.99-3.236.99-.541 0-2.333-.089-3.236-.99a.326.326 0 0 1 0-.463.326.326 0 0 1 .463 0c.575.575 1.8.779 2.773.779.974 0 2.199-.204 2.773-.779a.326.326 0 0 1 .463 0 .326.326 0 0 1 0 .463zm-.234-2.318a1.356 1.356 0 0 1-1.355-1.355c0-.748.607-1.355 1.355-1.355.748 0 1.355.607 1.355 1.355 0 .748-.607 1.355-1.355 1.355z" /></svg> </a><a href="https://genkit.dev/blog/rss.xml" aria-label="RSS"> <svg viewBox="0 0 24 24" fill="currentColor" class="w-4 h-4"><path d="M6.18 15.64a2.18 2.18 0 0 1 2.18 2.18C8.36 19 7.38 20 6.18 20A2.18 2.18 0 0 1 4 17.82a2.18 2.18 0 0 1 2.18-2.18M4 4.44A15.56 15.56 0 0 1 19.56 20h-2.83A12.73 12.73 0 0 0 4 7.27V4.44m0 5.66a9.9 9.9 0 0 1 9.9 9.9h-2.83A7.07 7.07 0 0 0 4 12.93v-2.83Z" /></svg> </a> </div> <div class="hidden min-[50rem]:block border-l border-border-muted h-10 pl-4"> <starlight-theme-select>  <label style="--sl-select-width: 6.25em" class="astro-ntpejt7s"> <span class="sr-only astro-ntpejt7s">Select theme</span> <svg aria-hidden="true" class="icon label-icon astro-ntpejt7s astro-gbrymhch" width="16" height="16" viewB
78ox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21 14h-1V7a3 3 0 0 0-3-3H7a3 3 0 0 0-3 3v7H3a1 1 0 0 0-1 1v2a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3v-2a1 1 0 0 0-1-1ZM6 7a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v7H6V7Zm14 10a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-1h16v1Z"/></svg> <select autocomplete="off" class="astro-ntpejt7s"> <option value="dark" class="astro-ntpejt7s">Dark</option><option value="light" class="astro-ntpejt7s">Light</option><option value="auto" selected class="astro-ntpejt7s">Auto</option> </select> <svg aria-hidden="true" class="icon caret astro-ntpejt7s astro-gbrymhch" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M17 9.17a1 1 0 0 0-1.41 0L12 12.71 8.46 9.17a1 1 0 1 0-1.41 1.42l4.24 4.24a1.002 1.002 0 0 0 1.42 0L17 10.59a1.002 1.002 0 0 0 0-1.42Z"/></svg> </label> </starlight-theme-select>  
78<script>
79	StarlightThemeProvider.updatePickers();
80</script>
80 
80<script type="module">const r="starlight-theme",o=e=>e==="auto"||e==="dark"||e==="light"?e:"auto",c=()=>o(typeof localStorage<"u"&&localStorage.getItem(r));function n(e){typeof localStorage<"u"&&localStorage.setItem(r,e==="light"||e==="dark"?e:"")}const l=()=>matchMedia("(prefers-color-scheme: light)").matches?"light":"dark";function t(e){StarlightThemeProvider.updatePickers(e),document.documentElement.dataset.theme=e==="auto"?l():e,n(e)}matchMedia("(prefers-color-scheme: light)").addEventListener("change",()=>{c()==="auto"&&t("auto")});class s extends HTMLElement{constructor(){super(),t(c()),this.querySelector("select")?.addEventListener("change",a=>{a.currentTarget instanceof HTMLSelectElement&&t(o(a.currentTarget.value))})}}customElements.define("starlight-theme-select",s);</script>
80 
80<script type="module">class s extends HTMLElement{constructor(){super();const e=this.querySelector("select");e&&(e.addEventListener("change",t=>{t.currentTarget instanceof HTMLSelectElement&&(window.location.pathname=t.currentTarget.value)}),window.addEventListener("pageshow",t=>{if(!t.persisted)return;const n=e.querySelector("option[selected]")?.index;n!==e.selectedIndex&&(e.selectedIndex=n??0)}))}}customElements.define("starlight-lang-select",s);</script>
80 </div> </div> </div></header> <nav class="sidebar print:hidden astro-yqx6a56b" aria-label="Main"> <starlight-menu-button class="print:hidden astro-di4rq4ar"> <button aria-expanded="false" aria-label="Menu" aria-controls="starlight__sidebar" class="sl-flex md:sl-hidden astro-di4rq4ar"> <svg aria-hidden="true" class="open-menu astro-di4rq4ar astro-gbrymhch" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M3 8h18a1 1 0 1 0 0-2H3a1 1 0 0 0 0 2Zm18 8H3a1 1 0 0 0 0 2h18a1 1 0 0 0 0-2Zm0-5H3a1 1 0 0 0 0 2h18a1 1 0 0 0 0-2Z"/></svg> <svg aria-hidden="true" class="close-menu astro-di4rq4ar astro-gbrymhch" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="m13.41 12 6.3-6.29a1.004 1.004 0 1 0-1.42-1.42L12 10.59l-6.29-6.3a1.004 1.004 0 0 0-1.42 1.42l6.3 6.29-6.3 6.29a1 1 0 0 0 0 1.42.998.998 0 0 0 1.42 0l6.29-6.3 6.29 6.3a.999.999 0 0 0 1.42 0 1 1 0 0 0 0-1.42L13.41 12Z"/></svg> </button> </starlight-menu-button> 
80<script type="module">class s extends HTMLElement{constructor(){super(),this.btn=this.querySelector("button"),this.btn.addEventListener("click",()=>this.toggleExpanded());const t=this.closest("nav");t&&t.addEventListener("keyup",e=>this.closeOnEscape(e))}setExpanded(t){this.setAttribute("aria-expanded",String(t)),document.body.toggleAttribute("data-mobile-menu-expanded",t)}toggleExpanded(){this.setExpanded(this.getAttribute("aria-expanded")!=="true")}closeOnEscape(t){t.code==="Escape"&&(this.setExpanded(!1),this.btn.focus())}}customElements.define("starlight-menu-button",s);</script>
80  <div id="starlight__sidebar" class="sidebar-pane astro-yqx6a56b"> <div class="sidebar-content sl-flex astro-yqx6a56b"> <div class="docs-nav-language-selector astro-b4beqkka"><div class="lang-dropdown astro-b4beqkka" id="lang-dropdown"><button class="lang-dropdown-trigger astro-b4beqkka" aria-haspopup="listbox" aria-expanded="false" aria-label="Filter docs by programming language" data-selected-lang="js"><span class="lang-icon-badge astro-b4beqkka" data-icon-lang="js"><svg fill="currentColor" viewBox="0 0 32 32" class="astro-b4beqkka">
81  <path d="M0 16v16h32v-32h-32zM25.786 14.724c0.813 0.203 1.432 0.568 2.005 1.156 0.292 0.312 0.729 0.885 0.766 1.026 0.010 0.042-1.38 0.974-2.224 1.495-0.031 0.021-0.156-0.109-0.292-0.313-0.411-0.599-0.844-0.859-1.505-0.906-0.969-0.063-1.594 0.443-1.589 1.292-0.005 0.208 0.042 0.417 0.135 0.599 0.214 0.443 0.615 0.708 1.854 1.245 2.292 0.984 3.271 1.635 3.88 2.557 0.682 1.031 0.833 2.677 0.375 3.906-0.51 1.328-1.771 2.234-3.542 2.531-0.547 0.099-1.849 0.083-2.438-0.026-1.286-0.229-2.505-0.865-3.255-1.698-0.297-0.323-0.87-1.172-0.833-1.229 0.016-0.021 0.146-0.104 0.292-0.188s0.682-0.396 1.188-0.688l0.922-0.536 0.193 0.286c0.271 0.411 0.859 0.974 1.214 1.161 1.021 0.542 2.422 0.464 3.115-0.156 0.281-0.234 0.438-0.594 0.417-0.958 0-0.37-0.047-0.536-0.24-0.813-0.25-0.354-0.755-0.656-2.198-1.281-1.651-0.714-2.365-1.151-3.010-1.854-0.406-0.464-0.708-1.010-0.88-1.599-0.12-0.453-0.151-1.589-0.057-2.042 0.339-1.599 1.547-2.708 3.281-3.036 0.563-0.109 1.875-0.068 2.427 0.068zM18.276 16.063l0.010 1.307h-4.167v11.839h-2.948v-11.839h-4.161v-1.281c0-0.714 0.016-1.307 0.036-1.323 0.016-0.021 2.547-0.031 5.62-0.026l5.594 0.016z" />
82</svg></span><span class="lang-icon-badge astro-b4beqkka" data-icon-lang="go"><svg viewBox="0 0 24 24" fill="currentColor" class="astro-b4beqkka">
83  <path d="M1.811 10.231c-.047 0-.058-.023-.035-.059l.246-.315c.023-.035.081-.058.128-.058h4.172c.046 0 .058.035.035.07l-.199.303c-.023.036-.082.07-.117.07zM.047 11.306c-.047 0-.059-.023-.035-.058l.245-.316c.023-.035.082-.058.129-.058h5.328c.047 0 .07.035.058.07l-.093.28c-.012.047-.058.07-.105.07zm2.828 1.075c-.047 0-.059-.035-.035-.07l.163-.292c.023-.035.07-.07.117-.07h2.337c.047 0 .07.035.07.082l-.023.28c0 .047-.047.082-.082.082zm12.129-2.36c-.736.187-1.239.327-1.963.514-.176.046-.187.058-.34-.117-.174-.199-.303-.327-.548-.444-.737-.362-1.45-.257-2.115.175-.795.514-1.204 1.274-1.192 2.22.011.935.654 1.706 1.577 1.835.795.105 1.46-.175 1.987-.77.105-.13.198-.27.315-.434H10.47c-.245 0-.304-.152-.222-.35.152-.362.432-.97.596-1.274a.315.315 0 01.292-.187h4.253c-.023.316-.023.631-.07.947a4.983 4.983 0 01-.958 2.29c-.841 1.11-1.94 1.8-3.33 1.986-1.145.152-2.209-.07-3.143-.77-.865-.655-1.356-1.52-1.484-2.595-.152-1.274.222-2.419.993-3.424.83-1.086 1.928-1.776 3.272-2.02 1.098-.2 2.15-.07 3.096.571.62.41 1.063.97 1.356 1.648.07.105.023.164-.117.2m3.868 6.461c-1.064-.024-2.034-.328-2.852-1.029a3.665 3.665 0 01-1.262-2.255c-.21-1.32.152-2.489.947-3.529.853-1.122 1.881-1.706 3.272-1.95 1.192-.21 2.314-.095 3.33.595.923.63 1.496 1.484 1.648 2.605.198 1.578-.257 2.863-1.344 3.962-.771.783-1.718 1.273-2.805 1.495-.315.06-.63.07-.934.106zm2.78-4.72c-.011-.153-.011-.27-.034-.387-.21-1.157-1.274-1.81-2.384-1.554-1.087.245-1.788.935-2.045 2.033-.21.912.234 1.835 1.075 2.21.643.28 1.285.244 1.905-.07.923-.48 1.425-1.228 1.484-2.233z" />
84</svg></span><span class="lang-icon-badge astro-b4beqkka" data-icon-lang="dart"><svg viewBox="0 0 500 500" fill="currentColor" class="astro-b4beqkka">
85<path d="M361.48,76.85c2.8,0,5.56,0.03,8.29,0.16c-25.24-25.24-60.56-60.56-60.56-60.56
86		C301.74,8.94,286.18,0,273.03,0c-11.31,0-22.41,2.26-29.6,6.58L103.6,76.85H361.48z" />
87<path d="M361.48,94.2H104.82l317.69,317.69l77.48-0.71l0-203.95L396.05,103.29
88		C386.33,95.59,377.06,94.2,361.48,94.2z" />
89<path d="M94.2,364.21c0,24.93,2.89,28.85,13.92,39.93l-0.01,0.01L203.95,500l207.24,0l-0.71-75.61L94.2,108.11
90		V364.21z" />
91<path d="M76.85,364.21l0-261.42L6.58,250C3.76,255.98,0,266.38,0,273.03c0,14.36,6.32,29.06,16.45,39.47
92		l60.57,60.58C76.91,370.34,76.85,367.41,76.85,364.21z" />
93</svg></span><span class="lang-icon-badge astro-b4beqkka" data-icon-lang="python"><svg viewBox="0 0 24 24" fill="currentColor" class="astro-b4beqkka">
94  <path d="M14.25.18l.9.2.73.26.59.3.45.32.34.34.25.34.16.33.1.3.04.26.02.2-.01.13V8.5l-.05.63-.13.55-.21.46-.26.38-.3.31-.33.25-.35.19-.35.14-.33.1-.3.07-.26.04-.21.02H8.77l-.69.05-.59.14-.5.22-.41.27-.33.32-.27.35-.2.36-.15.37-.1.35-.07.32-.04.27-.02.21v3.06H3.17l-.21-.03-.28-.07-.32-.12-.35-.18-.36-.26-.36-.36-.35-.46-.32-.59-.28-.73-.21-.88-.14-1.05-.05-1.23.06-1.22.16-1.04.24-.87.32-.71.36-.57.4-.44.42-.33.42-.24.4-.16.36-.1.32-.05.24-.01h.16l.06.01h8.16v-.83H6.18l-.01-2.75-.02-.37.05-.34.11-.31.17-.28.25-.26.31-.23.38-.2.44-.18.51-.15.58-.12.64-.1.71-.06.77-.04.84-.02 1.27.05zm-6.3 1.98l-.23.33-.08.41.08.41.23.34.33.22.41.09.41-.09.33-.22.23-.34.08-.41-.08-.41-.23-.33-.33-.22-.41-.09-.41.09zm13.09 3.95l.28.06.32.12.35.18.36.27.36.35.35.47.32.59.28.73.21.88.14 1.04.05 1.23-.06 1.23-.16 1.04-.24.86-.32.71-.36.57-.4.45-.42.33-.42.24-.4.16-.36.09-.32.05-.24.02-.16-.01h-8.22v.82h5.84l.01 2.76.02.36-.05.34-.11.31-.17.29-.25.25-.31.24-.38.2-.44.17-.51.15-.58.13-.64.09-.71.07-.77.04-.84.01-1.27-.04-1.07-.14-.9-.2-.73-.25-.59-.3-.45-.33-.34-.34-.25-.34-.16-.33-.1-.3-.04-.25-.02-.2.01-.13v-5.34l.05-.64.13-.54.21-.46.26-.38.3-.32.33-.24.35-.2.35-.14.33-.1.3-.06.26-.04.21-.02.13-.01h5.84l.69-.05.59-.14.5-.21.41-.28.33-.32.27-.35.2-.36.15-.36.1-.35.07-.32.04-.28.02-.21V6.07h2.09l.14.01zm-6.47 14.25l-.23.33-.08.41.08.41.23.33.33.23.41.08.41-.08.33-.23.23-.33.08-.41-.08-.41-.23-.33-.33-.23-.41-.08-.41.08z" />
95</svg></span><span class="lang-trigger-label astro-b4beqkka"><span class="lang-trigger-name astro-b4beqkka">TypeScript</span></span><svg class="lang-chevron astro-b4beqkka" width="10" height="6" viewBox="0 0 10 6" aria-hidden="true" fill="none"><path d="M1 1l4 4 4-4" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="astro-b4beqkka"></path></svg></button><ul class="lang-dropdown-menu astro-b4beqkka" role="listbox" aria-label="Filter docs by programming language"><li class="lang-option astro-b4beqkka" role="option" data-lang="js" aria-selected="true" tabindex="-1"><span class="lang-icon-badge astro-b4beqkka"><svg fill="currentColor" viewBox="0 0 32 32" class="astro-b4beqkka">
96  <path d="M0 16v16h32v-32h-32zM25.786 14.724c0.813 0.203 1.432 0.568 2.005 1.156 0.292 0.312 0.729 0.885 0.766 1.026 0.010 0.042
96-1.38 0.974-2.224 1.495-0.031 0.021-0.156-0.109-0.292-0.313-0.411-0.599-0.844-0.859-1.505-0.906-0.969-0.063-1.594 0.443-1.589 1.292-0.005 0.208 0.042 0.417 0.135 0.599 0.214 0.443 0.615 0.708 1.854 1.245 2.292 0.984 3.271 1.635 3.88 2.557 0.682 1.031 0.833 2.677 0.375 3.906-0.51 1.328-1.771 2.234-3.542 2.531-0.547 0.099-1.849 0.083-2.438-0.026-1.286-0.229-2.505-0.865-3.255-1.698-0.297-0.323-0.87-1.172-0.833-1.229 0.016-0.021 0.146-0.104 0.292-0.188s0.682-0.396 1.188-0.688l0.922-0.536 0.193 0.286c0.271 0.411 0.859 0.974 1.214 1.161 1.021 0.542 2.422 0.464 3.115-0.156 0.281-0.234 0.438-0.594 0.417-0.958 0-0.37-0.047-0.536-0.24-0.813-0.25-0.354-0.755-0.656-2.198-1.281-1.651-0.714-2.365-1.151-3.010-1.854-0.406-0.464-0.708-1.010-0.88-1.599-0.12-0.453-0.151-1.589-0.057-2.042 0.339-1.599 1.547-2.708 3.281-3.036 0.563-0.109 1.875-0.068 2.427 0.068zM18.276 16.063l0.010 1.307h-4.167v11.839h-2.948v-11.839h-4.161v-1.281c0-0.714 0.016-1.307 0.036-1.323 0.016-0.021 2.547-0.031 5.62-0.026l5.594 0.016z" />
97</svg></span><span class="lang-option-label astro-b4beqkka"><span class="astro-b4beqkka">TypeScript</span></span><svg class="lang-check astro-b4beqkka" width="14" height="14" viewBox="0 0 14 14" fill="none" aria-hidden="true"><path d="M2.5 7l3.5 3.5 6-6" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="astro-b4beqkka"></path></svg></li><li class="lang-option astro-b4beqkka" role="option" data-lang="go" aria-selected="false" tabindex="-1"><span class="lang-icon-badge astro-b4beqkka"><svg viewBox="0 0 24 24" fill="currentColor" class="astro-b4beqkka">
98  <path d="M1.811 10.231c-.047 0-.058-.023-.035-.059l.246-.315c.023-.035.081-.058.128-.058h4.172c.046 0 .058.035.035.07l-.199.303c-.023.036-.082.07-.117.07zM.047 11.306c-.047 0-.059-.023-.035-.058l.245-.316c.023-.035.082-.058.129-.058h5.328c.047 0 .07.035.058.07l-.093.28c-.012.047-.058.07-.105.07zm2.828 1.075c-.047 0-.059-.035-.035-.07l.163-.292c.023-.035.07-.07.117-.07h2.337c.047 0 .07.035.07.082l-.023.28c0 .047-.047.082-.082.082zm12.129-2.36c-.736.187-1.239.327-1.963.514-.176.046-.187.058-.34-.117-.174-.199-.303-.327-.548-.444-.737-.362-1.45-.257-2.115.175-.795.514-1.204 1.274-1.192 2.22.011.935.654 1.706 1.577 1.835.795.105 1.46-.175 1.987-.77.105-.13.198-.27.315-.434H10.47c-.245 0-.304-.152-.222-.35.152-.362.432-.97.596-1.274a.315.315 0 01.292-.187h4.253c-.023.316-.023.631-.07.947a4.983 4.983 0 01-.958 2.29c-.841 1.11-1.94 1.8-3.33 1.986-1.145.152-2.209-.07-3.143-.77-.865-.655-1.356-1.52-1.484-2.595-.152-1.274.222-2.419.993-3.424.83-1.086 1.928-1.776 3.272-2.02 1.098-.2 2.15-.07 3.096.571.62.41 1.063.97 1.356 1.648.07.105.023.164-.117.2m3.868 6.461c-1.064-.024-2.034-.328-2.852-1.029a3.665 3.665 0 01-1.262-2.255c-.21-1.32.152-2.489.947-3.529.853-1.122 1.881-1.706 3.272-1.95 1.192-.21 2.314-.095 3.33.595.923.63 1.496 1.484 1.648 2.605.198 1.578-.257 2.863-1.344 3.962-.771.783-1.718 1.273-2.805 1.495-.315.06-.63.07-.934.106zm2.78-4.72c-.011-.153-.011-.27-.034-.387-.21-1.157-1.274-1.81-2.384-1.554-1.087.245-1.788.935-2.045 2.033-.21.912.234 1.835 1.075 2.21.643.28 1.285.244 1.905-.07.923-.48 1.425-1.228 1.484-2.233z" />
99</svg></span><span class="lang-option-label astro-b4beqkka"><span class="astro-b4beqkka">Go</span></span><svg class="lang-check astro-b4beqkka" width="14" height="14" viewBox="0 0 14 14" fill="none" aria-hidden="true"><path d="M2.5 7l3.5 3.5 6-6" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="astro-b4beqkka"></path></svg></li><li class="lang-option astro-b4beqkka" role="option" data-lang="dart" aria-selected="false" tabindex="-1"><span class="lang-icon-badge astro-b4beqkka"><svg viewBox="0 0 500 500" fill="currentColor" class="astro-b4beqkka">
100<path d="M361.48,76.85c2.8,0,5.56,0.03,8.29,0.16c-25.24-25.24-60.56-60.56-60.56-60.56
101		C301.74,8.94,286.18,0,273.03,0c-11.31,0-22.41,2.26-29.6,6.58L103.6,76.85H361.48z" />
102<path d="M361.48,94.2H104.82l317.69,317.69l77.48-0.71l0-203.95L396.05,103.29
103		C386.33,95.59,377.06,94.2,361.48,94.2z" />
104<path d="M94.2,364.21c0,24.93,2.89,28.85,13.92,39.93l-0.01,0.01L203.95,500l207.24,0l-0.71-75.61L94.2,108.11
105		V364.21z" />
106<path d="M76.85,364.21l0-261.42L6.58,250C3.76,255.98,0,266.38,0,273.03c0,14.36,6.32,29.06,16.45,39.47
107		l60.57,60.58C76.91,370.34,76.85,367.41,76.85,364.21z" />
108</svg></span><span class="lang-option-label astro-b4beqkka"><span class="astro-b4beqkka">Dart</span><span class="lang-preview astro-b4beqkka"> (Preview)</span></span><svg class="lang-check astro-b4beqkka" width="14" height="14" viewBox="0 0 14 14" fill="none" aria-hidden="true"><path d="M2.5 7l3.5 3.5 6-6" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="astro-b4beqkka"></path></svg></li><li class="lang-option astro-b4beqkka" role="option" data-lang="python" aria-selected="false" tabindex="-1"><span class="lang-icon-badge astro-b4beqkka"><svg viewBox="0 0 24 24" fill="currentColor" class="astro-b4beqkka">
109  <path d="M14.25.18l.9.2.73.26.59.3.45.32.34.34.25.34.16.33.1.3.04.26.02.2-.01.13V8.5l-.05.63-.13.55-.21.46-.26.38-.3.31-.33.25-.35.19-.35.14-.33.1-.3.07-.26.04-.21.02H8.77l-.69.05-.59.14-.5.22-.41.27-.33.32-.27.35-.2.36-.15.37-.1.35-.07.32-.04.27-.02.21v3.06H3.17l-.21-.03-.28-.07-.32-.12-.35-.18-.36-.26-.36-.36-.35-.46-.32-.59-.28-.73-.21-.88-.14-1.05-.05-1.23.06-1.22.16-1.04.24-.87.32-.71.36-.57.4-.44.42-.33.42-.24.4-.16.36-.1.32-.05.24-.01h.16l.06.01h8.16v-.83H6.18l-.01-2.75-.02-.37.05-.34.11-.31.17-.28.25-.26.31-.23.38-.2.44-.18.51-.15.58-.12.64-.1.71-.06.77-.04.84-.02 1.27.05zm-6.3 1.98l-.23.33-.08.41.08.41.23.34.33.22.41.09.41-.09.33-.22.23-.34.08-.41-.08-.41-.23-.33-.33-.22-.41-.09-.41.09zm13.09 3.95l.28.06.32.12.35.18.36.27.36.35.35.47.32.59.28.73.21.88.14 1.04.05 1.23-.06 1.23-.16 1.04-.24.86-.32.71-.36.57-.4.45-.42.33-.42.24-.4.16-.36.09-.32.05-.24.02-.16-.01h-8.22v.82h5.84l.01 2.76.02.36-.05.34-.11.31-.17.29-.25.25-.31.24-.38.2-.44.17-.51.15-.58.13-.64.09-.71.07-.77.04-.84.01-1.27-.04-1.07-.14-.9-.2-.73-.25-.59-.3-.45-.33-.34-.34-.25-.34-.16-.33-.1-.3-.04-.25-.02-.2.01-.13v-5.34l.05-.64.13-.54.21-.46.26-.38.3-.32.33-.24.35-.2.35-.14.33-.1.3-.06.26-.04.21-.02.13-.01h5.84l.69-.05.59-.14.5-.21.41-.28.33-.32.27-.35.2-.36.15-.36.1-.35.07-.32.04-.28.02-.21V6.07h2.09l.14.01zm-6.47 14.25l-.23.33-.08.41.08.41.23.33.33.23.41.08.41-.08.33-.23.23-.33.08-.41-.08-.41-.23-.33-.33-.23-.41-.08-.41.08z" />
110</svg></span><span class="lang-option-label astro-b4beqkka"><span class="astro-b4beqkka">Python</span><span class="lang-preview astro-b4beqkka"> (Preview)</span></span><svg class="lang-check astro-b4beqkka" width="14" height="14" viewBox="0 0 14 14" fill="none" aria-hidden="true"><path d="M2.5 7l3.5 3.5 6-6" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="astro-b4beqkka"></path></svg></li></ul></div></div><sl-sidebar-state-persist data-hash="10l1k8l" class="astro-4sg54iyo"> 
110<script aria-hidden="true">
111		(() => {
112			try {
113				if (!matchMedia('(min-width: 50em)').matches) return;
114				/** @type {HTMLElement | null} */
115				const target = document.querySelector('sl-sidebar-state-persist');
116				const state = JSON.parse(sessionStorage.getItem('sl-sidebar-state') || '0');
117				if (!target || !state || target.dataset.hash !== state.hash) return;
118				window._starlightScrollRestore = state.scroll;
119				customElements.define(
120					'sl-sidebar-restore',
121					class SidebarRestore extends HTMLElement {
122						connectedCallback() {
123							try {
124								const idx = parseInt(this.dataset.index || '');
125								const details = this.closest('details');
126								if (details && typeof state.open[idx] === 'boolean') details.open = state.open[idx];
127							} catch {}
128						}
129					}
130				);
131			} catch {}
132		})();
133	</script>
133 <ul class="top-level astro-ofnfzojh"> <li class="astro-ofnfzojh"> <details open class="astro-ofnfzojh"> <summary class="astro-ofnfzojh"> <span class="group-label astro-ofnfzojh"> <span class="large astro-ofnfzojh">Get started</span>  </span> <svg aria-hidden="true" class="caret astro-ofnfzojh astro-gbrymhch" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <sl-sidebar-restore data-index="0"></sl-sidebar-restore> <ul class="astro-ofnfzojh"> <li class="astro-ofnfzojh"> <a href="/docs/overview/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Overview</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/get-started/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Get started</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/devtools/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Developer tools</span>  </a> </li> </ul> </details> </li><li class="astro-ofnfzojh"> <details open class="astro-ofnfzojh"> <summary class="astro-ofnfzojh"> <span class="group-label astro-ofnfzojh"> <span class="large astro-ofnfzojh">Core concepts</span>  </span> <svg aria-hidden="true" class="caret astro-ofnfzojh astro-gbrymhch" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <sl-sidebar-restore data-index="1"></sl-sidebar-restore> <ul class="astro-ofnfzojh"> <li class="astro-ofnfzojh"> <a href="/docs/flows/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Flows</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/models/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Generating content</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/tool-calling/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Tool calling</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/dotprompt/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Prompt templating</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/context/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Runtime context</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/concurrency/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Concurrency and lifecycle</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/middleware/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Middleware</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/agentic-patterns/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Agentic patterns</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/interrupts/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Interrupts</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/chat/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Persistent chat</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/multi-agent/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Building multi-agent systems</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/rag/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Retrieval-augmented generation (RAG)</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/model-context-protocol/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Model Context Protocol (MCP)</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/durable-streaming/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Durable streaming</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/client/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Frontend integration</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/testing/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Testing</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/evaluation/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Evaluation</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/error-types/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Error types</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/local-observability/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Local observability and metrics</span>  </a> </li> </ul> </details> </li><li class="astro-ofnfzojh"> <details open class="astro-ofnfzojh"> <summary class="astro-ofnfzojh"> <span class="group-label astro-ofnfzojh"> <span class="large astro-ofnfzojh">Full-stack agents</span>  </span> <svg aria-hidden="true" class="caret astro-ofnfzojh astro-gbrymhch" width="16" height="16" viewB
133ox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <sl-sidebar-restore data-index="2"></sl-sidebar-restore> <ul class="astro-ofnfzojh"> <li class="astro-ofnfzojh"> <a href="/docs/agents/overview/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Overview</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/agents/define/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Define agents</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/agents/run/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Run and stream</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/agents/http/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Serve over HTTP</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/agents/a2ui/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Generative UI (A2UI)</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/agents/state/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Sessions and state</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/agents/session-stores/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Session stores</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/agents/interrupts/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Interrupts</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/agents/background/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Background execution</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/agents/multi-agent/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Multi-agent delegation</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/agents/custom-orchestration/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Custom orchestration</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/agents/errors/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Error handling</span>  </a> </li> </ul> </details> </li><li class="astro-ofnfzojh"> <details open class="astro-ofnfzojh"> <summary class="astro-ofnfzojh"> <span class="group-label astro-ofnfzojh"> <span class="large astro-ofnfzojh">Build with AI</span>  </span> <svg aria-hidden="true" class="caret astro-ofnfzojh astro-gbrymhch" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <sl-sidebar-restore data-index="3"></sl-sidebar-restore> <ul class="astro-ofnfzojh"> <li class="astro-ofnfzojh"> <a href="/docs/mcp-server/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Genkit MCP server</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/develop-with-ai/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">AI-assisted development</span>  </a> </li> </ul> </details> </li><li class="astro-ofnfzojh"> <details open class="astro-ofnfzojh"> <summary class="astro-ofnfzojh"> <span class="group-label astro-ofnfzojh"> <span class="large astro-ofnfzojh">Backend frameworks</span>  </span> <svg aria-hidden="true" class="caret astro-ofnfzojh astro-gbrymhch" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <sl-sidebar-restore data-index="4"></sl-sidebar-restore> <ul class="astro-ofnfzojh"> <li class="astro-ofnfzojh"> <a href="/docs/backend-frameworks/overview/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Overview</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/backend-frameworks/chi/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Chi</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/backend-frameworks/django/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Django</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/backend-frameworks/echo/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Echo</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/backend-frameworks/express/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Express.js</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/backend-frameworks/fastapi/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">FastAPI</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/backend-frameworks/fastify/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Fastify</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/backend-frameworks/flask/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Flask</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/backend-frameworks/gin/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Gin</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/backend-frameworks/hono/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Hono</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/backend-frameworks/nestjs/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">NestJS</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/backend-frameworks/nethttp/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">net/http</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/backend-frameworks/shelf/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Shelf</span>  </a> </li> </ul> </details> </li><li class="astro-ofnfzojh"> <details open class="astro-ofnfzojh"> <summary class="astro-ofnfzojh"> <span class="group-label astro-ofnfzojh"> <span class="large astro-ofnfzojh">App frameworks</span>  </span> <svg aria-hidden="true" class="caret astro-ofnfzojh astro-gbrymhch" width="16" height="16" viewB
133ox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <sl-sidebar-restore data-index="5"></sl-sidebar-restore> <ul class="astro-ofnfzojh"> <li class="astro-ofnfzojh"> <a href="/docs/app-frameworks/overview/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Overview</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/app-frameworks/angular/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Angular</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/app-frameworks/astro/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Astro</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/app-frameworks/flutter/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Flutter</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/app-frameworks/nextjs/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Next.js</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/app-frameworks/nuxt/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Nuxt</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/app-frameworks/react/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">React (Vite)</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/app-frameworks/remix/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Remix</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/app-frameworks/sveltekit/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">SvelteKit</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/app-frameworks/tanstack-start/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">TanStack Start</span>  </a> </li> </ul> </details> </li><li class="astro-ofnfzojh"> <details open class="astro-ofnfzojh"> <summary class="astro-ofnfzojh"> <span class="group-label astro-ofnfzojh"> <span class="large astro-ofnfzojh">Model providers</span>  </span> <svg aria-hidden="true" class="caret astro-ofnfzojh astro-gbrymhch" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <sl-sidebar-restore data-index="6"></sl-sidebar-restore> <ul class="astro-ofnfzojh"> <li class="astro-ofnfzojh"> <a href="/docs/integrations/model-providers/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Overview</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/integrations/google-genai/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Google Generative AI</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/integrations/vertex-ai/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Gemini Enterprise</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/integrations/openai/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">OpenAI</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/integrations/openai-compatible/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">OpenAI-Compatible APIs</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/integrations/anthropic/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Anthropic (Claude)</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/integrations/aws-bedrock/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">AWS Bedrock</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/integrations/azure-foundry/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Azure AI Foundry</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/integrations/xai/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">xAI (Grok)</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/integrations/deepseek/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">DeepSeek</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/integrations/openrouter/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">OpenRouter</span>  </a> </li><li class="astro-ofnfzojh">
133 <a href="/docs/integrations/kimi/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Kimi</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/integrations/zai/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Z.ai</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/integrations/dashscope/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">DashScope (Qwen)</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/integrations/ollama/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Ollama</span>  </a> </li> </ul> </details> </li><li class="astro-ofnfzojh"> <details open class="astro-ofnfzojh"> <summary class="astro-ofnfzojh"> <span class="group-label astro-ofnfzojh"> <span class="large astro-ofnfzojh">Database providers</span>  </span> <svg aria-hidden="true" class="caret astro-ofnfzojh astro-gbrymhch" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <sl-sidebar-restore data-index="7"></sl-sidebar-restore> <ul class="astro-ofnfzojh"> <li class="astro-ofnfzojh"> <a href="/docs/integrations/toolbox/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">MCP Toolbox for Databases</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/integrations/dev-local-vectorstore/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Dev local vector store</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/integrations/pinecone/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Pinecone</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/integrations/chroma/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Chroma</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/integrations/pgvector/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">pgvector</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/integrations/lancedb/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">LanceDB</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/integrations/astra-db/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Astra DB</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/integrations/neo4j/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Neo4j</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/integrations/alloydb/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">AlloyDB for PostgreSQL</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/integrations/cloud-sql-postgresql/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Cloud SQL PostgreSQL</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/integrations/cloud-firestore/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Cloud Firestore</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/integrations/vectorsearch-bigquery/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Vector Search with BigQuery</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/integrations/vectorsearch-firestore/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Vector Search with Firestore</span>  </a> </li> </ul> </details> </li><li class="astro-ofnfzojh"> <details open class="astro-ofnfzojh"> <summary class="astro-ofnfzojh"> <span class="group-label astro-ofnfzojh"> <span class="large astro-ofnfzojh">Deployment</span>  </span> <svg aria-hidden="true" class="caret astro-ofnfzojh astro-gbrymhch" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <sl-sidebar-restore data-index="8"></sl-sidebar-restore> <ul class="astro-ofnfzojh"> <li class="astro-ofnfzojh"> <a href="/docs/deployment/overview/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Overview</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/deployment/firebase/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Firebase</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/deployment/cloud-run/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Cloud Run</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/deployment/azure-functions/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Azure Functions</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/deployment/aws-lambda/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">AWS Lambda</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/deployment/any-platform/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Any platform</span>  </a> </li> </ul> </details> </li><li class="astro-ofnfzojh"> <details open class="astro-ofnfzojh"> <summary class="astro-ofnfzojh"> <span class="group-label astro-ofnfzojh"> <span class="large astro-ofnfzojh">Authorization</span>  </span> <svg aria-hidden="true" class="caret astro-ofnfzojh astro-gbrymhch" width="16" height="16" viewB
133ox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <sl-sidebar-restore data-index="9"></sl-sidebar-restore> <ul class="astro-ofnfzojh"> <li class="astro-ofnfzojh"> <a href="/docs/deployment/authorization/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Authorization &amp; integrity</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/integrations/auth0/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Auth0 AI</span>  </a> </li> </ul> </details> </li><li class="astro-ofnfzojh"> <details open class="astro-ofnfzojh"> <summary class="astro-ofnfzojh"> <span class="group-label astro-ofnfzojh"> <span class="large astro-ofnfzojh">Writing plugins</span>  </span> <svg aria-hidden="true" class="caret astro-ofnfzojh astro-gbrymhch" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <sl-sidebar-restore data-index="10"></sl-sidebar-restore> <ul class="astro-ofnfzojh"> <li class="astro-ofnfzojh"> <a href="/docs/plugin-authoring/overview/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Overview</span>  </a> </li> </ul> </details> </li><li class="astro-ofnfzojh"> <details open class="astro-ofnfzojh"> <summary class="astro-ofnfzojh"> <span class="group-label astro-ofnfzojh"> <span class="large astro-ofnfzojh">Observability and monitoring</span>  </span> <svg aria-hidden="true" class="caret astro-ofnfzojh astro-gbrymhch" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <sl-sidebar-restore data-index="11"></sl-sidebar-restore> <ul class="astro-ofnfzojh"> <li class="astro-ofnfzojh"> <a href="/docs/observability/getting-started/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Getting started</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/observability/authentication/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Authentication</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/observability/telemetry-collection/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Telemetry collection</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/observability/advanced-configuration/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Advanced configuration</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/observability/troubleshooting/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Troubleshooting</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/integrations/google-cloud/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Google Cloud plugin</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/observability/otel-genai-semantic-conventions/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">OTel GenAI semantic conventions</span>  </a> </li> </ul> </details> </li><li class="astro-ofnfzojh"> <details open class="astro-ofnfzojh"> <summary class="astro-ofnfzojh"> <span class="group-label astro-ofnfzojh"> <span class="large astro-ofnfzojh">Tutorials</span>  </span> <svg aria-hidden="true" class="caret astro-ofnfzojh astro-gbrymhch" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <sl-sidebar-restore data-index="12"></sl-sidebar-restore> <ul class="astro-ofnfzojh"> <li class="astro-ofnfzojh"> <a href="/docs/tutorials/chat-with-pdf/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Chat with a PDF</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/tutorials/summarize-youtube-videos/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Summarize YouTube videos</span>  </a> </li> </ul> </details> </li><li class="astro-ofnfzojh"> <details open class="astro-ofnfzojh"> <summary class="astro-ofnfzojh"> <span class="group-label astro-ofnfzojh"> <span class="large astro-ofnfzojh">Reference</span>  </span> <svg aria-hidden="true" class="caret astro-ofnfzojh astro-gbrymhch" width="16" height="16" viewB
133ox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg> </summary> <sl-sidebar-restore data-index="13"></sl-sidebar-restore> <ul class="astro-ofnfzojh"> <li class="astro-ofnfzojh"> <a href="/docs/api-references/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">API references</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/api-stability/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">API stability</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/roadmap/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Roadmap</span>  </a> </li><li class="astro-ofnfzojh"> <a href="/docs/feedback/" class="astro-ofnfzojh"> <span class="astro-ofnfzojh">Feedback</span>  </a> </li> </ul> </details> </li> </ul> 
133<script aria-hidden="true">
134		(() => {
135			const scroller = document.getElementById('starlight__sidebar');
136			if (!window._starlightScrollRestore || !scroller) return;
137			scroller.scrollTop = window._starlightScrollRestore;
138			delete window._starlightScrollRestore;
139		})();
140	</script>
140 </sl-sidebar-state-persist><div class="md:sl-hidden astro-b4beqkka"> <div class="mobile-preferences sl-flex astro-bsca5rez"> <div class="social-icons astro-bsca5rez"> <a href="https://github.com/genkit-ai/genkit" rel="me" class="sl-flex astro-qjozkuqy"><span class="sr-only astro-qjozkuqy">GitHub</span><svg aria-hidden="true" class="astro-qjozkuqy astro-gbrymhch" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M12 .3a12 12 0 0 0-3.8 23.38c.6.12.83-.26.83-.57L9 21.07c-3.34.72-4.04-1.61-4.04-1.61-.55-1.39-1.34-1.76-1.34-1.76-1.08-.74.09-.73.09-.73 1.2.09 1.83 1.24 1.83 1.24 1.08 1.83 2.81 1.3 3.5 1 .1-.78.42-1.31.76-1.61-2.67-.3-5.47-1.33-5.47-5.93 0-1.31.47-2.38 1.24-3.22-.14-.3-.54-1.52.1-3.18 0 0 1-.32 3.3 1.23a11.5 11.5 0 0 1 6 0c2.28-1.55 3.29-1.23 3.29-1.23.64 1.66.24 2.88.12 3.18a4.65 4.65 0 0 1 1.23 3.22c0 4.61-2.8 5.63-5.48 5.92.42.36.81 1.1.81 2.22l-.01 3.29c0 .31.2.69.82.57A12 12 0 0 0 12 .3Z"/></svg></a><a href="https://discord.gg/qXt5zzQKpc" rel="me" class="sl-flex astro-qjozkuqy"><span class="sr-only astro-qjozkuqy">Discord</span><svg aria-hidden="true" class="astro-qjozkuqy astro-gbrymhch" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M20.32 4.37a19.8 19.8 0 0 0-4.93-1.51 13.78 13.78 0 0 0-.64 1.28 18.27 18.27 0 0 0-5.5 0 12.64 12.64 0 0 0-.64-1.28h-.05A19.74 19.74 0 0 0 3.64 4.4 20.26 20.26 0 0 0 .11 18.09l.02.02a19.9 19.9 0 0 0 6.04 3.03l.04-.02a14.24 14.24 0 0 0 1.23-2.03.08.08 0 0 0-.05-.07 13.1 13.1 0 0 1-1.9-.92.08.08 0 0 1 .02-.1 10.2 10.2 0 0 0 .41-.31h.04a14.2 14.2 0 0 0 12.1 0l.04.01a9.63 9.63 0 0 0 .4.32.08.08 0 0 1-.03.1 12.29 12.29 0 0 1-1.9.91.08.08 0 0 0-.02.1 15.97 15.97 0 0 0 1.27 2.01h.04a19.84 19.84 0 0 0 6.03-3.05v-.03a20.12 20.12 0 0 0-3.57-13.69ZM8.02 15.33c-1.18 0-2.16-1.08-2.16-2.42 0-1.33.96-2.42 2.16-2.42 1.21 0 2.18 1.1 2.16 2.42 0 1.34-.96 2.42-2.16 2.42Zm7.97 0c-1.18 0-2.15-1.08-2.15-2.42 0-1.33.95-2.42 2.15-2.42 1.22 0 2.18 1.1 2.16 2.42 0 1.34-.94 2.42-2.16 2.42Z"/></svg></a><a href="https://x.com/GenkitFramework" rel="me" class="sl-flex astro-qjozkuqy"><span class="sr-only astro-qjozkuqy">X</span><svg aria-hidden="true" class="astro-qjozkuqy astro-gbrymhch" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M 18.242188 2.25 L 21.554688 2.25 L 14.324219 10.507812 L 22.828125 21.75 L 16.171875 21.75 L 10.953125 14.933594 L 4.992188 21.75 L 1.679688 21.75 L 9.40625 12.914062 L 1.257812 2.25 L 8.082031 2.25 L 12.792969 8.480469 Z M 17.082031 19.773438 L 18.914062 19.773438 L 7.082031 4.125 L 5.113281 4.125 Z M 17.082031 19.773438 "/></svg></a><a href="https://www.linkedin.com/company/genkit" rel="me" class="sl-flex astro-qjozkuqy"><span class="sr-only astro-qjozkuqy">LinkedIn</span><svg aria-hidden="true" class="astro-qjozkuqy astro-gbrymhch" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M20.47 2H3.53a1.45 1.45 0 0 0-1.47 1.43v17.14A1.45 1.45 0 0 0 3.53 22h16.94a1.45 1.45 0 0 0 1.47-1.43V3.43A1.45 1.45 0 0 0 20.47 2ZM8.09 18.74h-3v-9h3v9ZM6.59 8.48a1.56 1.56 0 0 1 0-3.12 1.57 1.57 0 1 1 0 3.12Zm12.32 10.26h-3v-4.83c0-1.21-.43-2-1.52-2A1.65 1.65 0 0 0 12.85 13a2 2 0 0 0-.1.73v5h-3v-9h3V11a3 3 0 0 1 2.71-1.5c2 0 3.45 1.29 3.45 4.06v5.18Z"/></svg></a><a href="https://reddit.com/r/GenkitFramework" rel="me" class="sl-flex astro-qjozkuqy"><span class="sr-only astro-qjozkuqy">Reddit</span><svg aria-hidden="true" class="astro-qjozkuqy astro-gbrymhch" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M14.41 16.87a3.38 3.38 0 0 1-2.37.63 3.37 3.37 0 0 1-2.36-.63 1 1 0 0 0-1.42 1.41 5.11 5.11 0 0 0 3.78 1.22 5.12 5.12 0 0 0 3.78-1.22 1 1 0 1 0-1.41-1.41ZM9.2 15a1 1 0 1 0-1-1 1 1 0 0 0 1 1Zm6-2a1 1 0 1 0 1 1 1 1 0 0 0-1-1Zm7.8-1.22a3.77 3.77 0 0 0-6.8-2.26 16.5 16.5 0 0 0-3.04-.48l.85-5.7 2.09.7a3 3 0 0 0 6-.06v-.02a3.03 3.03 0 0 0-3-2.96 2.98 2.98 0 0 0-2.34 1.16l-3.24-1.1a1 1 0 0 0-1.3.8l-1.09 7.17a16.66 16.66 0 0 0-3.34.49 3.77 3.77 0 0 0-6.22 4.23A4.86 4.86 0 0 0 1 16c0 3.92 4.83 7 11 7s11-3.08 11-7a4.86 4.86 0 0 0-.57-2.25 3.78 3.78 0 0 0 .57-1.97ZM19.1 3a1 1 0 1 1-1 1 1.02 1.02 0 0 1 1-1ZM4.77 10a1.76 1.76 0 0 1 .88.25A9.98 9.98 0 0 0 3 11.92v-.14A1.78 1.78 0 0 1 4.78 10ZM12 21c-4.88 0-9-2.29-9-5s4.12-5 9-5 9 2.29 9 5-4.12 5-9 5Zm8.99-9.08a9.98 9.98 0 0 0-2.65-1.67 1.76 1.76 0 0 1 .88-.25A1.78 1.78 0 0 1 21 11.78l-.01.14Z"/></svg></a><a href="https://genkit.dev/blog/rss.xml" rel="me" class="sl-flex astro-qjozkuqy"><span class="sr-only astro-qjozkuqy">RSS</span><svg aria-hidden="true" class="astro-qjozkuqy astro-gbrymhch" width="16" height="16" viewB
140ox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M2.88 16.88a3 3 0 0 0 0 4.24 3 3 0 0 0 4.24 0 3 3 0 0 0-4.24-4.24Zm2.83 2.83a1 1 0 0 1-1.42-1.42 1 1 0 0 1 1.42 0 1 1 0 0 1 0 1.42ZM5 12a1 1 0 0 0 0 2 5 5 0 0 1 5 5 1 1 0 0 0 2 0 7 7 0 0 0-7-7Zm0-4a1 1 0 0 0 0 2 9 9 0 0 1 9 9 1 1 0 0 0 2 0 11.08 11.08 0 0 0-3.22-7.78A11.08 11.08 0 0 0 5 8Zm10.61.39A15.11 15.11 0 0 0 5 4a1 1 0 0 0 0 2 13 13 0 0 1 13 13 1 1 0 0 0 2 0 15.11 15.11 0 0 0-4.39-10.61Z"/></svg></a> </div> <starlight-theme-select>  <label style="--sl-select-width: 6.25em" class="astro-ntpejt7s"> <span class="sr-only astro-ntpejt7s">Select theme</span> <svg aria-hidden="true" class="icon label-icon astro-ntpejt7s astro-gbrymhch" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21 14h-1V7a3 3 0 0 0-3-3H7a3 3 0 0 0-3 3v7H3a1 1 0 0 0-1 1v2a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3v-2a1 1 0 0 0-1-1ZM6 7a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v7H6V7Zm14 10a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-1h16v1Z"/></svg> <select autocomplete="off" class="astro-ntpejt7s"> <option value="dark" class="astro-ntpejt7s">Dark</option><option value="light" class="astro-ntpejt7s">Light</option><option value="auto" selected class="astro-ntpejt7s">Auto</option> </select> <svg aria-hidden="true" class="icon caret astro-ntpejt7s astro-gbrymhch" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M17 9.17a1 1 0 0 0-1.41 0L12 12.71 8.46 9.17a1 1 0 1 0-1.41 1.42l4.24 4.24a1.002 1.002 0 0 0 1.42 0L17 10.59a1.002 1.002 0 0 0 0-1.42Z"/></svg> </label> </starlight-theme-select>  
140<script>
141	StarlightThemeProvider.updatePickers();
142</script>
142   </div> </div> 
142<script data-docs-language-support="{&quot;/docs/overview&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/get-started&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/devtools&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/flows&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/models&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/tool-calling&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/dotprompt&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/context&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;],&quot;/docs/concurrency&quot;:[&quot;go&quot;],&quot;/docs/middleware&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/agentic-patterns&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;],&quot;/docs/interrupts&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/chat&quot;:[&quot;js&quot;,&quot;go&quot;],&quot;/docs/multi-agent&quot;:[&quot;js&quot;],&quot;/docs/rag&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;python&quot;],&quot;/docs/model-context-protocol&quot;:[&quot;js&quot;,&quot;go&quot;],&quot;/docs/durable-streaming&quot;:[&quot;js&quot;,&quot;go&quot;],&quot;/docs/client&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/testing&quot;:[&quot;js&quot;,&quot;go&quot;],&quot;/docs/evaluation&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/error-types&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/local-observability&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/agents/overview&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/agents/define&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/agents/run&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/agents/http&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/agents/a2ui&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;],&quot;/docs/agents/state&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/agents/session-stores&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/agents/interrupts&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/agents/background&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/agents/multi-agent&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;],&quot;/docs/agents/custom-orchestration&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/agents/errors&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/mcp-server&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/develop-with-ai&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/backend-frameworks/overview&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/backend-frameworks/chi&quot;:[&quot;go&quot;],&quot;/docs/backend-frameworks/django&quot;:[&quot;python&quot;],&quot;/docs/backend-frameworks/echo&quot;:[&quot;go&quot;],&quot;/docs/backend-frameworks/express&quot;:[&quot;js&quot;],&quot;/docs/backend-frameworks/fastapi&quot;:[&quot;python&quot;],&quot;/docs/backend-frameworks/fastify&quot;:[&quot;js&quot;],&quot;/docs/backend-frameworks/flask&quot;:[&quot;python&quot;],&quot;/docs/backend-frameworks/gin&quot;:[&quot;go&quot;],&quot;/docs/backend-frameworks/hono&quot;:[&quot;js&quot;],&quot;/docs/backend-frameworks/nestjs&quot;:[&quot;js&quot;],&quot;/docs/backend-frameworks/nethttp&quot;:[&quot;go&quot;],&quot;/docs/backend-frameworks/shelf&quot;:[&quot;dart&quot;],&quot;/docs/app-frameworks/overview&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/app-frameworks/angular&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/app-frameworks/astro&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/app-frameworks/flutter&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/app-frameworks/nextjs&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/app-frameworks/nuxt&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/app-frameworks/react&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/app-frameworks/remix&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/app-frameworks/sveltekit&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/app-frameworks/tanstack-start&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/integrations/model-providers&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/integrations/google-genai&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/integrations/vertex-ai&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/integrations/openai&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/integrations/openai-compatible&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;python&quot;],&quot;/docs/integrations/anthropic&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/integrations/aws-bedrock&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;python&quot;],&quot;/docs/integrations/azure-foundry&quot;:[&quot;js&quot;,&quot;go&quot;],&quot;/docs/integrations/xai&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;python&quot;],&quot;/docs/integrations/deepseek&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;python&quot;],&quot;/docs/integrations/openrouter&quot;:[&quot;go&quot;],&quot;
142/docs/integrations/kimi&quot;:[&quot;go&quot;],&quot;/docs/integrations/zai&quot;:[&quot;go&quot;],&quot;/docs/integrations/dashscope&quot;:[&quot;go&quot;],&quot;/docs/integrations/ollama&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;python&quot;],&quot;/docs/integrations/toolbox&quot;:[&quot;js&quot;,&quot;go&quot;],&quot;/docs/integrations/dev-local-vectorstore&quot;:[&quot;js&quot;,&quot;go&quot;],&quot;/docs/integrations/pinecone&quot;:[&quot;js&quot;,&quot;go&quot;],&quot;/docs/integrations/chroma&quot;:[&quot;js&quot;],&quot;/docs/integrations/pgvector&quot;:[&quot;js&quot;,&quot;go&quot;],&quot;/docs/integrations/lancedb&quot;:[&quot;js&quot;],&quot;/docs/integrations/astra-db&quot;:[&quot;js&quot;],&quot;/docs/integrations/neo4j&quot;:[&quot;js&quot;],&quot;/docs/integrations/alloydb&quot;:[&quot;go&quot;],&quot;/docs/integrations/cloud-sql-postgresql&quot;:[&quot;js&quot;,&quot;go&quot;],&quot;/docs/integrations/cloud-firestore&quot;:[&quot;js&quot;,&quot;go&quot;],&quot;/docs/integrations/vectorsearch-bigquery&quot;:[&quot;js&quot;,&quot;go&quot;],&quot;/docs/integrations/vectorsearch-firestore&quot;:[&quot;js&quot;,&quot;go&quot;],&quot;/docs/deployment/overview&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/deployment/firebase&quot;:[&quot;js&quot;],&quot;/docs/deployment/cloud-run&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/deployment/azure-functions&quot;:[&quot;js&quot;],&quot;/docs/deployment/aws-lambda&quot;:[&quot;js&quot;],&quot;/docs/deployment/any-platform&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/deployment/authorization&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;],&quot;/docs/integrations/auth0&quot;:[&quot;js&quot;],&quot;/docs/plugin-authoring/overview&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/observability/getting-started&quot;:[&quot;js&quot;,&quot;go&quot;],&quot;/docs/observability/authentication&quot;:[&quot;js&quot;,&quot;go&quot;],&quot;/docs/observability/telemetry-collection&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;python&quot;],&quot;/docs/observability/advanced-configuration&quot;:[&quot;js&quot;,&quot;go&quot;],&quot;/docs/observability/troubleshooting&quot;:[&quot;js&quot;,&quot;go&quot;],&quot;/docs/integrations/google-cloud&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;python&quot;],&quot;/docs/observability/otel-genai-semantic-conventions&quot;:[&quot;dart&quot;],&quot;/docs/tutorials/chat-with-pdf&quot;:[&quot;js&quot;],&quot;/docs/tutorials/summarize-youtube-videos&quot;:[&quot;js&quot;],&quot;/docs/api-references&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/api-stability&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/roadmap&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;],&quot;/docs/feedback&quot;:[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;]}" data-docs-language-agnostic="{&quot;/docs/overview&quot;:false,&quot;/docs/get-started&quot;:false,&quot;/docs/devtools&quot;:false,&quot;/docs/flows&quot;:false,&quot;/docs/models&quot;:false,&quot;/docs/tool-calling&quot;:false,&quot;/docs/dotprompt&quot;:false,&quot;/docs/context&quot;:false,&quot;/docs/concurrency&quot;:false,&quot;/docs/middleware&quot;:false,&quot;/docs/agentic-patterns&quot;:false,&quot;/docs/interrupts&quot;:false,&quot;/docs/chat&quot;:false,&quot;/docs/multi-agent&quot;:false,&quot;/docs/rag&quot;:false,&quot;/docs/model-context-protocol&quot;:false,&quot;/docs/durable-streaming&quot;:false,&quot;/docs/client&quot;:true,&quot;/docs/testing&quot;:false,&quot;/docs/evaluation&quot;:false,&quot;/docs/error-types&quot;:false,&quot;/docs/local-observability&quot;:false,&quot;/docs/agents/overview&quot;:false,&quot;/docs/agents/define&quot;:false,&quot;/docs/agents/run&quot;:false,&quot;/docs/agents/http&quot;:false,&quot;/docs/agents/a2ui&quot;:false,&quot;/docs/agents/state&quot;:false,&quot;/docs/agents/session-stores&quot;:false,&quot;/docs/agents/interrupts&quot;:false,&quot;/docs/agents/background&quot;:false,&quot;/docs/agents/multi-agent&quot;:false,&quot;/docs/agents/custom-orchestration&quot;:false,&quot;/docs/agents/errors&quot;:false,&quot;/docs/mcp-server&quot;:true,&quot;/docs/develop-with-ai&quot;:false,&quot;/docs/backend-frameworks/overview&quot;:false,&quot;/docs/backend-frameworks/chi&quot;:false,&quot;/docs/backend-frameworks/django&quot;:false,&quot;/docs/backend-frameworks/echo&quot;:false,&quot;/docs/backend-frameworks/express&quot;:false,&quot;/docs/backend-frameworks/fastapi&quot;:false,&quot;/docs/backend-frameworks/fastify&quot;:false,&quot;/docs/backend-frameworks/flask&quot;:false,&quot;/docs/backend-frameworks/gin&quot;:false,&quot;/docs/backend-frameworks/hono&quot;:false,&quot;/docs/backend-frameworks/nestjs&quot;:false,&quot;/docs/backend-frameworks/nethttp&quot;:false,&quot;/docs/backend-frameworks/shelf&quot;:false,&quot;/docs/app-frameworks/overview&quot;:false,&quot;/docs/app-frameworks/angular&quot;:false,&quot;/docs/app-frameworks/astro&quot;:false,&quot;/docs/app-frameworks/flutter&quot;:true,&quot;/docs/app-frameworks/nextjs&quot;:false,&quot;/docs/app-frameworks/nuxt&quot;:false,&quot;/docs/app-frameworks/react&quot;:true,&quot;/docs/app-frameworks/remix&quot;:false,&quot;/docs/app-frameworks/sveltekit&quot;:false,&quot;/docs/app-frameworks/tanstack-start&quot;:false,&quot;/docs/integrations/model-providers&quot;:false,&quot;/docs/integrations/google-genai&quot;:false,&quot;/docs/integrations/vertex-ai&quot;:false,&quot;/docs/integrations/openai&quot;:false,&quot;/docs/integrations/openai-compatible&quot;:false,&quot;/docs/integrations/anthropic&quot;:false,&quot;/docs/integrations/aws-bedrock&quot;:false,&quot;/docs/integrations/azure-foundry&quot;:false,&quot;/docs/integrations/xai&quot;:false,&quot;/docs/integrations/deepseek&quot;:false,&quot;/docs/integrations/openrouter&quot;:false,&quot;
142/docs/integrations/kimi&quot;:false,&quot;/docs/integrations/zai&quot;:false,&quot;/docs/integrations/dashscope&quot;:false,&quot;/docs/integrations/ollama&quot;:false,&quot;/docs/integrations/toolbox&quot;:false,&quot;/docs/integrations/dev-local-vectorstore&quot;:false,&quot;/docs/integrations/pinecone&quot;:false,&quot;/docs/integrations/chroma&quot;:false,&quot;/docs/integrations/pgvector&quot;:false,&quot;/docs/integrations/lancedb&quot;:false,&quot;/docs/integrations/astra-db&quot;:false,&quot;/docs/integrations/neo4j&quot;:false,&quot;/docs/integrations/alloydb&quot;:false,&quot;/docs/integrations/cloud-sql-postgresql&quot;:false,&quot;/docs/integrations/cloud-firestore&quot;:false,&quot;/docs/integrations/vectorsearch-bigquery&quot;:false,&quot;/docs/integrations/vectorsearch-firestore&quot;:false,&quot;/docs/deployment/overview&quot;:false,&quot;/docs/deployment/firebase&quot;:false,&quot;/docs/deployment/cloud-run&quot;:false,&quot;/docs/deployment/azure-functions&quot;:false,&quot;/docs/deployment/aws-lambda&quot;:false,&quot;/docs/deployment/any-platform&quot;:false,&quot;/docs/deployment/authorization&quot;:false,&quot;/docs/integrations/auth0&quot;:false,&quot;/docs/plugin-authoring/overview&quot;:false,&quot;/docs/observability/getting-started&quot;:false,&quot;/docs/observability/authentication&quot;:false,&quot;/docs/observability/telemetry-collection&quot;:false,&quot;/docs/observability/advanced-configuration&quot;:false,&quot;/docs/observability/troubleshooting&quot;:false,&quot;/docs/integrations/google-cloud&quot;:false,&quot;/docs/observability/otel-genai-semantic-conventions&quot;:false,&quot;/docs/tutorials/chat-with-pdf&quot;:false,&quot;/docs/tutorials/summarize-youtube-videos&quot;:false,&quot;/docs/api-references&quot;:false,&quot;/docs/api-stability&quot;:false,&quot;/docs/roadmap&quot;:true,&quot;/docs/feedback&quot;:true}" data-docs-all-languages="[&quot;js&quot;,&quot;go&quot;,&quot;dart&quot;,&quot;python&quot;]">
143	(() => {
144		const currentScript = document.currentScript;
145		if (!currentScript) return;
146
147		const languageSupportRaw = currentScript.getAttribute('data-docs-language-support') || '{}';
148		const languageAgnosticRaw = currentScript.getAttribute('data-docs-language-agnostic') || '{}';
149		const allLanguagesRaw = currentScript.getAttribute('data-docs-all-languages') || '[]';
150
151		/** @type {Record<string, string[]>} */
152		const languageSupportByPath = JSON.parse(languageSupportRaw);
153		/** @type {Record<string, boolean>} */
154		const languageAgnosticByPath = JSON.parse(languageAgnosticRaw);
155		/** @type {string[]} */
156		const allLanguages = JSON.parse(allLanguagesRaw);
157		const fallbackOrder = ['js', 'go', 'dart', 'python'];
158
159		const normalizePath = (href) => {
160			try {
161				const url = new URL(href, window.location.origin);
162				let normalized = url.pathname.replace(/\/$/, '');
163				if (!normalized) normalized = '/';
164				return normalized;
165			} catch {
166				return null;
167			}
168		};
169
170		const updateSidebarForLanguage = () => {
171			const selectedLanguage = document.documentElement.getAttribute('data-genkit-lang') || 'js';
172			const currentPath = normalizePath(window.location.pathname) || window.location.pathname;
173
174			document.querySelectorAll('.sidebar-pane a[href]').forEach((anchor) => {
175				const normalizedPath = normalizePath(anchor.getAttribute('href') || '');
176				if (!normalizedPath || !normalizedPath.startsWith('/docs/')) return;
177
178				const alreadyLanguagePath = /^\/docs\/(js|go|dart|python)\//.test(normalizedPath);
179				const basePath = alreadyLanguagePath
180					? normalizedPath.replace(/^\/docs\/(js|go|dart|python)(\/|$)/, '/docs/')
181					: normalizedPath;
182				const isLanguageAgnostic = Boolean(languageAgnosticByPath[basePath]);
183				const supported = languageSupportByPath[basePath] || allLanguages;
184				const isSupported = supported.includes(selectedLanguage);
185				const listItem = anchor.closest('li');
186				if (!listItem) return;
187
188				listItem.hidden = !isSupported;
189
190				if (!isSupported) {
191					return;
192				}
193
194				if (isLanguageAgnostic) {
195					const targetPath = `${basePath}/`.replace(/\/+$/, '/');
196					anchor.setAttribute('href', targetPath);
197					const isCurrent = (normalizePath(targetPath) || targetPath) === currentPath;
198					anchor.setAttribute('aria-current', isCurrent ? 'page' : 'false');
199					return;
200				}
201
202				const selectedOrFallback = supported.includes(selectedLanguage)
203					? selectedLanguage
204					: fallbackOrder.find((language) => supported.includes(language)) || selectedLanguage;
205
206				const slug = basePath.replace(/^\/docs\//, '').replace(/\/$/, '');
207				const targetPath = `/docs/${selectedOrFallback}/${slug}/`;
208				anchor.setAttribute('href', targetPath);
209				const isCurrent = (normalizePath(targetPath) || targetPath) === currentPath;
210				anchor.setAttribute('aria-current', isCurrent ? 'page' : 'false');
211			});
212
213			document.querySelectorAll('.sidebar-pane details').forEach((group) => {
214				const listItems = Array.from(group.querySelectorAll(':scope > ul > li'));
215				if (listItems.length === 0) return;
216				const hasVisibleItems = listItems.some((item) => !item.hidden);
217				group.hidden = !hasVisibleItems;
218			});
219		};
220
221		const runUpdate = () => window.requestAnimationFrame(updateSidebarForLanguage);
222
223		runUpdate();
224		document.addEventListener('genkit:languagechange', runUpdate);
225		document.addEventListener('astro:page-load', runUpdate);
226		window.addEventListener('popstate', runUpdate);
227	})();
228</script>
228 
228<script type="module">const p={js:{name:"TypeScript"},go:{name:"Go"},python:{name:"Python",preview:!0},dart:{name:"Dart",preview:!0}};function u(){const t=document.getElementById("lang-dropdown");if(!t)return;const n=t.querySelector(".lang-dropdown-trigger"),i=t.querySelector(".lang-dropdown-menu");if(!n||!i)return;function g(){t.setAttribute("data-open",""),n.setAttribute("aria-expanded","true")}function o(){t.removeAttribute("data-open"),n.setAttribute("aria-expanded","false")}function d(e){n.dataset.selectedLang=e;const a=p[e]||{name:e},r=n.querySelector(".lang-trigger-name"),c=n.querySelector(".lang-trigger-preview");r&&(r.textContent=a.name),c&&(c.style.display=a.preview?"inline":"none"),i.querySelectorAll(".lang-option").forEach(s=>{s.setAttribute("aria-selected",s.getAttribute("data-lang")===e?"true":"false")})}n.addEventListener("click",()=>{t.hasAttribute("data-open")?o():g()}),i.addEventListener("click",e=>{const a=e.target.closest(".lang-option");if(!a)return;const r=a.dataset.lang;r&&(o(),window.unifiedPageManager?.setLanguage(r))}),document.addEventListener("click",e=>{t.contains(e.target)||o()}),document.addEventListener("keydown",e=>{e.key==="Escape"&&o()}),document.addEventListener("genkit:languagechange",e=>{d(e.detail.language)});const l=document.documentElement.getAttribute("data-genkit-lang")||"js";d(l)}document.addEventListener("astro:page-load",u);u();</script>
228 </div> </div> </nav> <div class="main-frame astro-yqx6a56b">  
228<script type="module">const a=document.getElementById("starlight__sidebar"),n=a?.querySelector("sl-sidebar-state-persist"),o="sl-sidebar-state",i=()=>{let t=[];const e=n?.dataset.hash||"";try{const s=sessionStorage.getItem(o),r=JSON.parse(s||"{}");Array.isArray(r.open)&&r.hash===e&&(t=r.open)}catch{}return{hash:e,open:t,scroll:a?.scrollTop||0}},c=t=>{try{sessionStorage.setItem(o,JSON.stringify(t))}catch{}},d=()=>c(i()),l=(t,e)=>{const s=i();s.open[e]=t,c(s)};n?.addEventListener("click",t=>{if(!(t.target instanceof Element))return;const e=t.target.closest("summary")?.closest("details");if(!e)return;const s=e.querySelector("sl-sidebar-restore"),r=parseInt(s?.dataset.index||"");isNaN(r)||l(!e.open,r)});addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&d()});addEventListener("pageHide",d);</script>
228 <div class="lg:sl-flex astro-qjbfe6o4"> <aside class="right-sidebar-container print:hidden astro-qjbfe6o4"> <div class="right-sidebar astro-qjbfe6o4"> <div class="lg:sl-hidden astro-h7ipzex3"><mobile-starlight-toc data-min-h="2" data-max-h="3" class="astro-zd7j5ing"><nav aria-labelledby="starlight__on-this-page--mobile" class="astro-zd7j5ing"><details id="starlight__mobile-toc" class="astro-zd7j5ing"><summary id="starlight__on-this-page--mobile" class="sl-flex astro-zd7j5ing"><span class="toggle sl-flex astro-zd7j5ing">On this page<svg aria-hidden="true" class="caret astro-zd7j5ing astro-gbrymhch" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg></span><span class="display-current astro-zd7j5ing"></span></summary><div class="dropdown astro-zd7j5ing"><ul class="isMobile astro-7vbqhfs4" style="--depth: 0;"> <li class="astro-7vbqhfs4" style="--depth: 0;"> <a href="#_top" class="astro-7vbqhfs4" style="--depth: 0;"> <span class="astro-7vbqhfs4" style="--depth: 0;">Overview</span> </a>  </li><li class="astro-7vbqhfs4" style="--depth: 0;"> <a href="#choose-your-genkit-sdk" class="astro-7vbqhfs4" style="--depth: 0;"> <span class="astro-7vbqhfs4" style="--depth: 0;">Choose your Genkit SDK</span> </a>  </li><li class="astro-7vbqhfs4" style="--depth: 0;"> <a href="#app-frameworks" class="astro-7vbqhfs4" style="--depth: 0;"> <span class="astro-7vbqhfs4" style="--depth: 0;">App frameworks</span> </a>  </li><li class="astro-7vbqhfs4" style="--depth: 0;"> <a href="#backend-frameworks" class="astro-7vbqhfs4" style="--depth: 0;"> <span class="astro-7vbqhfs4" style="--depth: 0;">Backend frameworks</span> </a>  </li><li class="astro-7vbqhfs4" style="--depth: 0;"> <a href="#after-you-choose-a-stack" class="astro-7vbqhfs4" style="--depth: 0;"> <span class="astro-7vbqhfs4" style="--depth: 0;">After you choose a stack</span> </a>  </li> </ul></div></details></nav></mobile-starlight-toc>
228<script type="module">const m="_top";class g extends HTMLElement{constructor(){super(),this._current=this.querySelector('a[aria-current="true"]'),this.minH=parseInt(this.dataset.minH||"2",10),this.maxH=parseInt(this.dataset.maxH||"3",10),this.tocHeadingSelector=`h1#${m},:where(${[...Array.from({length:1+this.maxH-this.minH}).map((t,n)=>`h${this.minH+n}`)].join()})[id]`,this.onIdle=t=>(window.requestIdleCallback||(n=>setTimeout(n,1)))(t),this.init=()=>{const t=[...this.querySelectorAll("a")],n=e=>e.matches(this.tocHeadingSelector),i=e=>{if(!e)return null;const h=e;for(;e;){if(e.matches(".sl-markdown-content, main > *"))return document.getElementById(m);if(n(e))return e;const a=e.querySelector(this.tocHeadingSelector);if(a)return a;for(e=e.previousElementSibling;e?.lastElementChild;)e=e.lastElementChild;const c=i(e);if(c)return c}return i(h.parentElement)},s=e=>{for(const{isIntersecting:h,target:a}of e){if(!h)continue;const c=i(a);if(!c)continue;const d=t.find(H=>H.hash==="#"+encodeURIComponent(c.id));if(d){this.current=d;break}}},r=document.querySelectorAll([`main :where(${this.tocHeadingSelector})`,`main :where(${this.tocHeadingSelector}, .sl-heading-wrapper) ~ *:not(:has(${this.tocHeadingSelector}))`,`main .sl-markdown-content > *:not(:has(${this.tocHeadingSelector}))`,`main > *:not(:has(${this.tocHeadingSelector}))`].join());let o;const u=()=>{o||(o=new IntersectionObserver(s,{rootMargin:this.getRootMargin()}),r.forEach(e=>o.observe(e)))};u();let l;window.addEventListener("resize",()=>{o&&(o.disconnect(),o=void 0),clearTimeout(l),l=setTimeout(()=>this.onIdle(u),200)})},this.onIdle(()=>this.init())}set current(t){t!==this._current&&(this._current&&this._current.removeAttribute("aria-current"),t.setAttribute("aria-current","true"),this._current=t)}getRootMargin(){const t=document.querySelector("header")?.getBoundingClientRect().height||0,n=this.querySelector("summary")?.getBoundingClientRect().height||0,i=t+n+32,s=i+53,r=document.documentElement.clientHeight;return`-${i}px 0% ${s-r}px`}}customElements.define("starlight-toc",g);class S extends g{set current(t){super.current=t;const n=this.querySelector(".display-current");n&&(n.textContent=t.textContent)}constructor(){super();const t=this.querySelector("details");if(!t)return;const n=()=>{t.open=!1};t.querySelectorAll("a").forEach(i=>{i.addEventListener("click",n)}),window.addEventListener("click",i=>{t.contains(i.target)||n()}),window.addEventListener("keydown",i=>{if(i.key==="Escape"&&t.open){const s=t.contains(document.activeElement);if(n(),s){const r=t.querySelector("summary");r&&r.focus()}}})}}customElements.define("mobile-starlight-toc",S);</script>
228</div><div class="right-sidebar-panel sl-hidden lg:sl-block astro-h7ipzex3"><div class="sl-container astro-h7ipzex3"><starlight-toc data-min-h="2" data-max-h="3"><nav aria-labelledby="starlight__on-this-page"><h2 id="starlight__on-this-page">On this page</h2><!-- Inline ToC list with same styling as Starlight --><ul class="list-none p-0"><li class="transition-opacity duration-200 ease-out"><a href="#_top" class="block truncate rounded-sm px-2 py-1 leading-tight aria-current:text-(--sl-color-text-accent)"><span>Overview</span></a></li><li class="transition-opacity duration-200 ease-out"><a href="#choose-your-genkit-sdk" class="block truncate rounded-sm px-2 py-1 leading-tight aria-current:text-(--sl-color-text-accent)"><span>Choose your Genkit SDK</span></a></li><li class="transition-opacity duration-200 ease-out"><a href="#app-frameworks" class="block truncate rounded-sm px-2 py-1 leading-tight aria-current:text-(--sl-color-text-accent)"><span>App frameworks</span></a></li><li class="transition-opacity duration-200 ease-out"><a href="#backend-frameworks" class="block truncate rounded-sm px-2 py-1 leading-tight aria-current:text-(--sl-color-text-accent)"><span>Backend frameworks</span></a></li><li class="transition-opacity duration-200 ease-out"><a href="#after-you-choose-a-stack" class="block truncate rounded-sm px-2 py-1 leading-tight aria-current:text-(--sl-color-text-accent)"><span>After you choose a stack</span></a></li></ul><div class="mt-6 border-t border-(--sl-color-hairline) pt-4"><a href="https://github.com/genkit-ai/docsite/edit/main/src/content/docs/docs/js/get-started.mdx" target="_blank" rel="noreferrer noopener" class="flex items-center gap-2 text-(length:--sl-text-xs) text-(--sl-color-gray-3) no-underline hover:text-(--sl-color-white)"><span class="min-w-0 truncate">Edit this page on GitHub</span><svg aria-hidden="true" viewBox="0 0 24 24" fill="currentColor" class="size-[1em] shrink-0"><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path></svg></a></div></nav></starlight-toc>
228<script type="module">class c{constructor(){document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>this.init()):this.init()}init(){document.querySelector("starlight-toc nav")&&(this.filterToC(),this.setupLanguageObserver())}filterToC(){const t=new Set;document.querySelectorAll("h1, h2, h3, h4, h5, h6").forEach(e=>{this.isHeadingVisible(e)&&e.id&&t.add(e.id)}),document.querySelectorAll('starlight-toc a[href^="#"]').forEach(e=>{const n=e.getAttribute("href")?.slice(1),s=e.closest("li");s&&n&&(s.style.display=t.has(n)?"":"none")})}isHeadingVisible(t){const e=window.getComputedStyle(t);if(e.display==="none"||e.visibility==="hidden")return!1;const n=t.closest(".lang-content");if(n){const s=window.getComputedStyle(n);return s.display!=="none"&&s.visibility!=="hidden"}return!0}setupLanguageObserver(){new MutationObserver(()=>{setTimeout(()=>this.filterToC(),10)}).observe(document.documentElement,{attributes:!0,attributeFilter:["data-genkit-lang"]})}}new c;class h{pinnedHash=null;settleTimer;constructor(){document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>this.init()):this.init()}get tocs(){return[...document.querySelectorAll("starlight-toc, mobile-starlight-toc")]}init(){if(this.tocs.length===0)return;document.addEventListener("click",e=>{const n=e.target?.closest('starlight-toc a[href^="#"], mobile-starlight-toc a[href^="#"]');n&&(this.pinnedHash=n.hash,this.setCurrent(n.hash),this.scheduleSync())}),window.addEventListener("hashchange",()=>{this.pinnedHash=location.hash||null,this.scheduleSync()}),window.addEventListener("scroll",()=>this.scheduleSync(),{passive:!0});const t=()=>this.pinnedHash=null;window.addEventListener("wheel",t,{passive:!0}),window.addEventListener("touchmove",t,{passive:!0}),window.addEventListener("keydown",e=>{["ArrowUp","ArrowDown","PageUp","PageDown","Home","End"," "].includes(e.key)&&t()}),location.hash&&(this.pinnedHash=location.hash,setTimeout(()=>this.sync(),300))}scheduleSync(){window.clearTimeout(this.settleTimer),this.settleTimer=window.setTimeout(()=>this.sync(),120)}sync(){const t=window.innerHeight,e=document.querySelector("header")?.getBoundingClientRect().height??0,n=i=>{const o=i.getBoundingClientRect();return o.bottom>e&&o.top<t};if(this.pinnedHash){const i=this.headingFor(this.pinnedHash);if(i&&n(i)){this.setCurrent(this.pinnedHash);return}this.pinnedHash=null}if(!(window.innerHeight+window.scrollY>=document.documentElement.scrollHeight-2))return;const r=this.visibleHashes();for(let i=r.length-1;i>=0;i--){const o=this.headingFor(r[i]);if(o&&o.offsetHeight>0&&o.getBoundingClientRect().top<t){this.setCurrent(r[i]);return}}}visibleHashes(){const t=this.tocs.find(e=>e.tagName.toLowerCase()==="starlight-toc")??this.tocs[0];return t?[...t.querySelectorAll('a[href^="#"]')].filter(e=>e.closest("li")?.style.display!=="none").map(e=>e.hash):[]}headingFor(t){const e=decodeURIComponent(t.slice(1));return e?document.getElementById(e):null}setCurrent(t){for(const e of this.tocs){const n=[...e.querySelectorAll('a[href^="#"]')].find(s=>s.hash===t);n&&(e.current=n)}}}new h;</script>
228</div></div> </div> </aside> <div class="main-pane astro-qjbfe6o4">  <main data-pagefind-body class="astro-tflm2sh5" lang="en" dir="ltr">    <div class="content-panel astro-xdscwtpj"> <div class="sl-container astro-xdscwtpj"> <div class="doc-page-title astro-guvttfii"><h1 id="_top" class="astro-guvttfii">Get started with Genkit</h1><button id="copy-markdown-btn" class="copy-markdown-button title-copy-button astro-guvttfii astro-ym2cbydy" type="button" aria-label="Copy page content as markdown for selected language" title="Copy as Markdown"> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="astro-ym2cbydy"> <rect width="14" height="14" x="8" y="8" rx="2" ry="2" class="astro-ym2cbydy"></rect> <path d="m4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" class="astro-ym2cbydy"></path> </svg> <span class="button-text astro-ym2cbydy">Copy as Markdown</span> <span class="success-text astro-ym2cbydy" style="display: none;">Copied!</span> </button>  
228<script type="module">class c{constructor(){this.init()}init(){document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>this.setupEventListeners()):this.setupEventListeners()}setupEventListeners(){const t=document.getElementById("copy-markdown-btn");t&&t.addEventListener("click",()=>this.copyMarkdown())}async copyMarkdown(){const t=document.getElementById("copy-markdown-btn");if(t)try{this.setButtonState(t,"copying");const e=this.getCurrentLanguage(),s=window.location.pathname,n=s.replace(/\/$/,""),a=s.match(/^\/docs\/(js|go|dart|python)(\/|$)/)?`${n}.md`:`${n}.${e}.md`,o=await fetch(a);if(!o.ok)throw new Error(`Failed to fetch markdown: ${o.status}`);const i=await o.text();await this.copyToClipboard(i),this.setButtonState(t,"success"),setTimeout(()=>{this.setButtonState(t,"default")},2e3)}catch(e){console.error("Failed to copy markdown:",e),this.setButtonState(t,"error"),setTimeout(()=>{this.setButtonState(t,"default")},2e3)}}getCurrentLanguage(){return document.documentElement.getAttribute("data-genkit-lang")||"js"}async copyToClipboard(t){if(navigator.clipboard&&window.isSecureContext)await navigator.clipboard.writeText(t);else{const e=document.createElement("textarea");e.value=t,e.style.position="fixed",e.style.left="-999999px",e.style.top="-999999px",document.body.appendChild(e),e.focus(),e.select();try{document.execCommand("copy")}finally{e.remove()}}}setButtonState(t,e){const s=t.querySelector(".button-text"),n=t.querySelector(".success-text");switch(t.classList.remove("copying","success","error"),e){case"copying":t.classList.add("copying"),s&&(s.style.display="none"),n&&(n.textContent="Copying...",n.style.display="inline");break;case"success":t.classList.add("success"),s&&(s.style.display="none"),n&&(n.textContent="Copied!",n.style.display="inline");break;case"error":t.classList.add("error"),s&&(s.style.display="none"),n&&(n.textContent="Error",n.style.display="inline");break;default:s&&(s.style.display="inline"),n&&(n.style.display="none");break}}}new c;</script>
228</div> </div> </div> <div class="content-panel astro-xdscwtpj"> <div class="sl-container astro-xdscwtpj"> <div class="sl-markdown-content"> 
229
230<p>Welcome to Genkit. To get started, pick the guide that matches how you’re building. Each guide is self-contained and takes you from an empty project to a running app without any prior setup.</p>
231<p>Every guide walks you through building the same small app, <strong>Bargain Chef</strong>, so you learn the same core Genkit patterns (streaming structured output and tool calling) no matter which stack you choose. By the end you’ll have a working flow that streams a recipe into a UI and calls a tool to ground its response in live data. Once you’ve finished one guide, the concepts carry directly over to your own app.</p>
232<aside aria-label="Building with an AI assistant?" class="starlight-aside starlight-aside--tip"> <p class="starlight-aside__title" aria-hidden="true"> <svg aria-hidden="true" class="starlight-aside__icon astro-gbrymhch" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path fill-rule="evenodd" d="M1.44 8.855v-.001l3.527-3.516c.34-.344.802-.541 1.285-.548h6.649l.947-.947c3.07-3.07 6.207-3.072 7.62-2.868a1.821 1.821 0 0 1 1.557 1.557c.204 1.413.203 4.55-2.868 7.62l-.946.946v6.649a1.845 1.845 0 0 1-.549 1.286l-3.516 3.528a1.844 1.844 0 0 1-3.11-.944l-.858-4.275-4.52-4.52-2.31-.463-1.964-.394A1.847 1.847 0 0 1 .98 10.693a1.843 1.843 0 0 1 .46-1.838Zm5.379 2.017-3.873-.776L6.32 6.733h4.638l-4.14 4.14Zm8.403-5.655c2.459-2.46 4.856-2.463 5.89-2.33.134 1.035.13 3.432-2.329 5.891l-6.71 6.71-3.561-3.56 6.71-6.711Zm-1.318 15.837-.776-3.873 4.14-4.14v4.639l-3.364 3.374Z" clip-rule="evenodd"/><path d="M9.318 18.345a.972.972 0 0 0-1.86-.561c-.482 1.435-1.687 2.204-2.934 2.619a8.22 8.22 0 0 1-1.23.302c.062-.365.157-.79.303-1.229.415-1.247 1.184-2.452 2.62-2.935a.971.971 0 1 0-.62-1.842c-.12.04-.236.084-.35.13-2.02.828-3.012 2.588-3.493 4.033a10.383 10.383 0 0 0-.51 2.845l-.001.016v.063c0 .536.434.972.97.972H2.24a7.21 7.21 0 0 0 .878-.065c.527-.063 1.248-.19 2.02-.447 1.445-.48 3.205-1.472 4.033-3.494a5.828 5.828 0 0 0 .147-.407Z"/></svg>Building with an AI assistant? </p>  <div class="starlight-aside__content"><p>Install the Genkit Agent Skill so your assistant writes idiomatic, up-to-date
233Genkit code:</p><div class="expressive-code"><link rel="stylesheet" href="/_astro/ec.me98n.css">
233<script type="module" src="/_astro/ec.0vx5m.js"></script>
233<figure class="frame not-content"><figcaption class="header"></figcaption><pre data-language="bash"><code><div class="ec-line"><div class="code"><span style="--0:#BD9CFE;--1:#6F4CDE">npx</span><span style="--0:#E1DFDF;--1:#292929"> </span><span style="--0:#77D5A3;--1:#007847">skills</span><span style="--0:#E1DFDF;--1:#292929"> </span><span style="--0:#77D5A3;--1:#007847">add</span><span style="--0:#E1DFDF;--1:#292929"> </span><span style="--0:#77D5A3;--1:#007847">genkit-ai/skills</span></div></div></code></pre><div class="copy"><div aria-live="polite"></div><button title="Copy to clipboard" data-copied="Copied!" data-code="npx skills add genkit-ai/skills"><div></div></button></div></figure></div><p>See <a href="https://github.com/genkit-ai/skills">Genkit Agent Skills</a> to learn more.</p></div> </aside>
234<div class="sl-heading-wrapper level-h2"><h2 id="choose-your-genkit-sdk">Choose your Genkit SDK</h2><a class="sl-anchor-link" href="#choose-your-genkit-sdk"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Choose your Genkit SDK”</span></a></div>
235<p>Start by choosing the SDK for the language you’ll write your Genkit code in. The rest of this page adapts to that choice.</p>
236<div class="card-grid astro-xjh5ylm6"><a class="framework-card astro-aluzozqj" href="/docs/js/get-started/" data-selected-lang="js" style="--icon-url: url('/assets/framework-icons/typescript.svg'); --icon-color: #3178c6;">  <span class="icon icon-mask astro-aluzozqj" aria-hidden="true"></span> <span class="text astro-aluzozqj"> <span class="title astro-aluzozqj">TypeScript</span> <span class="description astro-aluzozqj">Genkit for Node.js and JavaScript runtimes.</span> </span> <span class="selected-indicator astro-aluzozqj">Selected</span> </a><a class="framework-card astro-aluzozqj" href="/docs/go/get-started/" data-selected-lang="go" style="--icon-url: url('/assets/framework-icons/go.svg'); --icon-color: #00add8;">  <span class="icon icon-mask astro-aluzozqj" aria-hidden="true"></span> <span class="text astro-aluzozqj"> <span class="title astro-aluzozqj">Go</span> <span class="description astro-aluzozqj">Genkit for Go services and APIs.</span> </span> <span class="selected-indicator astro-aluzozqj">Selected</span> </a><a class="framework-card astro-aluzozqj" href="/docs/dart/get-started/" data-selected-lang="dart" style="--icon-url: url('/assets/framework-icons/dart.svg'); --icon-color: #0175c2;">  <span class="icon icon-mask astro-aluzozqj" aria-hidden="true"></span> <span class="text astro-aluzozqj"> <span class="title astro-aluzozqj">Dart</span> <span class="description astro-aluzozqj">Genkit for Flutter and Dart servers.</span> </span> <span class="selected-indicator astro-aluzozqj">Selected</span> </a><a class="framework-card astro-aluzozqj" href="/docs/python/get-started/" data-selected-lang="python" style="--icon-url: url('/assets/framework-icons/python.svg'); --icon-color: #3776ab;">  <span class="icon icon-mask astro-aluzozqj" aria-hidden="true"></span> <span class="text astro-aluzozqj"> <span class="title astro-aluzozqj">Python</span> <span class="description astro-aluzozqj">Genkit for Python web services.</span> </span> <span class="selected-indicator astro-aluzozqj">Selected</span> </a></div>
237<p>Your Genkit code runs on a server, and there are two kinds of guides that get you there. You only need one to start:</p>
238<ul>
239<li><strong>App frameworks</strong> build your backend and UI together, or connect a frontend to a standalone backend. Start here if you’re building a full-stack app or a web frontend.</li>
240<li><strong>
240Backend frameworks</strong> expose your Genkit flows as standalone API endpoints that any client can call. Start here if you already have a backend, or want to keep your AI service separate from your frontend.</li>
241</ul>
242<div class="sl-heading-wrapper level-h2"><h2 id="app-frameworks">App frameworks</h2><a class="sl-anchor-link" href="#app-frameworks"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “App frameworks”</span></a></div>
243<p>Full-stack and frontend frameworks with built-in AI features. Each guide covers using the framework’s own API routes or connecting to a standalone Genkit backend.</p>
244<div class="card-grid astro-xjh5ylm6"><a class="framework-card astro-aluzozqj" href="/docs/js/app-frameworks/nextjs/" style="--icon-url: url('/assets/framework-icons/nextdotjs.svg'); --icon-color: var(--sl-color-white);">  <span class="icon icon-mask astro-aluzozqj" aria-hidden="true"></span> <span class="text astro-aluzozqj"> <span class="title astro-aluzozqj">Next.js</span> <span class="description astro-aluzozqj">Full-stack React with App Router, Pages Router, or a standalone Genkit backend.</span> </span>  </a><a class="framework-card astro-aluzozqj" href="/docs/js/app-frameworks/sveltekit/" style="--icon-url: url('/assets/framework-icons/svelte.svg'); --icon-color: #ff3e00;">  <span class="icon icon-mask astro-aluzozqj" aria-hidden="true"></span> <span class="text astro-aluzozqj"> <span class="title astro-aluzozqj">SvelteKit</span> <span class="description astro-aluzozqj">Full-stack Svelte using SvelteKit API routes and the Genkit fetch handler.</span> </span>  </a><a class="framework-card astro-aluzozqj" href="/docs/js/app-frameworks/nuxt/" style="--icon-url: url('/assets/framework-icons/nuxt.svg'); --icon-color: #00dc82;">  <span class="icon icon-mask astro-aluzozqj" aria-hidden="true"></span> <span class="text astro-aluzozqj"> <span class="title astro-aluzozqj">Nuxt</span> <span class="description astro-aluzozqj">Full-stack Vue using Nitro server routes and the Genkit fetch handler.</span> </span>  </a><a class="framework-card astro-aluzozqj" href="/docs/js/app-frameworks/tanstack-start/" style="--icon-url: url('/assets/framework-icons/tanstack.svg'); --icon-color: #ff4154;">  <span class="icon icon-mask astro-aluzozqj" aria-hidden="true"></span> <span class="text astro-aluzozqj"> <span class="title astro-aluzozqj">TanStack Start</span> <span class="description astro-aluzozqj">Full-stack React using TanStack Router with Vinxi API routes.</span> </span>  </a><a class="framework-card astro-aluzozqj" href="/docs/js/app-frameworks/astro/" style="--icon-url: url('/assets/framework-icons/astro.svg'); --icon-color: #bc52ee;">  <span class="icon icon-mask astro-aluzozqj" aria-hidden="true"></span> <span class="text astro-aluzozqj"> <span class="title astro-aluzozqj">Astro</span> <span class="description astro-aluzozqj">Content-driven sites using Astro SSR with API routes.</span> </span>  </a><a class="framework-card astro-aluzozqj" href="/docs/js/app-frameworks/angular/" style="--icon-url: url('/assets/framework-icons/angular.svg'); --icon-color: #dd0031;">  <span class="icon icon-mask astro-aluzozqj" aria-hidden="true"></span> <span class="text astro-aluzozqj"> <span class="title astro-aluzozqj">Angular</span> <span class="description astro-aluzozqj">Angular SSR and hybrid-rendered applications.</span> </span>  </a><a class="framework-card astro-aluzozqj" href="/docs/app-frameworks/react/" style="--icon-url: url('/assets/framework-icons/react.svg'); --icon-color: #61dafb;">  <span class="icon icon-mask astro-aluzozqj" aria-hidden="true"></span> <span class="text astro-aluzozqj"> <span class="title astro-aluzozqj">React (Vite)</span> <span class="description astro-aluzozqj">Client-side React apps that connect to a standalone Genkit backend.</span> </span>  </a><a class="framework-card astro-aluzozqj" href="/docs/js/app-frameworks/remix/" style="--icon-url: url('/assets/framework-icons/remix.svg'); --icon-color: var(--sl-color-white);">  <span class="icon icon-mask astro-aluzozqj" aria-hidden="true"></span> <span class="text astro-aluzozqj"> <span class="title astro-aluzozqj">Remix</span> <span class="description astro-aluzozqj">Full-stack React using Remix resource routes and the Genkit fetch handler.</span> </span>  </a><a class="framework-card astro-aluzozqj" href="/docs/app-frameworks/flutter/" style="--icon-url: url('/assets/framework-icons/flutter.svg'); --icon-color: #02569b;">  <span class="icon icon-mask astro-aluzozqj" aria-hidden="true"></span> <span class="text astro-aluzozqj"> <span class="title astro-aluzozqj">Flutter</span> <span class="description astro-aluzozqj">
244Mobile, desktop, and web apps using the Dart client SDK.</span> </span>  </a></div>
245<div class="sl-heading-wrapper level-h2"><h2 id="backend-frameworks">Backend frameworks</h2><a class="sl-anchor-link" href="#backend-frameworks"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Backend frameworks”</span></a></div>
246<p>Standalone Node.js servers that expose Genkit flows as API endpoints.</p>
247<div class="card-grid astro-xjh5ylm6"><a class="framework-card astro-aluzozqj" href="/docs/js/backend-frameworks/express/" style="--icon-url: url('/assets/framework-icons/express.svg'); --icon-color: var(--sl-color-white);">  <span class="icon icon-mask astro-aluzozqj" aria-hidden="true"></span> <span class="text astro-aluzozqj"> <span class="title astro-aluzozqj">Express</span> <span class="description astro-aluzozqj">Existing Node.js backends or custom API servers.</span> </span>  </a><a class="framework-card astro-aluzozqj" href="/docs/js/backend-frameworks/hono/" style="--icon-url: url('/assets/framework-icons/hono.svg'); --icon-color: #e36002;">  <span class="icon icon-mask astro-aluzozqj" aria-hidden="true"></span> <span class="text astro-aluzozqj"> <span class="title astro-aluzozqj">Hono</span> <span class="description astro-aluzozqj">Web-standard request and response handling across Node.js and edge runtimes.</span> </span>  </a><a class="framework-card astro-aluzozqj" href="/docs/js/backend-frameworks/fastify/" style="--icon-url: url('/assets/framework-icons/fastify.svg'); --icon-color: var(--sl-color-white);">  <span class="icon icon-mask astro-aluzozqj" aria-hidden="true"></span> <span class="text astro-aluzozqj"> <span class="title astro-aluzozqj">Fastify</span> <span class="description astro-aluzozqj">Fastify servers exposing Genkit flows through the fetch plugin.</span> </span>  </a><a class="framework-card astro-aluzozqj" href="/docs/js/backend-frameworks/nestjs/" style="--icon-url: url('/assets/framework-icons/nestjs.svg'); --icon-color: #e0234e;">  <span class="icon icon-mask astro-aluzozqj" aria-hidden="true"></span> <span class="text astro-aluzozqj"> <span class="title astro-aluzozqj">NestJS</span> <span class="description astro-aluzozqj">NestJS applications exposing Genkit flows through a controller.</span> </span>  </a></div>
248<p>If you’re not ready to choose a framework yet, explore <a href="/docs/js/flows/">Creating flows</a> and <a href="/docs/js/models/">Generating content</a> to learn the core concepts first.</p>
249<div class="sl-heading-wrapper level-h2"><h2 id="after-you-choose-a-stack">After you choose a stack</h2><a class="sl-anchor-link" href="#after-you-choose-a-stack"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “After you choose a stack”</span></a></div>
250<p>Once your app is running, the next pages most teams need are:</p>
251<ul>
252<li><a href="/docs/js/flows/">Creating flows</a></li>
253<li><a href="/docs/js/models/">Generating content</a></li>
254<li><a href="/docs/js/tool-calling/">Tool calling</a></li>
255<li><a href="/docs/js/devtools/">Developer tools</a></li>
256<li><a href="/docs/js/develop-with-ai/">AI-assisted development</a> with Genkit Agent Skills</li>
257</ul> </div> <footer class="sl-flex astro-pkp3m2kr"> <div class="meta sl-flex astro-pkp3m2kr"> <a href="https://github.com/genkit-ai/docsite/edit/main/src/content/docs/docs/js/get-started.mdx" class="sl-flex print:hidden astro-faqxsb5q"><svg aria-hidden="true" class="astro-faqxsb5q astro-gbrymhch" width="16" height="16" viewB
257ox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.2em;"><path d="M22 7.24a1 1 0 0 0-.29-.71l-4.24-4.24a1 1 0 0 0-1.1-.22 1 1 0 0 0-.32.22l-2.83 2.83L2.29 16.05a1 1 0 0 0-.29.71V21a1 1 0 0 0 1 1h4.24a1 1 0 0 0 .76-.29l10.87-10.93L21.71 8c.1-.1.17-.2.22-.33a1 1 0 0 0 0-.24v-.14l.07-.05ZM6.83 20H4v-2.83l9.93-9.93 2.83 2.83L6.83 20ZM18.17 8.66l-2.83-2.83 1.42-1.41 2.82 2.82-1.41 1.42Z"/></svg>Edit page</a>  </div> <div class="pagination-links print:hidden astro-w3fwozle" dir="ltr">   </div>  </footer> <!-- Anchor for `<link rel="expect" href="#footer" blocking="render">` in head.astro --> <span id="footer" hidden aria-hidden="true"></span> </div> </div>  </main> </div> </div> </div> </div> </body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.