Skip to content


Repository files navigation

Ruby Gem Version

A Ruby implementation of HSLuv.


Add this line to your application's Gemfile:

gem 'hsluv'

And then execute:

$ bundle

Or install it yourself as:

$ gem install hsluv


  • hue is a float between 0 and 360
  • saturation is a float between 0 and 100
  • lightness is a float between 0 and 100
  • hex is the hexadecimal format of the color
  • red is a float between 0 and 1
  • green is a float between 0 and 1
  • blue is a float between 0 and 1

Hsluv::hsluv_to_hex(hue, saturation, lightness) -> color as a hex string

Hsluv.hsluv_to_hex(12.177, 100, 53.23)
=> #ff0000

Hsluv::hsluv_to_rgb(hue, saturation, lightness) -> color as rgb

Hsluv.hsluv_to_rgb(12.177, 100, 53.23)
=> [0.9998643703868711, 6.849859221502719e-14, 8.791283550555612e-06]

Hsluv::hex_to_hsluv(hex) -> list of floats as defined above

=> [12.177050630061776, 100.0000000000022, 53.23711559542933]

Hsluv::rgb_to_hsluv(rgb) -> list of floats as defined above

Hsluv.rgb_to_hsluv(0.99, 6.84e-14, 8.79e-16)
=> [12.17705063006216, 100.00000000000209, 52.711595266911985]

For HPLuv (the pastel variant), use:

  • hpluv_to_hex
  • hpluv_to_rgb
  • hex_to_hpluv
  • rgb_to_hpluv

Local workflow

If you don't have Ruby installed already, I recommend using our devcontainer.json configuration to launch your editor in a pre-built Ruby container. Also consider using GitHub "Codespaces" feature if you don't use Docker.

Initial setup:

bundle install


bundle exec rspec

Releasing a new version

  1. Log in to using our shared hsluv profile
  2. Make a new API key if necessary, copy it to GitHub Actions HSLUV_RUBYGEMS_API_KEY secret
  3. Update hsluv.gemspec with new version, e.g. 1.0.2.rc1, push to a branch
  4. Run gem.yml workflow on that branch
  5. Sanity check: gem install --user-install hsluv -v 1.0.2.rc1

Version history


  • Add HSLuv revision 4 support (thanks @felix-d)