GitPedia

React beautiful color

react color picker you can actually customize

From ddoemonnยทUpdated June 14, 2026ยทView on GitHubยท

The most flexible and beautiful color picker for React. Built with compound components for maximum customization. The project is written primarily in TypeScript, distributed under the MIT License license, first published in 2025. Key topics include: alpha, color, color-picker, compound-components, hue.

Latest release: v2.0.0โ€” v2.0.0
August 31, 2025View Changelog โ†’

react-beautiful-color

Image

The most flexible and beautiful color picker for React. Built with compound components for maximum customization.

Why Choose This Over Others?

  • ๐Ÿงฉ Compound Components - Compose your own layout, unlike rigid alternatives
  • ๐ŸŽจ Beautiful Design - Clean, modern UI that fits any design system
  • โšก Smart Hook - useColorState preserves your input format while providing all color formats instantly
  • ๐Ÿ›ก๏ธ Type-Safe API - Full TypeScript support with comprehensive type definitions
  • ๐Ÿ‘๏ธ Eye Dropper Support - Built-in screen color picker (where browser supports it)
  • ๐ŸŽฏ Format Preservation - Maintains your original color format throughout interactions
  • ๐ŸŒˆ Universal Format Support - Hex, RGB/RGBA, HSL/HSLA, HSV/HSVA with alpha channel
  • ๐Ÿชถ Lightweight - Pure Tailwind CSS, no external dependencies
  • ๐Ÿ› ๏ธ Fully Customizable - Style and arrange components however you want
  • ๐Ÿ”ง Rich Utilities - Comprehensive color conversion and manipulation utilities

Installation

bash
bun add react-beautiful-color

๐Ÿ“– View Full Documentation โ†’

Quick Start

1. Add CSS to your layout file:

tsx
// app/layout.tsx (Next.js) or pages/_app.tsx or index.tsx import 'react-beautiful-color/dist/react-beautiful-color.css';

2. Use the component:

tsx
import { ColorPicker, useColorState } from 'react-beautiful-color'; import { Pipette } from 'lucide-react'; function App() { const [{ colorInput, colorState }, setColor] = useColorState({ type: 'hex', value: '#3b82f6' }); return ( <ColorPicker color={colorInput} onChange={setColor}> <ColorPicker.Saturation className="flex-1 mb-3" /> <div className="flex items-center gap-3 p-3 pt-0"> <ColorPicker.EyeDropper> <Pipette /> </ColorPicker.EyeDropper> <div className="flex-1 flex flex-col gap-3"> <ColorPicker.Hue className="h-4" /> <ColorPicker.Alpha className="h-4" /> </div> </div> </ColorPicker> ); }

Components

๐ŸŽจ ColorPicker

Compose your own layout with these sub-components:

  • ColorPicker.Saturation - Saturation and brightness selection area
  • ColorPicker.Hue - Hue selection slider
  • ColorPicker.Alpha - Alpha/transparency slider
  • ColorPicker.EyeDropper - Eye dropper tool (browser-dependent)

๐Ÿ“– Learn more about ColorPicker โ†’

โšก useColorState Hook

Intelligent state management with format preservation:

tsx
const [{ colorInput, colorState }, setColor] = useColorState({ type: 'hsva', h: 334, s: 100, v: 100, a: 0.5 }); // colorInput preserves your format - always HSVA! console.log(colorInput); // { type: 'hsva', h: 334, s: 100, v: 100, a: 0.5 } // colorState provides ALL formats instantly console.log(colorState.hex); // "#ff6b9d" console.log(colorState.rgb); // { r: 255, g: 107, b: 157 } console.log(colorState.hsl); // { h: 334, s: 100, l: 71 } console.log(colorState.alpha); // 0.5

๐Ÿ“– Learn more about useColorState โ†’

Utilities

Powerful color conversion and manipulation utilities:

tsx
import { hexToRgb, rgbToHex, hexToHsl, hslToHex } from 'react-beautiful-color'; // Color conversions const rgb = hexToRgb('#ff6b9d'); // { r: 255, g: 107, b: 157 } const hex = rgbToHex(255, 107, 157); // "#ff6b9d" const hsl = hexToHsl('#ff6b9d'); // { h: 334, s: 100, l: 71 }

๐Ÿ“– View all utility functions โ†’

Advanced Usage

Multiple Format Support

Set colors in any format with complete type safety:

tsx
setColor({ type: 'hex', value: '#ff0000' }); setColor({ type: 'rgb', r: 255, g: 0, b: 0 }); setColor({ type: 'hsl', h: 0, s: 100, l: 50 }); setColor({ type: 'rgba', r: 255, g: 0, b: 0, a: 0.5 }); setColor({ type: 'hsla', h: 0, s: 100, l: 50, a: 0.8 }); setColor({ type: 'hsva', h: 0, s: 100, v: 100, a: 0.9 });

Alternative without Hook

Use the Color class directly for more control:

tsx
import { useState } from 'react'; import { ColorPicker, Color } from 'react-beautiful-color'; function App() { const [color, setColor] = useState(new Color({ type: 'hex', value: '#3b82f6' })); // Access color properties const rgba = color.getRgba(); const hex = color.getHex(); const hsl = color.getHsl(); return ( <ColorPicker color={color} onChange={setColor}> <ColorPicker.Saturation className="flex-1 mb-3" /> <div className="flex items-center gap-3 p-3 pt-0"> <ColorPicker.EyeDropper /> <div className="flex-1 flex flex-col gap-3"> <ColorPicker.Hue className="h-4" /> <ColorPicker.Alpha className="h-4" /> </div> </div> </ColorPicker> ); }

Documentation

๐Ÿ“– View Full Documentation โ†’

Support

<a href="https://www.buymeacoffee.com/ozergklp" target="_blank"><img src="https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png" alt="Buy Me A Coffee" style="height: 41px !important;width: 174px !important;box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;-webkit-box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;" ></a>

Contributors

Showing top 4 contributors by commit count.

View all contributors on GitHub โ†’

This article is auto-generated from ddoemonn/react-beautiful-color via the GitHub API.Last fetched: 6/23/2026