drill
Mobile hierarchy with an unmistakable back direction.
List → detail · rule: on + except
Twelve documented effects. Pick the one that matches the navigation you are building.
Start from what the user is doing — opening a detail page, switching tabs, expanding a card — and pick the effect that matches. The Rule column is the shape you write around it; the three shapes are explained below.
| What the user is doing | Transition | Rule |
|---|---|---|
| A list opens a detail page | drill | on + except |
| Tabs or steps with a left-right order | slide | ordered |
| Peer screens, Material shared axis | axis | ordered |
| Compose, filters, a modal-like route | sheet | on |
| A card or image expands into detail | zoom | from / to |
| One element carries across two pages | hero | from / to |
| A vertical sequence, editorial paging | scroll | ordered |
| Anything unrelated (the fallback) | fade | priority: -100, on: "/**" |
The rest — film, strip, rotate and jaemin — are picked for tone rather than for a route relationship, so any rule form works with them.
An effect describes how pages move. The rule around it describes where that applies and which way is forward.
| Rule | What it matches |
|---|---|
on | A family of routes. Entering it is forward, leaving it is backward, and except carves out the entry point. Both on and except accept an array of patterns. |
from / to | One exact relationship. It matches both directions unless you set bidirectional: false, and each side accepts an array of patterns. |
ordered | A list of routes in order — one pattern per slot. Both ends must land on different entries; their index order decides the direction. |
When several rules match, the winner is decided by priority, then by how specific the paths are, then by declaration order — the earliest rule wins, not the last. A rule with no priority is 0, which is why a negative value parks a broad fallback under everything else. Route rules has the full pattern syntax and the scoring.
Each form also carries a scroll default: from / to and on restore the source and reset the destination, ordered restores both. Scroll behavior covers the overrides.
These four cover most mobile navigation. Open one for its variants and props.
Mobile hierarchy with an unmistakable back direction.
List → detail · rule: on + except
A temporary task rising over its origin on mobile or web.
Compose, filters, temporary tasks · rule: on
Ordered sibling screens moving side to side.
Tabs and ordered steps · rule: ordered
One selected card or image opens into a whole detail page.
Card or image → detail · rule: from / to
Two configs you can paste. Both go in the array returned by transitions in your <Ssgoi> config.
The list is the boundary. Entering any descendant drills in; returning to the list drills out.
{
on: "/products/**",
except: "/products",
transition: drill(),
}The tab order owns sideways movement. A second rule opens the compose route as a sheet. on: "/compose" would cover arrivals from anywhere; listing the tabs as from keeps the sheet to the tab bar.
const TABS = ["/feed", "/search", "/profile"];
[
{
ordered: TABS,
transition: slide(),
},
{
from: TABS,
to: "/compose",
transition: sheet({ type: "blur" }),
},
]Reach for these when the screen needs a different spatial model or a more expressive treatment. The same list in plain text: transitions.txt.
A calm, directionless fade-through.
Material shared-axis motion along x, y, or z.
A vertical sequence between full web pages.
One or more shared elements continue into the next page.
A perspective page swap with card-deck energy.
A cinematic shrink-and-tile with framed corners.
A whole-page planar spin.
A playful rotated zoom for a signature moment.