---
title: "Helm Architecture"
description: "Describes the Helm architecture at a high level."
aliases: ["/docs/architecture/"]
weight: 8
---

# Helm Architecture

This document describes the Helm architecture at a high level.

## The Purpose of Helm

Helm is a tool for managing Kubernetes packages called _charts_. Helm can do the
following:

- Create new charts from scratch
- Package charts into chart archive (tgz) files
- Interact with chart repositories where charts are stored
- Install and uninstall charts into an existing Kubernetes cluster
- Manage the release cycle of charts that have been installed with Helm

For Helm, there are three important concepts:

1. The _chart_ is a bundle of information necessary to create an instance of a
   Kubernetes application.
2. The _config_ contains configuration information that can be merged into a
   packaged chart to create a releasable object.
3. A _release_ is a running instance of a _chart_, combined with a specific
   _config_.

## Components

Helm is an executable which is implemented into two distinct parts:

**The Helm Client** is a command-line client for end users. The client is
responsible for the following:

- Local chart development
- Managing repositories
- Managing releases
- Interfacing with the Helm library
  - Sending charts to be installed
  - Requesting upgrading or uninstalling of existing releases

**The Helm Library** provides the logic for executing all Helm operations. It
interfaces with the Kubernetes API server and provides the following capability:

- Combining a chart and configuration to build a release
- Installing charts into Kubernetes, and providing the subsequent release object
- Upgrading and uninstalling charts by interacting with Kubernetes

The standalone Helm library encapsulates the Helm logic so that it can be
leveraged by different clients.

## Implementation

The Helm client and library is written in the Go programming language.

The library uses the Kubernetes client library to communicate with Kubernetes.
Currently, that library uses REST+JSON. It stores information in Secrets located
inside of Kubernetes. It does not need its own database.

Configuration files are, when possible, written in YAML.
