<?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: Thea </title>
    <description>The latest articles on DEV Community by Thea  (@roxascodes).</description>
    <link>https://dev.to/roxascodes</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%2F3108710%2F0567f4a0-b6cf-4247-94a2-0489e911c2f3.jpg</url>
      <title>DEV Community: Thea </title>
      <link>https://dev.to/roxascodes</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/roxascodes"/>
    <language>en</language>
    <item>
      <title>Using NanoAPI on Game Mods</title>
      <dc:creator>Thea </dc:creator>
      <pubDate>Wed, 21 May 2025 09:01:41 +0000</pubDate>
      <link>https://dev.to/nanoapi_io/using-nanoapi-on-game-mods-1392</link>
      <guid>https://dev.to/nanoapi_io/using-nanoapi-on-game-mods-1392</guid>
      <description>&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;Game mods often evolve into monolithic codebases over time. With the industry shifting toward cloud-native and serverless architectures, tools like NanoAPI help developers to discover dependencies and can help to guide developers to improve these without full rewrites. Here’s how we applied it to the &lt;a href="https://github.com/ArchipelagoMW-HollowKnight/Archipelago.HollowKnight" rel="noopener noreferrer"&gt;Archipelago Hollow Knight mod&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: NanoAPI is compatible with Windows by running it on WSL (Windows Linux Subsystem) at the moment.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;Clone the Mod Repo
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd /mnt/c/Mods  # Windows path mounted in WSL
git clone https://github.com/ArchipelagoMW-HollowKnight/Archipelago.HollowKnight
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I downloaded the mods into a folder on my Windows partition called C:/Mods, and then in my WSL terminal I am going to the correct directory &lt;code&gt;cd Archipelago.HollowKnight-main/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpbaazezu8crzc6zbazp4.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%2Fpbaazezu8crzc6zbazp4.png" alt="Screenshot of Terminal" width="800" height="93"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;napi&lt;/code&gt; works out of the box on both mac and Linux systems. To use this tool on Windows, you will need to install WSL (Windows Subsystem for Linux) and run the CLI commands from there.&lt;br&gt;
Make sure that Node.js (&amp;gt;=22) and npm are installed &lt;a href="https://nodejs.org/en" rel="noopener noreferrer"&gt;https://nodejs.org/en&lt;/a&gt;.&lt;br&gt;
Then the command we run is &lt;code&gt;npm install -g @nanoapi.io/napi&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Far1yd3ri4jc3ocaqv9ik.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%2Far1yd3ri4jc3ocaqv9ik.png" alt="Showing the installing process" width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⚠️ These warning are to be expected, no worries!&lt;/p&gt;

&lt;p&gt;Then we are going to run &lt;code&gt;napi init&lt;/code&gt; in the terminal. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Give the backend a minute on first run; C# reflection is 🐢‑slow on big projects.&lt;/p&gt;
&lt;/blockquote&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%2Fjk5ikjrgvf6qmu99b949.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%2Fjk5ikjrgvf6qmu99b949.png" alt="Image description" width="800" height="107"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then we select the codebase’s language (which in this case is C#)&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%2Fz8c7o0zdb2tdc5a99zbq.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%2Fz8c7o0zdb2tdc5a99zbq.png" alt="Image description" width="800" height="110"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then I kept press enter to choose the default ouput file for for NanoAPI&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%2Foth792hvxni4f8629vhj.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%2Foth792hvxni4f8629vhj.png" alt="Image description" width="800" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I type “Y”, because I want to use the selected include patterns &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%2F6958jyylds3inqhkrn8f.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%2F6958jyylds3inqhkrn8f.png" alt="Image description" width="800" height="750"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I type Y again&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%2Fjlf30aaq7ctw54xjbg1r.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%2Fjlf30aaq7ctw54xjbg1r.png" alt="Image description" width="800" height="188"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I type Y again Because I want to use the code Metrics&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%2Fvxd7gz3dwu3dva175s2g.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%2Fvxd7gz3dwu3dva175s2g.png" alt="Image description" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then I kept pressing enter to use the suggested default values of nanoAPI&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%2Fxo4llk58a4p0f9v3lx6v.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%2Fxo4llk58a4p0f9v3lx6v.png" alt="Image description" width="800" height="228"&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%2Fbrktgye1rfk6p0tci0xn.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%2Fbrktgye1rfk6p0tci0xn.png" alt="Image description" width="800" height="324"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now that we have the configuration configured, we’ll run &lt;code&gt;napi audit view&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Then there will be a link to a localhost port which we can view in the web browser.&lt;/p&gt;
&lt;h3&gt;
  
  
  Set up complete
&lt;/h3&gt;

&lt;p&gt;Now this is what our website looks like:&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.amazonaws.com%2Fuploads%2Farticles%2Ff7c3iee14wj33yxjm2m9.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%2Ff7c3iee14wj33yxjm2m9.png" alt="Image description" width="800" height="551"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once set up, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open the web viewer.&lt;/li&gt;
&lt;li&gt;Use the sidebar to explore extracted symbols.&lt;/li&gt;
&lt;li&gt;Investigate how each symbol is traced and annotated.&lt;/li&gt;
&lt;li&gt;Review warnings such as dependency overloads and decide what to address or ignore.&lt;/li&gt;
&lt;/ul&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%2Ffxlcuickvphw7qb0q2m7.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%2Ffxlcuickvphw7qb0q2m7.png" alt="Image description" width="800" height="421"&gt;&lt;/a&gt;&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.amazonaws.com%2Fuploads%2Farticles%2Fjtlmg5wnp4uq2ddwk2h5.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%2Fjtlmg5wnp4uq2ddwk2h5.png" alt="Image description" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Finished!
&lt;/h2&gt;

&lt;p&gt;For more information - &lt;a href="https://docs.nanoapi.io" rel="noopener noreferrer"&gt;&lt;strong&gt;read the docs:&lt;/strong&gt;&lt;/a&gt; for advanced configs and API extraction.&lt;/p&gt;
&lt;h2&gt;
  
  
  Want More Information or Help Get Involved?
&lt;/h2&gt;

&lt;p&gt;We’d love your feedback, ideas, and contributions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌐 &lt;a href="https://nanoapi.io" rel="noopener noreferrer"&gt;Our website! nanoapi.io&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🔍 Our documentation &lt;a href="https://docs.nanoapi.io" rel="noopener noreferrer"&gt;docs.nanoapi.io&lt;/a&gt; - &lt;/li&gt;
&lt;li&gt;🐙 &lt;a href="https://github.com/nanoapi-io/napi" rel="noopener noreferrer"&gt;GitHub Repo&lt;/a&gt; — star us ⭐
&lt;/li&gt;
&lt;li&gt;📬 Reach out via &lt;a href="//mailto:sales@nanoapi.io"&gt;email&lt;/a&gt; — we’re always happy to connect&lt;/li&gt;
&lt;li&gt;👾 Join our &lt;a href="https://discord.gg/dFWTtRvJdk" rel="noopener noreferrer"&gt;Discord&lt;/a&gt; community!&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Troubleshooting Notes
&lt;/h2&gt;

&lt;p&gt;I had an issue where it stated &lt;br&gt;
&lt;code&gt;Error: No .csproj files found.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh8k0tdg5ib8t9ehtcgt1.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%2Fh8k0tdg5ib8t9ehtcgt1.png" alt="Image description" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;so then I nano'd into .napirc and I manually included .csproj&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "language": "c-sharp",
  "project": {
    "include": [
      "**/*.cs",
      "**/*.csproj"  # Added this line
    ],
    "exclude": [ ... ]
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>csharp</category>
      <category>modding</category>
      <category>programming</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
