<?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: Sarath Mohan</title>
    <description>The latest articles on DEV Community by Sarath Mohan (@sarath263).</description>
    <link>https://dev.to/sarath263</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%2F1546142%2Fa2060637-22dd-4bd7-b15a-fa84179820cd.jpg</url>
      <title>DEV Community: Sarath Mohan</title>
      <link>https://dev.to/sarath263</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sarath263"/>
    <language>en</language>
    <item>
      <title>React forgot to add something.</title>
      <dc:creator>Sarath Mohan</dc:creator>
      <pubDate>Mon, 28 Sep 2026 05:21:43 +0000</pubDate>
      <link>https://dev.to/sarath263/react-forgot-to-add-something-4igf</link>
      <guid>https://dev.to/sarath263/react-forgot-to-add-something-4igf</guid>
      <description>&lt;p&gt;It is a simple and humble &lt;strong&gt;Global state management&lt;/strong&gt;. &lt;br&gt;
I know, Now you are thinking "Why not React context or any others?". The answer is simple. People cannot use something which has less render control and difficult to use, React knows it and that's exactly the reason they say this&lt;br&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%2Fony8nhr8kv8sh654xi38.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%2Fony8nhr8kv8sh654xi38.png" alt=" " width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thats why Redux still wins. But I really hate boilerplate code. Did RTK solved it? sorry, not for me . And, all other libraries make us write a lot of code. Mobx I liked, but decorators and multi store makes it tough.&lt;/p&gt;

&lt;p&gt;To put it simple, &lt;strong&gt;Why don't I make a normal object , make it reactive and control the render to value level&lt;/strong&gt;. yes, if one value changes, that value subscriptions(only) will render, nothing else.&lt;/p&gt;

&lt;p&gt;So I created &lt;strong&gt;native-state-react&lt;/strong&gt;, uses just a couple of react hooks and just a single file. The entire library is a single file. React should have done this before.&lt;/p&gt;

&lt;p&gt;The project started as an experiment to simplify the state and data, reduce boilerplate compared to Redux or Context API and a simple and local state feel for developers, while still offering predictable and scalable state handling. It means a lot coz philosophy of keeping React development closer to its native feel — minimal abstractions, maximum clarity.&lt;/p&gt;

&lt;p&gt;Here is the &lt;a href="https://github.com/sarath263/native-state" rel="noopener noreferrer"&gt;github link to the project&lt;/a&gt;. See &lt;a href="https://github.com/sarath263/native-state/tree/main/benchmark" rel="noopener noreferrer"&gt;benchmark &lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Renders has been optimized to the extended levels available in eventloop engine.&lt;/p&gt;

&lt;p&gt;Pre-compiled path getters (compileGetter): Replaced slow loop-based object property drilldowns with optimized, static depth getter functions, avoiding array allocations and loop overhead on every render cycle.&lt;/p&gt;

&lt;p&gt;Path-targeted subscriptions: Replaced the global subscriber set with a Map of paths to sets of listener callbacks. This ensures that updates to one slice of state only notify relevant subscribers, achieving $O(1)$ lookup for exact selector matches and avoiding unnecessary calculations for unrelated subscribers.&lt;/p&gt;

&lt;p&gt;Microtask notification batching (queueMicrotask): Implemented batched notifications so that rapid successive state updates (e.g. synchronous update loops) queue callbacks and trigger component updates/re-renders exactly once at the end of the tick.&lt;/p&gt;

&lt;p&gt;Demo&lt;/p&gt;

&lt;p&gt;You can explore the package &lt;a href="https://www.npmjs.com/package/native-state-react" rel="noopener noreferrer"&gt;native-state-react&lt;/a&gt; on npm. A demo is available in &lt;a href="https://stackblitz.com/edit/native-state-react" rel="noopener noreferrer"&gt;Stack blitz&lt;/a&gt;. The repo includes usage examples showing how to define state, update it, and consume it across components without complex setup.&lt;/p&gt;

&lt;p&gt;Usage&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Wrap your app with the &lt;code&gt;&amp;lt;Root&amp;gt;&lt;/code&gt; component at the top level, optionally providing the initial state.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;useNativeState&lt;/code&gt; in your components to read and update global state.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Use it almost like &lt;code&gt;useState&lt;/code&gt; .. see below&lt;/p&gt;

&lt;p&gt;in your component:&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;useNativeState&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;native-state-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;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setName&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useNativeState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;s.name&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;Andrew&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;updateName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;setName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;George&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="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/p&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;updateName&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;Update&lt;/span&gt; &lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;See running &lt;a href="https://stackblitz.com/edit/native-state-react" rel="noopener noreferrer"&gt;Demo Here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;API&lt;/p&gt;

&lt;p&gt;1.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;Root&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The root component that initializes the global state store.&lt;/p&gt;

&lt;p&gt;Props: &lt;code&gt;initial&lt;/code&gt;: (optional) Object - The initial state. Defaults to an empty object {}.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;children&lt;/code&gt;: (optional) React Nodes - Children to render inside .&lt;/p&gt;

&lt;p&gt;2.&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="nf"&gt;useNativeState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pathString&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;initialVal&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hook to read and write a specific slice of the global state using string path notation.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;pathString&lt;/code&gt;: String - The path to select in the global state, starting with 'state' or 's' (e.g. 's.name', 'state.school.class', 's.todos[0].title', 'state.school.class.student[21]').&lt;/p&gt;

&lt;p&gt;&lt;code&gt;initialVal&lt;/code&gt;: (optional) Any - The value to initialize in the pathString. Note that if pathString is already initialized or has value set, it will NOT be updated/initilized again, you may cal set method to update the value.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Returns&lt;/strong&gt;: &lt;code&gt;[value, setValue]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;value: The current value at the specified path.&lt;/p&gt;

&lt;p&gt;setValue: Function to update the value of this specific path.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;[!WARNING]&lt;/p&gt;

&lt;p&gt;if pathString is s.todos[0].title , s.todos[0] must exist in the global state so that it can retrieve/set title&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;useNativeSelector(selectorFunction)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;A highly optimized read-only hook that subscribes to state slices. Components using this hook will re-render only when the selected slice changes. Internally utilizes React's modern useSyncExternalStore for tear-free rendering.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;selectorFunction&lt;/code&gt;: Function - A function that accepts the state and returns the selected slice (e.g. s =&amp;gt; s.name).&lt;/p&gt;

&lt;p&gt;Returns: value&lt;/p&gt;

&lt;p&gt;value: The read-only value of the selected state slice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;BENCHMARK&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Code used to run benchmark can be found in benchmarks folder .&lt;/p&gt;

</description>
      <category>react</category>
      <category>reactnative</category>
      <category>globalstate</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Native Global State: : Simplifying State Management the Native Way</title>
      <dc:creator>Sarath Mohan</dc:creator>
      <pubDate>Thu, 04 Jun 2026 10:06:55 +0000</pubDate>
      <link>https://dev.to/sarath263/native-global-state-1b1</link>
      <guid>https://dev.to/sarath263/native-global-state-1b1</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-05-21"&gt;GitHub Finish-Up-A-Thon Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;&lt;a href="https://github.com/sarath263/native-state" rel="noopener noreferrer"&gt;native-state-react&lt;/a&gt;&lt;/strong&gt;, a lightweight state management library for React that focuses on performance, simplicity and native patterns. The project started as an experiment to improve performance, reduce boilerplate compared to Redux or Context API and a simple and local state feel for developers, while still offering predictable and scalable state handling. It means a lot to me because it represents my philosophy of keeping React development closer to its native feel — minimal abstractions, maximum clarity.&lt;/p&gt;

&lt;p&gt;I put maximum efforts on this, and it has even optimized to these levels&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pre-compiled path getters (compileGetter)&lt;/strong&gt;: Replaced slow loop-based object property drilldowns with optimized, static depth getter functions, avoiding array allocations and loop overhead on every render cycle.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Path-targeted subscriptions&lt;/strong&gt;: Replaced the global subscriber set with a Map of paths to sets of listener callbacks. This ensures that updates to one slice of state only notify relevant subscribers, achieving $O(1)$ lookup for exact selector matches and avoiding unnecessary calculations for unrelated subscribers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Microtask notification batching (queueMicrotask)&lt;/strong&gt;: Implemented batched notifications so that rapid successive state updates (e.g. synchronous update loops) queue callbacks and trigger component updates/re-renders exactly once at the end of the tick.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;You can explore the package &lt;a href="https://www.npmjs.com/package/native-state-react" rel="noopener noreferrer"&gt;here: native-state-react on npm&lt;/a&gt;. A demo is added using &lt;a href="https://stackblitz.com/edit/native-state-react?file=src%2FApp.jsx" rel="noopener noreferrer"&gt;Stack blits here&lt;/a&gt; &lt;a href="https://stackblitz.com/edit/native-state-react?file=src%2FApp.jsx" rel="noopener noreferrer"&gt;https://stackblitz.com/edit/native-state-react?file=src%2FApp.jsx&lt;/a&gt; . The repo includes usage examples showing how to define state, update it, and consume it across components without complex setup.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&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;useNativeState&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;native-state-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;function&lt;/span&gt; &lt;span class="nf"&gt;Counter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useNativeState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;state.count&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&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;count&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Increment&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This simple snippet demonstrates how intuitive it is to manage state with the library.&lt;/p&gt;

&lt;p&gt;I have even did a benchmark comparing it to famous redux library. Results were impressive (even to my surprise)&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%2F7414t9d0pejs9qi7ru82.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%2F7414t9d0pejs9qi7ru82.png" alt=" " width="780" height="747"&gt;&lt;/a&gt;&lt;br&gt;
Here is the benchmark code :&lt;br&gt;
&lt;a href="https://github.com/sarath263/native-state/tree/main/benchmark" rel="noopener noreferrer"&gt;https://github.com/sarath263/native-state/tree/main/benchmark&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Comeback Story
&lt;/h2&gt;

&lt;p&gt;Originally, the project was just a rough prototype with limited functionality. It lacked features(single hook and no native feel), documentation, examples, and polish. For this challenge, I revisited it, cleaned up the API, improved code support, and added clear usage guides. I also fixed edge cases around state updates and optimized performance for larger applications. Now, it’s ready for developers to adopt without friction.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Experience with GitHub Copilot
&lt;/h2&gt;

&lt;p&gt;GitHub Copilot was a huge help in finishing this project. It assisted me in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generating many of the code quickly. Speed up my development.&lt;/li&gt;
&lt;li&gt;Suggesting options that improved developer experience.&lt;/li&gt;
&lt;li&gt;Helping with documentation drafts and example snippets.&lt;/li&gt;
&lt;li&gt;Speeding up repetitive tasks so I could focus on architectural design decisions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Copilot felt like a coding partner that nudged me toward cleaner solutions and helped me finish what I had started months ago.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>react</category>
      <category>nativestate</category>
    </item>
  </channel>
</rss>
