<?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: Vansh Chaurasiya</title>
    <description>The latest articles on DEV Community by Vansh Chaurasiya (@vansh-codes).</description>
    <link>https://dev.to/vansh-codes</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2130304%2Fe706f7c4-a310-46b6-8a4f-8611a2af88a5.jpg</url>
      <title>DEV Community: Vansh Chaurasiya</title>
      <link>https://dev.to/vansh-codes</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vansh-codes"/>
    <language>en</language>
    <item>
      <title>💡 Utility Types That Supercharge Developer Experience in TypeScript</title>
      <dc:creator>Vansh Chaurasiya</dc:creator>
      <pubDate>Sun, 12 Oct 2025 16:28:40 +0000</pubDate>
      <link>https://dev.to/vansh-codes/utility-types-that-supercharge-developer-experience-in-typescript-mka</link>
      <guid>https://dev.to/vansh-codes/utility-types-that-supercharge-developer-experience-in-typescript-mka</guid>
      <description>&lt;h1&gt;
  
  
  💡 Utility Types That Supercharge Developer Experience in TypeScript
&lt;/h1&gt;

&lt;p&gt;If you’ve spent any time working with TypeScript, you know the language is a gift that keeps on giving — especially when it comes to &lt;strong&gt;types that make your life easier&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But even with the rich standard library, you’ll often find yourself rewriting certain utility types again and again — making something nullable, prettifying an inferred type, or toggling optional keys.&lt;/p&gt;

&lt;p&gt;Today, I’ll share a small but &lt;strong&gt;powerful set of TypeScript helper types&lt;/strong&gt; that can drastically &lt;strong&gt;boost your developer experience (DX)&lt;/strong&gt; and &lt;strong&gt;simplify your type logic&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;These utilities are small, elegant, and built to solve real problems you hit every day in complex projects.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚙️ The Utility Pack
&lt;/h2&gt;

&lt;p&gt;Here’s the full collection of the helper types we’ll explore today:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="cm"&gt;/** Union of all JavaScript primitive types (excluding `symbol` and `function`) */&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Primitive&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;bigint&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="cm"&gt;/** Wraps a type in `null` */&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Nullable&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="cm"&gt;/** Deeply nullable (all nested props can be null) */&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;NullableDeep&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="kr"&gt;keyof&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;object&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;NullableDeep&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="cm"&gt;/** String literal representation of a primitive */&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Enum&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Primitive&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="cm"&gt;/** Flattens and normalizes a type’s shape for readability */&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Prettify&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="kr"&gt;keyof&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;

&lt;span class="cm"&gt;/** Makes only specific keys optional */&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Partialize&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;K&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="kr"&gt;keyof&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Prettify&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;
  &lt;span class="nb"&gt;Omit&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;Partial&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nb"&gt;Pick&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="cm"&gt;/** Makes only specific keys required */&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;RequireBy&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;K&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="kr"&gt;keyof&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Prettify&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;
  &lt;span class="nb"&gt;Omit&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;Required&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nb"&gt;Pick&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Get it from my &lt;a href="https://gist.github.com/vansh-codes/afe285331894e45021bed44da8c817c0" rel="noopener noreferrer"&gt;github gist&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let’s break them down one by one 👇&lt;/p&gt;




&lt;h2&gt;
  
  
  🧩 1. &lt;code&gt;Primitive&lt;/code&gt; — The Building Blocks
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Primitive&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;bigint&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This type simply represents all &lt;strong&gt;serializable primitive types&lt;/strong&gt; in JavaScript (excluding &lt;code&gt;symbol&lt;/code&gt; and &lt;code&gt;function&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Why is this helpful?&lt;br&gt;
Because when you define utility types or constraints, you often want to &lt;strong&gt;limit the scope&lt;/strong&gt; to only serializable or basic values.&lt;br&gt;
For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;logPrimitive&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Primitive&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This ensures you never accidentally pass a complex object or a function — great for cleaner, safer APIs.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧵 2. &lt;code&gt;Nullable&amp;lt;T&amp;gt;&lt;/code&gt; — Making a Type Nullable
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Nullable&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A simple yet surprisingly powerful helper.&lt;/p&gt;

&lt;p&gt;Whenever you want to express that a value &lt;strong&gt;might be null&lt;/strong&gt;, instead of repeatedly writing &lt;code&gt;string | null&lt;/code&gt; or &lt;code&gt;User | null&lt;/code&gt;, you can just wrap it in &lt;code&gt;Nullable&amp;lt;T&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;NullableUser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Nullable&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// Equivalent to: User | null&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It’s small, elegant, and improves code readability — especially in domain models or API responses.&lt;/p&gt;




&lt;h2&gt;
  
  
  🌊 3. &lt;code&gt;NullableDeep&amp;lt;T&amp;gt;&lt;/code&gt; — Make Everything Nullable
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;NullableDeep&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="kr"&gt;keyof&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;object&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;NullableDeep&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ever had to deal with deeply nested types where &lt;em&gt;every property&lt;/em&gt; can be &lt;code&gt;null&lt;/code&gt; (like in API responses)?&lt;br&gt;
Instead of making every property manually nullable, use this.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;address&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;city&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;country&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;NullableUser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;NullableDeep&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Result:&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;NullableUser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;address&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;city&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;country&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🎯 &lt;strong&gt;Use case:&lt;/strong&gt;&lt;br&gt;
When working with APIs that may return incomplete or partial data — &lt;code&gt;NullableDeep&lt;/code&gt; keeps your types aligned without manually updating every nested key.&lt;/p&gt;


&lt;h2&gt;
  
  
  ⚡ 4. &lt;code&gt;Enum&amp;lt;T&amp;gt;&lt;/code&gt; — Boosting DX for Enums
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Enum&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Primitive&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This one’s a &lt;strong&gt;DX (developer experience) lifesaver&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here’s the deal — in TypeScript, when you define an &lt;code&gt;enum&lt;/code&gt;, hovering over its property doesn’t always show the string values you actually use in your code.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;enum&lt;/span&gt; &lt;span class="nx"&gt;Gender&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;MALE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;male&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;FEMALE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;female&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Person&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;gender&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Gender&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you hover over &lt;code&gt;gender&lt;/code&gt;, you’ll see &lt;code&gt;enum Gender&lt;/code&gt; — not &lt;code&gt;'male' | 'female'&lt;/code&gt;.&lt;br&gt;
That’s fine for strictness, but not so friendly when you want &lt;strong&gt;hover hints&lt;/strong&gt; or &lt;strong&gt;intellisense clarity&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Enter our hero:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Enum&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Primitive&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Usage:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Person&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;gender&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Enum&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Gender&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, hover over &lt;code&gt;gender&lt;/code&gt;, and you’ll see:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;gender&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;male&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;female&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✨ &lt;strong&gt;Why it matters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Improves &lt;strong&gt;hover readability&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Plays well with &lt;strong&gt;JSON APIs and UI forms&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Great for &lt;strong&gt;autocompletion&lt;/strong&gt; and &lt;strong&gt;validation types&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧱 5. &lt;code&gt;Prettify&amp;lt;T&amp;gt;&lt;/code&gt; — Making Complex Types Readable
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Prettify&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="kr"&gt;keyof&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you use TypeScript’s utility types like &lt;code&gt;Omit&lt;/code&gt;, &lt;code&gt;Pick&lt;/code&gt;, or intersections, you often end up with ugly nested inferred types like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Example&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Omit&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hovering over &lt;code&gt;Example&lt;/code&gt; might give you something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Omit&amp;lt;User, "id"&amp;gt; &amp;amp; { id?: string; }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Not helpful, right?&lt;/p&gt;

&lt;p&gt;By wrapping it in &lt;code&gt;Prettify&amp;lt;T&amp;gt;&lt;/code&gt;, TypeScript &lt;em&gt;flattens&lt;/em&gt; it for readability:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;PrettyExample&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Prettify&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Example&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now it shows up neatly as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🪄 Perfect for &lt;strong&gt;hover docs&lt;/strong&gt;, &lt;strong&gt;DX improvements&lt;/strong&gt;, and &lt;strong&gt;cleaner autocomplete&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧩 6. &lt;code&gt;Partialize&amp;lt;T, K&amp;gt;&lt;/code&gt; — Make Specific Keys Optional
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Partialize&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;K&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="kr"&gt;keyof&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Prettify&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;
  &lt;span class="nb"&gt;Omit&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;Partial&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nb"&gt;Pick&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sometimes you don’t want to make &lt;em&gt;all&lt;/em&gt; properties optional — just a few.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;OptionalEmail&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Partialize&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Result:&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;OptionalEmail&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;email&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is especially useful in &lt;strong&gt;form states&lt;/strong&gt; or &lt;strong&gt;update payloads&lt;/strong&gt; where only certain fields are optional.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔒 7. &lt;code&gt;RequireBy&amp;lt;T, K&amp;gt;&lt;/code&gt; — Make Specific Keys Required
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;RequireBy&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;K&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="kr"&gt;keyof&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Prettify&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;
  &lt;span class="nb"&gt;Omit&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;Required&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nb"&gt;Pick&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The opposite of &lt;code&gt;Partialize&lt;/code&gt;.&lt;br&gt;
Perfect when you have a type with optional fields, but want to enforce some of them as mandatory in a specific context.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;email&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;age&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;RequireEmail&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;RequireBy&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Result:&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;RequireEmail&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;age&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ideal for &lt;strong&gt;validation layers&lt;/strong&gt;, &lt;strong&gt;admin panels&lt;/strong&gt;, or &lt;strong&gt;API mutations&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  💬 Wrapping Up
&lt;/h2&gt;

&lt;p&gt;These types might look simple at first glance, but they can &lt;strong&gt;massively improve your TypeScript experience&lt;/strong&gt;.&lt;br&gt;
They’re &lt;strong&gt;reusable&lt;/strong&gt;, &lt;strong&gt;intuitive&lt;/strong&gt;, and &lt;strong&gt;composition-friendly&lt;/strong&gt; — perfect for any project where type safety and developer ergonomics matter.&lt;/p&gt;

&lt;p&gt;Here’s what they bring to the table:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Utility&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;th&gt;DX Boost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Primitive&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Define base JS types&lt;/td&gt;
&lt;td&gt;Clean constraints&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Nullable&amp;lt;T&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Make type nullable&lt;/td&gt;
&lt;td&gt;Simplicity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NullableDeep&amp;lt;T&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Deeply nullable object&lt;/td&gt;
&lt;td&gt;Real-world API resilience&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Enum&amp;lt;T&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Enum hover clarity&lt;/td&gt;
&lt;td&gt;Intellisense-friendly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Prettify&amp;lt;T&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Flatten nested types&lt;/td&gt;
&lt;td&gt;Cleaner hovers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Partialize&amp;lt;T, K&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Make specific keys optional&lt;/td&gt;
&lt;td&gt;Form handling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;RequireBy&amp;lt;T, K&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Make specific keys required&lt;/td&gt;
&lt;td&gt;Input validation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  🧠 Pro Tip:
&lt;/h3&gt;

&lt;p&gt;Keep these in a &lt;code&gt;types/utils.ts&lt;/code&gt; file and reuse them across your codebase.&lt;br&gt;
Over time, you’ll notice your type definitions become cleaner, more expressive, and far easier to maintain.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;What about you?&lt;/strong&gt;&lt;br&gt;
Have you built similar DX helpers in your projects?&lt;br&gt;
Drop your favorites — I’d love to discover more community-built utility types! 🚀&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>devex</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Understanding NUQS: A Comprehensive Guide</title>
      <dc:creator>Vansh Chaurasiya</dc:creator>
      <pubDate>Sat, 23 Aug 2025 11:43:32 +0000</pubDate>
      <link>https://dev.to/vansh-codes/understanding-nuqs-a-comprehensive-guide-25m3</link>
      <guid>https://dev.to/vansh-codes/understanding-nuqs-a-comprehensive-guide-25m3</guid>
      <description>&lt;p&gt;When building modern web applications, one of the most overlooked but critical aspects is &lt;strong&gt;state persistence and synchronization between the UI and the URL&lt;/strong&gt;. This is where &lt;a href="https://nuqs.47ng.com/" rel="noopener noreferrer"&gt;&lt;code&gt;nuqs&lt;/code&gt;&lt;/a&gt; comes into play. It’s a lightweight library designed to manage &lt;strong&gt;query parameters as React state&lt;/strong&gt; seamlessly, bridging the gap between user interactions and URL state management.&lt;/p&gt;

&lt;p&gt;In this blog, we’ll dive deep into what &lt;code&gt;nuqs&lt;/code&gt; is, how it works, its use cases, security aspects, advantages, and limitations.&lt;/p&gt;




&lt;h2&gt;
  
  
  🌟 What is &lt;code&gt;nuqs&lt;/code&gt;?
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;nuqs&lt;/code&gt; is a React utility library that makes handling query parameters in your application effortless. Instead of manually parsing and updating &lt;code&gt;window.location.search&lt;/code&gt;, &lt;code&gt;nuqs&lt;/code&gt; provides a &lt;strong&gt;React hook-based API&lt;/strong&gt; to treat query parameters as state variables.&lt;/p&gt;

&lt;p&gt;In simpler terms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Without &lt;code&gt;nuqs&lt;/code&gt;: you’d have to manually handle query strings (&lt;code&gt;URLSearchParams&lt;/code&gt;), sync them with component state, and ensure the UI updates correctly.&lt;/li&gt;
&lt;li&gt;With &lt;code&gt;nuqs&lt;/code&gt;: you get hooks like &lt;code&gt;useQueryState&lt;/code&gt; that automatically manage state in sync with query parameters.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This drastically simplifies the developer experience.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚙️ How &lt;code&gt;nuqs&lt;/code&gt; Works
&lt;/h2&gt;

&lt;p&gt;At its core, &lt;code&gt;nuqs&lt;/code&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Provides &lt;strong&gt;hooks&lt;/strong&gt; such as &lt;code&gt;useQueryState&lt;/code&gt; to bind a React state variable to a query parameter.&lt;/li&gt;
&lt;li&gt;Keeps the query parameter updated in the URL when the state changes.&lt;/li&gt;
&lt;li&gt;Reads from the query string on initial render to hydrate the state.&lt;/li&gt;
&lt;li&gt;Supports different value types (&lt;code&gt;string&lt;/code&gt;, &lt;code&gt;number&lt;/code&gt;, &lt;code&gt;boolean&lt;/code&gt;, arrays, etc.) with minimal effort.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useQueryState&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;nuqs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;ProductsPage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;category&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setCategory&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useQueryState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;category&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;defaultValue&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;all&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Products in: &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;category&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setCategory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;electronics&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Electronics&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setCategory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;fashion&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Fashion&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, the &lt;code&gt;category&lt;/code&gt; value is always synced with the &lt;code&gt;?category=&lt;/code&gt; query parameter.&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 Use Cases of &lt;code&gt;nuqs&lt;/code&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;Search and Filter Pages&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;E-commerce product filters (e.g., category, price range, brand).&lt;/li&gt;
&lt;li&gt;Search bars with query persistence.&lt;/li&gt;
&lt;li&gt;Advanced filters (multi-select, ranges, etc.).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. &lt;strong&gt;Pagination and Sorting&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Table views where page number and sorting order need to be preserved in the URL.&lt;/li&gt;
&lt;li&gt;Sharing direct links with current view state.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. &lt;strong&gt;Dashboards and Analytics&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Persisting user-selected filters across reloads.&lt;/li&gt;
&lt;li&gt;Bookmarkable analytics states.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. &lt;strong&gt;Multi-step Forms&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Save current step or form progress in the URL.&lt;/li&gt;
&lt;li&gt;Resume forms directly by sharing the link.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. &lt;strong&gt;Collaboration Features&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Shareable application state (filters, selections, views) just via the URL.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔒 Security Aspects
&lt;/h2&gt;

&lt;p&gt;While &lt;code&gt;nuqs&lt;/code&gt; simplifies state-query sync, developers must remain aware of potential pitfalls:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;User Input Trust&lt;/strong&gt;: Query parameters come from the client and should never be blindly trusted. Always sanitize and validate values before using them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sensitive Data&lt;/strong&gt;: Avoid storing sensitive data (tokens, credentials, personal info) in query parameters, they are visible in the URL, browser history, and server logs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Injection Risks&lt;/strong&gt;: If query values are directly inserted into the DOM without sanitization, it could open doors for &lt;strong&gt;XSS attacks&lt;/strong&gt;. Use React’s natural escaping, but still sanitize inputs where needed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;SEO Implications&lt;/strong&gt;: Query parameters may affect SEO if search engines treat different URLs with parameters as duplicate content. Consider canonical URLs where necessary.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  ✅ Pros of Using &lt;code&gt;nuqs&lt;/code&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Simplicity&lt;/strong&gt; – Reduces boilerplate for handling query parameters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;URL as State&lt;/strong&gt; – Treats the URL as a single source of truth for application state.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better UX&lt;/strong&gt; – Users can share, bookmark, and reload pages with state preserved.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Type Safety&lt;/strong&gt; – Supports typed values like numbers, booleans, arrays with minimal setup.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Declarative API&lt;/strong&gt; – Clean React hook-based interface.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  ❌ Cons of Using &lt;code&gt;nuqs&lt;/code&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Learning Curve&lt;/strong&gt; – Requires developers to understand query-state synchronization concepts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Overhead for Simple Apps&lt;/strong&gt; – For very small projects, &lt;code&gt;nuqs&lt;/code&gt; might feel like over-engineering.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;URL Bloat&lt;/strong&gt; – Complex states in query strings can make URLs lengthy and harder to manage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SEO/Analytics Conflicts&lt;/strong&gt; – Overuse of query params may impact SEO or analytics tracking if not handled properly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Client-Side Only&lt;/strong&gt; – Query state sync is tied to the browser environment; SSR handling may need additional care.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  🚀 When Should You Use &lt;code&gt;nuqs&lt;/code&gt;?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Yes&lt;/strong&gt;: If your app has filters, search, dashboards, or shareable state via URLs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No&lt;/strong&gt;: If your app is static, simple, or does not rely on query parameters.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📌 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;nuqs&lt;/code&gt; is a &lt;strong&gt;powerful, elegant, and developer-friendly solution&lt;/strong&gt; for synchronizing state with query parameters. It turns URLs into a reliable state carrier, enhancing shareability, persistence, and user experience.&lt;/p&gt;

&lt;p&gt;However, like any tool, it should be used thoughtfully: avoid storing sensitive data in query strings, and ensure parameters are validated before use.&lt;/p&gt;

&lt;p&gt;If your application involves &lt;strong&gt;filters, navigation, or shareable states&lt;/strong&gt;, &lt;code&gt;nuqs&lt;/code&gt; is a perfect fit.&lt;/p&gt;

</description>
      <category>nuqs</category>
      <category>urlstate</category>
      <category>nextjs</category>
      <category>webdev</category>
    </item>
    <item>
      <title>🚀 Supercharge Your Git Workflow in Bash: Autocomplete, Aliases &amp; Pro Tips</title>
      <dc:creator>Vansh Chaurasiya</dc:creator>
      <pubDate>Wed, 28 May 2025 18:33:24 +0000</pubDate>
      <link>https://dev.to/vansh-codes/supercharge-your-git-workflow-in-bash-autocomplete-aliases-pro-tips-2hhb</link>
      <guid>https://dev.to/vansh-codes/supercharge-your-git-workflow-in-bash-autocomplete-aliases-pro-tips-2hhb</guid>
      <description>&lt;p&gt;If you're a developer spending time in the terminal, chances are you use Git daily. But are you using Git &lt;em&gt;efficiently&lt;/em&gt;?&lt;/p&gt;

&lt;p&gt;In this guide, we’ll unlock the hidden power of Git in the Bash terminal:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Set up Git autocompletion 🧠&lt;/li&gt;
&lt;li&gt;⚡ Use shortcut aliases for super speed 🧨&lt;/li&gt;
&lt;li&gt;🧩 Learn extra Git and Bash tricks for a smoother developer life&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s elevate your terminal game. 🧑‍💻💥&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 1. Enable Git Autocompletion
&lt;/h2&gt;

&lt;p&gt;Ever typed &lt;code&gt;git chec&amp;lt;TAB&amp;gt;&lt;/code&gt; and wished it would magically suggest &lt;code&gt;checkout&lt;/code&gt;? That’s exactly what Git autocompletion does.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔧 Step-by-step setup:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Download the Git completion script&lt;/strong&gt; (straight from the official repo):
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash &lt;span class="nt"&gt;-o&lt;/span&gt; ~/.git-completion.bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Source it in your &lt;code&gt;.bashrc&lt;/code&gt;&lt;/strong&gt; file:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'source ~/.git-completion.bash'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Reload your Bash config&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source&lt;/span&gt; ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✨ Done! Now your terminal understands Git commands and their options. Try typing &lt;code&gt;git ch&amp;lt;TAB&amp;gt;&lt;/code&gt; to see the magic!&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚡ 2. Setup Super Useful Git Aliases in &lt;code&gt;.bashrc&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Typing full Git commands over and over is slow and tedious. Let’s speed things up with &lt;strong&gt;aliases&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here are &lt;strong&gt;battle-tested&lt;/strong&gt; aliases you can paste into your &lt;code&gt;.bashrc&lt;/code&gt;:&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;alias &lt;/span&gt;&lt;span class="nv"&gt;cls&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"clear"&lt;/span&gt;

&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;gs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git status -s"&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;gl&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git log --graph --pretty=format:'%C(magenta)%h %C(white)%an %ar%C(auto)%D%n%s%n'"&lt;/span&gt;

&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;gco&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'git checkout'&lt;/span&gt;
__git_complete gco _git_checkout

&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;gfo&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'git fetch origin'&lt;/span&gt;
__git_complete gfo _git_fetch

&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;gcb&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'git checkout -b'&lt;/span&gt;

&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;gsw&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git switch"&lt;/span&gt;
__git_complete gsw _git_switch

&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;ga&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git add"&lt;/span&gt;
__git_complete ga _git_add

&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;gc&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git commit"&lt;/span&gt;
__git_complete gc _git_commit

&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;gp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git push"&lt;/span&gt;
__git_complete gp _git_push

&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;gpl&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git pull"&lt;/span&gt;
__git_complete gpl _git_pull

&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;gplr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git pull --rebase"&lt;/span&gt;

&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;gb&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git branch"&lt;/span&gt;
__git_complete gb _git_branch

&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;gbd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git branch -D"&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;gbm&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git branch -m"&lt;/span&gt;

&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;gd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git diff"&lt;/span&gt;

&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;gst&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git stash"&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;gsl&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git stash list"&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;gsp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git stash pop"&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;gsa&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git stash apply"&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;gsd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git stash drop"&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;gspm&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git stash push -m"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now instead of typing &lt;code&gt;git status&lt;/code&gt;, just do:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Or switch branches with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gco feature/login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ Pro tip: Aliases with &lt;code&gt;__git_complete&lt;/code&gt; also support &lt;strong&gt;auto-suggestions&lt;/strong&gt; for branch names!&lt;/p&gt;




&lt;h2&gt;
  
  
  🔄 3. Improve History Navigation (Bonus Bash Tricks)
&lt;/h2&gt;

&lt;p&gt;These tweaks help make your terminal feel more like a supercharged IDE.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔹 Add this to your &lt;code&gt;.bashrc&lt;/code&gt;:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;HISTCONTROL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ignoredups:erasedups
&lt;span class="nv"&gt;HISTSIZE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;10000
&lt;span class="nv"&gt;HISTFILESIZE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;20000
&lt;span class="nb"&gt;shopt&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; histappend

&lt;span class="c"&gt;# Arrow up/down searches through command history&lt;/span&gt;
&lt;span class="nb"&gt;bind&lt;/span&gt; &lt;span class="s1"&gt;'"\e[A": history-search-backward'&lt;/span&gt;
&lt;span class="nb"&gt;bind&lt;/span&gt; &lt;span class="s1"&gt;'"\e[B": history-search-forward'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now typing &lt;code&gt;git &amp;lt;↑&amp;gt;&lt;/code&gt; will search your previous Git commands!&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ 4. More Bash Productivity Aliases
&lt;/h2&gt;

&lt;p&gt;Beyond Git, here are a few handy Bash aliases to help you zoom through your terminal:&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;alias&lt;/span&gt; ..&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'cd ..'&lt;/span&gt;
&lt;span class="nb"&gt;alias&lt;/span&gt; ...&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'cd ../..'&lt;/span&gt;
&lt;span class="nb"&gt;alias&lt;/span&gt; +&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'cd'&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;x&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'exit'&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;reload&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'source ~/.bashrc'&lt;/span&gt;

&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;ni&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"npm install"&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;nrd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"npm run dev"&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;nrb&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"npm run build"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🚀 &lt;code&gt;nrd&lt;/code&gt; instead of &lt;code&gt;npm run dev&lt;/code&gt;?&lt;br&gt;
&lt;strong&gt;YES, PLEASE.&lt;/strong&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  🔁 Final Touch: Reloading &lt;code&gt;.bashrc&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;After adding all of this to your &lt;code&gt;.bashrc&lt;/code&gt;, don’t forget to &lt;strong&gt;reload your terminal&lt;/strong&gt;:&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;source&lt;/span&gt; ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or just run:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;(if you’ve added that alias 😉)&lt;/p&gt;




&lt;h2&gt;
  
  
  🧪 Want to Go Further?
&lt;/h2&gt;

&lt;p&gt;Here are some ideas to take this even further:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add &lt;strong&gt;fzf&lt;/strong&gt; to interactively switch branches.&lt;/li&gt;
&lt;li&gt;Use tools like &lt;strong&gt;&lt;code&gt;lazygit&lt;/code&gt;&lt;/strong&gt; for a TUI Git experience.&lt;/li&gt;
&lt;li&gt;Integrate &lt;strong&gt;&lt;code&gt;delta&lt;/code&gt;&lt;/strong&gt; for beautiful diffs.&lt;/li&gt;
&lt;li&gt;Add Git hooks for pre-commit validations.&lt;/li&gt;
&lt;li&gt;Explore &lt;code&gt;gh&lt;/code&gt; CLI for GitHub magic.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🚀 Wrap Up: Your Git-Boosted Bash Terminal
&lt;/h2&gt;

&lt;p&gt;You just:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Supercharged Git with &lt;strong&gt;autocomplete&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Boosted productivity with &lt;strong&gt;aliases&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Polished your terminal experience with &lt;strong&gt;bonus tricks&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This setup not only saves keystrokes but helps you focus on &lt;strong&gt;what really matters: building great software.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;💬 &lt;strong&gt;Did this boost your Git game?&lt;/strong&gt;&lt;br&gt;
Drop your favorite Git/Bash alias below or share the ones you can’t live without!&lt;/p&gt;

&lt;p&gt;📌 &lt;strong&gt;Bookmark this&lt;/strong&gt; post and level up every new machine you set up.&lt;/p&gt;

&lt;h2&gt;
  
  
  🗣️ I'd Love to Hear From You
&lt;/h2&gt;

&lt;p&gt;Have you customized your Git/Terminal in a cool way? Got tips to share? Drop them in the comments or DM me on X (Twitter) – let's inspire more productive terminals together 💬&lt;/p&gt;

&lt;p&gt;&lt;a href="https://x.com/VanshChaurasiy4" rel="noopener noreferrer"&gt;X&lt;/a&gt; - &lt;a href="https://www.linkedin.com/in/vanshchaurasiya24/" rel="noopener noreferrer"&gt;Linkedin&lt;/a&gt; - &lt;a href="https://github.com/vansh-codes" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; - &lt;a href="https://vanshchaurasiya.me" rel="noopener noreferrer"&gt;Portfolio&lt;/a&gt;&lt;/p&gt;

</description>
      <category>git</category>
      <category>bash</category>
      <category>productivity</category>
      <category>autocomplete</category>
    </item>
    <item>
      <title>You’re Using ShadCN Wrong ❌ – Here’s the Right Way to Customize It!</title>
      <dc:creator>Vansh Chaurasiya</dc:creator>
      <pubDate>Sun, 18 May 2025 14:57:19 +0000</pubDate>
      <link>https://dev.to/vansh-codes/youre-using-shadcn-wrong-heres-the-right-way-to-customize-it-3656</link>
      <guid>https://dev.to/vansh-codes/youre-using-shadcn-wrong-heres-the-right-way-to-customize-it-3656</guid>
      <description>&lt;p&gt;ShadCN has taken the developer community by storm—and for good reason. It brings you beautifully built UI components powered by Tailwind CSS and Radix UI, ready to plug and play. But let me ask you something honestly...&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Are you using ShadCN the way it’s meant to be used?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Chances are: &lt;strong&gt;No&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I’ve been there too—dropping in components and rolling with the default styling, thinking “it looks good enough.” But here’s the truth:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;ShadCN is not meant to be used as-is. It’s designed to be customized!&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let’s break down &lt;strong&gt;why&lt;/strong&gt; most developers skip customization, &lt;strong&gt;what ShadCN is doing under the hood&lt;/strong&gt;, and &lt;strong&gt;how you can easily customize it in minutes&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 Why Don't We Customize ShadCN?
&lt;/h2&gt;

&lt;p&gt;There are two main reasons:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;It works out of the box&lt;/strong&gt; – so we don’t &lt;em&gt;need&lt;/em&gt; to tweak anything.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It looks confusing under the hood&lt;/strong&gt; – global CSS variables, HSL values, Tailwind config overrides... it's a lot for beginners.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When you peek into the default &lt;code&gt;globals.css&lt;/code&gt;, you might see something like this:&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.amazonaws.com%2Fuploads%2Farticles%2Fflgmhn05fc3f1naygxhh.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.amazonaws.com%2Fuploads%2Farticles%2Fflgmhn05fc3f1naygxhh.png" alt="globals.css in nextjs project" width="800" height="2264"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And in your &lt;code&gt;tailwind.config.ts&lt;/code&gt;, you’ll see a maze of &lt;code&gt;hsl(var(--something))&lt;/code&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.amazonaws.com%2Fuploads%2Farticles%2Fi9gbm8g0rvni627l9uf1.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.amazonaws.com%2Fuploads%2Farticles%2Fi9gbm8g0rvni627l9uf1.png" alt="tailwind.config.ts + shadcn" width="800" height="1298"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most devs (me included, once upon a time) see this and just... leave it.&lt;/p&gt;

&lt;p&gt;But what if I told you that &lt;strong&gt;customizing ShadCN is easier than you think&lt;/strong&gt;?&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 What ShadCN Is Doing Behind the Scenes
&lt;/h2&gt;

&lt;p&gt;Let’s demystify what’s going on:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;CSS Variables in &lt;code&gt;globals.css&lt;/code&gt;&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;ShadCN defines a series of custom CSS variables under &lt;code&gt;:root&lt;/code&gt; and &lt;code&gt;.dark&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nd"&gt;:root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0%&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--foreground&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;240&lt;/span&gt; &lt;span class="m"&gt;10%&lt;/span&gt; &lt;span class="m"&gt;3.9%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="err"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.dark&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;240&lt;/span&gt; &lt;span class="m"&gt;10%&lt;/span&gt; &lt;span class="m"&gt;3.9%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--foreground&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0%&lt;/span&gt; &lt;span class="m"&gt;98%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="err"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice the format? These are &lt;strong&gt;HSL values&lt;/strong&gt;, a color format like hex or RGB—but much easier to tweak. You can control:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hue (color)&lt;/li&gt;
&lt;li&gt;Saturation (intensity)&lt;/li&gt;
&lt;li&gt;Lightness (brightness)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These variables define everything from background, foreground, borders, inputs, to custom chart colors. They serve as &lt;strong&gt;centralized tokens&lt;/strong&gt; for your entire theme.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. &lt;strong&gt;Tailwind Integration in &lt;code&gt;tailwind.config.ts&lt;/code&gt;&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;ShadCN doesn’t stop at CSS variables. It then &lt;strong&gt;extends Tailwind’s theme&lt;/strong&gt; using those variables:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;colors&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;hsl(var(--background))&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;foreground&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;hsl(var(--foreground))&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;card&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;DEFAULT&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;hsl(var(--card))&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;foreground&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;hsl(var(--card-foreground))&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This makes those CSS variables usable directly in your Tailwind utility classes like &lt;code&gt;bg-background&lt;/code&gt;, &lt;code&gt;text-primary&lt;/code&gt;, &lt;code&gt;border-input&lt;/code&gt;, etc.&lt;/p&gt;

&lt;p&gt;🎯 &lt;strong&gt;Why this is brilliant&lt;/strong&gt;: update the color in one place, and every component styled with Tailwind updates automatically. One tweak, global effect.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✨ How to Customize ShadCN Easily (The Right Way)
&lt;/h2&gt;

&lt;p&gt;Now that you understand the “why” and the “how”... let’s talk about &lt;strong&gt;customizing ShadCN without pain&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here's the secret sauce:&lt;/p&gt;

&lt;h3&gt;
  
  
  🛠 &lt;a href="https://tweakcn.com" rel="noopener noreferrer"&gt;TweakCN – Your ShadCN Customizer&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://tweakcn.com" rel="noopener noreferrer"&gt;TweakCN&lt;/a&gt;&lt;/strong&gt; is a powerful visual tool built specifically to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Preview your theme in light &amp;amp; dark mode&lt;/li&gt;
&lt;li&gt;Customize all the core tokens visually&lt;/li&gt;
&lt;li&gt;Export ready-to-paste CSS variables&lt;/li&gt;
&lt;li&gt;Avoid fiddling with confusing HSL values manually&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  ✅ Steps to Customize:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Visit &lt;a href="https://tweakcn.com" rel="noopener noreferrer"&gt;https://tweakcn.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Play around with the visual color pickers&lt;/li&gt;
&lt;li&gt;Copy the generated CSS&lt;/li&gt;
&lt;li&gt;Paste it into your &lt;code&gt;globals.css&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;You’re done 🎉&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No more guessing HSL values. No more digging through component code. TweakCN makes ShadCN theming a &lt;strong&gt;breeze&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎨 Why You Should Customize Your UI
&lt;/h2&gt;

&lt;p&gt;Let’s be real: Every other site using ShadCN &lt;strong&gt;looks the same&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But your app has its own identity, audience, and brand. A unique look goes a long way.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It shows attention to detail.&lt;/li&gt;
&lt;li&gt;It aligns with your product’s purpose.&lt;/li&gt;
&lt;li&gt;It sets your UI apart from the sea of clones.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And with ShadCN’s setup + TweakCN, &lt;strong&gt;customizing takes minutes&lt;/strong&gt;, not hours.&lt;/p&gt;




&lt;h2&gt;
  
  
  🏁 Wrapping Up
&lt;/h2&gt;

&lt;p&gt;Here’s what you should take away:&lt;/p&gt;

&lt;p&gt;✅ ShadCN is &lt;em&gt;meant&lt;/em&gt; to be customized&lt;br&gt;
✅ It uses CSS variables + Tailwind extensions to keep things consistent&lt;br&gt;
✅ TweakCN makes customizing it dead simple&lt;br&gt;
✅ Your UI deserves more than just the default look&lt;/p&gt;

&lt;p&gt;So next time you spin up a ShadCN-based project, don’t settle for defaults.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Build a UI that reflects your product, your style, and your vision.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Go try it out now 👉 &lt;a href="https://tweakcn.com" rel="noopener noreferrer"&gt;https://tweakcn.com&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🗣️ I'd Love to Hear From You
&lt;/h2&gt;

&lt;p&gt;Have you customized ShadCN in a cool way? Got tips or color palettes to share? Drop them in the comments or DM me on X (Twitter) – let's inspire more beautiful UIs together 💬&lt;br&gt;
&lt;a href="https://x.com/VanshChaurasiy4" rel="noopener noreferrer"&gt;X&lt;/a&gt; - &lt;a href="https://www.linkedin.com/in/vanshchaurasiya24/" rel="noopener noreferrer"&gt;Linkedin&lt;/a&gt; - &lt;a href="https://github.com/vansh-codes" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; - &lt;a href="https://vanshchaurasiya.me" rel="noopener noreferrer"&gt;Portfolio&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>shadcn</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Easter Egg or a Bug? The Mysterious Case of npm rum dev 🍹</title>
      <dc:creator>Vansh Chaurasiya</dc:creator>
      <pubDate>Sat, 08 Mar 2025 18:05:28 +0000</pubDate>
      <link>https://dev.to/vansh-codes/easter-egg-or-a-bug-the-mysterious-case-of-npm-rum-dev-3ki1</link>
      <guid>https://dev.to/vansh-codes/easter-egg-or-a-bug-the-mysterious-case-of-npm-rum-dev-3ki1</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Wait… Did You Just Say &lt;code&gt;npm RUM dev&lt;/code&gt;?&lt;/strong&gt; 🤯
&lt;/h2&gt;

&lt;p&gt;We developers live and breathe &lt;code&gt;npm run dev&lt;/code&gt;. It’s practically muscle memory at this point. But have you ever accidentally (or deliberately) typed &lt;code&gt;npm rum dev&lt;/code&gt;?&lt;/p&gt;

&lt;p&gt;No, this isn't a typo. Go ahead—open your terminal and type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm rum dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Boom! It works just like &lt;code&gt;npm run dev&lt;/code&gt;. But why? Is this an Easter egg? A hidden joke by the Node.js team? Or just an unintentional quirk in npm’s system? Let’s unravel this mystery! 🕵️‍♂️&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Other Hidden npm Easter Eggs? 👀&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Now that we’ve stumbled upon this quirky behavior, are there any other cool npm tricks hiding in plain sight? Here are some fun ones:&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚡ &lt;code&gt;npm start&lt;/code&gt; Without a Script 🤯
&lt;/h3&gt;

&lt;p&gt;Even if you didn’t define a &lt;code&gt;start&lt;/code&gt; script in &lt;code&gt;package.json&lt;/code&gt;, running &lt;code&gt;npm start&lt;/code&gt; doesn’t throw an error. Why? Because npm automatically assumes it should run &lt;code&gt;node server.js&lt;/code&gt; by default!&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Final Thoughts – Have You Found More Easter Eggs? 🐰&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If you’ve stumbled upon any more weird npm behaviors, I’d LOVE to hear about them! Drop a comment below or share this with your dev friends—it might just blow their minds! 💥&lt;/p&gt;

&lt;p&gt;And if you liked this, let’s connect! 🚀&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Follow me on LinkedIn:&lt;/strong&gt; &lt;a href="https://linkedin.com/in/vanshchaurasiya24" rel="noopener noreferrer"&gt;https://linkedin.com/in/vanshchaurasiya24&lt;/a&gt;&lt;br&gt;
👉 &lt;strong&gt;Check out my GitHub:&lt;/strong&gt; &lt;a href="https://github.com/vansh-codes" rel="noopener noreferrer"&gt;https://github.com/vansh-codes&lt;/a&gt;&lt;br&gt;
👉 &lt;strong&gt;Explore my portfolio:&lt;/strong&gt; &lt;a href="https://vanshchaurasiya.me" rel="noopener noreferrer"&gt;https://vanshchaurasiya.me&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Happy coding, and remember—always &lt;code&gt;rum&lt;/code&gt; responsibly! 🍹😆&lt;/p&gt;

</description>
      <category>devbugsmash</category>
      <category>webdev</category>
      <category>node</category>
    </item>
    <item>
      <title>Hacktoberfest'24 - A Journey to Remember</title>
      <dc:creator>Vansh Chaurasiya</dc:creator>
      <pubDate>Tue, 15 Oct 2024 19:33:08 +0000</pubDate>
      <link>https://dev.to/vansh-codes/hacktoberfest24-a-journey-to-remember-44ae</link>
      <guid>https://dev.to/vansh-codes/hacktoberfest24-a-journey-to-remember-44ae</guid>
      <description>&lt;p&gt;&lt;strong&gt;Do you know about Hacktoberfest? Have you participated in Hacktoberfest? Did you get Hacktoberfest badges?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I used to hear this every year in October since my college began in 2022, foolish me used to think its something related to Hacking maybe as the name suggests, though the name "HACKTOBERFEST" is very cool and fascinating but never drew my attention to really look and know about it. But this year, I started my Open Source journey by participating in GirlScript Summer Of Code where I got exposed to many new things and learnt new skills, since then I am exploring all possible ways to contribute and enhance my skills and then one day I landed on Hacktoberfest's website, &lt;em&gt;Why did I misunderstood and judged it by its name 😭, my OpenSource journey could have started in 2022 October😭 and more waves of regret hits me&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;Registed in Hacktoberfest 2024, got my first Holopin badge from Hacktoberfest for successfully registering and now I would have my badges to showcase to my friends asking me about Holopin badges :evil-smile:, started searching for amazing projects in Hacktoberfest and issues where I could contribute my skills and then here I am successfully completed 4 PRs/MRs merged and successfully completing the &lt;strong&gt;Hacktoberfest 2024 Challenge&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Searching for Hacktoberfest accepted repositories and contributing is a tough task but the adrenaline rush I get is enough to keep me motivated 💪&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%2Fholopin.me%2Fvanshcodes" 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%2Fholopin.me%2Fvanshcodes" alt="My Holopin Board" width="760" height="239"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's the link to my Hacktoberfest Profile: &lt;a href="https://www.holopin.io/@vanshcodes" rel="noopener noreferrer"&gt;https://www.holopin.io/@vanshcodes&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Checkout and follow me on GitHub: &lt;a href="https://github.com/vansh-codes/" rel="noopener noreferrer"&gt;https://github.com/vansh-codes/&lt;/a&gt;&lt;br&gt;
Follow me on Linkedin: &lt;a href="https://linkedin.com/in/vanshchaurasiya24" rel="noopener noreferrer"&gt;https://linkedin.com/in/vanshchaurasiya24&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;THANKS to HACKTOBERFEST for this opportunity 👨‍💻🎉&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest"&gt;2024 Hacktoberfest Writing challenge&lt;/a&gt;: Contributor Experience&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hacktoberfest</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Install Deno 2.0 in your systems</title>
      <dc:creator>Vansh Chaurasiya</dc:creator>
      <pubDate>Thu, 26 Sep 2024 13:46:41 +0000</pubDate>
      <link>https://dev.to/vansh-codes/install-deno-20-in-your-systems-454</link>
      <guid>https://dev.to/vansh-codes/install-deno-20-in-your-systems-454</guid>
      <description>&lt;h2&gt;
  
  
  🚀 Installing Deno on Windows: A Quick Guide
&lt;/h2&gt;

&lt;p&gt;Hey there, folks! 👋&lt;br&gt;&lt;br&gt;
Ready to dive into Deno? Let’s get started with installing this fantastic runtime on your Windows machine. It’s super easy, and I’ll guide you step by step! &lt;/p&gt;
&lt;h2&gt;
  
  
  🔧 Step 1: Open PowerShell
&lt;/h2&gt;

&lt;p&gt;First things first, you’ll need PowerShell. Follow these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click on the &lt;strong&gt;Start&lt;/strong&gt; button, search for &lt;strong&gt;PowerShell&lt;/strong&gt;, and open it up.&lt;/li&gt;
&lt;li&gt;Now, you're ready to install Deno!&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  🚀 Step 2: Install Deno
&lt;/h2&gt;

&lt;p&gt;Let’s install Deno with a single command. Just type or copy-paste the following command in your PowerShell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;irm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;https://deno.land/install.ps1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Press &lt;strong&gt;Enter&lt;/strong&gt; and let the magic happen! 🔮✨&lt;/li&gt;
&lt;li&gt;It will automatically download and install Deno for you.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🧪 Step 3: Verify the Installation
&lt;/h2&gt;

&lt;p&gt;Now, let's make sure everything went smoothly. To check if Deno is installed correctly, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;deno &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;OR&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;deno &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If everything is in place, you'll see something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;deno 1.x.x (release date)
v8 x.x.x
typescript x.x.x
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🎉 &lt;strong&gt;Congratulations!&lt;/strong&gt; You now have Deno installed on your system! You’re all set to start building amazing things with Deno! &lt;/p&gt;




&lt;h2&gt;
  
  
  📝 Why Choose Deno?
&lt;/h2&gt;

&lt;p&gt;Deno is a secure, modern runtime for JavaScript and TypeScript, created by the same person who originally built Node.js. It's designed to offer better security and a cleaner, more powerful API, all with TypeScript support out of the box. Here are a few perks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Built-in TypeScript&lt;/strong&gt; support 🎯&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security by default&lt;/strong&gt; 🔒 (No file, network, or environment access without explicit permission)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modern features&lt;/strong&gt; like ES modules 📦&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One executable&lt;/strong&gt; to manage dependencies and scripts&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💡 What’s Next?
&lt;/h2&gt;

&lt;p&gt;Now that Deno is installed, you’re ready to start your journey! 🚀 &lt;/p&gt;

&lt;p&gt;Try out your first Deno script by creating a file, say &lt;code&gt;app.ts&lt;/code&gt;, and running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;deno run app.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or, check out the official &lt;a href="https://docs.deno.com/runtime/" rel="noopener noreferrer"&gt;Deno documentation&lt;/a&gt; for more tutorials and inspiration! 📚✨&lt;/p&gt;

&lt;p&gt;Feel free to share your thoughts, or if you hit a snag, drop a comment below. Let's build something awesome! 💻🔥&lt;/p&gt;




&lt;p&gt;Happy coding with Deno! 💙&lt;/p&gt;

</description>
      <category>deno</category>
      <category>deno2point0</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
