<?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: Nish</title>
    <description>The latest articles on DEV Community by Nish (@its_nish).</description>
    <link>https://dev.to/its_nish</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%2F3234447%2F0d6483c4-8bbb-464a-a37a-db93789d1f17.JPG</url>
      <title>DEV Community: Nish</title>
      <link>https://dev.to/its_nish</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/its_nish"/>
    <language>en</language>
    <item>
      <title>New to Docker, will try this :)</title>
      <dc:creator>Nish</dc:creator>
      <pubDate>Tue, 11 Nov 2025 05:00:24 +0000</pubDate>
      <link>https://dev.to/its_nish/new-to-docker-will-try-this--4ggp</link>
      <guid>https://dev.to/its_nish/new-to-docker-will-try-this--4ggp</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/dev_tips" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F2901662%2F1dcce5de-7920-43a0-a337-e1dfb375b204.png" alt="dev_tips"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/dev_tips/10-hands-on-docker-projects-thatll-actually-level-up-your-skills-not-just-hello-world-junk-1mjp" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;10 hands-on Docker projects that’ll actually level up your skills not just hello-world junk&lt;/h2&gt;
      &lt;h3&gt;&amp;lt;devtips/&amp;gt; ・ Jun 19&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#ai&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#devops&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#softwaredevelopment&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>webdev</category>
      <category>ai</category>
      <category>devops</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>Getting started with Expo and React Native 2025</title>
      <dc:creator>Nish</dc:creator>
      <pubDate>Sat, 07 Jun 2025 19:54:09 +0000</pubDate>
      <link>https://dev.to/its_nish/getting-started-with-expo-and-react-native-2025-51bc</link>
      <guid>https://dev.to/its_nish/getting-started-with-expo-and-react-native-2025-51bc</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;When we are building apps for the mobile or talking about mobile development. We can classify them into two categories:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Native Development&lt;/strong&gt;: Apps are built specifically for a platform using the platform's official languages and tools. &lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Android --&amp;gt; Built with Kotlin or Java using Android Studio.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;IOS ---&amp;gt; Built with Swift or Objective-C using XCode.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Hybrid Development&lt;/strong&gt;: Apps are built using web technologies where there is one codebase that runs on both platforms.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;React Native --&amp;gt; Built with JavaScript using React.&lt;/li&gt;
&lt;li&gt;Flutter --&amp;gt; Built with Dart using Flutter.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With these options in our arsenal, whenever we are choosing to go with React Native, we have 2 choices, either to go with &lt;strong&gt;React Native CLI&lt;/strong&gt; or the &lt;strong&gt;EXPO Framework&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  Project Setup
&lt;/h3&gt;

&lt;p&gt;Here is the official &lt;a href="https://docs.expo.dev/get-started/create-a-project/" rel="noopener noreferrer"&gt;Expo Documentation&lt;/a&gt; to create a new project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx create-expo --help
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will help us to determine which package manager to use and whether to go with barebones setup or use existing template setup with react-router installed.&lt;/p&gt;

&lt;p&gt;For me personally, I would like to go with an empty template and add things along the way.&lt;/p&gt;

&lt;p&gt;Choose the empty template for maximium flexibility.&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%2F2c9me2wo3c5doehuebjm.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%2F2c9me2wo3c5doehuebjm.png" alt="Template selection" width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For me, I would like to go with pnpm&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%2F1uxtvmt3oydsst0cuxra.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%2F1uxtvmt3oydsst0cuxra.png" alt="Selecting Template" width="800" height="584"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Navigate to the project and then&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pnpm expo start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fs6r6tndizl7s9n8tb7eu.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%2Fs6r6tndizl7s9n8tb7eu.png" alt="Starting Project" width="800" height="259"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As of now I am running on an IOS Simulator, you can even use the EXPO GO app to run the project. Here, &lt;a href="https://docs.expo.dev/get-started/set-up-your-environment/?platform=android&amp;amp;device=physical&amp;amp;mode=expo-go" rel="noopener noreferrer"&gt;Expo Go&lt;/a&gt; is a sandbox that enables you to quickly experiment with building native Android and iOS apps. I&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%2Fi4ol4j6bduavk2ts7pml.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%2Fi4ol4j6bduavk2ts7pml.png" alt="First App" width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;h3&gt;
  
  
  Installing ESLINT and Prettier
&lt;/h3&gt;

&lt;p&gt;With &lt;a href="https://docs.expo.dev/guides/using-eslint/" rel="noopener noreferrer"&gt;ESLint and Prettier&lt;/a&gt;, we can maintain code quality and consistent formatting.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx expo lint
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We also need the babel.config.js and metro.config.js files.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx expo customize
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Make sure to use space bar to select the babel and metro files.&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%2Fhekil01knf133g2s6pys.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%2Fhekil01knf133g2s6pys.png" alt="Metro files" width="800" height="103"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the metro.config.js make the following changes:&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="cm"&gt;/* eslint-env node */&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;getDefaultConfig&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&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="s1"&gt;expo/metro-config&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="cm"&gt;/** @type {import('expo/metro-config').MetroConfig} */&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getDefaultConfig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
   &lt;span class="nx"&gt;__dirname&lt;/span&gt; 
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;Then install prettier in the 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 expo &lt;span class="nb"&gt;install &lt;/span&gt;prettier eslint-config-prettier eslint-plugin-prettier &lt;span class="nt"&gt;--dev&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Make changes to the eslint.config.js&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="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;defineConfig&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&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="s1"&gt;eslint/config&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;expoConfig&lt;/span&gt; &lt;span class="o"&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="s1"&gt;eslint-config-expo/flat&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;eslintPluginPrettierRecommended&lt;/span&gt; &lt;span class="o"&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="s1"&gt;eslint-plugin-prettier/recommended&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;defineConfig&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
  &lt;span class="nx"&gt;expoConfig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;eslintPluginPrettierRecommended&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;ignores&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;dist/*&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, when we run npx expo lint, anything that is not aligned with Prettier formatting will be caught as an error.&lt;/p&gt;

&lt;p&gt;Also for the prettier configuration, we can follow this &lt;a href="https://github.com/expo/expo/tree/main/packages/eslint-config-universe#customizing-prettier" rel="noopener noreferrer"&gt;link&lt;/a&gt;&lt;/p&gt;



&lt;h3&gt;
  
  
  Adding Expo Router
&lt;/h3&gt;

&lt;p&gt;In mobile and web apps, routing manages how a user moves between different screens or views within your application. There are various routing libraries (or navigation libraries) for React Native, like &lt;strong&gt;"React Native Navigation"&lt;/strong&gt; and "React Navigation", with the latter being a popular choice amongst the Expo Developers.&lt;/p&gt;

&lt;p&gt;Building mobile apps often involves managing how users navigate between different screens. In the realm of Expo development, the &lt;a href="https://docs.expo.dev/router/introduction/" rel="noopener noreferrer"&gt;Expo Router&lt;/a&gt; emerges as a valuable tool for streamlining this process. &lt;/p&gt;

&lt;p&gt;Expo Router enables file based routing which is very similar to Next.JS. An Expo router project will have a root folder called app, which may only contain screen and layout files. Since we are following &lt;a href="https://docs.expo.dev/router/installation/#manual-installation" rel="noopener noreferrer"&gt;manual installation&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx expo install expo-router react-native-safe-area-context react-native-screens expo-linking expo-constants expo-status-bar
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every project must have a index route, even if we don’t use index other wise, we must have one file called index in our app folder. It is the screen that open first when the app is lunched. The only way to use a different screen when the app is lunched is using a redirect.&lt;/p&gt;

&lt;p&gt;Create a folder called src and inside a subfolder called app and then create a new file called index.tsx and copy the contents of the App.tsx to the index.tsx and make the screen as IndexScreen&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%2Fusv9xov3ny7y34sbf9b0.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%2Fusv9xov3ny7y34sbf9b0.png" alt="Renaming Files" width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we need to setup entry point and modify the project configuration&lt;br&gt;
In the package.json add&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "main": "expo-router/entry"
}

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

&lt;/div&gt;



&lt;p&gt;In the app.json add a deep link&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "scheme": "your-app-scheme"
}

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

&lt;/div&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%2Fes6ljp86vj0rnnwr0jvq.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%2Fes6ljp86vj0rnnwr0jvq.png" alt="Adding Configs" width="800" height="115"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we can delete the index.ts and the App.tsx file, the project structure looks like this:&lt;/p&gt;

&lt;p&gt;Also since we have done a lot of changes, we can reset the cache and try running our project again.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx expo start --reset cache
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fwf0yrefybbl4ki2k3rg4.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%2Fwf0yrefybbl4ki2k3rg4.png" alt="Project Structure" width="800" height="489"&gt;&lt;/a&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%2Frf6n1hh7ofgw0eehfatc.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%2Frf6n1hh7ofgw0eehfatc.png" alt="Running" width="800" height="330"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
