Animated terminal that types commands character-by-character with output responses. Perfect for showcasing CLI installation steps or quick-start guides.
A fake terminal window used to demo CLI installation steps: mac-style traffic-light dots, a centered title, copy and restart controls, and a body that types each command character-by-character before "running" and typing out its output line.
Free block
This block is free. No license or account is required: install it with the CLI and use it in unlimited projects.
Radix flavor
npx shadcn add "https://ui.beste.co/r/terminal1"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/terminal1"This installs the block to components/beste/block/terminal1.tsx and the badge and button shadcn/ui primitives it depends on.
The installed file exports terminal1Demo alongside the block: the exact props behind the preview above. Spread it to get a working animated terminal in one line.
import { Terminal1, terminal1Demo } from "@/components/beste/block/terminal1";
export default function QuickStartPage() {
return <Terminal1 {...terminal1Demo} />;
}Then replace the demo with your own props. Written out, the same setup looks like this:
import { Terminal1 } from "@/components/beste/block/terminal1";
export default function QuickStartPage() {
return (
<Terminal1
heading="Get started in seconds"
description="Install the CLI and start building."
terminal={{
title: "Terminal",
commands: [
{
id: "cmd-1",
prompt: "$ ",
command: "npm install -g @acme/cli",
output: "Installing @acme/cli...\n✓ Installed successfully",
},
{
id: "cmd-2",
prompt: "$ ",
command: "acme init my-project",
output: "✓ Project initialized",
},
],
}}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string; variant?: "default" | "secondary" | "outline" } | – | Optional badge above the heading |
heading | string | – | Section heading |
description | string | – | Section intro text |
terminal | TerminalConfig | – | Window title, commands, and typing timing |
showCopyButton | boolean | true | Shows the header "copy all commands" button |
glowEffect | boolean | true | Adds a drop shadow behind the terminal window |
className | string | – | Extra classes for the outer <section> |
type TerminalConfig = {
title?: string;
commands: TerminalCommand[];
typeSpeed?: number;
delayBetweenCommands?: number;
showLineNumbers?: boolean;
};
type TerminalCommand = {
id: string;
prompt?: string;
command: string;
output?: string;
outputDelay?: number;
};IntersectionObserver (30% threshold): nothing types until the terminal scrolls into view, so a section placed below the fold shows only a static blinking cursor until the visitor scrolls to it.terminal.typeSpeed (default 50ms per character); after the command finishes, the block waits that command's own outputDelay (default 500ms) before typing its output at a fixed 10ms per character, hardcoded independently of typeSpeed.| cursor follows only whichever line is actively typing (command or output) and disappears once that line is done.RotateCcw icon) appears in the header only after the whole sequence completes (isComplete), and calls reset() to replay everything from the first command.terminal3
A centered install section with an eyebrow, light heading, paragraph, a row of package-manager tabs, and an image tile that floats a live terminal command card.
terminal2
Two-column layout with marketing content and a static code snippet display with copy functionality. Perfect for developer tool landing pages or CLI documentation sections.