# How Starship Uses Helm Charts for Kubernetes Deployment to Orchestrate Multi-Chain Testnets

> Discover how Starship uses a single Helm chart to deploy complex Cosmos-EVM testnets on Kubernetes. Simplify multi-chain infrastructure with configurable YAML.

- Repository: [Hyperweb/starship](https://github.com/hyperweb-io/starship)
- Tags: how-to-guide
- Published: 2026-03-03

---

**Starship leverages a single Helm application chart (`starship/charts/devnet`) to declaratively deploy complete Cosmos-EVM testnet stacks on Kubernetes, abstracting complex multi-chain infrastructure into configurable YAML values.**

Starship, developed by Hyperweb (hyperweb-io/starship), is an infrastructure orchestration tool designed to spin up comprehensive blockchain testnets. The project uses **Helm charts** as the primary mechanism for **Kubernetes deployment**, allowing developers to define entire multi-validator, multi-relayer environments through version-controlled configuration rather than imperative commands.

## Helm Chart Architecture

The Starship **Helm chart** follows standard Helm conventions while encapsulating the complexity of distributed blockchain networks. Located at `starship/charts/devnet/`, this **application** chart (`type: application` in [`Chart.yaml`](https://github.com/hyperweb-io/starship/blob/main/Chart.yaml)) bundles all necessary Kubernetes manifests into a single deployable unit.

### Chart Metadata and Versioning

In [`starship/charts/devnet/Chart.yaml`](https://github.com/hyperweb-io/starship/blob/main/starship/charts/devnet/Chart.yaml), the chart declares itself as an **application** type rather than a library, signaling that it creates deployable Kubernetes resources. This metadata file defines the **chart version** and **appVersion** used to tag container images and track releases.

### Template Organization

The `templates/` directory contains pure Helm templates that generate Kubernetes manifests dynamically. Key template groups include:

- **Chain validators** – [`templates/chains/cosmos/validator.yaml`](https://github.com/hyperweb-io/starship/blob/main/templates/chains/cosmos/validator.yaml) renders **StatefulSets** for Cosmos SDK-based chains
- **IBC relayers** – [`templates/relayers/hermes/statefulset.yaml`](https://github.com/hyperweb-io/starship/blob/main/templates/relayers/hermes/statefulset.yaml) creates deployments for Hermes, ts-relayer, and go-relayer instances  
- **Infrastructure services** – Dedicated templates for the **exposer** sidecar, **registry**, **faucet**, **monitoring** (Prometheus/Grafana), and **ingress** controllers
- **Explorer** – Optional blockchain explorer deployments

## Values-Driven Configuration

Starship's **Helm charts** rely heavily on [`values.yaml`](https://github.com/hyperweb-io/starship/blob/main/values.yaml) to drive template rendering, enabling users to define complex topologies without modifying template files.

### Hierarchical Values Schema

The default [`starship/charts/devnet/values.yaml`](https://github.com/hyperweb-io/starship/blob/main/starship/charts/devnet/values.yaml) provides a comprehensive configuration schema. Users define **chains** as arrays, specifying validator counts, container images, and network IDs:

```yaml
chains:
  - id: gaia-1
    name: cosmoshub
    numValidators: 3
    image: ghcr.io/hyperweb-io/starship/gaia:latest
    faucet:
      enabled: true

```

**Relayers** connect these chains through IBC protocols:

```yaml
relayers:
  - name: hermes
    type: hermes
    replicas: 1
    chains:
      - gaia-1
      - osmosis-1

```

Additional toggles control **ingress** rules, **monitoring** stack deployment, and **explorer** availability.

### Schema Validation

The chart includes [`starship/charts/devnet/values.schema.json`](https://github.com/hyperweb-io/starship/blob/main/starship/charts/devnet/values.schema.json) to validate configuration before rendering. This **JSON schema** prevents misconfiguration by enforcing type constraints and required fields, catching errors during `helm install` rather than at runtime.

## Template Helpers and Reusable Logic

The `starship/charts/devnet/templates/_helpers.tpl` file defines a **helper library** that keeps templates DRY (Don't Repeat Yourself). These named templates handle:

- **Naming conventions** – Consistent resource naming across components
- **Label generation** – Standardized Kubernetes labels for selectors and monitoring  
- **Environment variable injection** – Common env vars for chain configurations
- **Resource defaults** – CPU/memory limits and requests
- **Init containers** – "Wait-for-chains" logic ensuring proper startup order

## Deploying Starship with Helm

### Installing from the Helm Repository

Deploy a default Starship devnet using the published chart:

```bash
helm repo add starship https://hyperweb-io.github.io/starship
helm install my-starship starship/devnet

```

### Customizing with Values Files

For production testnets, create a custom [`values.yaml`](https://github.com/hyperweb-io/starship/blob/main/values.yaml) and apply it with the `-f` flag:

```yaml

# myvalues.yaml

chains:
  - id: osmosis-1
    name: osmosis
    numValidators: 2
    image: ghcr.io/hyperweb-io/starship/osmosis:20250205-544757d
    faucet:
      enabled: true

relayers:
  - name: ts-relayer
    type: ts-relayer
    replicas: 1
    chains:
      - osmosis-1

monitoring:
  enabled: true
  ports:
    prometheus: 8011
    grafana: 9011

```

Deploy with:

```bash
helm install my-starship ./starship/charts/devnet -f myvalues.yaml

```

### Inline Configuration Overrides

For quick iterations, use `--set` flags to override specific values without creating files:

```bash
helm install my-starship ./starship/charts/devnet \
  --set chains[0].id=gaia-1 \
  --set chains[0].numValidators=3 \
  --set chains[0].image=ghcr.io/hyperweb-io/starship/gaia:20250205-544757d \
  --set relayers[0].name=hermes \
  --set explorer.enabled=true \
  --set ingress.enabled=true \
  --set ingress.host="mytestnet.thestarship.io"

```

### Upgrading Existing Releases

Update chain versions or scale relayers using **Helm upgrades**:

```bash
helm upgrade my-starship ./starship/charts/devnet \
  --set chains[0].image=ghcr.io/hyperweb-io/starship/gaia:20250310-abcdef0

```

## Summary

- **Starship's Helm chart** (`starship/charts/devnet`) is an **application** chart that packages all Kubernetes resources needed for multi-chain testnets into a single release.
- **Template helpers** in `_helpers.tpl` centralize naming, labeling, and initialization logic to ensure consistent deployments.
- **Values-driven configuration** through [`values.yaml`](https://github.com/hyperweb-io/starship/blob/main/values.yaml) allows declarative definition of chains, relayers, monitoring, and ingress without template modification.
- **Schema validation** via [`values.schema.json`](https://github.com/hyperweb-io/starship/blob/main/values.schema.json) prevents configuration errors before deployment.
- Standard **Helm commands** (`install`, `upgrade`, `rollback`) manage the entire infrastructure lifecycle.

## Frequently Asked Questions

### What Kubernetes resources does Starship's Helm chart create?

The chart generates **StatefulSets** for chain validators (ensuring persistent storage for blockchain data), **Deployments** for relayers like Hermes and ts-relayer, **Services** for internal communication, **Ingress** resources for external access, and optional **Prometheus/Grafana** monitoring stacks. Specific templates include [`templates/chains/cosmos/validator.yaml`](https://github.com/hyperweb-io/starship/blob/main/templates/chains/cosmos/validator.yaml) for Cosmos validators and [`templates/relayers/hermes/statefulset.yaml`](https://github.com/hyperweb-io/starship/blob/main/templates/relayers/hermes/statefulset.yaml) for IBC relayers.

### How do I add custom chains to my Starship deployment?

Define custom chains in your [`values.yaml`](https://github.com/hyperweb-io/starship/blob/main/values.yaml) under the `chains:` array, specifying the `id`, `name`, `numValidators`, and `image` fields. For example, to add Osmosis, include an entry with `id: osmosis-1` and the appropriate container image from the Starship registry. The chart will render separate **StatefulSets** for each configured chain.

### Where does Starship validate Helm configuration values?

Starship validates configuration through [`starship/charts/devnet/values.schema.json`](https://github.com/hyperweb-io/starship/blob/main/starship/charts/devnet/values.schema.json), which defines the expected structure and types for all values. This **JSON schema** is automatically checked by Helm during `install` or `upgrade` operations, catching type mismatches or missing required fields before any Kubernetes resources are created.

### Can I upgrade running Starship testnets without downtime?

Yes, use `helm upgrade` to modify running releases. You can update container images (for example, changing `chains[0].image` to a new tag), scale relayer replicas, or toggle features like the explorer. Kubernetes performs **rolling updates** for Deployments and StatefulSets where applicable, though validator StatefulSets may require careful coordination during consensus-critical updates.