Theme importer rejects custom codeThemeId values unless they match dropdown IDs

Open 💬 2 comments Opened Mar 15, 2026 by Bpc21

What version of the Codex App are you using (From “About Codex” dialog)?

Codex for macOS Version: 26.311.21342 Build: 993

What subscription do you have?

ChatGPT Plus

What platform is your computer?

Darwin 25.3.0 arm64 arm

What issue are you seeing?

The Codex macOS theme importer appears to validate codeThemeId against the list of built-in code themes shown in the theme dropdown.

If codeThemeId is not one of those IDs (for example matrix, everforest, gruvbox, etc.), the import cannot proceed even when the theme payload is otherwise valid.

When using a custom codeThemeId, the “Import theme” button remains disabled.

However, the exact same payload imports successfully when codeThemeId is replaced with one of the existing dropdown values.

This prevents importing a fully custom theme identifier even though the rest of the schema is valid.

Example payload that fails:

codex-theme-v1:{"codeThemeId":"custom","theme":{"accent":"#597859","contrast":40},"variant":"dark"}

The same payload works when using an existing ID:

codex-theme-v1:{"codeThemeId":"matrix","theme":{"accent":"#597859","contrast":40},"variant":"dark"}

What steps can reproduce the bug?

  1. Open Codex on macOS
  2. Go to Theme settings
  3. Click Import
  4. Paste a valid theme payload with a new codeThemeId that does not exist in the dropdown
  5. Attempt to import the theme

Result: the Import button remains disabled.

If the same payload is used with an existing codeThemeId such as matrix, the import succeeds.

What is the expected behavior?

The importer should validate the theme payload schema rather than restricting codeThemeId to existing dropdown values.

A valid theme payload with a new codeThemeId should import successfully and become selectable for the corresponding variant.

Additional information

This appears to be caused by codeThemeId being validated against a fixed list of built-in theme IDs (likely the same list used to populate the dropdown) instead of validating only the theme schema.

View original on GitHub ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗