Choosing the right primitive
Choose Salt components, layouts, and patterns by user intent first, then prefer the most constrained Salt option before creating custom UI.
Use this page as a short chooser, then follow the component usage pages for the authoritative details.
- Trigger work in the current view: use
Button. - Navigate to another route, page, or document: use
Link. - Show or hide related content: use a disclosure primitive such as
AccordionorCollapsible. - Structure a page or region: start with layouts.
- Build a repeated multi-part flow: check patterns before inventing a new composition.
| User intent | Prefer | Main thing to avoid |
|---|---|---|
| Trigger work | Button | Link or custom link-like actions |
| Navigate somewhere | Link | Button used as route or document navigation |
| Repeated multi-part flow | Patterns | ad hoc assemblies |
| Arrange page or shell structure | Layouts | generic wrappers that add no value |
| Existing Salt screen | Salt primitives | recreated native or role-based interactive elements |
- Use
Buttonfor actions such as save, apply, retry, or open dialog. - Use
Linkfor real destinations such as routes, pages, help articles, or document downloads.
- Start with a component when you need one UI element with clear semantics.
- Start with a pattern when the job spans multiple components or repeated page structure.
- Prefer the Salt primitive first.
- Add a wrapper only when it adds stable semantics, shared behavior, or a real domain API.