Color Palette Generator — Harmonies, Tailwind Export & A11y Check | LazyTools

Free Color Palette Generator with Tailwind & A11y

Build harmonious palettes from any base color using complementary, analogous, triadic, split-complementary and tetradic rules. Get a perceptually-uniform 50-to-950 shade ramp for every color (Tailwind-style), a full WCAG contrast matrix for every pair, and one-click export as CSS variables, SCSS, tailwind.config.js, JSON tokens or Figma styles. Free, no login.

5 harmony rules Tailwind 50-950 ramps Full WCAG contrast matrix tailwind.config.js export Free, no login

Color Palette Generator Tool

Harmony
Tailwind-style ramps (50 → 950) Click any swatch to copy its HEX
WCAG contrast matrix — every pair
AA pass (≥4.5) large text only (3-4.5) fail (<3)
Export

        
      
⭐ User Ratings

Rate this tool

4.9
Based on 42,180 ratings
5
37,962
4
2,953
3
844
2
211
1
210
Was this palette generator helpful?
✅ Thank you for your rating!
✦ Features

Why this palette generator beats Coolors and Paletton on the things that matter

Coolors and Paletton are the household names in palette generation, and they're great at the basics — pick five colors, hit space-bar to re-roll, lock the ones you like. The LazyTools generator does all of that, plus three things competitors either paywall or don't offer at all: perceptually-uniform Tailwind shade ramps for every color, a full WCAG contrast matrix for every pair, and a one-click tailwind.config.js export. Every option below is free with no signup.

5 harmony rules
Complementary, analogous, triadic, split-complementary and tetradic — the five harmonies that cover virtually every design situation. Switch between them with one tap. Each harmony is computed by rotating the base hue by the rule's specific angles in HSL space.
Tailwind shade ramps for every color
Every color in the palette automatically gets a full 50-to-950 shade ramp (50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950) generated by mixing toward white and black in OKLab space — perceptually uniform, smoother than naive HSL lightness, matching the feel of Tailwind's own palette.
Full WCAG contrast matrix
Not just contrast against white and black — the full N×N matrix of contrast ratios between every pair of colors in your palette, with AA / large-text / fail badges. Catch unsafe foreground-background combinations before they ship. The unique feature competitors don't have.
tailwind.config.js export
One click and you have a ready-to-paste theme.extend.colors block with each palette color named and its full 50-950 ramp. Drop it in your config and you can use bg-brand-500, text-accent-1-700, ring-accent-2-300 immediately. The fastest path from base color to working design system.
Lock individual colors
Click the lock icon on any swatch to preserve it when re-rolling. Lock your brand color, then explore harmonious accents around it. Lock multiple colors to fine-tune palettes incrementally — the same workflow as Coolors but with the harmony rule applied to the unlocked positions.
Smart random inspiration
Random RGB looks bad — three independent random channels usually produce muddy colors. Smart Random picks a random hue with constrained saturation (55-90%) and lightness (45-65%), then applies your current harmony rule to produce vibrant, balanced palettes every time.
5 export formats
CSS variables (with the full ramp as --brand-50 to --brand-950), SCSS variables, tailwind.config.js color extension, JSON design tokens (W3C Design Tokens spec compatible), and a Figma-ready style list. Drop into any project, any framework, any design tool.
Share palette via URL
Encode the entire palette and harmony rule into the URL with one click. Send the link to teammates, paste it into project documentation, or bookmark palettes you want to come back to. Nothing is stored on any server — the palette is in the URL itself.
Auto-saves your palette
The current palette saves to your browser's local storage every time you make a change, so closing the tab and coming back later restores the same palette. The data stays on your device only — nothing is uploaded, no account required.
📖 How to use

How to generate a color palette

Pick a base color
Type a HEX code into the base color input (with or without the # prefix), or click the visual color picker to use your browser's native color wheel. If you arrived here from the Color Lab with a color URL parameter, the base color is already set for you. The base color anchors the entire palette — every other color is computed from it using the current harmony rule.
Choose a harmony rule
Click one of the five harmony tabs: Analogous (calm, gradient-like), Complementary (high-contrast accent), Triadic (vibrant and balanced), Split-complementary (high contrast but easier on the eye), or Tetradic (four-color rectangle, the most variety). The five swatches in the palette strip update instantly as you switch.
Lock the colors you like, re-roll the rest
Click the lock icon on any swatch to preserve it. Click the Random button to re-roll the unlocked positions while keeping the locked ones in place. Repeat until the palette feels right. This is the fastest way to find a palette you love when you have one or two colors that are already fixed (like a brand color).
Check the contrast matrix
Scroll down to the WCAG contrast matrix to see the contrast ratio between every pair of colors at a glance. Green cells pass AA for normal text (≥4.5:1), yellow cells pass for large text only, and red cells fail entirely. This tells you which color combinations are safe to use together as foreground/background and which are not.
Export to your framework
Pick your export format from the tabs below the matrix: CSS variables for vanilla CSS or any framework, SCSS variables for Sass projects, tailwind.config.js for Tailwind CSS (the snippet pastes directly into theme.extend.colors), JSON tokens for design system tooling, or a Figma list for pasting into your design file. Click Copy and you're done.
⚖️ How we compare

LazyTools vs Coolors, Paletton, Adobe Color & mycolor.space

We benchmarked the LazyTools palette generator against the four most popular free palette generators online — coolors.co, paletton.com, color.adobe.com and mycolor.space. Here's the feature breakdown.

Feature LazyTools Coolors Paletton Adobe Color mycolor.space
5 harmony rulesbasic
Lock + re-roll workflow
Tailwind 50-950 shade rampspaid
Perceptual (OKLab) ramp mixing
Full WCAG contrast matrix (every pair)paidsingle pair
tailwind.config.js exportpaid
CSS variables export
JSON design tokenspaid
Share palette by URLlogin
Auto-save to browserloginlogin
No login required
No premium / paid tier

Where LazyTools wins: the only free palette generator with perceptually-uniform OKLab shade ramps for every color, the only one with a full pairwise WCAG contrast matrix on the free tier, and the only one with native tailwind.config.js export without a paywall. Where competitors win: Coolors has the largest community palette library and the smoothest mobile keyboard shortcuts, Paletton has the most elaborate color-wheel UI for hue rotation, and Adobe Color is unmatched for extracting palettes from photographs (we don't yet support image upload). For developers building a Tailwind-based design system from scratch, LazyTools is the fastest path from base color to production-ready code.

🎨 Quick reference

The 5 color harmonies — when to use which

Each harmony rule produces a different "feel" because each one rotates the base hue by different angles. Here's a one-line summary of when to reach for each.

Harmony Hue rotation Feel Best for
Complementary+180°High contrast, dramaticCTA buttons, sports brands, alert states
Analogous±15° to ±60°Calm, gradient-like, harmoniousNature themes, hero gradients, photo overlays
Triadic+120°, +240°Balanced and vibrantPlayful brands, illustrations, kids' products
Split-complementary+150°, +210°Almost as much contrast as complementary, easier on the eyeMost general-purpose UI design
Tetradic (square)+90°, +180°, +270°Maximum variety, hardest to balanceEditorial design, multi-section dashboards, festivals
📖 Complete guide

From Base Color to Production-Ready Design System

The hardest part of starting a design system is the same problem every time: you have one color you love (a brand color, a hero illustration accent, the dominant tone in a logo) and you need to turn it into a complete palette that supports every UI state your product will ever have. Body text. Subdued labels. Hover states. Disabled states. Error states. Success states. Backgrounds at five different elevations. The answer is not "pick a few colors that look nice next to it" — that's how you end up with a design system that looks great in mockups and falls apart the moment a real engineer tries to use it. The answer is a structured palette built from harmony rules, paired with perceptually-uniform shade ramps and verified contrast across every combination. This guide walks through the process and explains why each step matters.

Step 1 — Pick the right base color

Almost everything in this guide depends on the base color, so it's worth pausing to make sure you've picked a good one. Three properties matter. First, the base color should be in the middle of its lightness range — not too pale, not too dark — so that you have headroom to generate both lighter tints (for backgrounds) and darker shades (for text on light backgrounds) without running out of contrast at either end. A good rule of thumb: if your base color converts to HSL with a lightness between about 45% and 65%, you're in the safe zone. Second, the base color should be moderately saturated. Fully-saturated colors (100% S) tend to look harsh on screens and produce shade ramps that go muddy in the middle weights. A saturation between 55% and 90% gives you vibrant but workable colors. Third, the base color should be distinctive but not novel — recognisable enough to anchor a brand, but not so obscure that the supporting harmonies look strange. The LazyTools generator's "Random" mode follows exactly these constraints.

Step 2 — Choose a harmony that matches your goal

The five harmony rules each correspond to a different design situation, and choosing the right one matters more than people think. Complementary (base + 180°) produces maximum contrast and is the right choice when you have one dominant brand color and need a single accent for call-to-action buttons or alerts. The downside is that two complementary colors competing for attention often feel jarring — use them when one is clearly dominant in size, not when they're balanced. Analogous (base ± 30° on either side) produces a calm, gradient-like palette that feels harmonious because the colors share neighbouring wavelengths. Analogous palettes are the right choice for hero gradients, nature-themed brands, photo backgrounds and any design where you want all the colors to "belong together" rather than clash. Triadic (three colors 120° apart) is a balanced compromise — vibrant and varied, but still mathematically harmonious because the three colors are equidistant. Triadic palettes work well for playful brands, illustrations, children's products and anywhere you need three equally-weighted colors.

Split-complementary (base + the two colors 150° and 210° from base) is the secret weapon of professional designers. It gives you almost as much contrast as a true complementary palette but the contrast is split across two colors instead of one, which is much easier on the eye. Most general-purpose UI design — dashboards, marketing sites, productivity tools — is better served by split-complementary than by either pure complementary or triadic. Tetradic (four colors forming a rectangle on the wheel: base, +90°, +180°, +270°) gives you the most variety but is the hardest to balance because you have four competing hues. Tetradic palettes work for editorial design, multi-section dashboards where each section needs its own color, festival branding and anywhere you need maximum variety — but they require more design taste to use well than the other harmonies.

Step 3 — Generate shade ramps the perceptually-correct way

Once you have your harmony, every color in the palette needs a complete shade ramp to be useful in real UI work. A shade ramp is a series of progressively lighter and darker versions of the same base, conventionally numbered from 50 (lightest) to 950 (darkest) following the convention Tailwind CSS popularised. The "500" weight is usually the original color, "50" through "400" are progressively lighter tints (toward white), and "600" through "950" are progressively darker shades (toward black).

Here's the part most palette generators get wrong: the way you mix toward white and black matters enormously. The naive approach is to lerp the HSL lightness — change L from the original to 100% for tints and to 0% for shades — but HSL lightness is not perceptually uniform. A linear progression in HSL lightness produces a shade ramp where the dark end goes muddy and the light end goes washed out unevenly across hues, with abrupt jumps in the middle. The Tailwind CSS team manually hand-tuned their default palette to avoid this exact problem, which is why the official Tailwind colors feel smoother than any auto-generated palette you'll see from typical free generators.

The LazyTools generator solves this by mixing in OKLab space, the perceptually-uniform color space designed by Björn Ottosson in 2020. OKLab's lightness axis (L) is genuinely perceptual — equal numerical changes in L correspond to equal perceived changes in brightness, regardless of hue. So when the generator mixes your base color toward white in OKLab space and converts back to RGB, the resulting tint progression looks smooth and even across every hue. The same applies to dark shades. The result is a shade ramp that feels much closer to Tailwind's hand-tuned defaults than a naive HSL lerp ever could.

Step 4 — Verify contrast across every pair

Now comes the part most palette generators skip entirely: actually checking that the colors in your palette can be used together. The Web Content Accessibility Guidelines (WCAG) define minimum contrast ratios for text against its background — 4.5:1 for normal body text at AA, 3:1 for large text or UI components, 7:1 for AAA normal text. These ratios are computed using a specific formula based on relative luminance. The math is straightforward, and most palette generators show you the contrast of each color against pure white and pure black. But that's not enough.

In a real product, your palette colors don't just sit on white or black backgrounds — they sit on each other. Your accent color sits on your background color. Your secondary color sits on your accent color. Your text color sits on your tertiary color. Every pair of palette colors is a potential foreground/background combination, and you need to know the contrast for every pair, not just for each color individually. With a five-color palette there are 5 × 5 = 25 pairs (counting both directions and self-pairs), or 10 unique unordered pairs, and the only sensible way to display them is a contrast matrix — a grid where row R and column C show the contrast ratio between color R and color C. The diagonal is always 1:1 (a color has no contrast with itself), and the matrix is symmetric (R-on-C and C-on-R produce the same ratio). The LazyTools generator shows the full matrix with green cells for AA pass, yellow for large-text-only, and red for fail. This is the unique feature competitors don't have on their free tiers, and it's the difference between a palette that looks good in mockups and a palette that survives an accessibility audit.

Step 5 — Export to your framework

Now you have a palette with five harmonious colors, each with a full 50-to-950 ramp, with verified contrast across every pair. The last step is getting it into your codebase, and this is where free generators have historically forced you to do tedious copy-paste work — copy each hex, paste it into your config, name it manually, repeat 55 times for a five-color palette with 11 shades each. The LazyTools generator instead exports five formats with a single click.

The most useful for modern web work is the tailwind.config.js snippet, which produces a ready-to-paste theme.extend.colors block with each palette color automatically named (brand, accent-1, accent-2 by default — you can rename them) and its full ramp expanded. Drop the snippet into your Tailwind config and you can immediately use classes like bg-brand-500, text-accent-1-700, ring-accent-2-300 throughout your project. For non-Tailwind projects, the CSS variables export gives you a :root block with every shade as a custom property (--brand-50 through --brand-950 for each color), the SCSS export gives you the same thing as Sass variables, the JSON tokens export follows the W3C Design Tokens Community Group spec for use with style dictionary and design system tooling, and the Figma list gives you a flat list of named colors ready to paste into Figma's color styles panel.

Why the workflow matters more than the tool

The five-step workflow above — pick base, choose harmony, generate ramps, verify contrast, export to framework — is the same regardless of which palette generator you use. The thing that varies between tools is how much manual work each step requires. With most free generators, "generate ramps" means manually adjusting lightness in five separate places, "verify contrast" means copying colors into a separate accessibility checker tool, and "export to framework" means typing out class names by hand. The LazyTools generator collapses all five steps into a single page with no copy-paste between tools, which means you can iterate on a palette in seconds instead of minutes. The compounding effect over a real project — where you might tweak the palette twenty times before settling on a final version — is the difference between palette generation taking a morning or taking five minutes.

From a single color to a full palette — the Color Lab loop

If your starting point is a single color you want to inspect in depth before turning it into a palette, use the LazyTools Color Lab first. The Color Lab converts any color across HEX, RGB, HSL, HSV, CMYK, CIE LAB and OKLCH formats, looks up its CSS color name, finds the nearest Tailwind palette color, checks its WCAG contrast against white and black, and copies it in 12+ developer formats. Once you've decided on a base color, the Color Lab's "Build a palette" button takes you straight to this generator with the color pre-loaded — the two tools share the same color math so the handoff is seamless.

Frequently asked questions

A palette generator takes one base color (which you pick from a HEX input or a visual picker) and applies a mathematical harmony rule to produce additional colors that look balanced together. The most common harmonies are complementary (the color directly opposite on the color wheel), analogous (colors next to the base on the wheel), triadic (three colors evenly spaced 120 degrees apart), split-complementary (the base plus the two colors adjacent to its complement) and tetradic (four colors forming a rectangle on the wheel). The math is straightforward — the generator converts your base to HSL, rotates the hue by the angles required for each rule, then converts back. The LazyTools palette generator does this for you instantly and lets you switch between harmony rules with one click.
There are five widely-used color harmony rules. Complementary uses the base color and its direct opposite on the wheel (180 degrees apart) — high contrast, dramatic, common for call-to-action buttons against a brand background. Analogous uses three to five colors next to each other on the wheel (within 30 to 60 degrees) — calm, harmonious, common for nature themes and gradients. Triadic uses three colors spaced 120 degrees apart — balanced and vibrant, common for playful brands and illustrations. Split-complementary uses the base plus the two colors adjacent to its complement — almost as much contrast as complementary but easier on the eye. Tetradic (also called rectangular or square) uses four colors forming a rectangle on the wheel — the most variety, but the hardest to balance because you have four competing hues. The LazyTools generator supports all five and lets you switch between them with a tap.
A shade and tint ramp is a series of progressively darker (shade) and lighter (tint) versions of the same base color, used to build a complete color scale you can use throughout a design system. The Tailwind CSS framework popularised the convention of weighting these from 50 (lightest tint) to 950 (darkest shade) with steps at 100, 200, 300, 400, 500, 600, 700, 800 and 900 in between. The base color usually sits around 500 or 600 in the ramp. The LazyTools generator produces a full Tailwind-style ramp for every color in your palette using perceptual color mixing in OKLab space rather than naive HSL lightness, which gives a smoother visual progression that matches how Tailwind's own palette feels. Click any swatch in the ramp to copy its HEX value, or export the whole ramp as a tailwind.config.js snippet.
The contrast matrix shows the WCAG contrast ratio between every pair of colors in your palette in a single grid. Reading down a row shows you the contrast between that color and each of the others; the diagonal is always 1:1 because a color has no contrast with itself. Each cell is shaded green when the pair passes WCAG AA (4.5:1 for normal text or 3:1 for large text), yellow if it only passes for large text, and red if it fails completely. This is the unique feature that sets the LazyTools generator apart — most free palette generators show the contrast against white and black for each color individually, but no other free tool shows the full pairwise matrix. It is invaluable when designing a multi-color UI because it instantly tells you which combinations are safe to use as foreground/background pairs and which are not.
Yes — click the Tailwind tab in the export panel and the generator produces a ready-to-paste tailwind.config.js color extension snippet, with each color in your palette named (brand, accent-1, accent-2 by default, but you can rename them) and its full 50-to-950 ramp included. Drop the snippet into the theme.extend.colors block of your Tailwind config and you can immediately use classes like bg-brand-500, text-accent-1-700, ring-accent-2-300 throughout your project. This is the killer feature for developers building a design system from scratch — go from a base color to a working Tailwind palette in under a minute, with no manual hex-to-class mapping.
Yes. Click the lock icon on any color in the palette and that color will be preserved when you click Generate or Random. The other colors will re-roll around it using the current harmony rule. This is the standard Coolors.co workflow — find one color you love (your brand color, your hero illustration accent, the dominant color from a photo) and let the generator find harmonious supporting colors. You can lock multiple colors simultaneously to fine-tune palettes incrementally.
Random RGB looks bad — three independent random channel values usually produce muddy, low-saturation colors that do not work well together. The LazyTools generator instead picks a random hue (0 to 360 degrees), assigns it a saturation in the 55 to 90 percent range and a lightness in the 45 to 65 percent range so the result is vibrant and visible, then applies the current harmony rule to produce the rest of the palette. The result feels closer to a curated palette than a true random one. You can also restrict the random hue range to warm, cool, pastel or earthy by using the inspiration mode buttons.
Yes. The generator automatically saves your current palette to your browser's local storage every time you make a change, so closing the tab and coming back later will restore the same palette. The data stays on your device only — nothing is uploaded. You can also click Share to encode the palette into the URL and copy a link, which is useful for sending palettes to teammates or referencing them from project documentation. Clearing your browser's site data or clicking the Reset button will restore the default starting palette.
🔗 Related tools

More free color & design tools