<?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: Bradley Nash</title>
    <description>The latest articles on DEV Community by Bradley Nash (@bradley_nash).</description>
    <link>https://dev.to/bradley_nash</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%2F3846656%2F4d8e7118-2120-452d-9d8f-3895c25ea8f3.png</url>
      <title>DEV Community: Bradley Nash</title>
      <link>https://dev.to/bradley_nash</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bradley_nash"/>
    <language>en</language>
    <item>
      <title>Introducing minlsp</title>
      <dc:creator>Bradley Nash</dc:creator>
      <pubDate>Sat, 28 Mar 2026 06:32:23 +0000</pubDate>
      <link>https://dev.to/bradley_nash/introducing-minlsp-518o</link>
      <guid>https://dev.to/bradley_nash/introducing-minlsp-518o</guid>
      <description>&lt;p&gt;I’ve heard so many Nim devs complain about LSP servers being slow, pinning the CPU at 100%, or just getting stuck. &lt;/p&gt;

&lt;p&gt;The reason behind this is usually the same: the server has to build a massive graph of the entire project, including the standard library, project source, and all dependencies. This gets even worse when it encounters macro-heavy code.&lt;/p&gt;

&lt;p&gt;I first ran into this a while back when I was working on a PR for &lt;strong&gt;nimlsp&lt;/strong&gt;. I found the project used macros and templates heavily, and the LSP just struggled—interestingly, the lsp server itself crashed many times in vscode, the moment I converted those to general procs, it worked fine. &lt;/p&gt;

&lt;p&gt;After hearing the same frustrations pop up in Discord again recently, I decided to polish up an unfinished project I had sitting around. After a solid "vibe coding" session this morning, I’m ready to share &lt;strong&gt;minlsp&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is minlsp?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/nim-community/minlsp" rel="noopener noreferrer"&gt;minlsp&lt;/a&gt; provides IDE-like features for Nim code by leveraging &lt;strong&gt;ctags&lt;/strong&gt; for fast and accurate symbol indexing. Unlike traditional LSP servers that require complex AST analysis, I built &lt;strong&gt;minlsp&lt;/strong&gt; to use a tag-based approach for quick symbol lookup and navigation.&lt;/p&gt;

&lt;p&gt;By using &lt;a href="https://github.com/j-crag/ntagger" rel="noopener noreferrer"&gt;ntagger&lt;/a&gt; to extract symbols directly, I’ve created a server that prioritizes speed and low memory overhead without sacrificing the features we use most.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lightning Fast:&lt;/strong&gt; Symbol identification and navigation are nearly instant.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Low Resource Footprint:&lt;/strong&gt; It stays out of your way and won't spin up your fans just because you opened a file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Essential IDE Support:&lt;/strong&gt; Includes Code Completion, Hover Info, Go to Definition, Find References, Signature Help, and Document Symbols.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Macro-Resilient:&lt;/strong&gt; It doesn't get "stuck" on complex macros or templates because it doesn't need to expand them to find symbols.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Limitations &amp;amp; Trade-offs
&lt;/h2&gt;

&lt;p&gt;To keep &lt;strong&gt;minlsp&lt;/strong&gt; lightweight, I’ve made some intentional design choices:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No Semantic Analysis:&lt;/strong&gt; It doesn't perform type-checking or real-time error reporting (diagnostics).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scoped References:&lt;/strong&gt; "Find References" currently searches through open files rather than the full workspace.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No Refactoring:&lt;/strong&gt; Features like "Rename" or automatic code formatting are not currently supported.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Choosing the Right Tool
&lt;/h2&gt;

&lt;p&gt;If you need full-scale compiler integration and deep refactoring, &lt;strong&gt;nimlangserver&lt;/strong&gt; remains the standard. But if you want a responsive, "no-lag" workflow—especially in massive codebases or macro-dense projects where other servers choke—&lt;strong&gt;minlsp&lt;/strong&gt; offers a snappier, more stable alternative.&lt;/p&gt;

&lt;p&gt;The project is under active development. If you’ve been frustrated by LSP lag, I’d love for you to give it a try.&lt;/p&gt;




&lt;h3&gt;
  
  
  Resources &amp;amp; Links
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;My Project:&lt;/strong&gt; &lt;a href="https://github.com/nim-community/minlsp" rel="noopener noreferrer"&gt;minlsp on GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Engine:&lt;/strong&gt; &lt;a href="https://github.com/j-crag/ntagger" rel="noopener noreferrer"&gt;ntagger&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inspiration:&lt;/strong&gt; &lt;a href="https://github.com/PMunch/nimlsp" rel="noopener noreferrer"&gt;nimlsp Project&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Official Tooling:&lt;/strong&gt; &lt;a href="https://github.com/nim-lang/langserver" rel="noopener noreferrer"&gt;nimlangserver&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>nim</category>
      <category>lsp</category>
    </item>
    <item>
      <title>How npm, pnpm, and yarn Ate 40GB of My 256GB SSD</title>
      <dc:creator>Bradley Nash</dc:creator>
      <pubDate>Fri, 27 Mar 2026 19:39:43 +0000</pubDate>
      <link>https://dev.to/bradley_nash/how-npm-pnpm-and-yarn-ate-40gb-of-my-256gb-ssd-7lb</link>
      <guid>https://dev.to/bradley_nash/how-npm-pnpm-and-yarn-ate-40gb-of-my-256gb-ssd-7lb</guid>
      <description>&lt;p&gt;Last week my MacBook started complaining: "Your disk is almost full."&lt;/p&gt;

&lt;p&gt;I had 8GB free. On a 256GB machine. I hadn't downloaded any movies or photos. What was going on?&lt;/p&gt;

&lt;h2&gt;
  
  
  The Investigation
&lt;/h2&gt;

&lt;p&gt;I started hunting. First suspect: &lt;code&gt;node_modules&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;find ~ &lt;span class="nt"&gt;-name&lt;/span&gt; &lt;span class="s2"&gt;"node_modules"&lt;/span&gt; &lt;span class="nt"&gt;-type&lt;/span&gt; d &lt;span class="nt"&gt;-exec&lt;/span&gt; &lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; &lt;span class="o"&gt;{}&lt;/span&gt; &lt;span class="se"&gt;\;&lt;/span&gt; 2&amp;gt;/dev/null
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The results made me want to cry:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;~/projects/2022-client-work/node_modules              1.2GB
~/projects/abandoned-react-app/node_modules          890MB
~/projects/experiment-three-js/node_modules          750MB
~/projects/old-work-project/node_modules             1.8GB
~/projects/that-one-tutorial/node_modules            420MB
&lt;/span&gt;&lt;span class="gp"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;...20 more entries
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;25GB of node_modules&lt;/strong&gt; from projects I hadn't touched in months. Some were from 2022.&lt;/p&gt;

&lt;p&gt;Then I checked the package manager caches:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm cache verify    &lt;span class="c"&gt;# 3.2GB&lt;/span&gt;
pnpm store prune    &lt;span class="c"&gt;# Would free 5GB&lt;/span&gt;
yarn cache clean    &lt;span class="c"&gt;# 2.1GB&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Another &lt;strong&gt;10GB&lt;/strong&gt; just sitting in package manager caches.&lt;/p&gt;

&lt;p&gt;In total: &lt;strong&gt;40GB&lt;/strong&gt; of JavaScript build artifacts and caches. On a 256GB SSD, that's 15% of my entire disk — gone to a dependency graveyard.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Three Package Managers Problem
&lt;/h2&gt;

&lt;p&gt;If you work with JavaScript/TypeScript, you know this pain. You try npm. Then pnpm for speed. Then yarn for work. Each one maintains its own cache in a different location:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;~/.npm&lt;/code&gt; — npm's cache&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;~/Library/pnpm&lt;/code&gt; — pnpm's store&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;~/Library/Caches/Yarn&lt;/code&gt; — yarn's cache&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Plus every project has its own &lt;code&gt;node_modules&lt;/code&gt;. You &lt;code&gt;npm install&lt;/code&gt; once, build, deploy... and that folder sits there forever. Multiply by 20+ projects over 3 years.&lt;/p&gt;

&lt;p&gt;I found a React project from 2022 with 1.8GB of &lt;code&gt;node_modules&lt;/code&gt;. I had run &lt;code&gt;npm install&lt;/code&gt; exactly once, built the project, and never touched it again. That 1.8GB sat on my SSD for 3 years.&lt;/p&gt;
&lt;h2&gt;
  
  
  Xcode Wasn't Innocent Either
&lt;/h2&gt;

&lt;p&gt;While I was at it, I checked Xcode's cache:&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="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; ~/Library/Developer/Xcode/DerivedData
&lt;span class="c"&gt;# 47GB&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;So my actual breakdown was:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;node_modules: 25GB&lt;/li&gt;
&lt;li&gt;npm/pnpm/yarn caches: 10GB
&lt;/li&gt;
&lt;li&gt;Xcode DerivedData: 47GB&lt;/li&gt;
&lt;li&gt;Docker images: 8GB&lt;/li&gt;
&lt;li&gt;Rust/Python/Go build artifacts: 5GB&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;95GB of dev cache&lt;/strong&gt; on a 256GB machine. My actual code? Under 3GB.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Manual Cleanup (Don't Do This)
&lt;/h2&gt;

&lt;p&gt;I spent a Saturday manually cleaning:&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;# Delete old node_modules... carefully&lt;/span&gt;
&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; ~/projects/2022-&lt;span class="k"&gt;*&lt;/span&gt;/node_modules

&lt;span class="c"&gt;# Clean package manager caches&lt;/span&gt;
npm cache clean &lt;span class="nt"&gt;--force&lt;/span&gt;
pnpm store prune
yarn cache clean

&lt;span class="c"&gt;# Wait, where does pnpm store things again?&lt;/span&gt;
&lt;span class="c"&gt;# And did I just break something?&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;It took 3 hours. I was paranoid about deleting the wrong thing. And I knew I'd have to do it again in 6 months.&lt;/p&gt;
&lt;h2&gt;
  
  
  Building DevCleaner
&lt;/h2&gt;

&lt;p&gt;I wanted a tool that would:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Find everything automatically&lt;/strong&gt; — node_modules, npm cache, pnpm store, yarn cache, and 40+ other dev tools&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Show me before deleting&lt;/strong&gt; — no surprises, no "oops I deleted the wrong folder"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Move to Trash first&lt;/strong&gt; — so I can verify nothing broke before emptying&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Be fast&lt;/strong&gt; — scan my entire disk in seconds, not hours&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So I built it. In Nim, because I wanted to learn something new and ship something fast.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Results
&lt;/h2&gt;

&lt;p&gt;First scan: &lt;strong&gt;63GB of cleanable cache&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I reviewed the list — all old projects, all safe to delete. Clicked "Clean All", everything moved to Trash. Verified my current projects still worked. Emptied Trash.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;63GB back.&lt;/strong&gt; My 256GB MacBook finally had breathing room again.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;See it in action:&lt;/strong&gt; &lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://go.screenpal.com/player/cOejbvnZZpH?ff=1&amp;amp;amp;ahc=1&amp;amp;amp;dcc=1&amp;amp;amp;tl=1&amp;amp;amp;bg=transparent&amp;amp;amp;share=1&amp;amp;amp;download=1&amp;amp;amp;embed=1&amp;amp;amp;cl=1&amp;amp;amp;width=100%&amp;amp;amp;height=100%" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;go.screenpal.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;If you're a JavaScript/TypeScript developer on macOS, I guarantee you have gigabytes of &lt;code&gt;node_modules&lt;/code&gt; folders from abandoned projects. That npm package cache? Still growing.&lt;/p&gt;

&lt;p&gt;DevCleaner finds and cleans:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ node_modules (npm/yarn/pnpm)&lt;/li&gt;
&lt;li&gt;✅ npm cache, pnpm store, yarn cache&lt;/li&gt;
&lt;li&gt;✅ 40+ other dev tools (Xcode, Docker, Rust, Python, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;$4.99&lt;/strong&gt; while I gather feedback: &lt;a href="https://bradleynash.gumroad.com/l/devcleaner" rel="noopener noreferrer"&gt;https://bradleynash.gumroad.com/l/devcleaner&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One-time purchase. No subscriptions. Lifetime updates.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;How much dev cache is hiding on your machine? Run this and find your node_modules graveyard:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;find ~ &lt;span class="nt"&gt;-name&lt;/span&gt; &lt;span class="s2"&gt;"node_modules"&lt;/span&gt; &lt;span class="nt"&gt;-type&lt;/span&gt; d &lt;span class="nt"&gt;-exec&lt;/span&gt; &lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; &lt;span class="o"&gt;{}&lt;/span&gt; &lt;span class="se"&gt;\;&lt;/span&gt; 2&amp;gt;/dev/null | &lt;span class="nb"&gt;sort&lt;/span&gt; &lt;span class="nt"&gt;-hr&lt;/span&gt; | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-20&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;What's your biggest offender?&lt;/em&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>node</category>
      <category>npm</category>
      <category>tooling</category>
    </item>
  </channel>
</rss>
