Lavender, lilac, mauve, periwinkle, thistle, wisteria. Run your eye down any shades-of-purple list and the pale end goes on for a while. That is not true of the other families. The reds top out at pink and stop, the greens have sage and mint and little else. Purple has a whole wing of the vocabulary devoted to colors that are barely there.
I collected 86 named purples, took every purple, violet and magenta keyword in the CSS named-color set plus the shades that recur across mainstream lists with a settled hex value, and ran all 3,655 pairs through CIEDE2000, the same measurement I ran on the reds, the blues and the greens. Only nine pairs fall below the threshold where two colors stop being distinguishable, so 99.75 percent of the list is genuinely different colors. The padding accusation does not stick.
The finding worth the article is in the light end. Fourteen of the 86 names sit at L* 70 or above. Their average chroma is 23.2. The names in the middle of the lightness range average 64.9. Not one named purple above L* 70 reaches chroma 60, and across the 34 names brighter than L* 50 the correlation between lightness and chroma is minus 0.68. Every step up in brightness is bought with saturation.
That is not a quirk of which names people happened to coin. It is the shape of the available color. There is no bright, vivid purple in sRGB for anyone to have named.
Purple is the one family with no wavelength
Take the fully saturated boundary of sRGB and walk it around the hue circle, checking what the green primary is doing at each step. From hue 240 all the way to 360, a 120 degree arc, the green primary is at exactly zero. Every color out there is made from red and blue alone. Hue 270 is R128 G0 B255. Hue 300 is R255 G0 B255. Hue 340 is R255 G0 B85.
The 86 named purples span hue 240 to 340, from lavender at the blue edge to pale violet-red at the crimson edge. The vocabulary sits almost exactly inside the arc the green primary never touches, and that is the whole story about purple compressed into one observation.
Red at 610 nanometres is a wavelength. Green at 530 is a wavelength. Blue at 470 is a wavelength. Purple is what you see when the long-wave cones and the short-wave cones both fire and the middle ones stay quiet, and no single wavelength does that, because light that stimulates both ends of the visible range has to pass through the middle on the way. In the CIE chromaticity diagram the spectrum traces a horseshoe and the two loose ends get joined by a straight line, the line of purples. It is drawn in rather than measured. Everything on it is a mixture by necessity.
This is the same argument that makes black an awkward case, run from the other direction. Black is absence. Purple is a sum that no source can produce on its own.
Why that costs purple its brightness
A color built from two primaries can only ever be as bright as those two primaries put together, and in sRGB red and blue are the dim ones. The luminance weights are 0.2126 for red, 0.7152 for green and 0.0722 for blue. Purple gets to draw on 0.2848 of the available light. Green alone gets two and a half times that.
Measured rather than argued, taking the brightest fully saturated color at each hue and averaging over conventional family bands:
- Yellow, hues 45 to 75: L* 91.8.
- Green, hues 75 to 165: L* 88.9.
- Cyan, hues 165 to 195: L* 85.9.
- Orange, hues 15 to 45: L* 67.7.
- Magenta, hues 285 to 345: L* 55.9.
- Red, hues 345 to 15: L* 54.0.
- Purple, hues 255 to 315: L* 49.0.
- Blue, hues 195 to 255: L* 44.7.
Purple is second from bottom, and the low point of the whole wheel sits at hue 255 with L* 34.6, deep in the violets. Pure green at hue 120 measures L* 87.7. The brightest purple you can put on a screen is roughly as light as a mid gray, and the brightest green is roughly as light as paper.
The lavender ladder
Once you accept the ceiling, the shape of the vocabulary becomes predictable. If you want a purple lighter than L* 50 you have to leave the saturated boundary and move inward toward white, and the further you go the less purple is left. Sorting the 17 named purples at L* 65 and above by lightness produces a clean staircase down in chroma:
- Lavender blush, #fff0f5. L* 96.1, C* 5.9. A white with a rumour of pink in it.
- Pale purple, #fae6fa. L* 93.4, C* 12.5.
- Lavender, #e6e6fa. L* 91.8, C* 10.3. The CSS keyword, and less saturated than the flower it is named after by a wide margin.
- Pale lavender, #dcd0ff. L* 85.8, C* 25.1.
- Periwinkle, #ccccff. L* 83.6, C* 27.0. Hue 240 exactly, which puts it on the boundary where purple hands over to blue.
- Languid lavender, #d6cadd. L* 82.8, C* 11.0.
- Thistle, #d8bfd8. L* 80.1, C* 16.1.
- Lavender gray, #c4c3d0. L* 79.2, C* 7.0. Honest about it, at least.
- Mauve, #e0b0ff. L* 78.5, C* 45.2. The most saturated thing in the top ten and still barely two thirds of a mid-range purple.
- Pink lavender, #d8b2d1. L* 76.7, C* 21.6.
- Plum, #dda0dd. L* 73.4, C* 39.3. The CSS keyword, which is nothing like the fruit.
- Bright ube, #d19fe8. L* 72.3, C* 43.2.
- Wisteria, #c9a0dc. L* 71.4, C* 35.8.
- Lilac, #c8a2c8. L* 71.1, C* 24.9.
- Violet, #ee82ee. L* 69.7, C* 67.3. The CSS keyword, and the first name on the way down with real chroma in it.
- Bright lavender, #bf94e4. L* 67.9, C* 46.4.
- Heliotrope, #df73ff. L* 65.9, C* 81.6. The brightest genuinely vivid purple with a settled name.
Heliotrope at L* 65.9 is about as far up as purple goes without folding. For comparison, green yellow at #adff2f measures L* 92.0 with chroma 97.2, which is thirty points of lightness higher at broadly the same saturation. There is no purple anywhere in sRGB with that combination, and there never will be, because the primaries do not add up to it.
The gamut confirms the ladder from the other side. Asking how much chroma is reachable at a fixed lightness, purple starts strong and collapses:
- At L* 50, the purple and violet sector reaches C* 119, the highest of any hue. Green manages 77 and yellow only 58.
- At L* 70, purple is down to C* 86 and green has overtaken it at 100.
- At L* 80, purple is at C* 55 against green at 112 and yellow at 83.
Purple is the most vivid family in the basement and one of the palest in the attic. It loses more than half its available chroma over thirty points of lightness, while green gains nearly half again. That inversion is the mechanism behind the whole lavender wing of the dictionary.
The different shades of purple with names and hex codes
The full list, ordered by hue from the blue edge to the red edge, with the CIELAB lightness and chroma alongside. Hue is HSV, which is what a color picker shows you.
Blue-leaning violets, hue 240 to 270
- Lavender, #e6e6fa. Hue 240, L* 91.8, C* 10.3.
- Periwinkle, #ccccff. Hue 240, L* 83.6, C* 27.0.
- Lavender gray, #c4c3d0. Hue 245, L* 79.2, C* 7.0.
- Iris, #5a4fcf. Hue 245, L* 41.6, C* 76.4.
- Slate blue, #6a5acd. Hue 248, L* 45.3, C* 68.1. A CSS keyword filed under blue that measures as a violet.
- Dark slate blue, #483d8b. Hue 248, L* 30.8, C* 49.5.
- Medium slate blue, #7b68ee. Hue 249, L* 52.2, C* 77.2.
- Pale lavender, #dcd0ff. Hue 255, L* 85.8, C* 25.1.
- Han purple, #5218fa. Hue 255, L* 36.6, C* 123.6. A barium copper silicate the Chinese were synthesising two thousand years before anyone worked out what it was.
- Ultra violet, #645394. Hue 256, L* 39.6, C* 40.1.
- Persian indigo, #32127a. Hue 258, L* 18.0, C* 66.8.
- Medium purple, #9370db. Hue 260, L* 55.0, C* 62.2.
- Cyber grape, #58427c. Hue 263, L* 32.8, C* 37.3.
- Northwestern purple, #4e2a84. Hue 264, L* 26.6, C* 57.8.
- Tekhelet, #4c2882. Hue 264, L* 25.8, C* 58.0. The dye of the Hebrew Bible, and the closest pair in the entire list to Northwestern purple at ΔE00 0.60.
- KSU purple, #512888. Hue 266, L* 26.9, C* 61.2.
- Royal purple, #7851a9. Hue 267, L* 42.4, C* 54.1.
- Regalia, #522d80. Hue 267, L* 27.4, C* 53.7.
- Purple mountain majesty, #9678b6. Hue 269, L* 55.4, C* 37.2.
The core purples, hue 270 to 292
- Violet, color wheel, #7f00ff. Hue 270, L* 40.8, C* 125.1. The highest chroma of all 86, and it sits at a lightness below mid gray.
- Amethyst, #9966cc. Hue 270, L* 52.5, C* 60.7.
- Rebecca purple, #663399. Hue 270, L* 32.9, C* 63.7. Added to CSS in 2014 as a memorial, and the only named color in the spec that got there that way.
- Russian violet, #32174d. Hue 270, L* 14.6, C* 38.2.
- Purple heart, #69359c. Hue 270, L* 33.9, C* 64.2.
- Blue-violet, color wheel, #4d1a7f. Hue 270, L* 23.2, C* 63.9.
- Dark lavender, #734f96. Hue 270, L* 40.3, C* 44.7.
- Blue violet, #8a2be2. Hue 271, L* 42.2, C* 102.3. The CSS keyword, 38 points of chroma away from the color-wheel blue-violet that shares its name.
- Grape, #6f2da8. Hue 272, L* 34.2, C* 74.6.
- Bright lavender, #bf94e4. Hue 272, L* 67.9, C* 46.4.
- Indigo, #4b0082. Hue 275, L* 20.5, C* 74.3. Newton put it in the spectrum between blue and violet. Almost nobody has ever been able to point at it.
- Lavender, floral, #b57edc. Hue 275, L* 61.6, C* 55.5.
- Mauve, #e0b0ff. Hue 276, L* 78.5, C* 45.2. Named for the first synthetic dye, which Perkin made by accident in 1856 while trying to synthesise quinine.
- Purple, X11, #a020f0. Hue 277, L* 45.4, C* 110.4.
- Languid lavender, #d6cadd. Hue 278, L* 82.8, C* 11.0.
- French violet, #8806ce. Hue 279, L* 37.5, C* 102.0.
- Deep lilac, #9955bb. Hue 280, L* 48.1, C* 62.5.
- Dark orchid, #9932cc. Hue 280, L* 43.4, C* 88.6.
- Wisteria, #c9a0dc. Hue 281, L* 71.4, C* 35.8.
- Bright ube, #d19fe8. Hue 281, L* 72.3, C* 43.2.
- Dark violet, #9400d3. Hue 282, L* 39.6, C* 103.8.
- Rich lilac, #b666d2. Hue 284, L* 56.2, C* 65.5.
- Electric purple, #bf00ff. Hue 285, L* 49.9, C* 118.8.
- Violet, RYB, #8601af. Hue 286, L* 34.4, C* 89.1.
- Heliotrope, #df73ff. Hue 286, L* 65.9, C* 81.6.
- Purpureus, #9a4eae. Hue 287, L* 46.1, C* 60.4.
- African violet, #b284be. Hue 288, L* 61.4, C* 36.4.
- Medium orchid, #ba55d3. Hue 288, L* 53.6, C* 75.7.
- English violet, #563c5c. Hue 289, L* 29.4, C* 23.0.
- Pomp and power, #86608e. Hue 290, L* 46.2, C* 30.7.
- Dark purple, #301934. Hue 291, L* 13.1, C* 21.4. The darkest of the 86, and close enough to black that the hue is a formality.
- Phlox, #df00ff. Hue 292, L* 55.0, C* 116.7.
Where purple becomes magenta, hue 300 to 315
- Pale purple, #fae6fa. Hue 300, L* 93.4, C* 12.5.
- Thistle, #d8bfd8. Hue 300, L* 80.1, C* 16.1.
- Plum, #dda0dd. Hue 300, L* 73.4, C* 39.3.
- Violet, web, #ee82ee. Hue 300, L* 69.7, C* 67.3.
- Lilac, #c8a2c8. Hue 300, L* 71.1, C* 24.9.
- Purple, web, #800080. Hue 300, L* 29.8, C* 69.3. The CSS keyword everyone reaches for, and it is a magenta at half brightness rather than a purple.
- Dark magenta, #8b008b. Hue 300, L* 32.6, C* 73.6.
- Fuchsia and magenta, #ff00ff. Hue 300, L* 60.3, C* 115.5. Two CSS keywords, one hex value.
- Steel pink, #cc33cc. Hue 300, L* 51.3, C* 88.2.
- Orchid, #da70d6. Hue 302, L* 62.8, C* 65.1.
- Old lavender, #796878. Hue 304, L* 46.1, C* 11.7.
- Plum, traditional, #8e4585. Hue 307, L* 40.7, C* 45.7. This one does look like a plum, unlike the CSS keyword.
- Palatinate purple, #682860. Hue 308, L* 27.6, C* 41.4.
- Byzantine, #bd33a4. Hue 311, L* 46.8, C* 72.3.
- Byzantium, #702963. Hue 311, L* 29.2, C* 43.3.
- Pink lavender, #d8b2d1. Hue 311, L* 76.7, C* 21.6.
- Purple taupe, #50404d. Hue 311, L* 29.2, C* 10.9.
- Purple pizzazz, #fe4eda. Hue 312, L* 63.0, C* 87.1.
- Dark byzantium, #5d3954. Hue 315, L* 29.1, C* 22.8.
Red-leaning purples, hue 319 to 340
- Opera mauve, #b784a7. Hue 319, L* 61.1, C* 27.4.
- Fandango, #b53389. Hue 320, L* 44.2, C* 62.6.
- Red-violet, #c71585. Hue 322, L* 44.8, C* 72.6. Also shipped as the CSS keyword medium violet red.
- Mountbatten pink, #997a8d. Hue 323, L* 54.7, C* 16.3. Painted on Royal Navy ships in 1940 on the theory that it would disappear at dusk. It did not.
- Sugar plum, #914e75. Hue 325, L* 42.4, C* 34.8.
- Tyrian purple, #66023c. Hue 325, L* 20.8, C* 44.3. Extracted from murex sea snails at something like ten thousand animals per gram, which is why it meant emperors rather than a colour choice.
- Magenta haze, #9f4576. Hue 327, L* 42.7, C* 44.1.
- Boysenberry, #873260. Hue 328, L* 34.6, C* 42.2.
- Mulberry, #c54b8c. Hue 328, L* 50.5, C* 56.1.
- Pansy purple, #78184a. Hue 329, L* 27.1, C* 44.9.
- Eggplant, #614051. Hue 329, L* 31.4, C* 17.8.
- Telemagenta, #cf3476. Hue 334, L* 48.3, C* 64.1.
- Wine dregs, #673147. Hue 336, L* 28.2, C* 27.1.
- Quinacridone magenta, #8e3a59. Hue 338, L* 36.9, C* 38.9.
- Lavender blush, #fff0f5. Hue 340, L* 96.1, C* 5.9.
- Pale violet-red, #db7093. Hue 340, L* 60.6, C* 45.5.
Violet against purple, settled by measurement
The distinction gets argued about more than it deserves, mostly because both sides are right about different things.
In physics, violet is a wavelength, roughly 380 to 450 nanometres at the short end of the spectrum, and purple is not a wavelength at all. On that reading they are categorically different and the argument is over.
On a screen the reading falls apart, because sRGB cannot show you spectral violet. Its blue primary sits at 465 nanometres and its gamut simply does not extend to the short-wave corner of the chromaticity diagram. Every violet you have seen on a monitor is a red and blue mixture, which makes it, by the physics definition, a purple.
I went in expecting the names to at least lean in different directions, with violet sitting bluer and purple sitting redder. They do not. Taking the 13 names containing violet and the 18 containing purple:
- Mean hue: 286.4 for violet, 286.6 for purple. Two tenths of a degree apart, against a spread of 22 degrees inside each group.
- Mean lightness: L* 41.4 against L* 39.4, with standard deviations of 15 and 18.
- Mean chroma: C* 70.0 against C* 60.3, with standard deviations of 31 and 32.
On all three axes the disagreement inside each word is several times larger than the gap between them. The words are not tracking a distinction. Violet, color wheel at #7f00ff and violet, web at #ee82ee share a name across 30 degrees of hue and 58 points of chroma. CSS blue violet at #8a2be2 and color-wheel blue-violet at #4d1a7f share a name across 38 points of chroma. Purple runs from Han purple at chroma 124 to purple taupe at chroma 11.
So the practical answer is blunter than the usual one. The physics distinction is real and does not survive contact with a screen, and the naming distinction was never there to begin with. Use the hex code. If you are writing for other people, expect violet and purple to be read as interchangeable, because in the accumulated evidence of what people have actually named things, they are.
What separates one purple name from the next
For each of the 86 names I found its nearest neighbour by CIEDE2000 and split the difference into lightness, chroma and hue components. Averaged over the list:
- Chroma: 44 percent.
- Hue: 31 percent.
- Lightness: 25 percent.
Chroma is the dominant axis, which is the opposite of how the lists present themselves. A shades-of-purple page reads as a tour of hues. Measured, it is mostly a tour of saturations at a handful of hues, with lightness as the smallest of the three contributions.
This is worth saying plainly because it changes how you should use these lists. If you are picking two purples for a chart or an interface and you separate them by rotating the hue, you will get a much smaller perceptual gap than you expect. Separate them by chroma instead. Lilac at #c8a2c8 and violet at #ee82ee are the same hue, 300 exactly, and they are unmistakably different colors because one has 25 chroma and the other 67.
Purple is not flat in hue the way green is, which is the one place my prediction going in was wrong. I expected the non-spectral squeeze to make purple perceptually cramped. Sweeping one degree of hue rotation at full saturation around the wheel gives 0.585 ΔE00 per degree through the violets and 0.700 through the purples, against 0.362 for green and 0.772 for the wheel as a whole. Purple has ordinary hue resolution. Green is the outlier, with a 34 degree stretch in its middle where a full rotation is invisible. Nothing like that exists here. The widest indistinguishable hue window in the purple band is seven degrees, starting from hue 270, and at hue 285 it is four.
What survives when you stop looking side by side
Nine near-identical pairs out of 3,655 is a clean result, but side by side is not how anyone uses a color name. You read lavender in a brief, picture something, and pick. That is a memory comparison, and memory has a much coarser tolerance than the eye does. Reclustering the 86 names at ΔE00 10, the working tolerance I used for the blues, the list drops to 21 distinct colors.
The largest cluster swallows ten names: dark lavender, royal purple, ultra violet, pomp and power, cyber grape, purple heart, grape, Rebecca purple, dark slate blue and traditional plum. From memory these are one color, the mid-dark generic purple, and the ten words are ten routes to the same swatch.
The second cluster takes nine: bright ube, plum, violet, mauve, lilac, wisteria, bright lavender, African violet and floral lavender. That is the entire light wing collapsing into a single idea, which is exactly what the chroma ceiling predicts. When every light purple has been drained of saturation to get there, they end up in the same place.
Eighty-six names to twenty-one usable ones is a survival rate of 24 percent, worse than the blues, which kept 27 percent of 67. My reading is that this is the non-spectral tax showing up in the vocabulary. A family with less room to move produces more synonyms per unit of actual color, and the naming instinct does not slow down just because the gamut has.
Which purples are safe for text
The lightness ceiling has a direct accessibility consequence and it is an unusually convenient one. Of the 86 names, 52 clear the WCAG 4.5:1 threshold as text on white and 35 clear it on black. Not a single one fails both, which is not true of the yellows or the greens, where the bright middle of the family strands a lot of names between the two.
Exactly one name clears 4.5:1 against white and black: electric purple at #bf00ff, L* 49.9. It sits close enough to the middle of the lightness range to be legible either way, which makes it the only purple on the list you can drop into a theme-switching interface without checking.
The rule of thumb that falls out of the numbers: anything at or below L* 45 is safe on white, anything at or above L* 60 is safe on black, and the band between is where you need to actually run the ratio. Most of the famous purples live in that band. Rebecca purple at L* 32.9 and Tyrian purple at L* 20.8 are comfortable on white. Mauve, lilac and thistle are white-on-white disasters and only work on dark.
Testing your own purple discrimination
The measurements above describe the colors. They say nothing about your eyes, and the gap between the two is larger than people assume. If a four degree window at hue 285 is theoretically indistinguishable, the practical window for most people under normal lighting is wider, and it is worth knowing by how much for you.
The main color memory game shows a target, takes it away, and asks you to reproduce it, which is the memory tolerance rather than the side-by-side one and lands close to the ΔE00 10 figure above. Name That Color runs the naming task directly, and the purple rounds are where the vocabulary problem in this article becomes something you feel rather than read about. Hue Sort is the sharper test here, because ordering purples by hue with the lightness varying is exactly the confound the 44 percent chroma figure describes.
If you want the theory behind the numbers, the CIEDE2000 explainer covers the formula and reading hex color codes covers why #bf00ff has no green in it and what that means. What color two colors make covers the mixing side, which is where most of the confusion about purple and violet starts.
How these numbers were produced
The 86 names are every purple, violet and magenta keyword in the CSS named-color set, plus the shades that recur across mainstream lists with a hex value that is stable between them. The CSS values come from the specification. The rest are conventions rather than standards and a few of them vary by a digit or two depending on the source, which moves individual ΔE figures slightly and does not move any of the aggregate results. Names at the edges are judgement calls. Slate blue is filed under blue in CSS and measures as a violet, pale violet-red is arguably a pink, and both are included because the shade lists include them.
Hex values were converted to sRGB, linearised, taken to XYZ under D65 and then to CIELAB, with ΔE00 computed using the Sharma, Wu and Dalal reference implementation. The 2.3 just-noticeable-difference threshold follows Mahy and colleagues. The ΔE00 10 memory tolerance is not a standard, it is the working figure I have used across this series for remembered rather than compared colors.
Hue angles are HSV, which is what a color picker reports, while lightness and chroma are CIELAB, which is what perception tracks. The two do not correspond neatly and the article uses each where it belongs. Lightness ceilings and per-degree hue costs are measured at full HSV saturation and value, so they are the boundary case. Both flatten for duller colors.
The component attribution splits use plain CIELAB deltas rather than the weighted CIEDE2000 terms, so they attribute raw difference rather than perceptual weighting. Using the weighted terms shifts the magnitudes and leaves the ordering intact. Clustering is greedy in hue order, merging each name into the first cluster within the threshold, so the counts are approximate to within a name or two. Maximum chroma at fixed lightness comes from sampling the sRGB cube at every second value and keeping anything within one unit of the target L*, so the figures are lower bounds set by the sampling grid. Family bands are the conventional HSV ranges quoted alongside each figure. Contrast ratios follow the WCAG 2.2 relative luminance definition.