← Back to all designs

HashiCorp

An enterprise-infrastructure marketing canvas built around a near-black ground (#000000) and a system of per-product accent colors — Terraform purple, Vault yellow, Consul pink, Waypoint cyan, Vagrant blue — that act as identity tokens rather than decorative palette. Display type is hashicorpSans set in 600/700 with tight 1.17–1.21 line-heights; body type runs the same family at 500 weight with re

Homepage Example

Welcome to HashiCorp

A modern, elegant design system built for the digital age. Clean lines, thoughtful spacing, and purposeful color choices define every interaction.

Get Started Learn More

Pixel Perfect

Every element is carefully crafted to ensure consistency across all platforms and devices.

Design Tokens

A comprehensive token system that makes scaling and maintaining your design effortless.

Built for Teams

Collaborate seamlessly with designers and developers using a shared design language.

Color Palette (30)

primary#000000
on-primary#ffffff
accent-blue#2b89ff
ink#ffffff
ink-muted#b2b6bd
ink-subtle#656a76
canvas#000000
surface-1#15181e
surface-2#1f232b
surface-3#3b3d45
hairline#3b3d45
hairline-soft#252830
inverse-canvas#ffffff
inverse-ink#000000
product-terraform#7b42bc
product-terraform-bright#911ced
product-vault#ffcf25
product-consul#e62b1e
product-waypoint#14c6cb
product-waypoint-deep#12b6bb
product-vagrant#1868f2
product-nomad#00ca8e
product-boundary#f24c53
amber-100#fbeabf
amber-200#bb5a00
blue-7#101a59
semantic-success#00ca8e
semantic-warning#ffcf25
semantic-error#e62b1e
semantic-visited#a737ff

Typography (12)

HashiCorp
display-xl80px · weight 700
HashiCorp
display-lg56px · weight 700
HashiCorp
display-md40px · weight 600
HashiCorp
headline28px · weight 600
HashiCorp
card-title22px · weight 600
HashiCorp
subhead20px · weight 600
HashiCorp
body-lg18px · weight 500
HashiCorp
body16px · weight 500
HashiCorp
body-sm14px · weight 500
HashiCorp
caption13px · weight 500
HashiCorp
button14px · weight 600
HashiCorp
eyebrow12px · weight 600

Components (22)

button-primary
button-primary
button-primary-pressed
button-primary-pressed
button-secondary
button-secondary
button-tertiary
button-tertiary
button-product-terraform
button-product-terraform
button-product-vault
button-product-vault
button-product-waypoint
button-product-waypoint
product-card
product-card
product-card-terraform
product-card-terraform
product-card-vault
product-card-vault
product-card-waypoint
product-card-waypoint
feature-card
feature-card
pricing-card
pricing-card
pricing-card-featured
pricing-card-featured
resource-card
resource-card
text-input
text-input
text-input-focused
text-input-focused
product-pill
product-pill
top-nav
top-nav
comparison-row
comparison-row
cta-banner
cta-banner
footer
footer

Border Radius

xs (4px)
sm (6px)
md (8px)
lg (12px)
xl (16px)
xxl (24px)
pill (9999px)
full (9999px)

Design Philosophy

Overview

HashiCorp's marketing canvas is a near-black ground that serves a multi-product portfolio without ever feeling generic. The dominant surface is `{colors.canvas}` (pure black) layered with `{colors.surface-1}` charcoal cards and 1px translucent gray hairlines. The chrome is monochrome — white pill-rounded buttons (`{components.button-primary}`), white type, gray secondary type — but the system is held together by a **palette of per-product accent colors** that signal which HashiCorp tool a given section belongs to: Terraform purple, Vault yellow, Consul red, Waypoint cyan, Vagrant blue, Nomad green, Boundary coral.

Display type is **hashicorpSans** at weights 600/700 with tight line-heights (1.17–1.21); body type is the same family at 500 weight with deliberately relaxed line-heights (1.50–1.71) — the contrast feels editorial, not enterprise-templated. CTAs use small `{rounded.md}` 8px corners rather than pills, which keeps the system reading as developer-facing rather than consumer-y.

The signature device is the **product-card** family — each HashiCorp product gets its own colored card variant on the home and infrastructure pages, lifting Terraform into a violet ground, Vault into yellow, Waypoint into cyan. These aren't decorative gradients — they're identity surfaces. A reader scrolling the page can tell which product a section is about from the corner of their eye.

**Key Characteristics:**

Colors

> Source pages: hashicorp.com/en (home), /en/infrastructure-cloud, /en/products/terraform, /en/pricing, /en/resources?contentType=PDF.

Brand & Accent

Surface

Text

Per-Product Identity (signature)

HashiCorp's marketing isn't held together by a single accent color — it's held together by a system of product-specific accents, each used to mark which tool a section represents.

Semantic

Typography

Font Family

The same family carries display, body, button, and caption — no separate display + body pairing. Hierarchy is carried by weight (500 body / 600 emphasis / 700 display) and by a deliberate line-height contrast (tight on display, relaxed on body).

Hierarchy

| Token | Size | Weight | Line Height | Letter Spacing | Use |

|---|---|---|---|---|---|

| `{typography.display-xl}` | 80px | 700 | 1.17 | -2.5px | Largest hero headline |

| `{typography.display-lg}` | 56px | 700 | 1.18 | -1.6px | Section opener headlines |

| `{typography.display-md}` | 40px | 600 | 1.19 | -1.0px | Sub-section headlines |

| `{typography.headline}` | 28px | 600 | 1.21 | -0.6px | Pricing tier titles, CTA banner heading |

| `{typography.card-title}` | 22px | 600 | 1.18 | -0.4px | Feature card title |

| `{typography.subhead}` | 20px | 600 | 1.35 | -0.2px | Long-form intro paragraphs |

| `{typography.body-lg}` | 18px | 500 | 1.69 | 0 | Hero subhead, lead body |

| `{typography.body}` | 16px | 500 | 1.50 | 0 | Default body |

| `{typography.body-sm}` | 14px | 500 | 1.71 | 0 | Card body, footer columns |

| `{typography.caption}` | 13px | 500 | 1.38 | 0.2px | Meta, comparison cell labels |

| `{typography.button}` | 14px | 600 | 1.29 | 0 | Pill / square CTA buttons |

| `{typography.eyebrow}` | 12px | 600 | 1.23 | 0.6px | Uppercase section eyebrows |

Principles

Note on Font Substitutes

If implementing without hashicorpSans, suitable open-source substitutes include **Inter** (closest geometric character set), **Geist Sans**, or **IBM Plex Sans**. Inter at weights 500 / 600 / 700 closely approximates hashicorpSans's proportions; expect to manually adjust line-heights down by ~0.02 to match.

Layout

Spacing System

Grid & Container

Whitespace Philosophy

The dark canvas IS the whitespace. Sections separate by surface lift (canvas → surface-1) rather than by gaps in white. Within a section, generous `{spacing.xl}` 32px gaps separate cards; `{spacing.lg}` 24px separates rows.

Elevation & Depth

| Level | Treatment | Use |

|---|---|---|

| 0 (flat) | No shadow, no border | Canvas-mounted display type, hero, footer |

| 1 (charcoal lift) | `{colors.surface-1}` background + 1px `rgba(178,182,189,0.1)` border | Default cards, resource tiles, pricing cards |

| 2 (surface-2 lift) | `{colors.surface-2}` background + 1px `{colors.hairline}` border | Featured pricing card, hovered cards, sub-nav |

| 3 (product chromatic) | Per-product accent color background — Terraform purple, Vault yellow, Waypoint cyan | Product showcase cards |

The product chromatic level isn't a "modal lift" — it's an identity device. A Terraform card sits at the same z-plane as a feature-card; the difference is meaning, not depth.

Decorative Depth

Shapes

Border Radius Scale

| Token | Value | Use |

|---|---|---|

| `{rounded.xs}` | 4px | Small chips / badges |

| `{rounded.sm}` | 6px | Inline tag |

| `{rounded.md}` | 8px | All CTA buttons, form inputs, list items |

| `{rounded.lg}` | 12px | Feature cards, product cards, pricing cards |

| `{rounded.xl}` | 16px | Large illustrative tiles |

| `{rounded.xxl}` | 24px | CTA banner panels |

| `{rounded.pill}` | 9999px | Eyebrow-style product pills (small chips) |

| `{rounded.full}` | 9999px | Avatar circles (rare on marketing) |

Photography & Illustration Geometry

Components

Buttons

**`button-primary`** — White rounded-rect CTA. Used as primary CTA on all pages.

**`button-secondary`** — Charcoal rounded-rect. Secondary CTA, "Read docs" / "Talk to sales".

**`button-tertiary`** — Bare ghost button on canvas with text-only treatment.

**`button-product-terraform`** — Terraform-tinted CTA on Terraform pages.

**`button-product-vault`** — Vault-yellow CTA.

**`button-product-waypoint`** — Waypoint-cyan CTA.

(Vagrant blue, Nomad green, Consul red, Boundary coral follow the same pattern with their respective `{colors.product-*}` token.)

Cards & Containers

**`product-card`** — Default product showcase card — surface-1 charcoal.

**`product-card-terraform`** — Product card with Terraform purple ground (used as identity surface, not modal elevation).

**`product-card-vault`** — Vault-yellow ground.

**`product-card-waypoint`** — Waypoint-cyan ground.

(Other product variants follow the same shape with their respective product token.)

**`feature-card`** — Generic feature highlight on surface-1.

**`pricing-card`** — Pricing tier on `/en/pricing`.

**`pricing-card-featured`** — Recommended tier (visually emphasized via surface lift).

**`resource-card`** — PDF / whitepaper / guide tile in the resources directory.

Inputs & Forms

**`text-input`** + **`text-input-focused`** — Form fields on pricing seat-count and contact forms.

Pills & Chips

**`product-pill`** — Small product-name chip used above hero headlines and on resource cards to label which product a piece of content belongs to.

Comparison Table

**`comparison-row`** — Single row inside the pricing comparison table.

CTA Banner

**`cta-banner`** — Large rounded panel used at the bottom of long-form pages with a closing CTA.

Navigation

**`top-nav`** — Sticky black bar with HashiCorp logomark left, primary nav links centered, and a `button-primary` ("Sign up") + `button-secondary` ("Sign in") pair right.

Footer

**`footer`** — Dense link grid on `{colors.canvas}` with the wordmark at left and 5–6 columns of caption-sized links.

Do's and Don'ts

Do

Don't

Responsive Behavior

Breakpoints

| Name | Width | Key Changes |

|---|---|---|

| Desktop-XL | 1440px | Default desktop layout |

| Desktop | 1280px | Pricing 3-up grid maintained |

| Tablet | 1024px | Product card grid 3-up → 2-up |

| Mobile-Lg | 768px | Pricing comparison becomes per-tier accordion; nav becomes hamburger |

| Mobile | 480px | Single-column everything; display-xl scales 80px → ~36px |

Touch Targets

Collapsing Strategy

Image Behavior

Iteration Guide

1. Focus on ONE component at a time and reference it by its `components:` token name.

2. When introducing a new section, decide first whether it's a generic feature (surface-1) or a product-identity section (product-* color).

3. Default body to `{typography.body}` at 500 weight; reach for `{typography.subhead}` only inside CTA banners and feature cards.

4. Run `npx @google/design.md lint DESIGN.md` after edits.

5. Add new product variants as separate component entries (`product-card-nomad`, `button-product-consul`, etc.).

6. Treat the per-product palette as identity tokens, not decoration. If you reach for a product color outside its product context, the brand is drifting.

7. Eyebrow type is mandatory above every section — skipping it makes sections read as floating.

Known Gaps