Skip to content

Releases: Evercoder/culori


25 Feb 09:51
Choose a tag to compare

Bug fixes

  • Fixed a typo that allowed <hue> components in the color() syntax
  • Included oklab and oklch as exports in the culori/css bundle.

New features

  • Added unlerp() as the reverse of lerp()


23 Feb 15:30
Choose a tag to compare

Breaking changes

This new release includes revamped color parsing to align with the latest css-color-4 spec. Regular expression matching has been replaced with a parser that follows the css-syntax spec more closely.

The new parser is more flexible with some aspects and stricter with others:

  • Trickier whitespace formulas around numbers, such as rgb(1-.2.3), are now properly handled (#187)
  • All non-legacy syntaxes allow mixing <number>, <percentage> and 'none' component values
  • The color() syntax no longer supports omitted component values that default to 0; it now requires exactly three component values. (#186)

Interpretation of component values has been aligned to the spec:

  • in non-legacy syntaxes, percentages are mapped to a reference range for that component. For example, the range of lch.c (Chroma in the CIELCh color space) is [0, 150], with 100% corresponding to 150.

Serialization has also been aligned to the spec:

  • lab and lch serialize the L component as <number>, not <percentage>
  • oklab‌, oklch and lrgb are serialized to oklab(), oklch(), and color(srgb-linear) respectively.

Please consult the migration guide for assistance in upgrading from 2.x to 3.0.

API changes

  • parseRgb and parseHsl now perform parsing of the modern syntax for rgb() and hsl() respectively;
  • parseRgbLegacy and parseHslLegacy have been added to parse the legacy syntaxes for rgb() / rgba() / hsl() / hsla()
  • parseOklab and parseOklch have been added to parse oklab() and oklch().


21 Feb 22:16
Choose a tag to compare

Bug fixes

Fixes an inaccuracy in the original release of the XYB color space. The default color space used in JPEG XL contains an additional adjustment called Chroma from luma, that effectively subtracts Y from B as the last step for an xyb color.


21 Feb 21:27
Choose a tag to compare

New features

Adds support for the XYB (xyb) color model, part of the JPEG XL Image Coding System, as an LMS-based colour model inspired by the human visual system, facilitating perceptually uniform quantization. It uses a gamma of 3 for computationally efficient decoding.

New exports: xyb (shortcut to converter('xyb')), modeXyb, convertXybToRgb, convertRgbToXyb.

Note: Please update to version 2.1.1 for an adjusted XYB color space that includes the Chroma from luma adjustment used in JPEG XL.

A square canvas shows the trapezoidal shape of the srgb gamut in xyb color space, against a black backdrop

Above: The sRGB gamut in the XYB color space, for a slice of constant y.


24 Jan 22:13
Choose a tag to compare


  • Adjusts the number precision in Oklab conversion matrices.
  • Fixes sRGB <-> YIQ conversion to use gamma-corrected RGB values instead of linear values (#185, thanks @facelessuser)


05 Dec 12:24
Choose a tag to compare

Adds package.json to the package exports to improve compatibility with some build tooling.


04 Dec 09:59
Choose a tag to compare

Starting with this version, Culori is available to Deno users on (thanks @nnmrts!). There are no code-related changes.


13 Oct 10:26
Choose a tag to compare

⚠️ Breaking changes

➸ Please consult the Migration guide to upgrade from version 1.x to 2.0.

  • xyz mode renamed to xyz50, along with all functions referencing it (e.g. convertLabToXyz becomes convertLabToXyz50) (#152). mode: 'xyz' is no longer supported.
  • <number> for L no longer valid in lab() and lch() (#151)

New features

  • All color components in all CSS color syntaxes now accept the none keyword, in line with the latest changes in the CSS Color 4 spec. (w3c/csswg-drafts#6107)
  • Allow any number of components in the color() CSS syntax, and fill in omitted components with 0.


03 Oct 19:03
Choose a tag to compare

New features

New color spaces: Added support for Björn Ottosson's Okhsl and Okhsv color spaces, two new color spaces for color picking. They are available as the okhsl and okhsv modes.

Tree shaking: Added exports for low-level parsing/conversion/serialization functions, co you can use Culori without pre-registering any color space. See the Tree shaking guide for details, and the Low-level API section of the API reference for available functions.


01 Oct 19:29
Choose a tag to compare

New features

Use the culori/css or culori/all bootstrap packages in addition to culori/fn to quickly bootstrap CSS-supported color spaces / all color spaces while maintaining tree-shakeability:

import 'culori/css';
import { interpolate } from 'culori/fn';