Skip to content

feat(theme): introduce safe and rich themes with true color support#23719

Draft
clocky wants to merge 7 commits intomainfrom
fix/default-theme-256
Draft

feat(theme): introduce safe and rich themes with true color support#23719
clocky wants to merge 7 commits intomainfrom
fix/default-theme-256

Conversation

@clocky
Copy link
Contributor

@clocky clocky commented Mar 24, 2026

Summary

Introduced "rich" themes for terminals with true color support and refined "safe" themes specifically for 256-color terminals. This addresses consistency issues in 256-color mode by providing explicit, high-visibility ANSI 256 color mappings for input backgrounds, message backgrounds, and focus states.

Details

  • Replaced standard lightTheme and darkTheme with separate safe and rich versions.
  • Added richLightTheme and richDarkTheme with Material Design 3 inspired color palettes for true color environments.
  • Refined safeLightTheme and safeDarkTheme to use explicit ANSI 256 color codes (e.g., #212121 for ANSI 235) for maximum compatibility and visual consistency.
  • Fixed inconsistent background rendering for input prompts and user messages in 256-color terminals.
  • Implemented logic to automatically select the rich theme if the terminal supports true color (excluding Apple Terminal).

Related Issues

Fixes #21832

How to Validate

  1. Run gemini --theme light or gemini --theme dark in different terminal emulators (e.g., iTerm2, Alacritty, Apple Terminal).
  2. Use export COLORTERM=truecolor or unset COLORTERM to simulate different support levels.
  3. Observe that rich colors are used in true color-capable terminals and safe colors elsewhere.
  4. Verify that npm run test -w @google/gemini-cli -- src/ui/themes/theme.test.ts passes.

Pre-Merge Checklist

  • Updated relevant documentation and README (if needed)
  • Added/updated tests (if needed)
  • Noted breaking changes (if any)
  • Validated on required platforms/methods:
    • MacOS
      • npm run
      • npx
      • Docker
      • Seatbelt

@clocky clocky requested a review from a team as a code owner March 24, 2026 22:03
@gemini-cli
Copy link
Contributor

gemini-cli bot commented Mar 24, 2026

Hi @clocky, thank you so much for your contribution to Gemini CLI! We really appreciate the time and effort you've put into this.

We're making some updates to our contribution process to improve how we track and review changes. Please take a moment to review our recent discussion post: Improving Our Contribution Process & Introducing New Guidelines.

Key Update: Starting January 26, 2026, the Gemini CLI project will require all pull requests to be associated with an existing issue. Any pull requests not linked to an issue by that date will be automatically closed.

Thank you for your understanding and for being a part of our community!

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly enhances the visual experience of the CLI by introducing a dual-theme system. It provides visually richer, Material Design-inspired themes for modern terminals with true color support, while simultaneously refining existing themes to ensure optimal compatibility and readability in 256-color environments. This intelligent adaptation ensures users always experience the best possible interface based on their terminal's capabilities.

Highlights

  • Introduced "rich" themes: New themes were added for terminals supporting true color, offering a modern, Material-inspired aesthetic.
  • Refined "safe" themes: Existing themes were refined for 256-color terminals, ensuring high visibility and compatibility with explicit ANSI codes.
  • Automatic theme selection: Logic was implemented to automatically select the appropriate theme based on terminal capabilities, prioritizing rich themes for true color terminals while excluding Apple Terminal due to known rendering issues.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@clocky clocky marked this pull request as draft March 24, 2026 22:04
@github-actions
Copy link

github-actions bot commented Mar 24, 2026

Size Change: +2.22 kB (+0.01%)

Total Size: 26.3 MB

Filename Size Change
./bundle/chunk-23DI7L5V.js 0 B -3.4 kB (removed) 🏆
./bundle/chunk-RGAW74XF.js 0 B -14.6 MB (removed) 🏆
./bundle/chunk-XN6LIP7Z.js 0 B -3.64 MB (removed) 🏆
./bundle/core-V2XIMZSL.js 0 B -43.4 kB (removed) 🏆
./bundle/devtoolsService-UUX2LQ3U.js 0 B -27.7 kB (removed) 🏆
./bundle/gemini-O3YTTRVA.js 0 B -521 kB (removed) 🏆
./bundle/interactiveCli-R244XGXP.js 0 B -1.62 MB (removed) 🏆
./bundle/oauth2-provider-PTOK7KZE.js 0 B -9.16 kB (removed) 🏆
./bundle/chunk-K3FQRKQN.js 3.4 kB +3.4 kB (new file) 🆕
./bundle/chunk-MZABCSTH.js 14.6 MB +14.6 MB (new file) 🆕
./bundle/chunk-R6HQ7RF2.js 3.64 MB +3.64 MB (new file) 🆕
./bundle/core-WY4JJBJ5.js 43.4 kB +43.4 kB (new file) 🆕
./bundle/devtoolsService-FVY5LMN4.js 27.7 kB +27.7 kB (new file) 🆕
./bundle/gemini-KWB6ERA5.js 521 kB +521 kB (new file) 🆕
./bundle/interactiveCli-I5IR2NH3.js 1.62 MB +1.62 MB (new file) 🆕
./bundle/oauth2-provider-5TBMYE2P.js 9.16 kB +9.16 kB (new file) 🆕
ℹ️ View Unchanged
Filename Size Change
./bundle/chunk-34MYV7JD.js 2.45 kB 0 B
./bundle/chunk-5AUYMPVF.js 858 B 0 B
./bundle/chunk-664ZODQF.js 124 kB 0 B
./bundle/chunk-DAHVX5MI.js 206 kB 0 B
./bundle/chunk-IUUIT4SU.js 56.5 kB 0 B
./bundle/chunk-IV2KUFMZ.js 1.96 MB 0 B
./bundle/chunk-RJTRUG2J.js 39.8 kB 0 B
./bundle/cleanup-R4BVQ3OU.js 0 B -856 B (removed) 🏆
./bundle/devtools-36NN55EP.js 696 kB 0 B
./bundle/dist-T73EYRDX.js 356 B 0 B
./bundle/gemini.js 2.06 kB 0 B
./bundle/getMachineId-bsd-TXG52NKR.js 1.55 kB 0 B
./bundle/getMachineId-darwin-7OE4DDZ6.js 1.55 kB 0 B
./bundle/getMachineId-linux-SHIFKOOX.js 1.34 kB 0 B
./bundle/getMachineId-unsupported-5U5DOEYY.js 1.06 kB 0 B
./bundle/getMachineId-win-6KLLGOI4.js 1.72 kB 0 B
./bundle/memoryDiscovery-CXSTQXLK.js 922 B 0 B
./bundle/multipart-parser-KPBZEGQU.js 11.7 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/client/main.js 221 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/_client-assets.js 227 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/index.js 11.5 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/types.js 132 B 0 B
./bundle/sandbox-macos-permissive-open.sb 890 B 0 B
./bundle/sandbox-macos-permissive-proxied.sb 1.31 kB 0 B
./bundle/sandbox-macos-restrictive-open.sb 3.36 kB 0 B
./bundle/sandbox-macos-restrictive-proxied.sb 3.56 kB 0 B
./bundle/sandbox-macos-strict-open.sb 4.82 kB 0 B
./bundle/sandbox-macos-strict-proxied.sb 5.02 kB 0 B
./bundle/src-QVCVGIUX.js 47 kB 0 B
./bundle/tree-sitter-7U6MW5PS.js 274 kB 0 B
./bundle/tree-sitter-bash-34ZGLXVX.js 1.84 MB 0 B
./bundle/cleanup-SQMYVTMB.js 856 B +856 B (new file) 🆕

compressed-size-action

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request refactors the theme system in the CLI to dynamically select between 'rich' and 'safe' color themes based on the terminal's true color support and whether it's an Apple Terminal. It introduces new richLightTheme and richDarkTheme alongside updated safeLightTheme and safeDarkTheme definitions. A high-severity issue was identified where the hex color value for Gray in safeLightTheme contains trailing whitespace, which is likely a typo and could lead to parsing errors or unexpected behavior.

Note: Security Review is unavailable for this PR.

@gemini-cli gemini-cli bot added area/core Issues related to User Interface, OS Support, Core Functionality 🔒 maintainer only ⛔ Do not contribute. Internal roadmap item. labels Mar 24, 2026
@clocky clocky marked this pull request as ready for review March 24, 2026 22:27
Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces dynamic theme selection based on terminal capabilities, distinguishing between 'rich' and 'safe' light/dark themes. The 'rich' themes are designed for true-color compatible terminals, while 'safe' themes provide a more basic color palette for broader compatibility. A review comment suggests optimizing the richDarkTheme by pre-calculating color values that currently use interpolateColor at runtime, to improve performance and maintainability.

@clocky clocky marked this pull request as draft March 24, 2026 22:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/core Issues related to User Interface, OS Support, Core Functionality 🔒 maintainer only ⛔ Do not contribute. Internal roadmap item.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Specify 256 color mode safe input prompt colors for all themes

1 participant