---
title: Heading
description: Render semantic headings with independent visual sizes.
---
import { StoryEmbed } from '/snippets/ui/StoryEmbed.mdx';
import HeadingReference from '/snippets/ui/generated/typography/heading.mdx';
`Heading` renders an `h2` by default. Use `children` for its content, `level` for document structure, and `size` for appearance.
## Choose a heading level and size
Choose levels in document order. A smaller visual size does not change the level announced by assistive technology.
```tsx
import { Heading } from 'twenty-ui/primitives/typography';
export const WorkspaceTitle = () => (
Workspace settings
);
```
Sizes `xs`, `sm`, `md`, and `lg` use the matching font tokens. Headings have no outer margin; their surrounding layout owns spacing.
## Color and composition
Use `color="secondary"` for less prominent headings. `tertiary` is also available, but its contrast depends on the font size, theme, and background. Check readability when using it.
Native attributes, styles, class names, and refs pass to the heading. Use `render` to compose with a custom element or component; that element is responsible for preserving heading semantics.
For a heading with supporting text or actions, use [Section](/ui/components/section).
## Props