A compact palette with enough separation for code, terminals, and renderers.
Jupiter keeps the palettes small and maps each accent through shared role definitions. The same source file produces light and dark presets for each variant, keeping the rendered code samples, editor themes, and terminal colors in lockstep.
The Ganymede variant preserves the previous archive definition as a matched light and dark pair, so the refined Metis palette can be compared against the original scheme without leaving the preview.
Callisto and Europa round out the set with sharper contrast and quieter icy tones. Each variant ships with dark and light artifacts using the same token roles, so editor chrome, terminal ANSI colors, and syntax highlighting stay aligned.
The generated outputs cover Codex-compatible JSON, Ghostty, iTerm2, Xcode, VS Code, Shiki, Vim, and PrismJS from one source definition.
type Output = "ghostty" | "xcode" | "prism";
const writeTheme = async (output: Output) => {
const preset = await loadPreset("metis-dark");
return buildArtifact({ output, preset });
};
type TokenRole string
func Resolve(role TokenRole, palette Palette) string {
if role == "statement" {
return palette.Amber
}
return palette.Foreground
}
struct JupiterTheme {
let name: String
let syntax: [String: Color]
func color(for role: String) -> Color {
syntax[role] ?? syntax["trivial"]!
}
}
pub fn accent(role: &str, theme: &Theme) -> Color {
match role {
"string" => theme.mint,
"number" => theme.yellow,
_ => theme.foreground,
}
}