<?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: Shaik Mukthahar</title>
    <description>The latest articles on DEV Community by Shaik Mukthahar (@shaik_mukthahar_bb33d39cf).</description>
    <link>https://dev.to/shaik_mukthahar_bb33d39cf</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%2F4045344%2F46042da2-45b1-4fe1-8cae-7f1e53e4156c.png</url>
      <title>DEV Community: Shaik Mukthahar</title>
      <link>https://dev.to/shaik_mukthahar_bb33d39cf</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shaik_mukthahar_bb33d39cf"/>
    <language>en</language>
    <item>
      <title>I Was Tired of Manually Managing Assets in React Native, So I Built assets-toolkit</title>
      <dc:creator>Shaik Mukthahar</dc:creator>
      <pubDate>Fri, 24 Jul 2026 10:37:33 +0000</pubDate>
      <link>https://dev.to/shaik_mukthahar_bb33d39cf/i-was-tired-of-manually-managing-assets-in-react-native-so-i-built-assets-toolkit-4f68</link>
      <guid>https://dev.to/shaik_mukthahar_bb33d39cf/i-was-tired-of-manually-managing-assets-in-react-native-so-i-built-assets-toolkit-4f68</guid>
      <description>&lt;h1&gt;
  
  
  I Built &lt;code&gt;assets-toolkit&lt;/code&gt; Because Asset Management Shouldn't Be Manual
&lt;/h1&gt;

&lt;p&gt;Every frontend project starts small. &lt;/p&gt;

&lt;p&gt;A logo, A few icons, some images, maybe a custom font or an animation. Managing assets manually doesn't feel like a problem, until the project grows.&lt;/p&gt;

&lt;p&gt;What was once a handful of files becomes hundreds of assets spread across multiple folders.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;assets/
├── images/
├── icons/
├── svg/
├── fonts/
├── audio/
├── video/
└── lottie/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Everything still looks organized.&lt;/p&gt;

&lt;p&gt;But then the real work begins.&lt;/p&gt;




&lt;h1&gt;
  
  
  The Hidden Problem
&lt;/h1&gt;

&lt;p&gt;Every time someone adds a new asset, someone also has to update the asset registry.&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="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;images&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;logo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../assets/images/logo.png&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;profile&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../assets/images/profile.png&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;home&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../assets/images/home.png&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At first, this isn't a big deal.&lt;/p&gt;

&lt;p&gt;But as the project grows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Someone forgets to add the new asset.&lt;/li&gt;
&lt;li&gt;Someone renames a file and breaks imports.&lt;/li&gt;
&lt;li&gt;Someone accidentally commits duplicate images.&lt;/li&gt;
&lt;li&gt;Someone adds filenames with spaces or special characters.&lt;/li&gt;
&lt;li&gt;Merge conflicts become common because everyone edits the same asset file.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these problems are difficult.&lt;/p&gt;

&lt;p&gt;They're just repetitive.&lt;/p&gt;

&lt;p&gt;And repetitive work should be automated.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why I Built &lt;code&gt;assets-toolkit&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;After running into these problems across multiple projects, I decided to build a tool that would handle asset management for me.&lt;/p&gt;

&lt;p&gt;Instead of manually maintaining asset files, I wanted a single command that could scan my project and generate everything automatically.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx assets-toolkit generate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's exactly what &lt;strong&gt;assets-toolkit&lt;/strong&gt; does.&lt;/p&gt;

&lt;p&gt;It scans your assets, validates them, detects duplicates, and generates a clean, type-safe asset map that you can import throughout your application.&lt;/p&gt;

&lt;p&gt;It works with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React Native&lt;/li&gt;
&lt;li&gt;Expo&lt;/li&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Next.js&lt;/li&gt;
&lt;li&gt;Vite&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Before
&lt;/h1&gt;

&lt;p&gt;Manually importing assets everywhere:&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="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;logo&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../assets/images/logo.png&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="nx"&gt;profile&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../assets/images/profile.png&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="nx"&gt;searchIcon&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../assets/icons/search.svg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or maintaining large asset registry files by hand:&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="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;images&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;logo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../assets/images/logo.png&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;profile&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../assets/images/profile.png&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="c1"&gt;// ...hundreds more&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  After
&lt;/h1&gt;

&lt;p&gt;Generate everything automatically:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx assets-toolkit generate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then simply use:&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="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Assets&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="s2"&gt;./generated-assets&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;logo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Assets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;images&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;logo&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;profile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Assets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;images&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;profile&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;searchIcon&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Assets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;svg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;icons&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;search&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No manual imports.&lt;/p&gt;

&lt;p&gt;No handwritten asset registry.&lt;/p&gt;

&lt;p&gt;No repetitive maintenance.&lt;/p&gt;




&lt;h1&gt;
  
  
  More Than Just Code Generation
&lt;/h1&gt;

&lt;p&gt;While building the package, I realized asset management involves more than generating imports.&lt;/p&gt;

&lt;p&gt;Projects also suffer from duplicate files, invalid filenames, oversized assets, and inconsistent folder structures.&lt;/p&gt;

&lt;p&gt;That's why I added additional CLI commands.&lt;/p&gt;

&lt;h3&gt;
  
  
  Generate typed asset maps
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx assets-toolkit generate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Validate assets and detect common issues
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx assets-toolkit doctor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Automatically fix invalid filenames
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx assets-toolkit doctor &lt;span class="nt"&gt;--fix&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  View project asset reports
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx assets-toolkit reports
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Clean generated files and cache
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx assets-toolkit clean
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Features
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;🚀 Generate type-safe asset maps&lt;/li&gt;
&lt;li&gt;📁 Preserve nested folder structures&lt;/li&gt;
&lt;li&gt;🔍 Detect duplicate assets&lt;/li&gt;
&lt;li&gt;🛡️ Validate filenames before they cause build issues&lt;/li&gt;
&lt;li&gt;📊 Generate useful asset reports&lt;/li&gt;
&lt;li&gt;♻️ Clean generated files with one command&lt;/li&gt;
&lt;li&gt;📦 Supports images, SVGs, fonts, audio, video, and Lottie files&lt;/li&gt;
&lt;li&gt;⚡ Works with React Native, Expo, React, Next.js, and Vite&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Installation
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--save-dev&lt;/span&gt; assets-toolkit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Generate your asset map:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx assets-toolkit generate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Why I Open-Sourced It
&lt;/h1&gt;

&lt;p&gt;This package started as a tool I built to solve my own workflow problems.&lt;/p&gt;

&lt;p&gt;After using it across multiple projects, I realized many developers deal with the same repetitive asset management tasks.&lt;/p&gt;

&lt;p&gt;Instead of solving the same problem over and over again, I decided to publish it as my first npm package so others could benefit from it too.&lt;/p&gt;

&lt;p&gt;It's still in its early stages, and I'm actively improving it based on real-world feedback.&lt;/p&gt;




&lt;h1&gt;
  
  
  I'd Love Your Feedback
&lt;/h1&gt;

&lt;p&gt;If you work with React Native, Expo, React, Next.js, or Vite, I'd love for you to try it out.&lt;/p&gt;

&lt;p&gt;If you have ideas, feature requests, or find a bug, please let me know.&lt;/p&gt;

&lt;p&gt;Your feedback will help shape future releases.&lt;/p&gt;

&lt;p&gt;📦 &lt;strong&gt;NPM Package:&lt;/strong&gt; &lt;a href="https://www.npmjs.com/package/assets-toolkit" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/assets-toolkit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⭐ &lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;em&gt;(Add your GitHub repository link here.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading, and happy coding! 🚀&lt;/p&gt;

</description>
      <category>automation</category>
      <category>mobile</category>
      <category>reactnative</category>
      <category>tools</category>
    </item>
  </channel>
</rss>
