Skip to main content
No standalone SideNav component ships in Titan core. This is not an unwritten stub in the usual sense — the research is done, and the finding is the absence itself. Checked against the core package’s component directory, its export barrels, its templates directory, and the Storybook index: nothing there implements a vertical list of page-level navigation destinations. This page’s tag is Draft rather than Stable for that reason — there is no shipped, decided component to certify.

What it is

A side nav (also called a left nav, nav rail, or primary navigation) is a vertical list of destinations, usually anchored to one edge of the screen, for moving between different subjects or records rather than between sections of one page. That job description comes from how Titan’s own docs already talk about it by contrast — Tabs names “side nav” as the alternative when you need to move between different subjects, and Views overview notes that the design library’s page template includes “a left nav rail of labelled icons” as chrome outside the page frame. Nothing in core currently builds that.

Live example

None. No Storybook story exists for anything named SideNav — verified against the live Storybook index.

Exports

Nothing in @invoca/titan-core implements this concept. What exists elsewhere in the same repository, none of it a distributable design-system export:
Three implementations of the same concept exist, and none is confirmed as the system’s answer. This is the same pattern documented for pagination — see TITAN-GAP-27 — playing out again for side navigation. See Known issues.

Vocabulary

“SideNav” and “the rail” are not confirmed to be the same thing. The rail is a real, themed export; “SideNav” names a region the design library’s page template draws and nothing in core fills. Use “the rail” only when you mean Tabs orientation="vertical" specifically, and “SideNav” only when you mean the unfilled region — conflating them states an answer to TITAN-GAP-29 that hasn’t been decided.

Choose SideNav when

There is no shipped SideNav to choose. If the underlying need is “move between different subjects or records” (as opposed to sections of one page, which is Tabs), that need is real and named elsewhere in this documentation — it just has no confirmed component to satisfy it yet. See Composition below for what is actually available.

Choose something else when

Anatomy

Nothing to document — no component exists. If a vertical list of rows is the actual need, see the rail’s own anatomy on Tabs, TabIconLabel for an icon-plus-label row, and TabMenu for a row with its own overflow menu.

Variants, sizes, and states

Nothing to document.

Edge and failure states

Nothing to document — there is no shipped behavior to describe failing.

Tokens

Nothing to document under this concept. The rail’s own three component tokens — tabs-vertical-min-width, tabs-icon-gap, tabs-indented-font-size — are documented on Tabs, not duplicated here, since they belong to that export.

Composition

The design library’s own page template names this region and explicitly puts it out of this documentation’s scope. Views overview records that the template draws site-level chrome as two regions outside the page frame — “a site header carrying the logo, the account selector, global search and the account menu, and a left nav rail of labelled icons” — and states plainly that both are “deliberately out of scope” for the page-frame documentation. That scoped-out left nav rail is exactly what a reader searching for “SideNav” is looking for, and nothing in core fills it with a real, distributable component today. The rail (Tabs orientation="vertical") is themed and real, but nothing states whether it is that region’s implementation or a different thing that merely looks similar — TITAN-GAP-29 is the open question this page defers to.

Content

Nothing to document.

Accessibility

Nothing in Titan to verify. For reference only — not a statement about any Titan implementation, since none exists to check — the WAI-ARIA Authoring Practices’ navigation pattern generally expects a nav landmark with a descriptive accessible name and aria-current="page" on the active destination. Treat this as external, general guidance to apply if and when a real component is built, not as a Titan rule.

Constraints

Known issues

SideNav: open issues

Divergences, open decisions, and undocumented gaps for SideNav.

Why it works this way

It doesn’t yet, and this page says so rather than inventing an answer. The nearest thing to a decision is TITAN-GAP-29, which already asks whether the tab bar’s vertical orientation is the system’s side navigation or a different thing entirely. Until that question is answered, documenting a SideNav component as if it existed would tell a reader something false with total confidence — which is a worse outcome than a page that plainly states the gap.

Status

  • Tabs — the vertical rail, and the open question of what it is for
  • Views overview — the page frame, and the site-level chrome it explicitly scopes out
  • TopNav — the sibling question for the top of the screen
  • TITAN-GAP-29 — the open decision this whole page defers to
Last modified on September 2, 2026