FrameButton

A futuristic button with springy corner markers that spread on hover and lock on when pressed, plus a scan sweep.

Preview

Props

Install

npx shadcn@latest add @evilbuttons/frame-button

Usage

Button

import { FrameButton } from "@/components/evil-buttons/frame-button";

export function ButtonDemo() {
  return <FrameButton>Get Started</FrameButton>;
}
import { FrameButton } from "@/components/evil-buttons/frame-button";

export function ButtonDemo() {
  return (
    <FrameButton as="link" href="https://github.com/radiumcoders/evil-buttons">
      Star on GitHub
    </FrameButton>
  );
}

Variants

secondary

Fills in with the foreground color on hover.

outline

Glow

Props

The component spreads native button props, or anchor props when as="link".

PropTypeDefaultDescription
childrenReact.ReactNode-The button content.
variant"default" | "secondary" | "outline""default"Visual style of the button.
glowbooleanfalseBlooms a soft glow behind the button on hover.
sizenumber | string14Corner marker size in px, or a Tailwind size class like "size-4".
offsetnumber6Distance in px the markers sit outside the button's edge.
hoverOffsetnumber5How far in px the markers spread on hover.
as"button" | "link""button"Renders a button or a Next.js Link.
hrefRoute | UrlObject-Link destination when as="link".
classNamestring-Extra classes passed to the root element.

Good to know

  • FrameMarkers is exported on its own.
  • Markers are borders, not icons, so they stay crisp at any size.

Search docs

Jump to a button documentation page