← Back
kuratlielia

kuratlielia/arc-library

Arc Library: free, open source React components with calm motion. Copy the code or install with the shadcn CLI.

View on GitHub ↗https://uiarc.dev ↗
componentsdesign-systemmotionnextjsopen-sourcereactshadcntypescriptui-library
Stars
167
Forks
8
Watchers
167
Open issues
1
Contributors
2
Language
TypeScript
License
MIT License
Default branch
main
Created Sep 24, 2026Updated Oct 1, 2026

Star growth

Today—
This week—
This month—

Star history will appear here once this repo has been tracked for a couple of days.

README

Arc: React components and blocks with calm, crafted motion. Free and open source, install with shadcn.

License: MIT shadcn registry: @uiarc CI 101 components 22 blocks React 19

Docs  ·  Components  ·  Install  ·  AI and MCP  ·  Pro

Arc is a library of React components and blocks with calm, physical motion. Every item is plain source you own: CSS modules on a small set of design tokens, Motion for animation, keyboard support, and a reduced motion path for every animation. Install anything with the shadcn CLI or copy the files by hand. It works in Next.js and Vite, with or without Tailwind. This repository holds the free, open source part: 101 components and 22 blocks, plus the design and motion tokens they share. Every one of them has a live preview at uiarc.dev.

Showcase

A few favorites, recorded live from uiarc.dev. Items marked Pro are part of Arc Pro and are not in this repository; everything else installs from here for free.

Cover flow: A depth rail of photos you can throw, with soft grounded shadows and a quiet reflection.
Cover flow Pro
A depth rail of photos you can throw, with soft grounded shadows and a quiet reflection.
Donut chart: Arcs morph between datasets while the total rolls into the center.
Donut chart
Arcs morph between datasets while the total rolls into the center.
Billing toggle: Monthly and yearly prices roll into each other, savings included.
Billing toggle
Monthly and yearly prices roll into each other, savings included.
Orbit logos: Integrations orbit your product mark. Filter them by category.
Orbit logos Pro
Integrations orbit your product mark. Filter them by category.
Wallet stack: Fan a stack of cards and lift one out to see its activity.
Wallet stack Pro
Fan a stack of cards and lift one out to see its activity.
Line chart: Switch the range and the line redraws against the previous period.
Line chart
Switch the range and the line redraws against the previous period.
Number field: Bounded steppers that say so when you reach the limit.
Number field
Bounded steppers that say so when you reach the limit.
Activity rings: Daily goals sweep, count up and trace a second lap past 100%.
Activity rings Pro
Daily goals sweep, count up and trace a second lap past 100%.

Contents

  • Showcase
  • Install
    • Requirements
    • With the shadcn CLI
    • Copy and paste
  • Usage
  • Theming
  • Components
  • Blocks
  • AI tools
  • Troubleshooting
  • How releases work
  • Repository layout
  • Arc Pro
  • Contributing
  • License

Install

Requirements

  • React 19 with TypeScript
  • Next.js (App Router) or Vite
  • motion for animation. Some items also use lucide-react or a Radix UI primitive; the CLI installs whatever an item needs.
  • The @/* import alias (Next.js and shadcn set it up by default)

No Tailwind is required. Arc styles are CSS modules that read CSS variables.

With the shadcn CLI

Register the @uiarc namespace once in components.json:

{
  "registries": {
    "@uiarc": "https://uiarc.dev/r/{name}.json"
  }
}

Then add items by name. Local dependencies, such as the components inside a block, come along automatically:

npx shadcn@latest add @uiarc/button @uiarc/dialog

Every item also installs from its full URL, without touching components.json:

npx shadcn@latest add https://uiarc.dev/r/button.json

Your first install adds arc-foundation (design and motion tokens). Import it once at the root of your app:

// app/layout.tsx (Next.js) or src/main.tsx (Vite)
import "@/components/arc/foundation.css";
Setting up a new project

Next.js

npx create-next-app@latest my-app
cd my-app
npx shadcn@latest init

Accept the default @/* import alias.

Vite

npm create vite@latest my-app -- --template react-ts
cd my-app
npx shadcn@latest init

Map @/* to src in tsconfig.json and vite.config.ts, as shadcn expects:

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": { "@/*": ["./src/*"] }
  }
}
import path from "node:path";
import react from "@vitejs/plugin-react";
import { defineConfig } from "vite";

export default defineConfig({
  plugins: [react()],
  resolve: { alias: { "@": path.resolve(__dirname, "./src") } },
});

Copy and paste

  1. Install the shared packages: npm install motion lucide-react.
  2. Copy registry/foundation.css, registry/motion-tokens.ts and lib/motion-tokens.ts from this repository into the same paths under your @/ root, and import the CSS once at the root.
  3. Copy the item's folder from registry/components/<id>/ or registry/blocks/<id>/, keeping the path. Copied files keep this repository's layout and import each other through @/; the CLI install above rewrites that for you. Its public/r/<id>.json file lists every file and npm package it needs.

Each page on uiarc.dev also has a Manual tab with the exact files.

Usage

The CLI puts every file in an arc/ folder under the components alias in your components.json, for example components/arc/button/button.tsx, or src/components/arc/… in a src/ project or monorepo package. Arc files import each other with relative paths, so any alias setup works; move the arc/ folder as a whole if you want it elsewhere. Use them like any local component:

import { Button } from "@/components/arc/button/button";

export default function Page() {
  return <Button>Save changes</Button>;
}

The code is yours: edit it, rename it, move it. There is no runtime package to keep in sync.

Theming

Components read semantic tokens, never raw colors. Change a token in foundation.css (components/arc/foundation.css after a CLI install) and every component follows, in both themes.

Token Used for
--background The page behind everything
--surface, --surface-raised, --surface-muted Cards and inputs, floating layers, quiet fills
--foreground, --text-secondary, --text-muted Primary, supporting and hint text
--border, --border-subtle, --border-strong Separators and edges
--accent, --accent-strong, --accent-subtle Selection, progress and helpful context
--success, --warning, --danger Status, always paired with a label
--radius-control, --radius-panel, --radius-surface Controls, menus, cards
--font-display, --font-body Geist for headings, Inter for everything else
  • Dark mode: set data-theme="dark" on <html>. Dark values are tuned separately, not inverted.
  • Accent: set data-accent on <html> to neutral, violet, blue, green, amber, orange, coral or rose.
  • Motion: springs and durations live in lib/motion-tokens.ts (components/arc/lib/motion-tokens.ts after a CLI install). Every animation respects prefers-reduced-motion.

More in the theming docs and motion docs.

Components

101 free components, grouped as on the site. Click a name for the live preview and docs.

Actions (14) · Inputs (31) · Disclosure (13) · Feedback (8) · Data (30) · Text (4) · Special (1)

Actions

Buttons

Component Description Install
Button A clear, responsive action with quiet secondary states. npx shadcn@latest add @uiarc/button
Action button A compact button for frequent toolbar actions. npx shadcn@latest add @uiarc/action-button
Split button A primary action with a menu of nearby alternatives. npx shadcn@latest add @uiarc/split-button
Copy button Copy a value with immediate confirmation. npx shadcn@latest add @uiarc/copy-button
Confirm morph A destructive button that morphs into an inline confirmation, a spinner, and a result with undo. npx shadcn@latest add @uiarc/confirm-morph

Gestures

Component Description Install
Hold to confirm Confirm a destructive action by holding, not tapping. npx shadcn@latest add @uiarc/hold-to-confirm
Swipe actions Reveal row actions with a swipe, or from the same actions in a menu. npx shadcn@latest add @uiarc/swipe-actions

Menus

Component Description Install
Dropdown menu A focused list of actions anchored to a trigger. npx shadcn@latest add @uiarc/dropdown-menu
Context menu Secondary actions kept close to the selected object. npx shadcn@latest add @uiarc/context-menu
User menu Your account, settings, theme, and sign out behind the avatar. Opens as a bottom sheet on phones. npx shadcn@latest add @uiarc/user-menu

Theme

Component Description Install
Theme switcher Four smooth ways to move between light and dark appearance. npx shadcn@latest add @uiarc/theme-switch
Eclipse The next appearance crosses the page like an eclipse. npx shadcn@latest add @uiarc/theme-switch-eclipse
Split The next appearance opens from a slim center seam. npx shadcn@latest add @uiarc/theme-switch-split
Rise The next appearance rises into place. npx shadcn@latest add @uiarc/theme-switch-rise

Inputs

Text fields

Component Description Install
Input A single line field with clear labels and useful states. npx shadcn@latest add @uiarc/input
Textarea A multiline field for notes, descriptions, and longer text. npx shadcn@latest add @uiarc/textarea
Password field Capture sensitive text with a visible reveal control. npx shadcn@latest add @uiarc/password-field
Password strength Show how strong a new password is while it is typed. npx shadcn@latest add @uiarc/password-strength
Search field A recognizable search entry point with clear affordances. npx shadcn@latest add @uiarc/search-field
Expanding search An icon that morphs into a search field with results beneath it. npx shadcn@latest add @uiarc/expanding-search
Inline edit Rename in place: the text becomes a field without moving. npx shadcn@latest add @uiarc/inline-edit

Special inputs

Component Description Install
Number field Enter a bounded number with clear increment controls. npx shadcn@latest add @uiarc/number-field
Phone input A phone field with a country picker, formatting as you type, and E.164 output. npx shadcn@latest add @uiarc/phone-input
Tag input Turn short text values into removable tags. npx shadcn@latest add @uiarc/tag-input
Mention input A textarea with @people and #channel mentions that act as single tokens, with suggestions at the caret. npx shadcn@latest add @uiarc/mention-input
Shortcut recorder Record key combinations into key caps, with conflict warnings, Kbd, and a searchable cheatsheet. npx shadcn@latest add @uiarc/shortcut-recorder

Selects

Component Description Install
Select A compact choice field with a keyboard friendly menu. npx shadcn@latest add @uiarc/select
Combobox Search and select from a list without leaving the field. npx shadcn@latest add @uiarc/combobox
Multi-select Select several values while keeping the field readable. npx shadcn@latest add @uiarc/multi-select
Chip group Filter by a few facets with chips that morph as you pick them. npx shadcn@latest add @uiarc/chip-group

Toggles

Component Description Install
Radio cards Selectable option cards with a sliding selection ring, price and description slots, and radio keyboard behavior. npx shadcn@latest add @uiarc/radio-cards
Billing toggle A monthly and yearly switch with a savings badge and prices that roll to the new amount. npx shadcn@latest add @uiarc/billing-toggle
Checkbox A binary choice with a precise, legible state. npx shadcn@latest add @uiarc/checkbox
Radio group Choose one option from a visible set. npx shadcn@latest add @uiarc/radio-group
Switch A tactile toggle for settings that take effect immediately. npx shadcn@latest add @uiarc/switch
Segmented control Switch between a small set of related views. npx shadcn@latest add @uiarc/segmented-control

Sliders

Component Description Install
Slider Pick a value or a range on a track that follows your finger. npx shadcn@latest add @uiarc/slider

Pickers

Component Description Install
Calendar Browse dates in a clear, compact month view. npx shadcn@latest add @uiarc/calendar
Date picker Choose a date without losing context. npx shadcn@latest add @uiarc/date-picker
Date range picker A range picker that grows from its trigger into two months with presets and a stretching range highlight. npx shadcn@latest add @uiarc/date-range-picker
Time picker Choose a time with sensible keyboard behavior. npx shadcn@latest add @uiarc/time-picker
Color picker A swatch that grows into a picker with format morphing, eyedropper, saved swatches, and contrast readout. npx shadcn@latest add @uiarc/color-picker

Editors

Component Description Install
Rich text editor A lightweight editor with markdown shortcuts, a floating toolbar, a slash menu, and HTML and markdown output. npx shadcn@latest add @uiarc/rich-text-editor
Signature pad Smooth ink that thins with speed, with undo, replay, and PNG or SVG export. npx shadcn@latest add @uiarc/signature-pad
File dropzone A generous target for dropping one or more files. npx shadcn@latest add @uiarc/file-dropzone

Disclosure

Navigation

Component Description Install
Tabs Switch between related content in the same context. npx shadcn@latest add @uiarc/tabs
Breadcrumb Show where a page sits in a hierarchy. npx shadcn@latest add @uiarc/breadcrumb
Pagination Move through a long collection with clear bounds. npx shadcn@latest add @uiarc/pagination

Expand

Component Description Install
Scroll area A native scroll container with thin overlay scrollbars and edge fades that appear only when content overflows. npx shadcn@latest add @uiarc/scroll-area
Accordion Progressively reveal supporting information in place. npx shadcn@latest add @uiarc/accordion
Expandable card Give a dense card more room when requested. npx shadcn@latest add @uiarc/expandable-card
Resizable panels Trade space between panes by dragging the divider between them. npx shadcn@latest add @uiarc/resizable-panels

Overlays

Component Description Install
Dialog A focused surface for decisions that need attention. npx shadcn@latest add @uiarc/dialog
Drawer A temporary side surface for focused work. npx shadcn@latest add @uiarc/drawer
Bottom sheet A sheet that rests at a peek or full height and follows your finger. npx shadcn@latest add @uiarc/bottom-sheet
Popover A small anchored surface for contextual information. npx shadcn@latest add @uiarc/popover
Hover card Preview a person or link on hover or focus without leaving the page. npx shadcn@latest add @uiarc/hover-card
Tooltip Short supporting text for unfamiliar controls. npx shadcn@latest add @uiarc/tooltip

Feedback

Messages

Component Description Install
Alert A persistent message that helps people recover or continue. npx shadcn@latest add @uiarc/alert
Toast Brief confirmation for a completed background action. npx shadcn@latest add @uiarc/toast
Toast stack Stack short results at the edge until you reach for them. npx shadcn@latest add @uiarc/toast-stack
Announcement bar A top banner that rotates messages, counts down, and collapses smoothly when dismissed. npx shadcn@latest add @uiarc/announcement-bar

Progress

Component Description Install
Progress Show how much of a known task is complete. npx shadcn@latest add @uiarc/progress
Skeleton Reserve space while content is still loading. npx shadcn@latest add @uiarc/skeleton
Stepper Show where a person is in a multi-step flow and what is done. npx shadcn@latest add @uiarc/stepper
Usage meter Show what fills an allowance and how close it is to the limit. npx shadcn@latest add @uiarc/usage-meter

Data

Avatars

Component Description Install
Avatar A compact identity marker for people and accounts. npx shadcn@latest add @uiarc/avatar
Avatar group Show a team or set of contributors in a small space. npx shadcn@latest add @uiarc/avatar-group
Badge A small label for status, category, or metadata. npx shadcn@latest add @uiarc/badge

Cards

Component Description Install
Card A contained group of related content and actions. npx shadcn@latest add @uiarc/card
Metric card A compact summary for a number that needs context. npx shadcn@latest add @uiarc/metric-card
Empty state A useful next step when there is nothing to show yet. npx shadcn@latest add @uiarc/empty-state

Charts

Component Description Install
Line chart A multi-series line chart with a gliding crosshair, legend toggles, and paths that morph between ranges. npx shadcn@latest add @uiarc/line-chart
Bar chart Compare one measure across days and scrub any bar for its value. npx shadcn@latest add @uiarc/bar-chart
Donut chart A donut whose arcs morph between datasets, with the active value rolling into the center. npx shadcn@latest add @uiarc/donut-chart
Streamgraph Layered streams on a wiggle baseline that morph between ranges, with a layer you can isolate and read week by week. npx shadcn@latest add @uiarc/streamgraph
Brush chart A dense time series with an overview strip: drag a window to zoom, resize it by its handles, and read events in place. npx shadcn@latest add @uiarc/brush-chart
Waffle chart A ten by ten unit chart where every cell is one percent, and cells fly to their new group when the data changes. npx shadcn@latest add @uiarc/waffle-chart
Slope chart Before and after on two axes: lines draw in, rank moves sit beside each value, and switching datasets slides every line to its new slope. npx shadcn@latest add @uiarc/slope-chart
Sparkline Show a compact trend beside a value. npx shadcn@latest add @uiarc/sparkline
Gauge Show a value against a known range. npx shadcn@latest add @uiarc/gauge
Activity heatmap See a year of activity at a glance, one square per day. npx shadcn@latest add @uiarc/activity-heatmap
Animated counter Give changing totals a clear sense of movement. npx shadcn@latest add @uiarc/animated-counter
Ridgeline Overlapping distributions, one ridge per group: hover to lift a ridge and read its quartiles, switch datasets and every curve morphs. npx shadcn@latest add @uiarc/ridgeline
Treemap A squarified treemap: click to drill and the tiles grow to fill the view, with a breadcrumb back and metrics that morph every tile. npx shadcn@latest add @uiarc/treemap

Tables

Component Description Install
Sortable data table Compare structured records with sortable columns. npx shadcn@latest add @uiarc/sortable-data-table
Tree view Navigate nested folders and structured content. npx shadcn@latest add @uiarc/tree-view
Filter toolbar Keep collection filters close and easy to reset. npx shadcn@latest add @uiarc/filter-toolbar
Code block Present code with legible hierarchy and copy access. npx shadcn@latest add @uiarc/code-block
JSON viewer A collapsible JSON tree with search, paging for long arrays, and copy value or path. npx shadcn@latest add @uiarc/json-viewer

Activity

Component Description Install
Timeline Follow what happened, newest first, grouped by day. npx shadcn@latest add @uiarc/timeline
Comment thread Threaded comments with replies, reactions, mentions, inline edit, and resolve. npx shadcn@latest add @uiarc/comment-thread
Chat thread A chat thread with grouped messages, reactions, read receipts, typing, and a composer with attachments. npx shadcn@latest add @uiarc/chat-thread

Media

Component Description Install
Image compare Drag a divider across two images to see what changed. npx shadcn@latest add @uiarc/image-compare
Carousel Browse a row of slides by dragging, flicking, or arrowing through them. npx shadcn@latest add @uiarc/carousel
Card stack Review a deck one card at a time, with a throw and an undo. npx shadcn@latest add @uiarc/card-stack

Text

Text effects

Component Description Install
Text reveal Reveal a short piece of content with restrained motion. npx shadcn@latest add @uiarc/text-reveal
In-view title Bring a section title in as it scrolls into view. npx shadcn@latest add @uiarc/in-view-title
Text morph Morph a label into its next state, letter by letter. npx shadcn@latest add @uiarc/text-morph
Text shimmer Show ongoing work with a calm light across the words. npx shadcn@latest add @uiarc/text-shimmer

Special

Type

Component Description Install
Slot text Text and numbers that spin into their new value on staggered slot machine reels. npx shadcn@latest add @uiarc/slot-text

Blocks

22 free blocks: complete sections and screens built from Arc components.

App shell

Block Description Install
Page header A project page header that folds into a compact bar as you scroll, with tabs whose counts roll. npx shadcn@latest add @uiarc/page-header
Command palette A complete keyboard driven action surface with search, grouped results, and shortcuts. npx shadcn@latest add @uiarc/command-palette
Notification center A home for updates with read state, grouped information, and animated disclosure. npx shadcn@latest add @uiarc/notification-center
Empty states Four empty states in one illustration whose shapes morph between scenes as you switch tabs. npx shadcn@latest add @uiarc/empty-states

Auth

Block Description Install
Sign up form An account creation flow with field validation, password strength, and a clear completion state. npx shadcn@latest add @uiarc/signup-form
Sign in A sign in card that morphs from email to a six digit code to your account. npx shadcn@latest add @uiarc/sign-in
Centered login A passkey-first login card on a quiet ring backdrop that morphs through email and code. npx shadcn@latest add @uiarc/login-centered
OTP input A six digit verification flow with paste support and keyboard navigation. npx shadcn@latest add @uiarc/otp-input

Pricing

Block Description Install
Plan comparison Compare meaningful differences between plans and billing periods. npx shadcn@latest add @uiarc/plan-comparison

Media

Block Description Install
File upload A complete file selection flow with constraints, progress, and error feedback. npx shadcn@latest add @uiarc/file-upload

Heroes

Block Description Install
Hero section Three full screen SaaS heroes: a live dashboard rising from the bottom edge over a drifting mesh, a workflow graph that routes sample events node by node, and editorial type over a mesh gradient. npx shadcn@latest add @uiarc/hero-section

Features

Block Description Install
Comparison table An us versus them table with a sticky header, a highlighted column, and a stacked phone view. npx shadcn@latest add @uiarc/comparison-table

Social proof

Block Description Install
Logo marquee A quiet, continuously moving row of brand marks with a pause control. npx shadcn@latest add @uiarc/logo-marquee
Stats band Headline numbers that count up in view, each with a tiny visual that proves it and a context line on hover, plain or in a hairline grid. npx shadcn@latest add @uiarc/stats-band

Content

Block Description Install
Changelog feed Release notes you can filter, open in place, and scroll through month by month. npx shadcn@latest add @uiarc/changelog-feed
FAQ section FAQs as an accordion, a topic rail, or a searchable list that highlights matches. npx shadcn@latest add @uiarc/faq-section
Contact section A validated contact form that morphs into a confirmation, support channels, and office cards with local times. npx shadcn@latest add @uiarc/contact-section
Blog grid A blog index with a featured post, category filter, post cards, pagination and an in-place reader. npx shadcn@latest add @uiarc/blog-grid

Headers and footers

Block Description Install
Site header A sticky website header that turns solid on scroll, with a gliding active link, mega menu panels, and a mobile sheet. npx shadcn@latest add @uiarc/site-header
Site footer A website footer with link columns and newsletter, a minimal layout, and a large fading Arc mark. npx shadcn@latest add @uiarc/site-footer
CTA section A call to action as a centered closing section, a split beside a setup card that completes itself, or a dismissible banner. npx shadcn@latest add @uiarc/cta-section
Newsletter signup An email signup framed by a stack of past issues; subscribing drops the next issue, addressed to you, onto the front. npx shadcn@latest add @uiarc/newsletter-signup

AI tools

Arc is built to be used from AI coding tools.

  • MCP server: https://uiarc.dev/api/mcp (Streamable HTTP, no key needed for free items). Search, read docs and fetch source from Claude Code, Cursor, VS Code or Codex.

    claude mcp add --transport http arc https://uiarc.dev/api/mcp
  • llms.txt: https://uiarc.dev/llms.txt for an index, llms-full.txt for everything in one file.

  • Markdown docs: every page has a Markdown version at /components/<id>/markdown.

Setup for each client is in the AI and MCP docs.

Troubleshooting

Cannot find module @/registry/...

Arc files import each other through the @/* alias. Map it to your project root in tsconfig.json (and in vite.config.ts for Vite). See Setting up a new project.

Components render without styles or colors

Import the tokens once at the root: import "@/registry/foundation.css";. If the file is missing, run npx shadcn@latest add @uiarc/arc-foundation.

The CLI says @uiarc is an unknown registry

Add the registries entry to components.json (see With the shadcn CLI), or install from the full URL: npx shadcn@latest add https://uiarc.dev/r/<id>.json.

Dark mode does not switch

Arc follows the data-theme attribute on <html>, not the dark class. Set data-theme="dark" before the page paints to avoid a flash of the light theme.

Using Vite: an item imports next/image or next/link

A few items use Next.js primitives: avatar, breadcrumb, changelog-feed, site-header, newsletter-signup. In Vite, replace Image with <img> and Link with <a>; the props map one to one for these uses.

Animations do not play

Arc honors the reduced motion setting of your operating system and swaps movement for simple fades. Turn it off to see the full motion, and make sure motion is installed.

The CLI asks to overwrite foundation.css

Every item lists the foundation as a dependency. If you have customized your tokens, answer no; the existing file keeps working.

How releases work

New free components and blocks ship regularly, a few at a time. Each release updates this repository, the @uiarc registry and the changelog together, so the code here always matches what the CLI installs. Watch or star the repository to hear about new items.

Repository layout

registry/foundation.css      design tokens, light and dark themes
registry/motion-tokens.ts    motion presets
lib/motion-tokens.ts         motion presets, shared path
lib/                         small shared helpers
registry/components/<id>/    components
registry/blocks/<id>/        blocks
registry.json                shadcn registry index
public/r/<id>.json           prebuilt registry items, one per component or block

Arc Pro

Arc Pro adds 102 more components and blocks on top of this library: galleries like the Cover flow above, wallet and finance surfaces, richer charts, and complete product screens. They follow the same rules as everything here: plain source you own, both themes, keyboard support and a reduced motion path.

  • Source for every Pro component and block, installed with the same shadcn CLI through a personal token, or through the MCP server
  • Every new Pro release, plus fixes and updates to the pieces you already have
  • Yearly, or one payment for lifetime access. See pricing

Everything in this repository stays free and MIT licensed.

Contributing

Bug reports, fixes and component ideas are welcome. Read CONTRIBUTING.md first, and please follow the code of conduct. To report a security issue, see SECURITY.md.

License

MIT © 2026 Elia Kuratli