fletchfederation
Deploy

Three images. Your cluster. One Helm release.

Fletch ships as plain containers that read their configuration from the environment. The same images run under the Helm chart on AKS, EKS, GKE or any Kubernetes, and under Docker Compose on a developer machine. Deploys are deliberate: only the service that changed is rolled, and the served bytes are verified against the merged source before a roll is recorded.

fletch-console

Node. The REST API, the single-page console, governance, the vault and Administration. The image also carries the Rust toolchain binaries, so validate, plan and run never leave the pod.

lib/ · public/ · server.js · fletch-irc · fletch-planc · fletch-oprunner

fletch-engine

Rust on DataFusion. Federated query execution with optional spill to disk. Reads the sources the console scopes for it.

engine/ · engine-mpp/

fletch-flight

Rust. An Arrow Flight SQL service that fans a query out through the console's governed source routes and streams the exact Arrow batches on, for engine-to-engine transfer.

flight/

Kubernetes

A Helm chart that pins each service on its own.

The chart templates the console, engine and Flight deployments, the ingress and the secret pointer. CockroachDB and object storage are prerequisites you already run. Secrets live in an operator-managed Kubernetes secret, not in release values, so a release can be re-applied without re-supplying them.

  • Per-service image tags, so a console-only change rolls the console only
  • ingress-nginx and cert-manager for TLS; an IP allowlist on the ingress
  • Entra ID OIDC wired for sign-in
helm · kubectl
A laptop

The whole stack with one command.

Compose brings up CockroachDB, Azurite for Fletch-managed blob storage, an S3-compatible target, the engine, the console and Flight. Open the console, create the first administrator, and add a source.

  • Every environment variable is documented in one configuration contract
  • The master key, session secret and share token are the only values you must set
  • The Python SDK and the OpenAPI specification ship in the same repository
docker compose
How a roll is verified

A built tag is not a deployed tag.

An image in the registry proves a build happened and nothing else. The chain that holds, and the one we follow for every production roll: merged source, to the file hashes inside the image, to the image digest, to the digest the pod reports running, to the byte count the console actually serves.

1

Merged main

The tree that was built is compared to the merged commit right before the upgrade. Any difference means a rebuild.

2

Image digest

The registry's manifest digest for the tag, read from the registry, not from a build log line.

3

Running digest

The pod's reported image id must equal the pushed digest, and the old pod must be gone before anything is recorded.

4

Served bytes

The single-page console served over the ingress is byte-identical to the file in the image, with new markers present and removed ones absent.

Continuous integration

Seven required checks before a change reaches main.

CheckWhat it proves
Unit testsThe console's pure-JavaScript suite, drivers mocked, no network
Rust unit testsFletch IR, planner, operators, importer and scheduler crates, with the exact compiler pinned in the repository
Protocol and auth suitesSign-in paths and the protocol surfaces, end to end
REST API suiteAuthorisation, validation and idempotency of every documented route
Console PlaywrightEvery console area, both viewports, including the keyboard-only canvas path
Software composition analysisZero copyleft dependencies
IntegrationReal sources and sinks in a live stack, plus query-builder oracles

Branch protection is server-side. Direct pushes to main are refused, force-pushes are refused, and a merge blocked by a required check names the check in its refusal. A mistake on main is fixed forward, never by rewriting history.

Stand it up in your subscription.

We will walk your platform team through the chart, the secrets layout and the first roll.