<?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: Vikash Kumar</title>
    <description>The latest articles on DEV Community by Vikash Kumar (@thatonevikash).</description>
    <link>https://dev.to/thatonevikash</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%2F1627209%2F0e55a0b7-b0f9-40cb-a96f-17ddde5c27fb.png</url>
      <title>DEV Community: Vikash Kumar</title>
      <link>https://dev.to/thatonevikash</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thatonevikash"/>
    <language>en</language>
    <item>
      <title>How to Integrate Material UI with Next.js App Router</title>
      <dc:creator>Vikash Kumar</dc:creator>
      <pubDate>Sat, 18 Jul 2026 07:48:57 +0000</pubDate>
      <link>https://dev.to/thatonevikash/how-to-integrate-material-ui-with-nextjs-app-router-5bm9</link>
      <guid>https://dev.to/thatonevikash/how-to-integrate-material-ui-with-nextjs-app-router-5bm9</guid>
      <description>&lt;p&gt;Hello, I'm &lt;strong&gt;Vikash&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I have been working with &lt;strong&gt;MaterialUI&lt;/strong&gt; for almost 3 years.&lt;/p&gt;

&lt;p&gt;Every Next.js developer has been here.&lt;br&gt;
You create a fresh project.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx create-next-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then comes the part you already know by heart.&lt;/p&gt;

&lt;p&gt;Install MUI.&lt;/p&gt;

&lt;p&gt;Install Emotion.&lt;/p&gt;

&lt;p&gt;Create the theme.&lt;/p&gt;

&lt;p&gt;Wrap the providers.&lt;/p&gt;

&lt;p&gt;Configure the App Router.&lt;/p&gt;

&lt;p&gt;Organize the theme folder.&lt;/p&gt;

&lt;p&gt;Repeat.&lt;/p&gt;

&lt;p&gt;Again.&lt;/p&gt;

&lt;p&gt;And again.&lt;/p&gt;

&lt;p&gt;After doing this across multiple projects, I realized something:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I wasn't solving a new problem each time—I was rebuilding the exact same foundation.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That made me ask myself:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Why am I spending 10–15 minutes on setup before I can even build my first component?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The manual approach
&lt;/h2&gt;

&lt;p&gt;For a standard MUI setup you'll usually:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install Material UI packages&lt;/li&gt;
&lt;li&gt;Configure Emotion&lt;/li&gt;
&lt;li&gt;Create a theme&lt;/li&gt;
&lt;li&gt;Add ThemeProvider&lt;/li&gt;
&lt;li&gt;Set up the App Router layout&lt;/li&gt;
&lt;li&gt;Organize your theme files&lt;/li&gt;
&lt;li&gt;Configure linting (optional)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these steps are difficult.&lt;br&gt;
They're just repetitive.&lt;/p&gt;
&lt;h2&gt;
  
  
  That's why I built create-next-mui
&lt;/h2&gt;

&lt;p&gt;Instead of documenting the same setup for every project, I turned it into a CLI.&lt;/p&gt;

&lt;p&gt;Now the same setup becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx create-next-mui
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A few prompts later, you have a production-ready Next.js + Material UI project with the architecture already in place.&lt;/p&gt;

&lt;p&gt;If you need more later, plugins can be added as well:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx create-next-mui add zustand

npx create-next-mui add react-query
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No copying files.&lt;/p&gt;

&lt;p&gt;No hunting through documentation.&lt;/p&gt;

&lt;p&gt;Just start building.&lt;/p&gt;

&lt;h2&gt;
  
  
  The goal isn't to replace learning
&lt;/h2&gt;

&lt;p&gt;I still recommend understanding how Material UI integrates with the Next.js App Router. The official documentation explains the concepts well, including layouts and the App Router architecture.&lt;/p&gt;

&lt;p&gt;The goal of the CLI is different.&lt;/p&gt;

&lt;p&gt;Once you already know the setup, you shouldn't have to rebuild it every time.&lt;/p&gt;

&lt;p&gt;Developer experience matters too.&lt;/p&gt;

&lt;h2&gt;
  
  
  I'd love your thoughts 💚
&lt;/h2&gt;

&lt;p&gt;Do you still configure Material UI manually for every project?&lt;/p&gt;

&lt;p&gt;Or do you keep your own starter template?&lt;/p&gt;

&lt;p&gt;I'm curious how everyone approaches it.&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>mui</category>
      <category>opensource</category>
      <category>cli</category>
    </item>
    <item>
      <title>The create-next-mui website is now live! 🚀</title>
      <dc:creator>Vikash Kumar</dc:creator>
      <pubDate>Wed, 15 Jul 2026 16:15:08 +0000</pubDate>
      <link>https://dev.to/thatonevikash/the-create-next-mui-website-is-now-live-53ha</link>
      <guid>https://dev.to/thatonevikash/the-create-next-mui-website-is-now-live-53ha</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgjp0jeglmhaey0or5bye.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgjp0jeglmhaey0or5bye.png" alt=" " width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🚀 &lt;strong&gt;The create-next-mui website is now live!&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;npx create-next-mui@latest my-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can now explore the project, get started in seconds, and discover everything the CLI has to offer—from scaffolding Next.js + MUI apps to installing plugins like Zustand and React Query.&lt;/p&gt;

&lt;p&gt;🌐 &lt;strong&gt;Live:&lt;/strong&gt; &lt;a href="https://create-next-mui.vercel.app/" rel="noopener noreferrer"&gt;https://create-next-mui.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'd love to hear your feedback and suggestions. Happy building! 💚&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>mui</category>
      <category>cli</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to structure slices with in a Zustand Store</title>
      <dc:creator>Vikash Kumar</dc:creator>
      <pubDate>Fri, 10 Jul 2026 12:48:40 +0000</pubDate>
      <link>https://dev.to/thatonevikash/how-to-structure-slices-with-in-a-zustand-store-5m7</link>
      <guid>https://dev.to/thatonevikash/how-to-structure-slices-with-in-a-zustand-store-5m7</guid>
      <description>&lt;p&gt;States in a react application plays the role of soul in the application.&lt;/p&gt;

&lt;p&gt;A small react application can handle states via context api for the simplicity.&lt;br&gt;
But as the application grows it needs a better state management system.&lt;/p&gt;
&lt;h2&gt;
  
  
  Zustand Store
&lt;/h2&gt;

&lt;p&gt;I am not going to talk about what is &lt;code&gt;zustand&lt;/code&gt; ?&lt;br&gt;
How to configure it with a react ( or next ) application ?&lt;br&gt;
Also not going to talk about the installation process... 😴 ( Skip the boring stuff )&lt;/p&gt;

&lt;p&gt;Here is the actual magical code, I am gonna share... 🪄&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;src/
└── stores/
    └── product/
        ├── index.ts
        ├── product-store.tsx
        └── slices/
            ├── create-owner-slice.ts
            └── create-product-slice.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;In this plan, I am going to wrap the store within context api layer for SSR data injection via server components.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// page.tsx&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Page&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;params&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="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;productId&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.shop.com/productId&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Failed to fetch product&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Product&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&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="nc"&gt;ProductStoreProvider&lt;/span&gt; &lt;span class="na"&gt;initialData&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="si"&gt;}&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="nc"&gt;ProductView&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="nc"&gt;ProductStoreProvider&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ContextAPI Layer
&lt;/h3&gt;

&lt;p&gt;Initializing &lt;code&gt;Context API&lt;/code&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="c1"&gt;// product-store.tsx&lt;/span&gt;

&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;use client&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createContext&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;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ProductStoreContext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createContext&lt;/span&gt;&lt;span class="p"&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;Setup the Provider layer with &lt;code&gt;InitialData&lt;/code&gt; passed by server component.&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="c1"&gt;// product-store.tsx&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useRef&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;PropsWithChildren&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;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;ProductStoreProviderProps&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;PropsWithChildren&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;initialData&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Product&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ProductStoreProvider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;initialData&lt;/span&gt; &lt;span class="p"&gt;}:&lt;/span&gt; &lt;span class="nx"&gt;ProductStoreProviderProps&lt;/span&gt;&lt;span class="p"&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ref&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useRef&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&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="nc"&gt;ProductStoreContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Provider&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;ProductStoreContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Provider&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;In this state, We've built the &lt;em&gt;shell&lt;/em&gt; of Zustand Store. 😋&lt;/p&gt;

&lt;p&gt;Now lets inject the &lt;code&gt;initialData&lt;/code&gt; using a factory function to create zustand store&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="c1"&gt;// product-store.tsx&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;create&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;zustand&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useRef&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;PropsWithChildren&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;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;createProductStore&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;initialData&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Product&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
  &lt;span class="nx"&gt;create&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ProductStore&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kd"&gt;set&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;get&lt;/span&gt;&lt;span class="p"&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;// slices...&lt;/span&gt;
  &lt;span class="p"&gt;}));&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ProductStoreProvider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;initialData&lt;/span&gt; &lt;span class="p"&gt;}:&lt;/span&gt; &lt;span class="nx"&gt;ProductStoreProviderProps&lt;/span&gt;&lt;span class="p"&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ref&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useRef&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createProductStore&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;initialData&lt;/span&gt;&lt;span class="p"&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="nc"&gt;ProductStoreContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Provider&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;ProductStoreContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Provider&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;finally, a &lt;code&gt;hook()&lt;/code&gt; 🪝 to retrive data from the store&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="c1"&gt;// product-store.tsx&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;useProductStore&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="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ProductStore&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;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;T&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ProductStoreContext&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;useProductStore must be used within ProductStoreProvider&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="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;context&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;selector&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;h4&gt;
  
  
  Why did I wrap the store with context api layer?
&lt;/h4&gt;

&lt;p&gt;The cleanup strategy of a zustand store now entirely eliminated.&lt;br&gt;
No more worries to clean up the store after unmounting. 😎🚀&lt;/p&gt;
&lt;h3&gt;
  
  
  Slices
&lt;/h3&gt;

&lt;p&gt;Here is the most common slice demonstration,&lt;br&gt;
You can refer to build a complex slice ( I mean simple slice 🤭 )&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="c1"&gt;// create-product-slice.ts&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;StoreApi&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;zustand&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ProductStore&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;../product-store&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; 

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;SetState&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;StoreApi&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ProductStore&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;setState&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;GetState&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;StoreApi&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ProductStore&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;getState&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;ProductData&lt;/span&gt; &lt;span class="o"&gt;=&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;ProductSlice&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&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="s1"&gt;price&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="s1"&gt;category&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="s1"&gt;labels&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="k"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;ProductSlice&lt;/span&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="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;price&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;category&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Steel&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="s1"&gt;Wooden&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="s1"&gt;Plastic&lt;/span&gt;&lt;span class="dl"&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="nl"&gt;labels&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="nf"&gt;onUpdate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;keyof&lt;/span&gt; &lt;span class="nx"&gt;ProductData&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ProductData&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kr"&gt;keyof&lt;/span&gt; &lt;span class="nx"&gt;ProductData&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;}):&lt;/span&gt; &lt;span class="k"&gt;void&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="nx"&gt;createProductSlice&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;set&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;SetState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;get&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;GetState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;initialData&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Product&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;ProductSlice&lt;/span&gt; &lt;span class="o"&gt;=&amp;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="nx"&gt;initialData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&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="na"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;initialData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;price&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;category&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;initialData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;category&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="na"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;initialData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;labels&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt;

  &lt;span class="na"&gt;onUpdate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&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="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;key&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="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;key&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;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then update the &lt;code&gt;product-store.tsx&lt;/code&gt; a bit to reflect the current changes&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="c1"&gt;// product-store.tsx&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createProductSlice&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;./slices/create-product-slice&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;ProductStore&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ProductSlice&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// type ProductStore = OwnerSlice &amp;amp; ProductSlice; // Add more slices here 👈&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;createProductStore&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;initialData&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Product&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
  &lt;span class="nx"&gt;create&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ProductStore&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kd"&gt;set&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;get&lt;/span&gt;&lt;span class="p"&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="p"&gt;...&lt;/span&gt;&lt;span class="nf"&gt;createProductSlice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;set&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;get&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;initialData&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;Alright, Now you've a very solid zustand store architecture to start with...&lt;/p&gt;

&lt;p&gt;Thanks for reading! 💖&lt;/p&gt;

</description>
      <category>zustand</category>
      <category>frontend</category>
      <category>webdev</category>
      <category>designpatterns</category>
    </item>
    <item>
      <title>Now with Plugin Support: npx create-next-mui v0.2.0 is live now 🚀</title>
      <dc:creator>Vikash Kumar</dc:creator>
      <pubDate>Mon, 06 Jul 2026 10:57:03 +0000</pubDate>
      <link>https://dev.to/thatonevikash/create-next-mui-v020-is-here-now-with-plugin-support-4l70</link>
      <guid>https://dev.to/thatonevikash/create-next-mui-v020-is-here-now-with-plugin-support-4l70</guid>
      <description>&lt;p&gt;We've just released &lt;code&gt;v0.2.0&lt;/code&gt; of create-next-mui, making it even faster to scaffold a Next.js + MUI projects.&lt;/p&gt;

&lt;p&gt;The biggest addition in this release is &lt;strong&gt;plugin&lt;/strong&gt; support.&lt;br&gt;
You can now install supported integrations into your project with a single command.&lt;/p&gt;
&lt;h2&gt;
  
  
  🚀 Get Started
&lt;/h2&gt;

&lt;p&gt;Create a new project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx create-next-mui my-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Add plugins anytime:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx create-next-mui add zustand
npx create-next-mui add react-query
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  ✨ What's New
&lt;/h2&gt;
&lt;h3&gt;
  
  
  🔌 Plugin Support
&lt;/h3&gt;

&lt;p&gt;Add Zustand to your project:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx create-next-mui add zustand
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Or install React Query ( TanStack Query ):&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx create-next-mui add react-query
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;No manual setup. The CLI adds the required files and configuration for you.&lt;/p&gt;
&lt;h3&gt;
  
  
  ⚡ Faster Project Creation
&lt;/h3&gt;

&lt;p&gt;You can now skip prompts using default flags:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx create-next-mui my-app &lt;span class="nt"&gt;--yes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  📦 Other Improvements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Added project name as a CLI argument.&lt;/li&gt;
&lt;li&gt;New templates for Zustand and React Query.&lt;/li&gt;
&lt;li&gt;Improved documentation.&lt;/li&gt;
&lt;li&gt;Initial plugin architecture for future extensions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Source:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/thatonevikash" rel="noopener noreferrer"&gt;
        thatonevikash
      &lt;/a&gt; / &lt;a href="https://github.com/thatonevikash/create-next-mui" rel="noopener noreferrer"&gt;
        create-next-mui
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      🚀 The fastest way to start with Nextjs + MUI
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;p&gt;&lt;a href="https://create-next-mui.vercel.app/" rel="nofollow noopener noreferrer"&gt;&lt;img width="1420" alt="CREATE-NEXT-MUI-BANNER" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fprivate-user-images.githubusercontent.com%2F146564586%2F602078991-11e72fc8-6b6d-40c4-97a1-c05f7b943e02.png%3Fjwt%3DeyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODQ3MTM0MTYsIm5iZiI6MTc4NDcxMzExNiwicGF0aCI6Ii8xNDY1NjQ1ODYvNjAyMDc4OTkxLTExZTcyZmM4LTZiNmQtNDBjNC05N2ExLWMwNWY3Yjk0M2UwMi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwNzIyJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDcyMlQwOTM4MzZaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0xMGIxNGY5MGY1MmU0YWNlY2ZkZThmMzNhZjQ0Nzg3MTg0YzI3NzQzNjE1ZTllNjM3NmU2Y2Q0OTY4ZmRjOTMxJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZyZXNwb25zZS1jb250ZW50LXR5cGU9aW1hZ2UlMkZwbmcifQ.nbnIFJfVxf_P1yN3v5UGZqGo-yz7Nqnj4lCyOSxB-O4"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;&lt;a href="https://create-next-mui.vercel.app/" rel="nofollow noopener noreferrer"&gt;create-next-mui&lt;/a&gt;&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/create-next-mui" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/b96be3eb0e6b37910bd1e0a741e04c3051864071f0df97663757031b2c93f027/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f6372656174652d6e6578742d6d75693f7374796c653d666c6174266c6f676f3d6e706d26636f6c6f723d434233383337" alt="npm version"&gt;&lt;/a&gt;
&lt;a href="https://nextjs.org/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/627417721a322b72f6bf76165edae11e99162cdd3ba25b036f158d04cb332ed3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4e6578742e6a732d7631362d3030303030303f7374796c653d666c6174266c6f676f3d6e657874646f746a73266c6f676f436f6c6f723d7768697465" alt="Next.js"&gt;&lt;/a&gt;
&lt;a href="https://mui.com/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/0269383a64c4563fad4c987772eea973951398ce1b28c31c1c8ab9e083d9bfe4/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4d55492d76392d3030374646463f7374796c653d666c6174266c6f676f3d6d7569266c6f676f436f6c6f723d7768697465" alt="MUI"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Scaffold a production-ready &lt;strong&gt;Next.js + Material UI&lt;/strong&gt; application in seconds.&lt;/p&gt;
&lt;p&gt;The generated project comes preconfigured with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;⚡ Next.js App Router&lt;/li&gt;
&lt;li&gt;🎨 Material UI&lt;/li&gt;
&lt;li&gt;📦 TypeScript or JavaScript templates&lt;/li&gt;
&lt;li&gt;🧹 ESLint Flat Config&lt;/li&gt;
&lt;li&gt;📁 Scalable project structure&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No global installation required.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Quick Start&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Create a new project:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npx create-next-mui my-app&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;or&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm init next-mui&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;If no project name is provided, the CLI will guide you through the setup interactively.&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npx create-next-mui&lt;/pre&gt;

&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Non-interactive Mode&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Use the &lt;code&gt;--yes&lt;/code&gt; (or &lt;code&gt;-y&lt;/code&gt;) flag to skip prompts and accept the default configuration.&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npx create-next-mui my-app --yes&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;This will automatically:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;use the provided project name&lt;/li&gt;
&lt;li&gt;select the &lt;strong&gt;TypeScript&lt;/strong&gt; template&lt;/li&gt;
&lt;li&gt;generate the project without prompting&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is especially useful for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CI/CD pipelines&lt;/li&gt;
&lt;li&gt;automation scripts&lt;/li&gt;
&lt;li&gt;testing&lt;/li&gt;
&lt;li&gt;quick project generation&lt;/li&gt;
&lt;/ul&gt;

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

&lt;/div&gt;
&lt;p&gt;Without &lt;code&gt;--yes&lt;/code&gt;, the CLI walks you through the available options.&lt;/p&gt;
&lt;p&gt;Current prompts include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Project name&lt;/li&gt;
&lt;li&gt;Language selection
&lt;ul&gt;
&lt;li&gt;TypeScript (recommended)&lt;/li&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Features
&lt;ul&gt;
&lt;li&gt;Zustand&lt;/li&gt;
&lt;li&gt;React Query (…&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/thatonevikash/create-next-mui" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Built with 💖 by &lt;strong&gt;thatonevikash&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>mui</category>
      <category>cli</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Launched: create-next-mui v0.1.0 🚀</title>
      <dc:creator>Vikash Kumar</dc:creator>
      <pubDate>Mon, 01 Jun 2026 10:38:02 +0000</pubDate>
      <link>https://dev.to/thatonevikash/stop-manual-boilerplate-scaffolding-nextjs-with-mui-1l60</link>
      <guid>https://dev.to/thatonevikash/stop-manual-boilerplate-scaffolding-nextjs-with-mui-1l60</guid>
      <description>&lt;p&gt;Every time I start a new project, I love to go with &lt;code&gt;nextjs&lt;/code&gt; + &lt;code&gt;mui&lt;/code&gt; combo.&lt;br&gt;
But it is frustating to build the theme system each time from scratch ( Of course I want a granular control over theme tokens )&lt;/p&gt;

&lt;p&gt;One thing is very common that is the theme system architecture for mui setup.&lt;/p&gt;

&lt;p&gt;Just think about a scenario spinning up a cli that do the exact work you want to do.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx create-next-mui@latest my-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MUI Integration:&lt;/strong&gt; Pre-configured theme folder parallel to the &lt;code&gt;app&lt;/code&gt; directory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clean Code by Default:&lt;/strong&gt; Integrated &lt;code&gt;eslint-plugin-perfectionist&lt;/code&gt; for auto-sorting imports/exports.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Next.js Optimized:&lt;/strong&gt; Built specifically for the latest Next.js patterns.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  See it in action
&lt;/h2&gt;




&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/thatonevikash" rel="noopener noreferrer"&gt;
        thatonevikash
      &lt;/a&gt; / &lt;a href="https://github.com/thatonevikash/create-next-mui" rel="noopener noreferrer"&gt;
        create-next-mui
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      🚀 The fastest way to start with Nextjs + MUI
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;p&gt;&lt;a href="https://create-next-mui.vercel.app/" rel="nofollow noopener noreferrer"&gt;&lt;img width="1420" alt="CREATE-NEXT-MUI-BANNER" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fprivate-user-images.githubusercontent.com%2F146564586%2F602078991-11e72fc8-6b6d-40c4-97a1-c05f7b943e02.png%3Fjwt%3DeyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODQ3MTM0MTYsIm5iZiI6MTc4NDcxMzExNiwicGF0aCI6Ii8xNDY1NjQ1ODYvNjAyMDc4OTkxLTExZTcyZmM4LTZiNmQtNDBjNC05N2ExLWMwNWY3Yjk0M2UwMi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwNzIyJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDcyMlQwOTM4MzZaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0xMGIxNGY5MGY1MmU0YWNlY2ZkZThmMzNhZjQ0Nzg3MTg0YzI3NzQzNjE1ZTllNjM3NmU2Y2Q0OTY4ZmRjOTMxJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZyZXNwb25zZS1jb250ZW50LXR5cGU9aW1hZ2UlMkZwbmcifQ.nbnIFJfVxf_P1yN3v5UGZqGo-yz7Nqnj4lCyOSxB-O4"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;&lt;a href="https://create-next-mui.vercel.app/" rel="nofollow noopener noreferrer"&gt;create-next-mui&lt;/a&gt;&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/create-next-mui" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/b96be3eb0e6b37910bd1e0a741e04c3051864071f0df97663757031b2c93f027/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f6372656174652d6e6578742d6d75693f7374796c653d666c6174266c6f676f3d6e706d26636f6c6f723d434233383337" alt="npm version"&gt;&lt;/a&gt;
&lt;a href="https://nextjs.org/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/627417721a322b72f6bf76165edae11e99162cdd3ba25b036f158d04cb332ed3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4e6578742e6a732d7631362d3030303030303f7374796c653d666c6174266c6f676f3d6e657874646f746a73266c6f676f436f6c6f723d7768697465" alt="Next.js"&gt;&lt;/a&gt;
&lt;a href="https://mui.com/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/0269383a64c4563fad4c987772eea973951398ce1b28c31c1c8ab9e083d9bfe4/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4d55492d76392d3030374646463f7374796c653d666c6174266c6f676f3d6d7569266c6f676f436f6c6f723d7768697465" alt="MUI"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Scaffold a production-ready &lt;strong&gt;Next.js + Material UI&lt;/strong&gt; application in seconds.&lt;/p&gt;
&lt;p&gt;The generated project comes preconfigured with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;⚡ Next.js App Router&lt;/li&gt;
&lt;li&gt;🎨 Material UI&lt;/li&gt;
&lt;li&gt;📦 TypeScript or JavaScript templates&lt;/li&gt;
&lt;li&gt;🧹 ESLint Flat Config&lt;/li&gt;
&lt;li&gt;📁 Scalable project structure&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No global installation required.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Quick Start&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Create a new project:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npx create-next-mui my-app&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;or&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm init next-mui&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;If no project name is provided, the CLI will guide you through the setup interactively.&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npx create-next-mui&lt;/pre&gt;

&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Non-interactive Mode&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Use the &lt;code&gt;--yes&lt;/code&gt; (or &lt;code&gt;-y&lt;/code&gt;) flag to skip prompts and accept the default configuration.&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npx create-next-mui my-app --yes&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;This will automatically:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;use the provided project name&lt;/li&gt;
&lt;li&gt;select the &lt;strong&gt;TypeScript&lt;/strong&gt; template&lt;/li&gt;
&lt;li&gt;generate the project without prompting&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is especially useful for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CI/CD pipelines&lt;/li&gt;
&lt;li&gt;automation scripts&lt;/li&gt;
&lt;li&gt;testing&lt;/li&gt;
&lt;li&gt;quick project generation&lt;/li&gt;
&lt;/ul&gt;

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

&lt;/div&gt;
&lt;p&gt;Without &lt;code&gt;--yes&lt;/code&gt;, the CLI walks you through the available options.&lt;/p&gt;
&lt;p&gt;Current prompts include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Project name&lt;/li&gt;
&lt;li&gt;Language selection
&lt;ul&gt;
&lt;li&gt;TypeScript (recommended)&lt;/li&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Features
&lt;ul&gt;
&lt;li&gt;Zustand&lt;/li&gt;
&lt;li&gt;React Query (…&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/thatonevikash/create-next-mui" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Thanks for Reading&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>mui</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Tired of Codebases with Mismatched File Casing? 🛠️ Meet CaselyJS (v1.0.4)</title>
      <dc:creator>Vikash Kumar</dc:creator>
      <pubDate>Sat, 04 Apr 2026 11:36:31 +0000</pubDate>
      <link>https://dev.to/thatonevikash/tired-of-codebases-with-mismatched-file-casing-meet-caselyjs-v101-479n</link>
      <guid>https://dev.to/thatonevikash/tired-of-codebases-with-mismatched-file-casing-meet-caselyjs-v101-479n</guid>
      <description>&lt;p&gt;Every developer has been there. You join a new project, or you're cleaning up a legacy codebase, and you see it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;UserService.ts&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;product_api.js&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;get-orders.ts&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;Final_component.jsx&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s a visual mess, and it makes finding files in your editor a constant friction point. Manually renaming dozens or hundreds of files is a tedious, error-prone nightmare.&lt;/p&gt;

&lt;p&gt;I built CaselyJS to solve this problem permanently, and I just upgraded it to v1.0 with a full TypeScript rewrite and a brand-new CLI.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚡ The 10-Second Quick Start (No Install Required)
&lt;/h2&gt;

&lt;p&gt;The best way to try CaselyJS is with &lt;code&gt;npx&lt;/code&gt;. You can clean up your current project right now without adding a single dependency to your &lt;code&gt;package.json&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="c"&gt;# Preview changes (dry run) in the current directory&lt;/span&gt;
npx caselyjs &lt;span class="nt"&gt;--dry&lt;/span&gt;

&lt;span class="c"&gt;# Re-case all files in the ./src folder to kebab-case&lt;/span&gt;
npx caselyjs ./src &lt;span class="nt"&gt;--case&lt;/span&gt; kebab
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ✨ What’s New in v1.0?
&lt;/h2&gt;

&lt;p&gt;I’ve transformed CaselyJS from a simple string utility into a robust, high-performance CLI tool designed for large-scale codebase refactoring.&lt;/p&gt;

&lt;h3&gt;
  
  
  Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Full CLI&lt;/strong&gt;: No code required. Run it directly from the terminal.&lt;br&gt;
Refactor codebases in seconds.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dry Run Mode&lt;/strong&gt;: See exactly which files will be renamed before it happens.&lt;br&gt;
Total peace of mind. Zero risk.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Recursive Bottom-Up&lt;/strong&gt;: Renames deep directories first, keeping parent paths valid.&lt;br&gt;
It just works, even on deeply nested structures.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;File Filtering&lt;/strong&gt;: target specific extensions (e.g., just &lt;code&gt;.ts&lt;/code&gt; and &lt;code&gt;.tsx&lt;/code&gt;).&lt;br&gt;
Complete control over the scope of changes.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🚀 Usage Examples
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx caselyjs ./src &lt;span class="nt"&gt;--full&lt;/span&gt; &lt;span class="nt"&gt;--case&lt;/span&gt; pascal &lt;span class="nt"&gt;--dry&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  CLI Options
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;--case&lt;/code&gt;: pascal | kebab | camel ( default: &lt;code&gt;kebab&lt;/code&gt;, shorthand: &lt;code&gt;-c&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;npx caselyjs ./src/components &lt;span class="nt"&gt;--case&lt;/span&gt; pascal

&lt;span class="c"&gt;# or&lt;/span&gt;
npm caselyjs ./src/components &lt;span class="nt"&gt;-c&lt;/span&gt; pascal
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;--ext&lt;/code&gt;: ( default: &lt;code&gt;"js,jsx,ts,tsx"&lt;/code&gt;, shorthand: &lt;code&gt;-e&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;npx caselyjs ./src/components &lt;span class="nt"&gt;--ext&lt;/span&gt; &lt;span class="s2"&gt;"go,py,cpp"&lt;/span&gt;

&lt;span class="c"&gt;# or&lt;/span&gt;
npm caselyjs ./src/components &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"go,py,cpp"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;--ext&lt;/code&gt; overrides the existing extensions&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;--full&lt;/code&gt;: ( default: &lt;code&gt;false&lt;/code&gt;, shorthand: &lt;code&gt;-e&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;npx caselyjs ./src/components &lt;span class="nt"&gt;--case&lt;/span&gt; kebab &lt;span class="nt"&gt;--full&lt;/span&gt;

&lt;span class="c"&gt;# or&lt;/span&gt;
npm caselyjs ./src/components &lt;span class="nt"&gt;-c&lt;/span&gt; kebab &lt;span class="nt"&gt;-f&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;--dry&lt;/code&gt;: ( default: &lt;code&gt;false&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;npx caselyjs ./src/components &lt;span class="nt"&gt;--case&lt;/span&gt; kebab &lt;span class="nt"&gt;--full&lt;/span&gt; &lt;span class="nt"&gt;--dry&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🧠 Under the Hood (For the Geeks)
&lt;/h3&gt;

&lt;p&gt;This v1.0 rewrite was about more than just a CLI. I moved the entire core to TypeScript for strict type safety. We use Commander.js for robust flag parsing, Chalk for those beautiful terminal colors, and a custom Bottom-Up Sorting algorithm for recursive folder renames. This ensures that a child file's path isn't broken when its parent folder is renamed during the process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mit-Licensed and Open Source&lt;/strong&gt;&lt;br&gt;
CaselyJS is 100% open source and free to use.&lt;/p&gt;

&lt;p&gt;I would love your feedback on the new CLI and features! If you run into any issues or have a feature request (more case types?), please open an issue or pull request on GitHub.&lt;/p&gt;

&lt;p&gt;Try it out: &lt;code&gt;npx caselyjs ./your-test-folder --dry&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Repository: &lt;a href="https://github.com/thatonevikash/caselyjs" rel="noopener noreferrer"&gt;github.com/thatonevikash/caselyjs&lt;/a&gt;&lt;br&gt;
NPM: &lt;a href="https://www.npmjs.com/package/caselyjs" rel="noopener noreferrer"&gt;npm/caselyjs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Made with ❤️ by thatonevikash&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>codequality</category>
      <category>rename</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Rename codebase with ease - "caselyjs"</title>
      <dc:creator>Vikash Kumar</dc:creator>
      <pubDate>Fri, 01 Aug 2025 07:40:02 +0000</pubDate>
      <link>https://dev.to/thatonevikash/rename-codebase-with-ease-caselyjs-jjd</link>
      <guid>https://dev.to/thatonevikash/rename-codebase-with-ease-caselyjs-jjd</guid>
      <description>&lt;h2&gt;
  
  
  Know the uses!
&lt;/h2&gt;

&lt;p&gt;Renaming or changing &lt;code&gt;files/folders&lt;/code&gt; is very common thing most of devs do it more often.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cause
&lt;/h2&gt;

&lt;p&gt;You've a project with 50+ files and folders. You're using &lt;code&gt;camelCase&lt;/code&gt; for naming files and folders so far.&lt;/p&gt;

&lt;p&gt;Then you realized I should use another case eg.- &lt;code&gt;PascalCase&lt;/code&gt;, &lt;code&gt;kebab-case&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In such case, you'll rename them manually.&lt;br&gt;
&lt;em&gt;Good but not Efficient&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Lets increase the numbers of file or folders to &lt;strong&gt;500+&lt;/strong&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Caselyjs
&lt;/h2&gt;

&lt;p&gt;Built to eliminate manual task.&lt;/p&gt;

&lt;p&gt;Suppose, You've a project built on react using &lt;code&gt;vite&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;and the folder structure looks like&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%2F71dfid8w7pnboeivqnpu.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%2F71dfid8w7pnboeivqnpu.png" alt=" " width="397" height="603"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To organize entire codebase, You've decided to choose one naming case for the entire codebase, that is &lt;code&gt;kebab-case&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;To achieve this all you need &lt;code&gt;caselyjs&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;npm i caselyjs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Create a file parallel to &lt;code&gt;src&lt;/code&gt; directory as rename.js ( or change.js ) anything its up to you.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Configs&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&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;casely&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;caselyjs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;casely&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;config&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
   &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;src&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
   &lt;span class="na"&gt;case&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;kebab&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
   &lt;span class="na"&gt;file&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;jsx&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ts&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;tsx&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
   &lt;span class="na"&gt;operate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;full&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="nx"&gt;casely&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://www.npmjs.com/package/caselyjs" rel="noopener noreferrer"&gt;&lt;code&gt;npm/caselyjs&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thank You!&lt;/p&gt;

</description>
      <category>programming</category>
      <category>javascript</category>
      <category>tooling</category>
      <category>code</category>
    </item>
  </channel>
</rss>
