AtroUIAtroUI
  • Getting Started
  • Installation
  • MCP server
  • Coming from…
  • Collections
  • Registry
  • Theming
  • Host APIs
  • Brand kit
  • Identity kit
  • Landing kit
  • Launch workflow
  • For agents
  • Glossary
  • Compare
  • Alternatives hub
  • vs Aceternity UI
  • vs Magic UI
  • Aceternity alternative
  • Magic UI alternative
  • Tailwind Plus alternative
  • Changelog
  • Blog
  • Updates
  • ButtonCLI
  • DialogCLI
  • Alert DialogCLI
  • MenuCLI
  • Context MenuCLI
  • Navigation MenuCLI
  • MenubarCLI
  • PopoverCLI
  • TooltipCLI
  • Preview CardCLI
  • Scroll AreaCLI
  • SeparatorCLI
  • FieldCLI
  • Number FieldCLI
  • OTP FieldCLI
  • FormCLI
  • FieldsetCLI
  • InputCLI
  • TextareaCLI
  • CheckboxCLI
  • Checkbox GroupCLI
  • RadioCLI
  • SwitchCLI
  • ToggleCLI
  • Toggle GroupCLI
  • ToolbarCLI
  • AccordionCLI
  • CollapsibleCLI
  • ComboboxCLI
  • AutocompleteCLI
  • DrawerCLI
  • TabsCLI
  • ToastCLI
  • ProgressCLI
  • SliderCLI
  • MeterCLI
  • AvatarCLI
  • CardCLI
  • Form SelectCLI
  • Motion PlaygroundCLI
  • BreadcrumbsCLI
  • ProseCLI
  • Founder AvatarCLI
  • Theme ToggleCLI
  • Adaptive Theme SwitchCLI
  • Theme ProviderCLI
  • LogoCLI
  • TimelineCLI
  • Fade InCLI
  • StaggerCLI
  • Line RevealCLI
  • Word Reveal ScrollCLI
  • Text MorphCLI
  • Copy ButtonCLI
  • Label RollCLI
  • MagneticCLI
  • TiltCLI
  • SpotlightCLI
  • Animate NumberCLI
  • Transition PanelCLI
  • Scroll ProgressCLI
  • ASCII
  • DonutCLI
  • RainCLI
  • WaveCLI
  • SparkCLI
  • BarCLI
  • BootCLI
  • WordmarkCLI
  • DecodeCLI
  • Site HeaderCLI
  • Site FooterCLI
  • Bold FooterCLI
  • HeroCLI
  • PrincipleCLI
  • WorkCLI
  • CraftsCLI
  • LabCLI
  • WhoCLI
  • PricingCLI
  • Feature GridCLI
  • Logo CloudCLI
  • FAQCLI
  • Contextual CTACLI
  • Exit IntentCLI
  • Calendly EmbedCLI
  • Waitlist FormHost API
  • Newsletter FormHost API
  • JournalCLI
  • Social ShareCLI
  • ResourcesCLI
  • AR PortfolioCLI
  • Made With EmbedCLI
  • Hero ParallaxCLI
  • Hero LampCLI
  • Logo MarqueeCLI
  • Testimonials StackCLI
  • Feature BentoCLI
  • CTA BandCLI
  • Pricing TiersCLI
  • FAQ AccordionCLI
  • Stats BandCLI
  • Integration BeamCLI
  • Showcase CarouselCLI
  • Auth SplitCLI
  • SaaS StarterCLI
  • Landing KitCLI
  • OG ExamplesCLI
  • OG Live PreviewCLI
  • OG WorkspaceHost API
  • Thumbnail PreviewCLI
  • Thumbnail WorkspaceHost API
  • Project PlannerCLI
  • Scope ChatHost API
  • Launch WorkflowCLI
  • Live DashboardCLI
  • Analytics ProviderCLI
AtroUI·Home·Components·Blog·GitHub·Changelog

Primitive

Motion Playground

One stage for the motion kit — hover language, text, Imageory media, FadeIn, AnimateNumber, CopyButton, TransitionPanel. Soft settle; never grow on hover.

Preview

$npx shadcn@latest add @atroui/motion @atroui/fade-in @atroui/text-morph @atroui/label-roll @atroui/line-reveal @atroui/magnetic @atroui/tilt @atroui/spotlight @atroui/animate-number @atroui/copy-button @atroui/transition-panel @atroui/button

Motion kit

One stage under MotionConfig + atroMotionDefaults. Tweens only · ease-out settle · hoverLift ≤1px · pressInto · never grow · reduced motion → duration 0.

Hover·Text·Media·Enter·Presence

Installation

bash
npx shadcn@latest add @atroui/motion @atroui/fade-in @atroui/text-morph @atroui/label-roll @atroui/line-reveal @atroui/magnetic @atroui/tilt @atroui/spotlight @atroui/animate-number @atroui/copy-button @atroui/transition-panel @atroui/button

Source lands in your repo. Installation · Registry

Usage

Wrap app chrome in MotionConfig {...atroMotionDefaults} (tween easeOutSoft, reducedMotion: user). Hover lifts ≤1px — never grow. Media effects stay on Imageory / PreviewCard. prefers-reduced-motion → duration 0 / skip decorative pull.
tsx
import { MotionConfig } from "motion/react"
import { atroMotionDefaults } from "@/lib/motion"
// after: npx shadcn add @atroui/motion

export function AppShell({ children }: { children: React.ReactNode }) {
  return (
    <MotionConfig {...atroMotionDefaults}>
      {children}
    </MotionConfig>
  )
}

// Taste cues in this stage:
// - Hover — hoverLift ≤1px y; pressInto; never scale up
// - Text — TextMorph / LabelRoll / LineReveal (ink travels; no scramble)
// - Media — Magnetic / Tilt / Spotlight on Imageory only (not Button chrome)
// - Enter — FadeIn opacity+rise; AnimateNumber digit tween
// - Delight — CopyButton (rare path); TransitionPanel wait-mode swap
// - Chrome overlays still Soft settle — see Dialog / Drawer / Menu docs

Hover

Material brightens; geometry barely lifts; ink rolls. Scale-up on hover is out.

hover · lift ≤1px · never grow

Install AtroUIGet startedInstall AtroUI

Material brightens; geometry barely lifts; ink rolls. Scale-up on hover is out.

Text

TextMorph / LabelRoll / LineReveal — ink travels; no scramble.

text · morph · roll · line

Show the fundamental first. Reveal depth when it earns the frame.

Media

Magnetic · Tilt · Spotlight — media only, never Button chrome.

media · Imageory · mild only

Magnetic
Tilt ≤6°
Spotlight

Enter

FadeIn opacity + rise. AnimateNumber for digit settle. No blur-in by default.

enter · fade + count

Opacity + rise. No blur-in.

$1,280

Presence

TransitionPanel wait mode — exit finishes before enter.

presence · panel wait mode

Ease-out Soft settle. Exit ≈80% enter. Never grow on hover.

Exit finishes before enter. Chrome overlays (Dialog / Drawer / Menu) still use the same Soft tokens — see each primitive doc.

Related
  • Button
  • Dialog
  • Alert Dialog
  • Menu

Motion Playground

PreviousForm SelectNextBreadcrumbs
npx shadcn@latest add @atroui/motion @atroui/fade-in @atroui/text-morph @atroui/label-roll @atroui/line-reveal @atroui/magnetic @atroui/tilt @atroui/spotlight @atroui/animate-number @atroui/copy-button @atroui/transition-panel @atroui/button
import { MotionConfig } from "motion/react"
import { atroMotionDefaults } from "@/lib/motion"
// after: npx shadcn add @atroui/motion

export function AppShell({ children }: { children: React.ReactNode }) {
  return (
    <MotionConfig {...atroMotionDefaults}>
      {children}
    </MotionConfig>
  )
}

// Taste cues in this stage:
// - Hover — hoverLift ≤1px y; pressInto; never scale up
// - Text — TextMorph / LabelRoll / LineReveal (ink travels; no scramble)
// - Media — Magnetic / Tilt / Spotlight on Imageory only (not Button chrome)
// - Enter — FadeIn opacity+rise; AnimateNumber digit tween
// - Delight — CopyButton (rare path); TransitionPanel wait-mode swap
// - Chrome overlays still Soft settle — see Dialog / Drawer / Menu docs