Getting Started
Roadmap
Upcoming components, features, and milestones for Vy UI — where the project is headed and what ships next.
Vy UI is alpha. The lists below separate what is live today from the work still moving. For release-by-release detail, see the Changelog.
Expect breaking changes. Things will break. Don't ship this to production yet.
Live now
- Headless core primitives —
@vyui/coreincludes overlays, dialogs, menus, form controls, navigation, scroll/gesture primitives, and layout helpers for Lynx-native apps. - Styled kit components —
@vyui/kitwraps the core primitives with themed components including Accordion, Button, Drawer, FeedList, Input, Modal, Select, Slider, Toast, Tray, and more. - Dark mode —
useColorMode()plus a three-tier semantic token system (bg-default,text-muted, …) flips the whole component set via a single.darkclass, no per-componentdark:variants.VyAppwires the toggle contract for you. See Theming → Dark Mode. - Tray — a morphing, multi-view bottom sheet with measured view heights, back navigation, and persistent footer support.
- Side-aware Sheet and Drawer — top, right, bottom, and left placement with matching slide animations and drag-to-dismiss physics.
- Keyboard-aware inputs —
Input,Textarea,VyInput, andVyTextareaemit a normalizedkeyboardevent for Lynx's on-screen keyboard. - Gesture and scroll primitives — Swiper, SwipeAction, Sortable, Draggable, FeedList, and ScrollView share main-thread gesture physics tuned for Lynx.
- Mouse-driven gestures on web — Lynx web dispatches raw mouse events and never synthesizes touch from them, so every drag surface carries mouse handlers beside its touch ones, over the same coordinate core: Draggable, Sortable, Swiper, SwipeAction, Slider, Sheet/Drawer/Tray drag-dismiss, Toast swipe, FeedList pull-to-refresh, and ScrollView's bounce. The live previews in these docs are that path running in your browser.
@vyui/cli— shadcn-style CLI for copying styled components into an app:pnpm dlx @vyui/cli add button.- Hosted registry seed —
vyui.dev/r/*manifests exist for the default, rounded, and shadcn styles, currently covering Accordion, Avatar, Button, Chip, and Toast. - Generated component docs — API tables and examples are generated from source so docs drift less between releases.
- Intl stopgaps — core exports
installIntlPolyfill,DateFormatter,useDateFormatter,useLocale, anduseDirectionfor the current Lynx runtime constraints.
In progress
- Registry expansion — adding the rest of the styled kit components to
vyui.dev/r/*so the CLI can install more than the seed set. - Component documentation depth — expanding examples, usage notes, accessibility notes, and edge-case guidance across the current component set.
- Native-device verification — continuing to validate gesture-heavy primitives against iOS, Android, and web behaviour.
- Web overlay reliability — the browser drops animation
end/cancelevents that native delivers, and DOM events from children bubble into a parent's animation handlers.<Presence>now force-resolves past a wall-clock ceiling so a lost event can't wedge an overlay open with an invisible backdrop over the page, but the handlers still need to filter by event target so the watchdog stops being the thing that saves them. - Accessibility follow-through — adding spoken announcements for transient UI, stronger focus handling for dialogs, and more target-specific checks.
- Internationalization follow-through — moving beyond the current English-only formatter/polyfill stopgaps toward app-level locale messages and RTL polish.
Planned
- Starter templates.
- Cross-target testing (iOS / Android / Web).
- Web event parity — pointer input is done (see Mouse-driven gestures above); what's left is everything a browser offers that a phone doesn't:
- Keyboard — nothing is wired today. No Escape-to-dismiss, no arrow-key navigation in Select, DropdownMenu, Tabs, or Slider, no Tab focus order, no Enter/Space activation.
useDismissableLayerships anonEscapeKeyDownthat is deliberately inert so call sites can bind it unchanged once Lynx delivers key events. - Hover and cursor — components style pressed and disabled states only. There is no hover affordance and no
cursor: pointeron interactive elements, so controls read as inert text until you click them. - Web accessibility —
useA11yemits Lynxaccessibility-*props, which browsers ignore. The ARIA mirror (appendWebA11y) is a placeholder that currently adds nothing, so a screen reader on web sees generic boxes. - Main-thread API gaps — Lynx web's main-thread realm has no
querySelector/querySelectorAll, and reaching for them throws hard enough to take the whole worklet down. Slider and ScrollView are off them;List'sscrollIntoIdstill useslynx.querySelectorand is expected to fail on web.
- Keyboard — nothing is wired today. No Escape-to-dismiss, no arrow-key navigation in Select, DropdownMenu, Tabs, or Slider, no Tab focus order, no Enter/Space activation.
- Internationalization (i18n) — overridable built-in strings, richer locale-aware formatting, and complete RTL layout coverage — see i18n.
- Calendar and date inputs —
VyCalendar/ date-picker components are planned, but blocked on native Lynx date-object, timezone, and locale-formatting verification — see Calendar.