<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Gabriel García Alonso</title>
    <description>The latest articles on DEV Community by Gabriel García Alonso (@gabriel_garcaalonso_7d0).</description>
    <link>https://dev.to/gabriel_garcaalonso_7d0</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4091851%2F087ced8b-9814-4152-9ecb-af315bd752e8.png</url>
      <title>DEV Community: Gabriel García Alonso</title>
      <link>https://dev.to/gabriel_garcaalonso_7d0</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gabriel_garcaalonso_7d0"/>
    <language>en</language>
    <item>
      <title>I made 50 free dark themes for Claude Code. Here is what I learned about semantic terminal colors.</title>
      <dc:creator>Gabriel García Alonso</dc:creator>
      <pubDate>Mon, 24 Aug 2026 08:19:35 +0000</pubDate>
      <link>https://dev.to/gabriel_garcaalonso_7d0/i-made-50-free-dark-themes-for-claude-code-here-is-what-i-learned-about-semantic-terminal-colors-1179</link>
      <guid>https://dev.to/gabriel_garcaalonso_7d0/i-made-50-free-dark-themes-for-claude-code-here-is-what-i-learned-about-semantic-terminal-colors-1179</guid>
      <description>&lt;p&gt;I made a set of 50 free dark themes for Claude Code. The source, install instructions and all 50 theme files are here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/notgabriels-sys/claude-code-50-dark-themes" rel="noopener noreferrer"&gt;https://github.com/notgabriels-sys/claude-code-50-dark-themes&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Famd5uzohnztjrglp9sdj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Famd5uzohnztjrglp9sdj.png" alt="50 Dark Themes for Claude Code project preview" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This started as a small personal project. I wanted Claude Code to feel more comfortable during long sessions, but I did not want themes that only looked good as color swatches and then made real terminal states harder to read.&lt;/p&gt;

&lt;p&gt;After making the set, the useful lesson was simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;dark themes are not just background colors.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The main design choice: do not repaint every semantic color
&lt;/h2&gt;

&lt;p&gt;A lot of dark palettes look fine as static color cards, but developer tools need meaning. A warning, an error, a success state, a diff addition and a diff deletion should not collapse into the same decorative accent.&lt;/p&gt;

&lt;p&gt;The important implementation detail in this project is that every theme inherits Claude Code's base dark preset and overrides only a controlled set of interface roles. The &lt;code&gt;success&lt;/code&gt;, &lt;code&gt;error&lt;/code&gt;, &lt;code&gt;warning&lt;/code&gt; and diff colors are intentionally left to the base preset, so they keep their semantic green, red and yellow meanings.&lt;/p&gt;

&lt;p&gt;Here is an abbreviated version of &lt;code&gt;amber-room.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Amber Room"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"base"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"dark"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"overrides"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"claude"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#E0A83C"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#EDEBE8"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"inactive"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#AFA79D"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"subtle"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#342F27"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"promptBorder"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#E0A83C"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"userMessageBackground"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#2C2821"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That limited override surface is deliberate. It lets the visual identity change without turning status colors into decoration.&lt;/p&gt;

&lt;p&gt;The roles I kept checking were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;errors should still feel like errors&lt;/li&gt;
&lt;li&gt;warnings should remain visually distinct from errors&lt;/li&gt;
&lt;li&gt;success states should not look like generic decoration&lt;/li&gt;
&lt;li&gt;diff additions and deletions need enough contrast from each other&lt;/li&gt;
&lt;li&gt;muted text should be readable but not compete with primary output&lt;/li&gt;
&lt;li&gt;the background should support long sessions, not dominate them&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Contrast hierarchy matters more than vibe
&lt;/h2&gt;

&lt;p&gt;The difficult part was usually not choosing a hue. It was keeping the hierarchy readable across primary text, inactive text, subtle surfaces, prompt borders and raised user-message backgrounds.&lt;/p&gt;

&lt;p&gt;The safer combinations had:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a calm dark surface&lt;/li&gt;
&lt;li&gt;foreground text that stayed readable&lt;/li&gt;
&lt;li&gt;muted text that did not disappear&lt;/li&gt;
&lt;li&gt;accents that worked in small UI labels, not only in big preview blocks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The funny part is that the “loudest” palettes often became less useful than the restrained ones.&lt;/p&gt;

&lt;h2&gt;
  
  
  Terminal background matters
&lt;/h2&gt;

&lt;p&gt;Claude Code cannot set the terminal application's background color, so that remains a separate terminal setting. For the full effect, I set the terminal background to each theme's surface hex.&lt;/p&gt;

&lt;p&gt;Without that, the palette can still work, but the theme does not feel fully integrated. The background is not just decoration; it is part of the reading environment.&lt;/p&gt;

&lt;p&gt;That is also why the repository documents the matching surface value. A theme is not only a few accent swatches; it is a working space.&lt;/p&gt;

&lt;h2&gt;
  
  
  The install path had to stay boring
&lt;/h2&gt;

&lt;p&gt;For a visual project, the temptation is to spend all the effort on the gallery. But the install flow matters more.&lt;/p&gt;

&lt;p&gt;The project supports the native Claude Code plugin marketplace flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude plugin marketplace add notgabriels-sys/claude-code-50-dark-themes
claude plugin &lt;span class="nb"&gt;install &lt;/span&gt;50-dark-themes@notgabriels-themes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The README also keeps a manual copy-to-&lt;code&gt;~/.claude/themes/&lt;/code&gt; path visible. That matters because a theme pack is only useful if someone can install it without guessing.&lt;/p&gt;

&lt;p&gt;The basic lesson: if the thing is free and practical, the path to use it should be practical too.&lt;/p&gt;

&lt;h2&gt;
  
  
  I kept the themes free
&lt;/h2&gt;

&lt;p&gt;The 50 Claude Code themes are free and MIT licensed.&lt;/p&gt;

&lt;p&gt;If you use Claude Code and care about readable dark UI, I would genuinely like feedback:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which themes feel comfortable for long sessions?&lt;/li&gt;
&lt;li&gt;Which ones look good but fail in real use?&lt;/li&gt;
&lt;li&gt;What semantic color roles should be improved?&lt;/li&gt;
&lt;li&gt;Are there terminal/editor combinations where the contrast breaks?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here are the complete theme list, source files and install instructions:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/notgabriels-sys/claude-code-50-dark-themes" rel="noopener noreferrer"&gt;https://github.com/notgabriels-sys/claude-code-50-dark-themes&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I used AI assistance to structure and edit this article. I reviewed the technical claims, example configuration and links against the public repository before publishing.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>terminal</category>
      <category>tooling</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
