# Changelog

See what each release changed before you update, from the first release to the latest.

Releases, newest first. From 1.0.0 on, versions follow semantic versioning: only a new major version changes code or colors under you. Full notes are on [GitHub](https://github.com/metasidd/ColorTokensKit-Swift/releases).

## 3.0.0

*Unreleased.* You get more vivid colors, 11 new families, and a family from your brand's hex in one call.

### What changes under you

Every palette color outside the grays is more vivid. The palette now uses [Display P3](https://colortokenskit.com/reference/glossary/index.md#display-p3), the gamut of every iPhone since the iPhone 7, and each stop's shared chroma is 13% to 29% higher than in 2.0.

Every hue still shares one lightness and one chroma per stop, so no family jumps out and contrast doesn't change: `_600` is still 4.68:1 on white in every hue. On sRGB-only screens, such as many external monitors, the system clips colors beyond sRGB, so they look less vivid there.

Names moved 5° or less, to one hue every 10° of OKLCH hue. [What does the library offer?](https://colortokenskit.com/basics/color-library/index.md) shows all of them.

`ProColor` is now `ProTheme`. The old name stays as a deprecated alias, so code written for 2.x compiles, with a warning and a fix-it that renames it.

Colors travel as extended sRGB. `toRGB()` keeps channels below 0 or above 1 for a color beyond sRGB, where 2.0 clamped them. `getHexString()` still clamps, because a hex value can't hold a Display P3 color.

### What's new

- 11 families between the old ones: `proCoral`, `proAmber`, `proMustard`, `proChartreuse`, `proEmerald`, `proTurquoise`, `proCerulean`, `proAzure`, `proGrape`, `proOrchid` and `proRose`, for 37 with gray.
- `ProTheme(hex:)` builds a family from a hex color, such as your brand's. The ramp takes the hex's OKLCH hue, the hex stays the family's own color, and a gray hex gives the gray family.

### Fixes

- AppKit no longer clips Display P3 results, because `NSColor` is built in extended sRGB.
- WCAG and APCA contrast are right for colors beyond sRGB.

[Troubleshooting](https://colortokenskit.com/reference/troubleshooting/index.md#colors-look-different-after-updating) lists what to check after updating.

## 2.0.0

*September 2026.* You get the same contrast at a stop in every hue, and color functions, harmonies and gradients for any SwiftUI `Color`.

### What changes under you

Every palette color is different. All hues now share one lightness and one chroma at each stop, so a stop has the same contrast in every hue, and screenshots and snapshot tests change. [How did we choose and build these colors?](https://colortokenskit.com/basics/how-the-colors-were-built/index.md) explains the new ramps.

Names moved to the hues they mean. Each family sits at the median hue that nine color-naming sources give its name, so `proBlue`, once a cyan, is now blue, `proViolet` was a plum, and `proRed` a raspberry. [What does the library offer?](https://colortokenskit.com/basics/color-library/index.md) lists them all.

Hue numbers are OKLCH hues. `ProColor.primary(forHue:)` and the ramp generator read the number you pass that way, and blue is about 251°. [A hue number gives the wrong color](https://colortokenskit.com/reference/troubleshooting/index.md#a-hue-number-gives-the-wrong-color) shows how to build a family from your color instead.

`ProColor` stops come from the ramp at the hue you asked for. Some families used to build their stops at another hue, which put cobalt close to sky. Now `Color.proCobalt` and `Color.proCobalt._450` are the same color.

The package no longer ships a resource bundle. `ColorPalettes.json` and `ColorRampLoader` are gone, and the gray ramp lives in code.

### What's new

- Color functions on any `Color`: [`lighten`](https://colortokenskit.com/api/lighten/index.md), [`darken`](https://colortokenskit.com/api/darken/index.md), [`soften`](https://colortokenskit.com/api/soften/index.md), [`strengthen`](https://colortokenskit.com/api/strengthen/index.md), [`saturate`](https://colortokenskit.com/api/saturate/index.md), [`desaturate`](https://colortokenskit.com/api/desaturate/index.md), [`rotateHue`](https://colortokenskit.com/api/rotate-hue/index.md), [`blend`](https://colortokenskit.com/api/blend/index.md) and [`invert`](https://colortokenskit.com/api/invert/index.md).
- [Harmonies and lightness sets](https://colortokenskit.com/advanced/color-theory/index.md): `complement`, `triad`, `tetrad`, `square`, `splitComplement`, `analogous` and `harmony(_:)` on `Color` and `ProColor`, plus `monochromatic`, `tints` and `shades` on `Color`.
- [Smooth gradients](https://colortokenskit.com/advanced/gradient-theory/index.md): `proGradient`, `proRadialGradient` and `proAngularGradient`, with recipes and a choice of [blends and easing](https://colortokenskit.com/under-the-hood/gradient-blends-and-easing/index.md).
- Two new families, `proJade` and `proMagenta`, and `proCobalt` added to `allProHues`.

[Troubleshooting](https://colortokenskit.com/reference/troubleshooting/index.md#colors-look-different-after-updating) lists what to check after updating.

## 1.0.0

*April 2026.* The OKLCH release.

- A breaking change: `Color.proBlue`, the other named colors and `allProHues` return `ProColor` instead of `LCHColor`, and the semantic tokens moved to `ProColor`.
- `OKLabColor` and `OKLCHColor`, with conversions, interpolation, string parsing and hex initializers.
- `ProColor`, a stable type for design tokens that wraps OKLCH, with 20 stops and `primary(forHue:isGrayscale:)`.
- OKLCH ramps from `ColorRampGenerator.getOKLCHColorRamp(forHue:)`.
- WCAG 2 and APCA contrast with `contrastRatio(to:method:)`.
- RGB output clamped to sRGB, a thread-safe ramp cache, and `Sendable` color types.

## 0.3.0

*April 2026.*

- Deployment targets lowered to iOS 16, macOS 13, tvOS 16 and watchOS 9.
- watchOS builds no longer use UIKit APIs that aren't available there.
- A build fix for Xcode 26.4.

## 0.2.0

*June 2025.*

- macOS support.
- Deterministic interpolation, so colors are stable from run to run.
- A hex initializer for `LCHColor`.

## 0.1.0

*February 2025.* The first release published on GitHub: ramps interpolated from palette data, the README images and examples, and the folder layout the package still uses. The tags before it, 0.0.0 to 0.0.11 from 2024, have no release notes.

## See also

- [Ready-made themes](https://colortokenskit.com/api/named-themes/index.md): 37 themes to use as they are, from proPink to proRose, each with 20 stops and every token.
- [Installing ColorTokensKit](https://colortokenskit.com/getting-started/installing/index.md): Add one package and one file of tokens, and every view gets the palette and dark mode.
- [How the ramps are built](https://colortokenskit.com/under-the-hood/how-ramps-are-built/index.md): The lightness and chroma behind every stop, so any hue you pick gives the same contrast.

---

From ColorTokensKit, by Penguin Design Ventures: https://colortokenskit.com/reference/changelog/ (updated September 26, 2026).
