Trunk has two modes: a one-time setup, and a change loop that repeats forever. This page walks both. If it feels long, that's the point — the workflow is what you're buying.
You land in Trunk after signup. Onboarding walks you through nine gated screens — most auto-detected from the connected repo. Nothing takes more than a minute per step.
Onboarding runs once per product. After launch, you never see it again for that product.
Every product has three foundational surfaces you build in order. Styles bind tokens. Components consume tokens. Pages compose components. Journey derives from pages.
Colors, spacing, type, radius, motion, icons, illustrations.
Each component × every variant (default, hover, focus, disabled, loading, error, empty, populated).
Compositions of components + tokens. Real routes. Real links.
Auto-crawled. Health: shipped / in-flight / thin / missing / broken.
When foundations are ready, you publish main. From now on, every change is a delta off main.
A delta is an epic-sized change on the running product. It owns its whole lifecycle — the motivating signal, the PRD, the design, the approval, the typed code slices, the PRs, the deploy, the post-ship metric. From that one object, Trunk derives the design view, the ticket board, the journey graph, the review chain.
Deltas have a type — Epic, Bug, Hotfix, Experiment (defaults), plus custom types your team adds. A type is a preset over the phase spine — Bugs skip Document + Approve, Hotfixes are Code + Deploy only, Experiments require A/B setup.
Each phase has an owner, an artifact, and a gate. Not one big review chain — six focused ones.
Order is configurable per product. Deltas can start in any phase — skip Analyze if the data's already clear, skip Document for hotfixes.
A gate is the role(s) that must sign a phase before the delta advances. Roles map to phases at onboarding — PM signs Analyze, Designer signs Design, Tech Lead signs Code, and so on. Every signature is timestamped, tied to SSO identity, and appended to the audit log.
Enterprise plan supports dual-signer gates — two roles must both sign before the phase unlocks.
When a delta reaches Phase 5, it breaks into slices. Each slice is a typed sub-task — Frontend, Backend, CI/CD, Misc, Backlog. One slice = one real PR against your remote. When the PR merges, the slice is done. When all slices are done, Code unlocks Deploy.
Slice types are configurable. Add Docs, Localise, whatever fits your team.
When two deltas touch the same primitive, Trunk shows a 3-way visual diff — base, yours, theirs — with an auto-merged result you can tune. Same idea as Git, at the design layer. No text merge required.
Because comments anchor to primitives (not pixels), restructuring HTML doesn't orphan feedback.
No. Trunk raises real PRs against your GitHub / GitLab / Bitbucket repo. Your code home stays where it is.
Import once at onboarding. Trunk pulls frames as pages, components as components, styles as tokens. After that Trunk is the source of truth.
Anything that consumes HTML/CSS — React, Vue, Svelte, plain HTML, SSG. Trunk raises PRs as real diffs on your repo; your framework's build owns the compile step.
No — startups skip Document + Approve. Delta types further skip phases (Hotfixes are Code + Deploy only). Fully configurable.