Typography
Primary typeface
Section titled “Primary typeface”The primary typeface for the Pulumi brand is Inter. If Inter is not available, acceptable fallback system fonts include Helvetica Neue, Helvetica, and Arial.
- Use Inter for all headings, body text, and other typographic needs in brand materials.
- The Semibold weight of Inter is the primary weight for headings and emphasis, while the Regular weight is the primary weight for body text and longer form copy.
- When used for headings, Inter’s tracking (letter spacing) should be set to -5% (-0.05em). In places where letter spacing is not adjustable but Google fonts are available, such as in Google Slides and Docs, use Inter Tight for headings.
- In headings, Inter line height should be set to 110% (1.1em), and in body text and longer form copy it should be set to 130% (1.3em) for readability.
Font stack
Section titled “Font stack”Inter, 'Helvetica Neue', Helvetica, Arial, -apple-system, BlinkMacSystemFont, sans-serifMono typeface
Section titled “Mono typeface”The mono typeface for the Pulumi brand is Monaspace Neon. If Monaspace Neon is not available, but Google Fonts are (e.g., in Google Slides and Docs), Cascadia Mono is an acceptable fallback. Acceptable system font fallbacks include Menlo and Consolas.
- Use Monaspace Neon for code snippets, technical documentation, and any context where a monospaced font is appropriate.
- It can also be used for labels and overlines. When used for this purpose, it should be set in all caps with tracking set to +5%.
- Use the Regular weight by default, but the other weights are available if they make sense for uses like larger format designs.
Font stack
Section titled “Font stack”'Monaspace Neon', Menlo, Consolas, ui-monospace, monospaceGet the fonts
Section titled “Get the fonts”The brand-assets package contains all fonts, standard logos, colors, and supporting imagery:
Download
Typographic scale
Section titled “Typographic scale”Typographic scales are defined in more detail in specific design systems and component libraries. Follow those guidelines for specific use cases. In general, use the following guiding principles:
- Establish clear hierarchy between headings, subheadings, and body text
- Headings: Semibold weight, -5% tracking, 110% line height
- Body: Regular weight, 0% tracking, 130% line height
Font features
Section titled “Font features”Apply the following OpenType font feature settings by default across all digital implementations.
Tailwind CSS v4
@theme { --default-font-feature-settings: "liga" 1, "calt" 1, "cv11" 1;}CSS
body { font-feature-settings: "liga" 1, "calt" 1, "cv11" 1;}liga— enables standard ligatures (e.g.,fi,fl)calt— enables contextual alternates for more natural letter connectionscv11— enables Inter’s character variant for1(adds a serif crossbar for improved legibility)
Code highlighting
Section titled “Code highlighting”Always use Min Theme for code snippets. Replace the default background color of the theme with Violet 50 light (#f5f5ff) and dark (#231f33). It’s okay to use the Min Dark theme in light mode contexts if more contrast is desired for code snippets.
import * as pulumi from "@pulumi/pulumi";import * as aws from "@pulumi/aws";
const bucket = new aws.s3.Bucket("my-bucket");
export const bucketName = bucket.id;import pulumifrom pulumi_aws import s3
bucket = s3.Bucket("my-bucket")
pulumi.export("bucketName", bucket.id)package main
import ( "github.com/pulumi/pulumi-aws/sdk/v7/go/aws/s3" "github.com/pulumi/pulumi/sdk/v3/go/pulumi")
func main() { pulumi.Run(func(ctx *pulumi.Context) error { bucket, err := s3.NewBucket(ctx, "my-bucket", nil) if err != nil { return err } ctx.Export("bucketName", bucket.ID()) return nil })}using Pulumi;using Pulumi.Aws.S3;
class MyStack : Stack{ public MyStack() { var bucket = new Bucket("my-bucket"); this.BucketName = bucket.Id; }
[Output] public Output<string> BucketName { get; set; }}package s3site;
import com.pulumi.Context;import com.pulumi.Pulumi;import com.pulumi.aws.s3.Bucket;
public class Infra { public static void main(String[] args) { Pulumi.run(Infra::stack); }
private static void stack(Context ctx) { final var myBucket = new Bucket("my-bucket"); ctx.export("bucketName", myBucket.id()); }}name: my-stackruntime: yamlresources: bucket: type: aws:s3:Bucketoutputs: bucketName: ${bucket.id}import * as pulumi from "@pulumi/pulumi";import * as aws from "@pulumi/aws";
const bucket = new aws.s3.Bucket("my-bucket");
export const bucketName = bucket.id;import pulumifrom pulumi_aws import s3
bucket = s3.Bucket("my-bucket")
pulumi.export("bucketName", bucket.id)package main
import ( "github.com/pulumi/pulumi-aws/sdk/v7/go/aws/s3" "github.com/pulumi/pulumi/sdk/v3/go/pulumi")
func main() { pulumi.Run(func(ctx *pulumi.Context) error { bucket, err := s3.NewBucket(ctx, "my-bucket", nil) if err != nil { return err } ctx.Export("bucketName", bucket.ID()) return nil })}using Pulumi;using Pulumi.Aws.S3;
class MyStack : Stack{ public MyStack() { var bucket = new Bucket("my-bucket"); this.BucketName = bucket.Id; }
[Output] public Output<string> BucketName { get; set; }}package s3site;
import com.pulumi.Context;import com.pulumi.Pulumi;import com.pulumi.aws.s3.Bucket;
public class Infra { public static void main(String[] args) { Pulumi.run(Infra::stack); }
private static void stack(Context ctx) { final var myBucket = new Bucket("my-bucket"); ctx.export("bucketName", myBucket.id()); }}name: my-stackruntime: yamlresources: bucket: type: aws:s3:Bucketoutputs: bucketName: ${bucket.id}