New to Kestra?
Use blueprints to kickstart your first workflows.
Sync Kestra flows from a Git branch into a namespace on a schedule with io.kestra.plugin.git.SyncFlows, deleting flows removed in Git and notifying Slack.
Treat Git as the single source of truth for your Kestra flows. This blueprint reconciles a Git branch with a target namespace on a short interval: it deploys every flow defined in Git, removes any flow that was deleted from the repository, and posts a summary to Slack. The result is GitOps for orchestration, where pull requests and code review become the only path to changing what runs in Kestra, giving you version control, audit history, and reproducible deployments without manual UI edits.
sync_flows task (io.kestra.plugin.git.SyncFlows) clones the repository at {{ inputs.repository }}, reads flow YAML from the _flows directory, and reconciles it against the namespace in {{ inputs.target_namespace }}.includeChildNamespaces: true extends the reconciliation to child namespaces, and delete: true makes the sync authoritative so flows missing from Git are removed from Kestra.notify task (io.kestra.plugin.slack.notifications.SlackIncomingWebhook) posts a confirmation message to your Slack channel via an incoming webhook.every_five_minutes trigger (io.kestra.plugin.core.trigger.Schedule) runs the reconciliation on a */5 * * * * cron. It ships disabled so you can preview before going live.Git itself has no scheduler and no awareness of your Kestra namespaces. Kestra closes that gap: declarative YAML defines the sync, the Schedule trigger (or event triggers and webhooks) drives reconciliation, retries handle transient Git or network failures, and every run is recorded with full execution history for lineage and audit. You get a managed, observable deployment loop instead of a cron job and a deploy script bolted onto your CI.
_flows directory.GIT_USERNAME: Git account or token user with read access to the repository.GIT_TOKEN: Git HTTP access token or password.SLACK_WEBHOOK_URL: Slack incoming webhook URL for the target channel.repository input to your flows repo and target_namespace to the destination.outputs.sync_flows to confirm the applied diff of created, updated, and deleted flows.every_five_minutes trigger to reconcile continuously.dryRun: true on sync_flows to preview the diff before enabling deletes.branch or gitDirectory to match your repository layout.