MCPcopy
hub / github.com/chakra-ui/ark

github.com/chakra-ui/ark @v0.0.1 sqlite

repository ↗ · DeepWiki ↗ · release v0.0.1 ↗
6,459 symbols 16,887 edges 4,533 files 23 documented · 0%
README

Ark UI

Build scalable design systems with unstyled, accessible UI components

MIT License npm downloads GitHub stars Discord

DocumentationInstallationFeaturesComponentsRoadmapContributing

Overview

Ark UI is a headless component library that provides the foundation for building high-quality, accessible design systems and web applications. Built on top of Zag.js state machines, Ark UI delivers robust, framework-agnostic component logic with perfect parity across React, Solid, Vue, and Svelte.

Why Ark UI?

  • 🎨 Completely Unstyled - Zero styling opinions. Bring your own styles with CSS-in-JS, Tailwind, vanilla CSS, or any styling solution
  • ♿️ Accessibility First - WCAG compliant components tested with real assistive technologies out of the box
  • 🔄 State Machine Powered - Predictable, testable behavior powered by Zag.js finite state machines
  • 🌍 Multi-Framework - Same API across React, Solid, Vue, and Svelte - write once, use everywhere
  • 📦 Truly Composable - Granular component primitives that work together seamlessly
  • ⚡️ Production Ready - Battle-tested in products like Chakra UI, used by teams at OVHCloud, PluralSight, and more
  • 🎯 Type-Safe - Fully typed with TypeScript for exceptional developer experience

Installation

Choose your framework and install the corresponding package:

# React
npm install @ark-ui/react

# Solid
npm install @ark-ui/solid

# Vue
npm install @ark-ui/vue

# Svelte
npm install @ark-ui/svelte

Quick Start

Here's a simple example showing how consistent the API is across frameworks:

React

import { Dialog } from '@ark-ui/react/dialog'

export const MyDialog = () => (
  <Dialog.Root>
    <Dialog.Trigger>Open Dialog</Dialog.Trigger>
    <Dialog.Backdrop />
    <Dialog.Positioner>
      <Dialog.Content>
        <Dialog.Title>Dialog Title</Dialog.Title>
        <Dialog.Description>Dialog description</Dialog.Description>
        <Dialog.CloseTrigger>Close</Dialog.CloseTrigger>
      </Dialog.Content>
    </Dialog.Positioner>
  </Dialog.Root>
)

Vue

<script setup lang="ts">
import { Dialog } from '@ark-ui/vue/dialog'
</script>

<template>
  <Dialog.Root>
    <Dialog.Trigger>Open Dialog</Dialog.Trigger>
    <Dialog.Backdrop />
    <Dialog.Positioner>
      <Dialog.Content>
        <Dialog.Title>Dialog Title</Dialog.Title>
        <Dialog.Description>Dialog description</Dialog.Description>
        <Dialog.CloseTrigger>Close</Dialog.CloseTrigger>
      </Dialog.Content>
    </Dialog.Positioner>
  </Dialog.Root>
</template>

Solid

import { Dialog } from '@ark-ui/solid/dialog'

export const MyDialog = () => (
  <Dialog.Root>
    <Dialog.Trigger>Open Dialog</Dialog.Trigger>
    <Dialog.Backdrop />
    <Dialog.Positioner>
      <Dialog.Content>
        <Dialog.Title>Dialog Title</Dialog.Title>
        <Dialog.Description>Dialog description</Dialog.Description>
        <Dialog.CloseTrigger>Close</Dialog.CloseTrigger>
      </Dialog.Content>
    </Dialog.Positioner>
  </Dialog.Root>
)

Svelte

<script lang="ts">
  import { Dialog } from '@ark-ui/svelte/dialog'
</script>

<Dialog.Root>
  <Dialog.Trigger>Open Dialog</Dialog.Trigger>
  <Dialog.Backdrop />
  <Dialog.Positioner>
    <Dialog.Content>
      <Dialog.Title>Dialog Title</Dialog.Title>
      <Dialog.Description>Dialog description</Dialog.Description>
      <Dialog.CloseTrigger>Close</Dialog.CloseTrigger>
    </Dialog.Content>
  </Dialog.Positioner>
</Dialog.Root>

Features

Zero-Styling Freedom

Every component is completely unstyled, giving you total control over your design. Use any styling solution:

// Tailwind CSS
<Dialog.Trigger className="px-4 py-2 bg-blue-500 rounded">Open</Dialog.Trigger>

// CSS-in-JS
<Dialog.Trigger css={{ padding: '8px 16px', background: 'blue' }}>Open</Dialog.Trigger>

// Vanilla CSS
<Dialog.Trigger className="my-button">Open</Dialog.Trigger>

Accessibility Built-In

All components follow WAI-ARIA design patterns and are tested with screen readers:

  • ✅ Proper ARIA attributes and roles
  • ✅ Keyboard navigation support
  • ✅ Focus management
  • ✅ Screen reader announcements
  • ✅ RTL support

State Machine Architecture

Powered by Zag.js, each component uses finite state machines for predictable behavior:

  • 🔒 Type-safe state transitions
  • 🧪 Easier to test and debug
  • 🐛 Fewer edge cases and bugs
  • 📊 Visualizable component logic

Framework Parity

Maintain a single design system across multiple frameworks without rewriting component logic:

// Same API, same behavior, different frameworks
const packages = ['@ark-ui/react', '@ark-ui/solid', '@ark-ui/vue', '@ark-ui/svelte']

Components

Ark UI provides 45+ production-ready components covering common UI patterns:

Layout & Navigation

  • Accordion
  • Tabs
  • Splitter
  • Steps
  • Tree View
  • Tour

Overlays & Dialogs

  • Dialog
  • Popover
  • Tooltip
  • Hover Card
  • Bottom Sheet
  • Floating Panel

Forms & Inputs

  • Checkbox
  • Radio Group
  • Select
  • Combobox
  • Number Input
  • Pin Input
  • Tags Input
  • Editable
  • File Upload
  • Color Picker
  • Date Picker
  • Password Input
  • Signature Pad
  • Slider
  • Angle Slider
  • Rating Group
  • Switch
  • Toggle / Toggle Group

Data Display

  • Avatar
  • Highlight
  • Progress
  • QR Code
  • Format
  • JSON Tree View
  • Marquee

Utilities

  • Carousel
  • Clipboard
  • Collapsible
  • Field / Fieldset
  • Menu
  • Pagination
  • Portal
  • Presence
  • Scroll Area
  • Segment Group
  • Timer
  • Toast
  • Client Only
  • Download Trigger
  • Focus Trap
  • Frame
  • Collection
  • Listbox

View all components →

Documentation

Visit ark-ui.com for:

  • 📖 Comprehensive guides and tutorials
  • 📚 Detailed API references for each component
  • 💡 Interactive examples and recipes
  • 🎓 Styling guides for popular frameworks
  • 🔧 TypeScript usage patterns

Ecosystem

Built with Ark UI

  • Chakra UI v3 - A simple, modular component library
  • Park UI - Beautifully designed components built with Ark UI and Panda CSS
  • Tark UI - Ark UI components styled with Tailwind CSS

Styling Libraries

Ark UI works seamlessly with:

Developer Tools

  • MCP Server - AI-assisted development with Claude and other AI agents

Community

  • 💬 Discord - Join our community for help and discussions
  • 🐦 Twitter - Follow us for updates and announcements
  • 🗺️ Roadmap - Request features and vote on upcoming work
  • 📝 Blog - Read about releases and technical deep dives

Contributing

We welcome contributions! Please read our Contributing Guide to learn about:

  • Setting up your development environment
  • Our development workflow
  • Code conventions and standards
  • How to submit pull requests

Support

Sponsors

Ark UI is maintained by Christian Schröter, Segun Adebayo, and the Chakra UI team. Development is supported by our amazing sponsors:

Become a sponsor →

License

MIT © Chakra Systems Inc.


Made with ❤️ by the Ark UI Community

Extension points exported contracts — how you extend this code

SourceMap (Interface)
* SourceMap interface for transformation output
packages/svelte/src/lib/lucide-optimize.ts
PolymorphicProps (Interface)
(no doc)
packages/react/src/components/factory.ts
UseNumberInputProps (Interface)
(no doc)
packages/solid/src/components/number-input/use-number-input.ts
Assertion (Interface)
(no doc)
packages/vue/src/vitest-axe.d.ts
AvatarProps (Interface)
(no doc)
templates/next-js/src/components/avatar.tsx
AvatarProps (Interface)
(no doc)
templates/solid-start/src/components/avatar.tsx
PackageJson (Interface)
(no doc)
scripts/src/check-zag-versions.ts
ToolConfig (Interface)
(no doc)
integrations/mcp/src/lib/types.ts

Core symbols most depended-on inside this repo

forwardRef
called by 491
packages/vue/src/utils/use-forward-expose.ts
withContext
called by 297
website/src/lib/create-style-context.tsx
createSplitProps
called by 170
packages/solid/src/utils/create-split-props.ts
createSplitProps
called by 163
packages/react/src/utils/create-split-props.ts
createContext
called by 100
packages/react/src/utils/create-context.ts
createContext
called by 98
packages/solid/src/utils/create-context.ts
locale
called by 98
packages/solid/src/providers/locale/use-collator.ts
createContext
called by 98
packages/vue/src/utils/create-context.ts

Shape

Interface 3,301
Function 3,143
Method 15

Languages

TypeScript100%

Modules by API surface

website/src/lib/example-utils.ts14 symbols
packages/svelte/src/lib/components/field/use-field.svelte.ts14 symbols
packages/solid/src/components/field/use-field.ts13 symbols
packages/vue/src/components/field/use-field.ts12 symbols
website/src/components/example.tsx11 symbols
scripts/src/generate-type-docs.ts11 symbols
packages/solid/src/components/checkbox/use-checkbox-group.ts11 symbols
integrations/mcp/src/lib/types.ts11 symbols
website/src/app/(llms)/shared.ts10 symbols
packages/vue/src/components/checkbox/use-checkbox-group.ts10 symbols
packages/svelte/src/lib/lucide-optimize.ts10 symbols
packages/svelte/src/lib/components/checkbox/use-checkbox-group.svelte.ts10 symbols

Dependencies from manifests, versioned

@ark-ui/reactworkspace:* · 1×
@ark-ui/solidworkspace* · 1×
@ark-ui/svelteworkspace:* · 1×
@ark-ui/vueworkspace:* · 1×
@biomejs/biome2.4.4 · 1×
@effect/schema0.75.5 · 1×
@icons-pack/react-simple-icons13.11.2 · 1×
@internationalized/date3.11.0 · 1×
@modelcontextprotocol/sdk1.26.0 · 1×
@pandacss/dev1.8.2 · 1×

For agents

$ claude mcp add ark \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact