<?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: Ihda</title>
    <description>The latest articles on DEV Community by Ihda (@ihdatech).</description>
    <link>https://dev.to/ihdatech</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%2F3991503%2F21bd297c-9b24-47d7-a3c3-b5ce5093f45c.jpg</url>
      <title>DEV Community: Ihda</title>
      <link>https://dev.to/ihdatech</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ihdatech"/>
    <language>en</language>
    <item>
      <title>Stop copying config files into every new project — I built a CLI for this</title>
      <dc:creator>Ihda</dc:creator>
      <pubDate>Thu, 18 Jun 2026 21:52:44 +0000</pubDate>
      <link>https://dev.to/ihdatech/stop-copying-config-files-into-every-new-project-i-built-a-cli-for-this-4510</link>
      <guid>https://dev.to/ihdatech/stop-copying-config-files-into-every-new-project-i-built-a-cli-for-this-4510</guid>
      <description>&lt;p&gt;You know that feeling when you start a new project and spend &lt;br&gt;
the first 20 minutes doing nothing productive?&lt;/p&gt;

&lt;p&gt;Hunting for the Android keystore. Finding the right &lt;code&gt;.env&lt;/code&gt; file. &lt;br&gt;
Copying VS Code settings. Again. And again. Every. Single. Project.&lt;/p&gt;

&lt;p&gt;I got tired of it. So I tried building something to fix it — coffee-installer.&lt;/p&gt;
&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;Create a collection folder and point coffee-installer to it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; ~/.coffee-collection
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'{ "baseSource": "~/.coffee-collection" }'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; ~/.coffee.config.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Add your reusable files to the collection:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/.coffee-collection/my-app/android/app
&lt;span class="nb"&gt;cp &lt;/span&gt;android/app/keystore.jks ~/.coffee-collection/my-app/android/app/
&lt;span class="nb"&gt;cp &lt;/span&gt;android/key.properties   ~/.coffee-collection/my-app/android/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Preview before installing:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;coffee diff my-app
Diff — my-app &lt;span class="o"&gt;(&lt;/span&gt;config&lt;span class="o"&gt;)&lt;/span&gt;
  + add         android/key.properties
  + add         android/app/keystore.jks
  + add         frontend/.env.development.local
3 to add, 0 to overwrite, 0 to skip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Then install with one command:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;coffee &lt;span class="nb"&gt;install &lt;/span&gt;my-app

📦 Installing my-app...
  ✅ copied android/key.properties
  ✅ copied android/app/keystore.jks
  ✅ copied frontend/.env.development.local
✅ my-app installed.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;All commands&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;coffee list              &lt;span class="c"&gt;# see everything in your collection&lt;/span&gt;
coffee diff my-app       &lt;span class="c"&gt;# preview before installing&lt;/span&gt;
coffee &lt;span class="nb"&gt;install &lt;/span&gt;my-app    &lt;span class="c"&gt;# install into current project&lt;/span&gt;
coffee pull my-app       &lt;span class="c"&gt;# sync changes back to collection&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Why I built this
&lt;/h2&gt;

&lt;p&gt;I work across multiple projects — mobile apps, web backends, Flutter apps.&lt;br&gt;
Every project needs the same credentials, the same IDE config, the same&lt;br&gt;
environment files.&lt;/p&gt;

&lt;p&gt;The alternative was a folder of files I'd manually copy every time, or&lt;br&gt;
worse — storing credentials in a repo (never do this).&lt;/p&gt;

&lt;p&gt;coffee-installer keeps everything in one local folder that never touches version control. It's not perfect yet, but it already saves me a lot of setup time.&lt;/p&gt;
&lt;h2&gt;
  
  
  Zero dependencies
&lt;/h2&gt;

&lt;p&gt;The entire thing runs on Node.js stdlib only — no external packages,&lt;br&gt;
nothing to audit, nothing that breaks when a dependency changes.&lt;/p&gt;
&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/ihdatech" rel="noopener noreferrer"&gt;
        ihdatech
      &lt;/a&gt; / &lt;a href="https://github.com/ihdatech/coffee-installer" rel="noopener noreferrer"&gt;
        coffee-installer
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      CLI for copying files from your private coffee collection into any project
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;coffee-installer&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/coffee-installer" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/4fc7b32326545bde060b6c92e246d50304cc91e86c5bcc3acd6e0a89e5a5bfcc/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f636f666665652d696e7374616c6c6572" alt="npm version"&gt;&lt;/a&gt;
&lt;a href="https://www.npmjs.com/package/coffee-installer" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/6dd6820226dbfab5bc899ff6c8271cc18fc601db42e40c425d4b43c3dd79495a/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f646d2f636f666665652d696e7374616c6c6572" alt="npm downloads"&gt;&lt;/a&gt;
&lt;a href="https://github.com/ihdatech/coffee-installer/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/b206894c01dcfd46996aef5d9c4ac59f1426b3f5d30567619106bdd36aa3ad3c/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f6c2f636f666665652d696e7374616c6c6572" alt="license"&gt;&lt;/a&gt;
&lt;a href="https://github.com/ihdatech/coffee-installer/package.json" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/9fd60f73e6739f3b005653153865092e9c58b641c7c55bd9151a7c8a763d31bf/68747470733a2f2f696d672e736869656c64732e696f2f6e6f64652f762f636f666665652d696e7374616c6c6572" alt="node"&gt;&lt;/a&gt;
&lt;a href="https://github.com/ihdatech/coffee-installer/package.json" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/aae95fbaa83bc6a3f4597f3a75da45ea46ec236fc324617f0e5a2f15e07fe750/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646570656e64656e636965732d302d627269676874677265656e" alt="zero dependencies"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Stop copying the same config files into every new project.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;coffee-installer&lt;/code&gt; lets you keep keystores, &lt;code&gt;.env&lt;/code&gt; files, IDE settings, credentials, and any files you reuse across projects in one place — your &lt;strong&gt;coffee collection&lt;/strong&gt; — and install them into any project with a single command.&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;coffee install my-app&lt;/pre&gt;

&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Why&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Every new project starts the same way: hunt for the &lt;code&gt;.env&lt;/code&gt; file from the last project, find the Android keystore, copy the VS Code settings, remember where you put the Firebase credentials...&lt;/p&gt;
&lt;p&gt;&lt;code&gt;coffee-installer&lt;/code&gt; solves this by keeping all those files in a local collection folder and giving you a fast CLI to install, preview, and sync them.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Installation&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm install -g coffee-installer&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Both &lt;code&gt;coffee&lt;/code&gt; and &lt;code&gt;coffee-installer&lt;/code&gt; are registered as CLI commands.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Demo&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;$ coffee list
Coffee Collection — ~/.coffee-collection

Config-defined projects:
  my-app     ~/.coffee.config.json
  backend    ~/.coffee.config.json

Folders in collection:
  .agents    (symlink)
  .vscode    (symlink)
  my-app     (config + convention)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;
&lt;pre class="notranslate"&gt;&lt;code&gt;$ coffee diff my-app&lt;/code&gt;&lt;/pre&gt;…&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ihdatech/coffee-installer" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://www.npmjs.com/package/coffee-installer" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;npmjs.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;a href="https://github.com/ihdatech/coffee-installer" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;⭐ Star coffee-installer on GitHub&lt;/a&gt;


&lt;p&gt;I'm still figuring out the best workflow myself — how do YOU handle this? &lt;br&gt;
I'd love to learn from how others solve it. Drop it in the comments! 👇&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>node</category>
      <category>showdev</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
