# Copyright 2026 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
forge = "github"
repo_name = "genkit"
repo_owner = "firebase"
# ---------------------------------------------------------------------------
# Global options (valid top-level keys)
# ---------------------------------------------------------------------------
# forge = "github" # github | gitlab | bitbucket | none
# repo_owner = "firebase" # repository owner / organisation
# repo_name = "genkit" # repository name
# default_branch = "main" # override default branch name
# publish_from = "local" # local | ci
# http_pool_size = 10 # max httpx connections for registry APIs
# pr_title_template = "chore(release): v{version}"
# ---------------------------------------------------------------------------
# Timeout & resilience reference (CLI flags, not config keys)
#
# These are NOT config file keys — they are CLI flags or code defaults.
# Documented here so operators know what knobs exist.
#
# CLI flag Default Description
# --task-timeout 600s Per-package publish timeout (build+upload+poll)
# --concurrency 5 Max packages publishing in parallel per level
# --max-retries 0 Retry failed publishes (0 = no retry)
# --retry-base-delay 1.0s Base delay for exponential backoff
#
# Code defaults (in source):
# command_timeout 300s Subprocess kill timeout (backends/_run.py)
# http_timeout 30s Per-HTTP-request timeout (net.py)
# http_retries 3 Transient error retries: 429, 5xx (net.py)
# poll_timeout 300s Wait for registry indexing (publisher.py)
# poll_interval 5s Seconds between poll attempts (publisher.py)
# stale_lock_timeout 1800s Auto-break locks from crashed runs (lock.py)
# ---------------------------------------------------------------------------
# ---------------------------------------------------------------------------
# Workspace options reference (valid keys inside [workspace.<label>])
# ---------------------------------------------------------------------------
# ecosystem = "python" # python | js | go | rust | dart | jvm
# tool = "uv" # uv | pnpm | cargo | go | pub | gradle (auto from ecosystem)
# root = "py" # workspace root relative to monorepo root
# core_package = "genkit" # core package name for version checks
# tag_format = "{name}-v{version}" # per-package git tag template
# secondary_tag_format = "" # alternate tag format (e.g. for npm)
# umbrella_tag = "v{version}" # umbrella tag template
# bootstrap_sha = "" # last commit before releasekit adoption
# changelog = true # generate CHANGELOG.md entries
# smoke_test = true # run install smoke test after publish
# propagate_bumps = true # bump dependents when a library changes
# synchronize = false # all packages share the same version
# major_on_zero = false # breaking changes on 0.x → MAJOR bumps
# prerelease_mode = "rollup" # rollup | separate
# auto_merge = false # auto-merge Release PRs
# max_commits = 0 # max commits to scan (0 = unlimited)
# plugin_prefix = "genkit-plugin-" # expected prefix for plugin names
# library_dirs = [] # parent dirs needing py.typed
# plugin_dirs = [] # parent dirs following naming conventions
# namespace_dirs = [] # namespace dirs requiring PEP 420 checks
# extra_files = [] # extra files with version strings to bump
# exclude = [] # glob patterns to exclude from discovery
# exclude_publish = [] # skip during publish (supports group:<name>)
# exclude_bump = [] # skip during version bumps (supports group:<name>)
# sbom = true # generate SBOM during publish (on by default)
# sbom_formats = ["cyclonedx", "spdx"] # SBOM formats: cyclonedx, spdx (both by default)
# dist_tag = "" # npm dist-tag (latest, next) — JS only
# publish_branch = "" # pnpm publish --publish-branch — JS only
# provenance = false # npm provenance attestation — JS only
# ---------------------------------------------------------------------------
# Python workspace
# ---------------------------------------------------------------------------
[workspace.py]
bootstrap_sha = "b71a3d20c74b71583edbc652e5b26117caad43f4" # py/v0.5.0
changelog = true
core_package = "genkit"
ecosystem = "python"
library_dirs = ["packages", "plugins"]
namespace_dirs = ["genkit", "genkit/plugins"]
plugin_dirs = ["plugins"]
plugin_prefix = "genkit-plugin-"
root = "py"
smoke_test = true
tag_format = "{label}/{name}-v{version}"
tool = "uv"
umbrella_tag = "{label}/v{version}"
# Packages listed here are discovered, checked, and version-bumped
# but skipped during publish. Use "group:<name>" to reference a group.
exclude_publish = [
"group:samples",
"group:unreleased_plugins",
"group:internal_tools",
]
[workspace.py.groups]
community_plugins = [
"genkit-plugin-amazon-bedrock",
"genkit-plugin-anthropic",
"genkit-plugin-checks",
"genkit-plugin-cloudflare-workers-ai",
"genkit-plugin-cohere",
"genkit-plugin-compat-oai",
"genkit-plugin-deepseek",
"genkit-plugin-evaluators",
"genkit-plugin-fastapi",
"genkit-plugin-flask",
"genkit-plugin-huggingface",
"genkit-plugin-mcp",
"genkit-plugin-microsoft-foundry",
"genkit-plugin-mistral",
"genkit-plugin-observability",
"genkit-plugin-ollama",
"genkit-plugin-xai",
]
core = ["genkit"]
google_plugins = [
"genkit-plugin-checks",
"genkit-plugin-firebase",
"genkit-plugin-google-cloud",
"genkit-plugin-google-genai",
"genkit-plugin-vertex-ai",
]
internal_tools = [
"conform",
"genkit-plugin-dev-local-vectorstore",
"genkit-tools-model-config-test",
"genkit-tools-sample-flows",
"releasekit",
]
samples = [
"dev-local-vectorstore-hello",
"framework-context-demo",
"framework-custom-evaluators",
"framework-dynamic-tools-demo",
"framework-evaluator-demo",
"framework-format-demo",
"framework-middleware-demo",
"framework-prompt-demo",
"framework-realtime-tracing-demo",
"framework-restaurant-demo",
"framework-tool-interrupts",
"provider-amazon-bedrock-hello",
"provider-anthropic-hello",
"provider-checks-hello",
"provider-cloudflare-workers-ai-hello",
"provider-cohere-hello",
"provider-compat-oai-hello",
"provider-deepseek-hello",
"provider-firestore-retriever",
"provider-google-genai-code-execution",
"provider-google-genai-context-caching",
"provider-google-genai-hello",
"provider-google-genai-media-models-demo",
"provider-google-genai-vertexai-hello",
"provider-google-genai-vertexai-image",
"provider-huggingface-hello",
"provider-microsoft-foundry-hello",
"provider-mistral-hello",
"provider-observability-hello",
"provider-ollama-hello",
"provider-vertex-ai-model-garden",
"provider-vertex-ai-rerank-eval",
"provider-vertex-ai-vector-search-bigquery",
"provider-vertex-ai-vector-search-firestore",
"provider-xai-hello",
"web-endpoints-hello",
"web-fastapi-bugbot",
"web-flask-hello",
"web-multi-server",
"web-short-n-long",
]
unreleased_plugins = []
# ---------------------------------------------------------------------------
# Go workspace (ready — uncomment to activate)
#
# The Go SDK is a single module (github.com/firebase/genkit/go) without
# go.work. Versions are set by VCS tags (go/v{version}), not go.mod.
# After tagging, the Go module proxy picks up the new version automatically.
#
# Before enabling:
# 1. Pick a bootstrap_sha (last commit before releasekit adoption).
# 2. Run `releasekit plan --workspace go --dry-run` to validate.
# 3. Run 1–2 dry-run cycles to confirm tag format and changelog.
# ---------------------------------------------------------------------------
# [workspace.go]
# ecosystem = "go"
# tool = "go"
# root = "go"
# core_package = "github.com/firebase/genkit/go"
# tag_format = "go/v{version}"
# umbrella_tag = "go/v{version}"
# changelog = true
# smoke_test = false # Go proxy verification instead
# synchronize = true # single module — one version
# bootstrap_sha = "" # TODO: set to last pre-releasekit commit
#
# exclude_publish = [
# "group:samples",
# ]
#
# [workspace.go.groups]
# core = ["github.com/firebase/genkit/go"]
# samples = [
# "github.com/firebase/genkit/go/samples/mcp-git-pr-explainer",
# ]
# ---------------------------------------------------------------------------
# JS workspace (ready — uncomment to activate)
#
# All backends are implemented (PnpmBackend, PnpmWorkspace, NpmRegistry).
# Before enabling:
# 1. Pick a bootstrap_sha (last commit before releasekit adoption).
# 2. Run `releasekit plan --workspace js --dry-run` to validate.
# 3. Run 1–2 dry-run cycles alongside existing scripts.
# 4. Switch release_js_main.yml to call `releasekit publish`.
# ---------------------------------------------------------------------------
# [workspace.js]
# ecosystem = "js"
# tool = "pnpm"
# root = "js"
# core_package = "genkit"
# tag_format = "{name}@{version}"
# secondary_tag_format = "{label}/{name}-v{version}"
# umbrella_tag = "js/v{version}"
# synchronize = true
# changelog = true
# smoke_test = true
# propagate_bumps = true
# dist_tag = "latest"
# bootstrap_sha = "" # TODO: set to last pre-releasekit commit
#
# exclude_publish = [
# "group:testapps",
# "group:internal",
# ]
#
# [workspace.js.groups]
# core = [
# "@genkit-ai/ai",
# "@genkit-ai/core",
# "genkit",
# ]
# google_plugins = [
# "@genkit-ai/firebase",
# "@genkit-ai/google-cloud",
# "@genkit-ai/google-genai",
# "@genkit-ai/googleai",
# "@genkit-ai/vertexai",
# ]
# community_plugins = [
# "@genkit-ai/anthropic",
# "@genkit-ai/checks",
# "@genkit-ai/compat-oai",
# "@genkit-ai/dev-local-vectorstore",
# "@genkit-ai/evaluator",
# "@genkit-ai/express",
# "@genkit-ai/mcp",
# "@genkit-ai/next",
# "genkitx-chromadb",
# "genkitx-cloud-sql-pg",
# "genkitx-langchain",
# "genkitx-ollama",
# "genkitx-pinecone",
# ]
# testapps = [
# "doc-snippets",
# ]
# internal = []
# [workspace.js-cli]
# ecosystem = "js"
# tool = "pnpm"
# root = "genkit-tools"
# tag_format = "{name}@{version}"
# secondary_tag_format = "{label}/{name}-v{version}"
# umbrella_tag = "js-cli/v{version}"
# synchronize = true
# changelog = true
# smoke_test = true
# dist_tag = "latest"
# bootstrap_sha = "" # TODO: set to last pre-releasekit commit
#
# [workspace.js-cli.groups]
# cli = [
# "@genkit-ai/tools-common",
# "@genkit-ai/telemetry-server",
# "genkit-cli",
# ]