<?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: Youssef</title>
    <description>The latest articles on DEV Community by Youssef (@josef214).</description>
    <link>https://dev.to/josef214</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%2F4013580%2Ff499bc54-5302-45cb-8f1d-5bb771be0c03.jpg</url>
      <title>DEV Community: Youssef</title>
      <link>https://dev.to/josef214</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/josef214"/>
    <language>en</language>
    <item>
      <title>GitHub Repository Naming: The Conventions I Wish I Knew Earlier</title>
      <dc:creator>Youssef</dc:creator>
      <pubDate>Fri, 03 Jul 2026 13:25:07 +0000</pubDate>
      <link>https://dev.to/josef214/github-repository-naming-the-conventions-i-wish-i-knew-earlier-5aae</link>
      <guid>https://dev.to/josef214/github-repository-naming-the-conventions-i-wish-i-knew-earlier-5aae</guid>
      <description>&lt;p&gt;I have a monorepo from 2021 called NewProject. It runs in production. I am not proud of it.&lt;br&gt;
At some point every developer has a graveyard of repos named test2, my-app, or something with their name and the year in it. You pick the name in thirty seconds because you just want to start building. Then you live with it forever in every terminal, every CI config, every git clone command you paste into a README.&lt;br&gt;
After spending way too much time thinking about this while building NameKit, a naming tool specifically for developers, here is what I actually learned.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The one rule that covers 90% of cases&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lowercase kebab-case. All lowercase, words separated by hyphens. No underscores, no spaces, no camelCase.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bash# This
git clone https://github.com/yourname/react-form-validator

&lt;span class="c"&gt;# Not this  &lt;/span&gt;
git clone https://github.com/yourname/ReactFormValidator
git clone https://github.com/yourname/react_form_validator
git clone https://github.com/yourname/my-app-2

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The reason is not aesthetics. It is that kebab-case is URL-safe, shell-safe, and case-insensitive-system-safe. On Windows, MyRepo and myrepo are the same directory. In a URL, spaces become %20. In a shell, anything with a capital letter can require quoting in certain contexts. Hyphens eliminate all three problems at once.&lt;br&gt;
GitHub itself uses kebab-case for its own repos. That is the strongest possible signal.&lt;/p&gt;
&lt;h2&gt;
  
  
  The seven rules I actually follow
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Describe what it does, not what it is. react-table-virtualized tells you something. my-library tells you nothing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Match the package name if it ships one. If the npm package is fast-json-parse, the repo should be fast-json-parse. A mismatch creates permanent confusion.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Keep it under four words. The most-starred repos in existence are short: vite, zod, prettier, husky. Brevity is not laziness, it is precision.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No version numbers. api-client-v2 guarantees a painful migration when v3 ships. Use Git tags.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No personal names or years. sams-api-2021 means nothing to anyone who is not Sam in 2021.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Think about GitHub search. The repo name is the primary signal GitHub's search algorithm weights. A repo called csv-to-json-converter surfaces when someone searches for that exact thing. A repo called project-x does not surface for anything.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Be consistent across your organization. If you run multiple repos, a consistent pattern like {org}-{service} or {domain}-{component} makes your profile readable at a glance.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  The one thing nobody mentions: you can rename it
&lt;/h2&gt;

&lt;p&gt;Most developers stick with a bad name because they assume renaming will break everything. It will not. GitHub automatically redirects the old URL when you rename a repo. Stars, forks, and issues stay intact. You do need to update local remotes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bash

git remote set-url origin https://github.com/yourname/new-repo-name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And update any CI configs, package.json references, or README badges that hardcode the old path. That is a twenty-minute task at most. Do not let a bad name stay bad forever because you assumed the fix was harder than it is.&lt;/p&gt;

&lt;h2&gt;
  
  
  What about monorepos?
&lt;/h2&gt;

&lt;p&gt;The repo name should be the org or top-level project name. Individual packages inside use scoped naming: @yourorg/package-name. The -monorepo suffix is common but not required. babel/babel and microsoft/fluentui both use it. facebook/react does not.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you are starting a new repo today&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before you commit to a name, run it through four checks: search it on GitHub, search the package name on npmjs.com, search it on Google in quotes, and type it as it would appear in a git clone command. If any of those checks raises a problem, fix the name before you push the first commit.&lt;/p&gt;

&lt;p&gt;I wrote a longer version of this with a good/bad examples table and a section on naming conventions across npm and CLI tools at namekit.dev if you want the full breakdown.&lt;br&gt;
&lt;a href="https://namekit.dev/blog/github-repository-naming" rel="noopener noreferrer"&gt;namekit.dev/blog/github-repository-naming&lt;/a&gt;&lt;/p&gt;

</description>
      <category>github</category>
      <category>programming</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
