← Back to all sparks
Q

qualpalr

ANALYTICS
Velocity0.0

R package qualpalr by jolars — release notes from GitHub.

A palette generator became a palette platform — and changed the metric behind every color it picks.

color-palettesaccessibilitycolor-vision-deficiencyoptimizationcpp-backendr-package
Current state
qualpalr generates maximally distinct categorical color palettes by optimizing perceptual distance, with adaptation for color vision deficiency built in from early on. Version 1.0.0 in August 2025 ended an eight-year stretch of small maintenance releases: the color-difference metric became selectable, existing palettes from ColorBrewer and Tableau became usable as input, and functions arrived to list, retrieve, extend and analyze palettes rather than only generate them. The C++ backend was rewritten as part of the same release.
Where it's heading
The package is moving from a generator to a toolkit that also works on palettes it did not create. Accepting a named palette as input, extending an existing one, and analyzing an arbitrary categorical palette all point the optimization machinery outward at the palettes people already use. The color-vision-deficiency handling followed the same path, consolidating from a single cvd_severity scalar to a named vector giving protan, deuter and tritan their own severities.
Prediction
Two deprecations are explicitly staged for the next major release — autopal(), with no replacement offered, and cvd_severity — so removal is the most likely next structural step. The 1.0.1 release already tracks the underlying qualpal C++ library separately, suggesting future changes may arrive from there.

Recent moves

  1. 10mo ago

    JOSS citation added and C++ library bumped to 3.3.0

    Citation housekeeping after the JOSS paper published, a version bump of the underlying qualpal C++ library, and a hex-conversion edge-case fix. Notable mainly for showing the C++ core is now versioned independently of the R package.

    View source ↗
  2. 0y ago

    Selectable difference metric, palette input, and a rewritten backend

    ⚡ SPARK

    The release that redefines what the package is for. Everything before it refined how qualpalr picks colors from a color space; this one lets it start from someone else's palette, extend it, or analyze it, and makes the perceptual metric a user choice rather than a fixed assumption.

    View source ↗
  3. 2y ago

    RcppParallel dropped and n_threads deprecated

    A dependency removal with the threading argument retained but inert. Part of the long quiet stretch between 0.4.x and the 1.0.0 rewrite, during which the package shed rather than added.

    View source ↗
  4. 7y ago

    Threaded distance-matrix computation via a new n_threads argument

    Parallelism added to the distance-matrix step, the package's main cost. It was removed again five years later when RcppParallel was dropped, and the C++ rewrite in 1.0.0 revisited performance from a different direction.

    View source ↗
  5. 8y ago

    Palette generation becomes deterministic

    Replacing the random starting sample with linearly spaced colors made output reproducible across runs — a small change with real consequences for anyone generating figures from a script. The package's optimization has started from a fixed point ever since.

    View source ↗
  6. 9y ago

    autopal() fixed after a zero-difference bug

    A fix for autopal() returning a minimum color difference of zero, plus registration of compiled functions. The function it repaired is now deprecated for removal with no replacement.

    View source ↗