> ## Documentation Index
> Fetch the complete documentation index at: https://docs.firebolt.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart

> Create a Firebolt instance and engine with the Firebolt Operator.

This quickstart creates the minimal resources needed to run a Firebolt engine with the Firebolt Operator.

## Before you get started

You need the following tools installed on your machine:

* [kind](https://kind.sigs.k8s.io/). You use this to create a local Kubernetes cluster.
* [Docker](https://docs.docker.com/get-docker/). Required to run containers for `kind`.
* [kubectl](https://kubernetes.io/docs/tasks/tools/). You use this to interact with your Kubernetes cluster.
* [Helm](https://helm.sh/docs/intro/install/). You use this to install the Firebolt Operator.

## Create a local cluster

Create a Kubernetes cluster with `kind` on your local machine:

```bash theme={"theme":{"light":"css-variables","dark":"css-variables"}}
kind create cluster --name firebolt
```

Verify the cluster is running:

```bash theme={"theme":{"light":"css-variables","dark":"css-variables"}}
kubectl get nodes
```

You should see a single node with `Ready` status:

```text theme={"theme":{"light":"css-variables","dark":"css-variables"}}
NAME                    STATUS   ROLES           AGE   VERSION
firebolt-control-plane  Ready    control-plane   30s   v1.35.0
```

## Install the Firebolt Operator

Install the CRDs and operator with Helm:

```bash theme={"theme":{"light":"css-variables","dark":"css-variables"}}
helm upgrade --install firebolt-crds oci://ghcr.io/firebolt-db/helm-charts/firebolt-operator-crds
helm upgrade --skip-crds --install firebolt-operator oci://ghcr.io/firebolt-db/helm-charts/firebolt-operator
```

For more installation options, see [Installation](./installation).

## Create a namespace

Create a namespace for the instance and engine:

```bash theme={"theme":{"light":"css-variables","dark":"css-variables"}}
kubectl create namespace firebolt
```

## Create a FireboltInstance

A `FireboltInstance` provisions the metadata infrastructure that engines depend on.

```yaml theme={"theme":{"light":"css-variables","dark":"css-variables"}}
apiVersion: compute.firebolt.io/v1alpha1
kind: FireboltInstance
metadata:
  name: quickstart
  namespace: firebolt
spec:
  metadata: {}
  gateway: {}
```

Apply the manifest:

```bash theme={"theme":{"light":"css-variables","dark":"css-variables"}}
kubectl apply --server-side -f instance.yaml
```

Check progress:

```bash theme={"theme":{"light":"css-variables","dark":"css-variables"}}
kubectl get fire -n firebolt
```

Wait until the instance is `Ready` before creating an engine. See the [FireboltInstance CRD reference](./crd-reference/instance-crd-reference) for all supported fields and phases.

## Configure object storage

Every FireboltEngine requires object storage for managed tablet data. Local filesystem storage mode is not supported by the Firebolt Operator and the engine will refuse to start without object storage.

On a real cluster, point the engine at an existing bucket (S3, GCS, or Azure Blob) and grant access through your platform's workload identity. For Amazon S3, see [Amazon S3](./engine/object-storage/amazon-s3). For a local cluster (Kind, minikube), deploy a small S3-compatible emulator ([floci](https://github.com/floci-io/floci)) and create a bucket:

```bash theme={"theme":{"light":"css-variables","dark":"css-variables"}}
kubectl apply -f https://raw.githubusercontent.com/firebolt-db/firebolt-kubernetes-operator/main/examples/object-storage-local.yaml
```

This deploys floci into the `firebolt` namespace, exposes it at `http://floci.firebolt.svc.cluster.local:4566`, and creates a `my-engine-bucket` bucket. The engine references it through `spec.customEngineConfig.storage` in the next step.

## Create a FireboltEngine

Once the instance is `Ready`, create an engine that references it. The `customEngineConfig.storage` block points the engine at the object storage configured above.

```yaml theme={"theme":{"light":"css-variables","dark":"css-variables"}}
apiVersion: compute.firebolt.io/v1alpha1
kind: FireboltEngine
metadata:
  name: my-engine
  namespace: firebolt
spec:
  instanceRef: quickstart
  replicas: 1
  customEngineConfig:
    storage:
      type: minio
      api_scheme: "s3://"
      bucket_name: my-engine-bucket
      minio:
        endpoint: http://floci.firebolt.svc.cluster.local:4566
  template:
    spec:
      containers:
        - name: engine
          resources:
            requests:
              cpu: "2"
              memory: "3Gi"
            limits:
              memory: "3Gi"
```

Apply the manifest:

```bash theme={"theme":{"light":"css-variables","dark":"css-variables"}}
kubectl apply --server-side -f engine.yaml
```

Check progress:

```bash theme={"theme":{"light":"css-variables","dark":"css-variables"}}
kubectl get fireng -n firebolt
```

Wait until the engine reaches `stable` phase with `READY=True`:

```text theme={"theme":{"light":"css-variables","dark":"css-variables"}}
NAME        REPLICAS   PHASE    READY   GENERATION   AGE
my-engine   1          stable   True    0            30s
```

See the [FireboltEngine CRD reference](./crd-reference/engine-crd-reference) for the full field surface.

## Run a query

Once the engine is ready, run a query through the instance gateway:

```bash theme={"theme":{"light":"css-variables","dark":"css-variables"}}
kubectl run query --rm -i --image=curlimages/curl --restart=Never -n firebolt -- \
  curl --silent "http://quickstart-gateway/query" \
    -H "X-Firebolt-Engine: my-engine" \
    -H "Content-Type: text/plain" \
    --data-binary "SELECT 42"
```

You should see the query result in the output.

## Clean up

Delete the kind cluster to free all resources:

```bash theme={"theme":{"light":"css-variables","dark":"css-variables"}}
kind delete cluster --name firebolt
```
