✨ Introducing Magic UI Pro - 50+ blocks and templates to build beautiful landing pages in minutes.

Command Palette

Search for a command to run...

Docs
Terminal

Terminal

PreviousNext

An implementation of the MacOS terminal. Useful for showcasing a command line interface.

āœ” Preflight checks.
āœ” Verifying framework. Found Next.js.
āœ” Validating Tailwind CSS.
āœ” Validating import alias.
āœ” Writing components.json.
āœ” Checking registry.
āœ” Updating tailwind.config.ts
āœ” Updating app/globals.css
āœ” Installing dependencies.
ℹ Updated 1 file:- lib/utils.ts

Installation

Usage

import {
  AnimatedSpan,
  Terminal,
  TypingAnimation,
} from "@/components/magicui/terminal";
<Terminal>
  <TypingAnimation>&gt; pnpm dlx shadcn@latest init</TypingAnimation>
 
  <AnimatedSpan className="text-green-500">āœ” Preflight checks.</AnimatedSpan>
 
  <AnimatedSpan className="text-green-500">
    āœ” Validating Tailwind CSS.
  </AnimatedSpan>
 
  <TypingAnimation className="text-muted-foreground">
    Success! Project initialization completed.
  </TypingAnimation>
</Terminal>

The terminal sequences its children automatically. Each TypingAnimation or AnimatedSpan starts when the previous finishes. Manual delay props are optional and typically unnecessary.

Props

Terminal

PropTypeDefaultDescription
childrenReactNode-Terminal content: a list of TypingAnimation/AnimatedSpan.
classNamestring-Custom CSS class for styling.
sequencebooleantrueEnable auto sequencing so each line starts after the previous.
startOnViewbooleantrueStart sequencing when the terminal enters the viewport.

AnimatedSpan

PropTypeDefaultDescription
childrenReactNode-Content to be faded in.
classNamestring-Custom CSS class for styling.
delaynumber0Delay in ms before animation starts (used when sequence is false).
startOnViewbooleanfalseIf true, waits for viewport visibility before animating when unsequenced.

TypingAnimation

PropTypeDefaultDescription
childrenstring-Text to be typed.
classNamestring-Custom CSS class for styling.
durationnumber60Milliseconds per character.
delaynumber0Delay in ms before typing starts (used when sequence is false).
asReact.ElementType"span"The component type to render.
startOnViewbooleantrueIf true, waits for viewport visibility before typing when unsequenced.
// Start immediately (ignore viewport)
<Terminal startOnView={false}>
  <TypingAnimation>Immediate start</TypingAnimation>
</Terminal>
 
// Opt out of sequencing and use manual delays
<Terminal sequence={false}>
  <TypingAnimation delay={500}>First</TypingAnimation>
  <AnimatedSpan delay={1500}>Second</AnimatedSpan>
</Terminal>