---
title: Overview
description: "Every binding kind Sproutboat exposes on env, and how binding calls reach the broker."
---

Bindings follow the Cloudflare Workers binding APIs, implemented by Sproutboat on your own server. Each page lists the methods that are supported.

Whether a binding call returns its value directly or a Promise depends on the [compatibility date](/docs/concepts/configuration). From `2026-10-24` D1 calls (`prepare().raw()`, `.run()`, `.all()`, `.first()`, `batch()` and `exec()`) return Promises, as on Workers, from `2026-10-25` KV calls do, and from `2026-10-26` R2 calls do. Before those dates they are synchronous and return their value directly. `await` works at every date, so write `await env.DB.prepare(...).run()` and your code is correct on both sides. A call you do not await that fails is reported as an unhandled rejection (a log line and an `unhandledrejection` event); it does not stop the process. On the platform they go over loopback to the broker running next to your sprout; a standalone binary has the bindings compiled in. See [The handler](/docs/concepts/handler). they go over loopback to the broker running next to your sprout; a standalone binary has the bindings compiled in. See [The handler](/docs/concepts/handler).

## Available bindings

| Binding | Accessed as | Config key |
| --- | --- | --- |
| [KV](/docs/bindings/kv) | `env.NAME` | `kv_namespaces` |
| [D1-compatible SQLite](/docs/bindings/d1) | `env.NAME` | `d1_databases` |
| [R2-compatible object storage](/docs/bindings/r2) | `env.NAME` | `r2_buckets` |
| [Queues](/docs/bindings/queues) | `env.NAME` | `queues` |
| [Secrets](/docs/bindings/secrets) | `env.NAME` | `secrets` |
| [Cron](/docs/bindings/cron) | `scheduled(event)` | `triggers.crons` |
| [Service bindings](/docs/bindings/service-bindings) | `env.NAME` | `services` |
| [Static assets](/docs/bindings/static-assets) | `env.ASSETS` | `assets` |
| [Durable Objects](/docs/bindings/durable-objects) | `env.NAME` | `durable_objects` |
| [Rate limiting](/docs/bindings/rate-limiting) | `env.NAME` | `ratelimiters` |
| [Outbound fetch](/docs/bindings/outbound-fetch) | `fetch()` | none |
| [Vars](/docs/bindings/vars) | `env.NAME` | `vars` |
| [Analytics Engine](/docs/bindings/analytics-engine) | `env.NAME` | `analytics_engine_datasets` |
| [Version metadata](/docs/bindings/version-metadata) | `env.NAME` | `version_metadata` |

Every binding is declared in [`sproutboat.jsonc`](/docs/concepts/configuration). KV namespaces, D1 databases, R2 buckets and queues are account-level resources that deploy can create for you; see [Storage resources](/docs/storage).
