Photo · Daniil Silantev / Unsplash
Contribute · submit a port

Contribute

A port is usually an afternoon of work: read the palette, emit a config, screenshot it. Chrome themes, editors, window managers, launchers — if it takes colors, we want it. Here's the path from idea to listed port.

1

Start from the JSON palette

One file per variant, every role named — slug → role → hex. This is the source of truth; build your emitter against it so your port regenerates when the family does.

curl -O https://raw.githubusercontent.com/celadon-theme/celadon-theme/main/ports/json/celadon.json
2

Map roles, not colors

Match Celadon roles to your app's slots by meaning: bg to the field, fg to body text, red to errors and deletions, green to success. If the app speaks ANSI, use the slot numbers and skip hexes entirely — the oh-my-posh port works this way.

3

Cover all four variants

Sky, powder, celadon, jade — one graded family, light to dark. A port that ships one variant leaves most rooms out.

4

Screenshot each variant

Same content in every shot, so the grading reads. A diff and some test output show the honest ANSI story better than a wall of syntax.

5

Open a PR or an issue

Flat-file ports (a config the user copies) go under ports/<app>/ in the hub repo as a PR. Ports a plugin manager installs from a repo root — Neovim, tmux — get their own repo under the org: open an issue and we'll set one up.

Ground rules

Do

  • Read every hex from ports/json, by role
  • Ship all four variants, same content in each
  • Keep it colors-only — never set fonts or sizes
  • Use ANSI slots instead of hexes when the app allows
  • Include a screenshot per variant in your PR

Don't

  • Hand-tune a hex, even one — fixes go through the generator
  • Eyedrop colors from screenshots
  • Swap accent meanings (red must stay red)
  • Add colors the palette doesn't define
  • Skip a variant because "nobody uses light"

Not up for building one?

Issues are the most useful thing right now — port requests, color problems, screenshots of Celadon in the wild. Flat-file ports are one small emitter each, so asking is usually enough.