Free colour palette generator
Find colours that work together. Build a palette. Make it your own.
Choose one to three core colors. The tool adds light and dark surfaces, generates 50–900 shade ramps, and exports the values for implementation. It does not verify contrast or assign a complete set of semantic UI roles; test the final pairings with the color contrast checker.
Built and maintained by Maaz. Updated .
Loading Color Palette Generator...
Color harmony rules
The hue rotations used by the generator's rule-based modes
Complementary
Keeps the base hue and adds a second hue 180° around the HSL color wheel. This creates hue separation, but it does not guarantee readable foreground/background contrast.
0° and 180°Analogous
Uses hues beside the base color. This generator places them 30° above and below the starting hue when three colors are selected.
Base hue, +30°, −30°Triadic
Places three hues at equal 120° intervals. The relationship controls hue spacing; saturation, lightness, role, and contrast still need review.
Base hue, +120°, +240°Monochromatic
Starts from one core hue. The tool then derives light and dark surfaces plus a 50–900 shade ramp from that base color.
One core color and its derived valuesSplit-complementary
Pairs the base hue with two hues on either side of its complement, at 150° and 210° from the starting point.
Base hue, +150°, +210°Turn a palette into interface colors
Checks to make before generated swatches become product tokens
Assign roles before names
Decide which values are backgrounds, surfaces, text, borders, actions, focus indicators, and status colors. “Primary” alone does not define safe usage.
Test every foreground/background pair
The generator does not check WCAG thresholds. Measure text, icon, border, and focus-indicator pairs with the Color Contrast Checker.
Define interaction states
Add explicit default, hover, focus, selected, pressed, and disabled values. A 50–900 ramp is not a finished state model.
Review both themes
A dark theme is not a simple inversion. Check the actual role assignments, contrast, elevation, and emphasis in both contexts.
Add a non-color cue
Hue cannot be the sole signal for an error, selection, status, or action. Pair color with text, shape, pattern, or another visible change.
Check the export against the UI
Use the generated code as a starting set of values. Confirm token names, shade order, component mappings, and rendered colors before release.
How to choose colors
A role-first path from a seed color to implementation
Choose a real seed
Start from an approved brand color, a value chosen with the manual controls, or colors extracted from a representative image. Record the source.
Choose the number of core colors
Use one, two, or three core colors based on the roles the product needs. More roles can be added later without forcing more saturated brand colors into the base palette.
Generate or adjust the hue relationship
Try a complementary, analogous, triadic, split-complementary, or single-hue starting point. Treat the result as an option to review, not an automatic design decision.
Map values to semantic roles
Assign backgrounds, surfaces, text, borders, actions, focus, and status roles. Keep role names stable even when light and dark themes use different values.
Test pairings and states
Measure contrast for the exact foreground and adjacent background in default, hover, focus, selected, pressed, error, and disabled states.
Export, integrate, and recheck
Move the values into CSS, Tailwind, or JSON, connect them to real components, and verify the rendered interface rather than the swatches alone.
Colour system references
How current platform and design-system guidance handles roles, themes, and contrast
Carbon Design System
Carbon separates role-based token names from the color values assigned by each theme, including dedicated interaction-state tokens.
Learn MoreApple Human Interface Guidelines
Apple recommends testing custom colors in light, dark, increased-contrast, varied-lighting, and device contexts instead of assuming one value works everywhere.
Learn MoreWCAG 2.2 contrast minimum
WCAG sets pair-specific contrast thresholds for text and images of text. A generated swatch does not pass or fail until it is used against another color.
Learn MoreWCAG 2.2 use of color
When color communicates meaning, WCAG requires another visual way to convey the same information. Contrast alone does not satisfy this criterion.
Learn MoreCommon mistakes to avoid
Where a generated set of swatches still needs design work
Treating swatch names as semantic roles
Primary, secondary, and tertiary describe the generated set, not every job in an interface. Map values to explicit text, surface, border, action, focus, and status roles.
Assuming generated means accessible
Hue relationships and shade ramps do not enforce WCAG. Test each foreground/background pair and give status or selection another visible cue beyond color.
Using one value across every theme
The same accent can work on one theme and fail on another. Assign and test a value for each theme instead of relying on inversion.
Shipping the export without integration review
Generated CSS, Tailwind, and JSON are starting structures. Check names, shade order, state mappings, contrast, and the rendered components before release.
Frequently asked questions

Need the palette to work as a system?
A usable color system has to survive real screens, states, and accessibility constraints. Share the product and where the current palette falls short.
Discuss the color system