roundel

Why roundel

roundel against chalk, one capability per row, every cell linked to the test, grade or source that proves it.

chalk styles a string, and does it well: roundel/chalk passes all 58 cases of chalk 6.0.0's own suite, and roundel's colour-level rule agrees with chalk's across a differential sweep except where this page says it does not. What chalk leaves to every package that uses it is the decision around the colour — whether this output is going to a terminal, a CI log, a screen reader or an agent, and what the colours mean. roundel makes that decision once, as a pure function, and gives the colours names.

The table below is the whole comparison. Every mark links to its evidence: a test in this repository for ours, and for chalk the source file of chalk 6.0.0 — the version compat-oracle grades — or chalk's own test suite. scripts/capabilities-lock.test.ts fails the build when a cited test no longer contains the title it is cited for.

✓ yes · ◐ partial, with what is missing · ✗ no · — does not apply. Every mark links to its evidence: our test or grade, or the incumbent’s source at the version compat-oracle grades.

One output policy

Colour levels

Tokens and themes

Weight

Compatibility

Reading it

  • Parity rows are here on purpose. chalk reads the --color flags, keeps an explicit FORCE_COLOR=0 off, downsamples to 256 and 16 colours, knows the CI vendors and has no dependencies. A reader would otherwise have to go and check; the cells say they match.
  • chalk's cells link to chalk 6.0.0 on jsDelivr, not to the copy installed in this repository, which is 6.0.1: the lock only accepts an installed file at the graded version. A URL cell is not re-read by the lock, so each was checked against that file by hand; the compatibility row, whose source is chalk's vendored suite, is checked on every run.

What is not in the table

A row goes in only when every cell of it can be proved. These were left out:

  • npx roundel check. It validates a theme plugin before it ships; chalk has no plugins, so there is nothing to compare it with. It is on Theme plugins.
  • The per-façade level. Setting chalk.level on roundel/chalk changes that façade and not the tokens. chalk also has separate instances (new Chalk({ level })), so the difference is in what the default instance is shared with, not a yes-or-no capability.
  • Terminal allow-list detection. chalk recognises kitty, ghostty, wezterm, iTerm, Apple Terminal, TeamCity and the Windows build number; roundel deliberately does not, and reads only TERM, COLORTERM and explicit instructions (Colour levels). That is a difference in approach, and the row would read as a loss or a win depending on the terminal.
  • Weight in bytes. The per-subpath figures are asserted by weight.test.ts and published on Benchmarks.

On this page