<?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>Forem: BestCodes</title>
    <description>The latest articles on Forem by BestCodes (@best_codes).</description>
    <link>https://forem.com/best_codes</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%2F1192466%2F53d79dec-5f31-432e-b1e5-5a1caad6bc01.png</url>
      <title>Forem: BestCodes</title>
      <link>https://forem.com/best_codes</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/best_codes"/>
    <language>en</language>
    <item>
      <title>How to Fix Spotify's Ugly Blue Titlebar on Gnome</title>
      <dc:creator>BestCodes</dc:creator>
      <pubDate>Sat, 18 Apr 2026 23:03:38 +0000</pubDate>
      <link>https://forem.com/best_codes/how-to-fix-spotifys-ugly-blue-titlebar-on-gnome-3klk</link>
      <guid>https://forem.com/best_codes/how-to-fix-spotifys-ugly-blue-titlebar-on-gnome-3klk</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Note: If you're using the Flatpak version of Spotify or Spotify Launcher rather than Spotify directly, this article might not fully solve your problem. Hit me up &lt;a href="https://go.bestcodes.dev/discord" rel="noopener noreferrer"&gt;on my Discord server&lt;/a&gt; for assistance, as I haven't had time to update this article for those situations yet.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is going to be a super short article because this is a really easy fix! I've been using Arch Linux with Gnome and recently noticed an annoying blue titlebar on Spotify that doesn't match the default Gnome design. I'm using the &lt;code&gt;spotify&lt;/code&gt; Arch Linux package. Based on my research, this has to do with the Chromium Embed Framework's design, along with Gnome famously not supporting Server-Side Decorations in apps.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before
&lt;/h2&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%2Ftcn79zc2s7ae5jg1fkie.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%2Ftcn79zc2s7ae5jg1fkie.png" alt="Screenshot of the blue titlebar on Spotify using Gnome" width="800" height="474"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Fix
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Close Spotify.&lt;/li&gt;
&lt;li&gt;Open a bash terminal. Run:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   nano ~/.config/spotify-flags.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;An interactive editor should appear. Paste this content (press &lt;code&gt;CTRL + Shift + V&lt;/code&gt;):
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nt"&gt;--ozone-platform&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;x11
   &lt;span class="nt"&gt;--disable-features&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;UseOzonePlatform
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Save the file (press &lt;code&gt;CTRL + O&lt;/code&gt;, then &lt;code&gt;Enter&lt;/code&gt;, then &lt;code&gt;CTRL + X&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Reopen Spotify.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  After
&lt;/h2&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%2Fzhapv0yy7t5gjn936adz.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%2Fzhapv0yy7t5gjn936adz.png" alt="Screenshot of the Spotify app with the normal, good looking titlebar on Gnome" width="800" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Not working for you? &lt;a href="https://go.bestcodes.dev/discord" rel="noopener noreferrer"&gt;Hit me up on my Discord server!&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gnome</category>
      <category>linux</category>
      <category>archlinux</category>
      <category>music</category>
    </item>
    <item>
      <title>Anthropic just dropped Claude Sonnet 5, and the benchmarks are kind of insane</title>
      <dc:creator>BestCodes</dc:creator>
      <pubDate>Wed, 01 Apr 2026 14:58:51 +0000</pubDate>
      <link>https://forem.com/best_codes/anthropic-just-dropped-claude-sonnet-5-and-the-benchmarks-are-kind-of-insane-3ppc</link>
      <guid>https://forem.com/best_codes/anthropic-just-dropped-claude-sonnet-5-and-the-benchmarks-are-kind-of-insane-3ppc</guid>
      <description>&lt;p&gt;Okay so Anthropic quietly pushed a blog post live this morning and I think it's flying under the radar a bit — Claude Sonnet 5 is officially out as of today. Model string is &lt;code&gt;claude-sonnet-5-20260401&lt;/code&gt;, already live in claude.ai as the new default and on the API at the same $3/$15 per million tokens pricing as Sonnet 4.6. No price hike. That part alone is worth stopping to think about.&lt;/p&gt;




&lt;h2&gt;
  
  
  What actually changed
&lt;/h2&gt;

&lt;p&gt;The headline number is &lt;strong&gt;92.4% on SWE-bench Verified&lt;/strong&gt;. For context: Claude Opus 4.6, their previous flagship, sat at 80.8%. GPT-5.4 scores 57.7% on the same eval. Gemini 3.1 Pro is at 80.6%. Sonnet 5 just... leapfrogged all of them — including Anthropic's own Opus tier — at Sonnet pricing. That's a 12-point jump over Opus 4.6 in a single generation, from the &lt;em&gt;mid-tier&lt;/em&gt; model.&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%2Ftdc6ky5kw219mbad3jjs.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%2Ftdc6ky5kw219mbad3jjs.png" alt=" " width="800" height="662"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Computer use is the other big story. &lt;strong&gt;88.3% on OSWorld-Verified&lt;/strong&gt;. The human expert baseline on that benchmark is 72.4%, meaning Sonnet 5 isn't just competitive with humans on desktop automation — it's meaningfully ahead. GPT-5.4 scored 75.0% when it launched last month, which was already a big deal. Sonnet 5 blows past it.&lt;/p&gt;

&lt;p&gt;On the reasoning and science side: &lt;strong&gt;96.2% on GPQA Diamond&lt;/strong&gt; (PhD-level science questions). Gemini 3.1 Pro held the record on that one at 94.3% — Sonnet 5 takes it. And ARC-AGI-2, the abstract novel-reasoning benchmark that basically nobody was doing well on until recently: &lt;strong&gt;84.7%&lt;/strong&gt;. Gemini 3.1 Pro was at 77.1%, which itself was considered remarkable. Sonnet 5 is 7+ points ahead.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why this matters for the competitive picture
&lt;/h2&gt;

&lt;p&gt;The past few months have been genuinely interesting to watch. GPT-5.4 dropped on March 5th and made a lot of noise around computer use and context windows. Gemini 3.1 Pro launched February 19th and topped the GPQA Diamond leaderboard. Anthropic had Sonnet 4.6 as their current mid-tier, which was already punching above its weight — developers preferred it over Opus 4.5 59% of the time in head-to-heads.&lt;/p&gt;

&lt;p&gt;But Sonnet 5 resets the entire scoreboard. Every benchmark category, across coding, computer use, abstract reasoning, and science knowledge — Sonnet 5 leads. And not just by a little in most cases. The SWE-bench number in particular is striking because that one is hard to game; it's measuring real GitHub issue resolution on novel codebases.&lt;/p&gt;

&lt;p&gt;The pricing situation is what really stands out though. Gemini 3.1 Pro at $2/1M input is the cheapest frontier option. GPT-5.4 is at $2.50. Sonnet 5 is $3. For slightly higher input cost than GPT-5.4, you're getting significantly better performance across almost every axis. And compared to Opus 4.6 at $15/1M input, you're getting better benchmark scores at one-fifth the cost.&lt;/p&gt;




&lt;h2&gt;
  
  
  Context window and features
&lt;/h2&gt;

&lt;p&gt;Sonnet 5 ships with the 2M token context window, now out of beta (the 1M window from Sonnet 4.6 has been promoted to stable and the 2M is available with the &lt;code&gt;context-2m&lt;/code&gt; header). The adaptive thinking architecture from the 4.6 generation is still there, upgraded — Anthropic says the model dynamically allocates reasoning depth more effectively than before, which is probably where a lot of the benchmark gains are coming from.&lt;/p&gt;

&lt;p&gt;Claude Code users on the early access build are already reporting noticeably better performance. Per Anthropic's internal numbers, devs preferred Sonnet 5 over Sonnet 4.6 in Claude Code roughly &lt;strong&gt;82% of the time&lt;/strong&gt; — citing fewer hallucinated completions, better cross-file context retention, and significantly improved frontend output quality.&lt;/p&gt;




&lt;h2&gt;
  
  
  The benchmarks
&lt;/h2&gt;

&lt;p&gt;I grabbed the charts from Anthropic's launch page — attaching them here. The SWE-bench and OSWorld comparison is the one worth saving. The full comparison table at the bottom shows every major model side-by-side.&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%2Fwxeqzp0w562ue7btyuop.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%2Fwxeqzp0w562ue7btyuop.png" alt=" " width="800" height="662"&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%2F19ewhop2aqkkrv43nqhv.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%2F19ewhop2aqkkrv43nqhv.png" alt=" " width="800" height="546"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick take
&lt;/h2&gt;

&lt;p&gt;If you're an Anthropic API user, just migrate to &lt;code&gt;claude-sonnet-5-20260401&lt;/code&gt;. The improvements are across the board, the pricing is identical to what you were paying before, and based on what early users are saying in the dev Discord this morning it's a pretty significant day-to-day difference in actual use.&lt;/p&gt;

&lt;p&gt;If you're not using Claude but you're on GPT-5.4 or Gemini 3.1 Pro — this is probably worth a benchmark run on your specific workload. Especially if you're doing anything coding-heavy or involving computer use. The numbers are hard to argue with.&lt;/p&gt;

&lt;p&gt;Crazy time to be following this space. The pace of releases in Q1 2026 has been genuinely relentless — GPT-5.4 in early March, Gemini 3.1 Pro mid-February, Opus 4.6 in early February, and now this. No signs of slowing down.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Happy April Fool's Day!&lt;/em&gt; 🎉&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>discuss</category>
    </item>
    <item>
      <title>7 BEST VS Code Extensions for Faster Development — 2026 Edition 🚀</title>
      <dc:creator>BestCodes</dc:creator>
      <pubDate>Mon, 02 Feb 2026 23:56:28 +0000</pubDate>
      <link>https://forem.com/best_codes/7-best-vs-code-extensions-for-faster-development-2026-edition-4gk0</link>
      <guid>https://forem.com/best_codes/7-best-vs-code-extensions-for-faster-development-2026-edition-4gk0</guid>
      <description>&lt;p&gt;I made a post similar to this a couple of years ago (wow, it's already been that long 😢).&lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/best_codes/7-best-vs-code-extensions-for-faster-development-2024-edition-3j56" class="crayons-story__hidden-navigation-link"&gt;7 BEST VS Code Extensions for Faster Development — 2024 Edition&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/best_codes" class="crayons-avatar  crayons-avatar--l  "&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%2F1192466%2F53d79dec-5f31-432e-b1e5-5a1caad6bc01.png" alt="best_codes profile" class="crayons-avatar__image" width="120" height="120"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/best_codes" class="crayons-story__secondary fw-medium m:hidden"&gt;
              BestCodes
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                BestCodes
                
              
              &lt;div id="story-author-preview-content-1999993" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/best_codes" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2F1192466%2F53d79dec-5f31-432e-b1e5-5a1caad6bc01.png" class="crayons-avatar__image" alt="" width="120" height="120"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;BestCodes&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/best_codes/7-best-vs-code-extensions-for-faster-development-2024-edition-3j56" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Sep 14 '24&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/best_codes/7-best-vs-code-extensions-for-faster-development-2024-edition-3j56" id="article-link-1999993"&gt;
          7 BEST VS Code Extensions for Faster Development — 2024 Edition
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/productivity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;productivity&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/vscode"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;vscode&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/tutorial"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;tutorial&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/best_codes/7-best-vs-code-extensions-for-faster-development-2024-edition-3j56" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;452&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/best_codes/7-best-vs-code-extensions-for-faster-development-2024-edition-3j56#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              60&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            7 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;p&gt;It's now 2026, and that article is a bit outdated, so I figured it was time to make an updated list. Here goes!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Please note: This updated list may contain duplicate items from the 2024 edition. This is intentional - it just means that I still think those extensions are the best!&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  1. &lt;a href="https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline" rel="noopener noreferrer"&gt;Roo Code&lt;/a&gt;
&lt;/h2&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%2Fs3xe5spdp80j8p9dw1nc.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%2Fs3xe5spdp80j8p9dw1nc.png" alt="Roo Code site card" width="800" height="420"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;ext&lt;/span&gt; &lt;span class="nt"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;RooVeterinaryInc&lt;/span&gt;&lt;span class="nc"&gt;.roo-cline&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://roocode.com/" rel="noopener noreferrer"&gt;Roo Code&lt;/a&gt; takes #1 this year. I had an awesome experience with it. Here's some of the key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Roo Code Cloud with PR reviews, remote task creation, and more&lt;/li&gt;
&lt;li&gt;Bring your own API key from any of multiple supported providers, including OpenRouter&lt;/li&gt;
&lt;li&gt;Built-in advanced context management&lt;/li&gt;
&lt;li&gt;Codebase indexing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Roo Code runs right in your IDE where you do your coding, so if you're a developer who likes to use AI a lot, this is a great pick.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Install Roo Code&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  2. &lt;a href="https://marketplace.visualstudio.com/items?itemName=johnpapa.vscode-peacock" rel="noopener noreferrer"&gt;Peacock&lt;/a&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;ext&lt;/span&gt; &lt;span class="nt"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;johnpapa&lt;/span&gt;&lt;span class="nc"&gt;.vscode-peacock&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Super useful if you have lots of VS Code windows in a workspace open at once like I do. Peacock lets you color-code each window, that way you can identify them quickly. This might seem like a really small UI thing but it's actually been really useful for me, you should give it a try!&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%2F6m58xgiwsz7fs1api4du.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%2F6m58xgiwsz7fs1api4du.png" alt="Peacock image from VS Code listing" width="800" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=johnpapa.vscode-peacock" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Install Peacock&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  3. &lt;a href="https://marketplace.visualstudio.com/items?itemName=WallabyJs.console-ninja" rel="noopener noreferrer"&gt;Console Ninja&lt;/a&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;ext&lt;/span&gt; &lt;span class="nt"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;WallabyJs&lt;/span&gt;&lt;span class="nc"&gt;.console-ninja&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://console-ninja.com/" rel="noopener noreferrer"&gt;Console Ninja&lt;/a&gt; lets you view logs from an application you're running right inside your IDE. Let's say you have a Vite application with some &lt;code&gt;console.log&lt;/code&gt; statements. Console Ninja lets you see the logs from your application directly in your IDE, next to the log statement in your code! This is SUPER useful for debugging.&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%2Fktpxvg8oxtuf84russf9.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%2Fktpxvg8oxtuf84russf9.png" alt="Demo screenshot" width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is also useful for debugging with your AI tools, since you can easily pass context from the console to your tools.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=WallabyJs.console-ninja" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Install Console Ninja&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  4. &lt;a href="https://marketplace.visualstudio.com/items?itemName=WakaTime.vscode-wakatime" rel="noopener noreferrer"&gt;WakaTime&lt;/a&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;ext&lt;/span&gt; &lt;span class="nt"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;WakaTime&lt;/span&gt;&lt;span class="nc"&gt;.vscode-wakatime&lt;/span&gt;
&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%2Fjzrc0dwakjeu02jwk18b.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%2Fjzrc0dwakjeu02jwk18b.png" alt="WakaTime dashboard" width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://wakatime.com" rel="noopener noreferrer"&gt;WakaTime&lt;/a&gt; is a super cool website / extension that keeps track of the time you spend programming. It provides insights about the languages you spend the most time on, your coding trends, set goals, and more!&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%2Ftg0wn366vq7xhv9vq2tx.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%2Ftg0wn366vq7xhv9vq2tx.png" alt="wakatime" title="WakaTime VS Code" width="358" height="79"&gt;&lt;/a&gt;&lt;/p&gt;
You can easily find your dashboard and see your current time from in the VS Code Status Bar.



&lt;p&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=WakaTime.vscode-wakatime" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Install WakaTime&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  5. &lt;a href="https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker" rel="noopener noreferrer"&gt;Code Spell Checker&lt;/a&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;ext&lt;/span&gt; &lt;span class="nt"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;streetsidesoftware&lt;/span&gt;&lt;span class="nc"&gt;.code-spell-checker&lt;/span&gt;
&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%2F0nhxxda17pdkxptxqz16.gif" 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%2F0nhxxda17pdkxptxqz16.gif" alt="User tests code spell checker" width="745" height="539"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This extension is a must-have for me! I'm pretty picky (&lt;em&gt;most&lt;/em&gt; of the time) about my spelling. This extension will highlight your spelling errors (that might be a nightmare for some of you…) and show possible correct spellings in the 'Quick Fix' menu. &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%2Fxvmwexb9zk5cp9muiecy.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%2Fxvmwexb9zk5cp9muiecy.png" alt="Quick fix spelling" width="388" height="135"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're a fan of impeccable spelling, be sure to give this extension a try!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Install Code Spell Checker&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  6. &lt;a href="https://marketplace.visualstudio.com/items?itemName=rangav.vscode-thunder-client" rel="noopener noreferrer"&gt;Thunder Client&lt;/a&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;ext&lt;/span&gt; &lt;span class="nt"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;rangav&lt;/span&gt;&lt;span class="nc"&gt;.vscode-thunder-client&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://www.thunderclient.com/" rel="noopener noreferrer"&gt;Thunder Client&lt;/a&gt; is like Postman but designed to run natively inside your IDE. It lets you send test API requests, manage API collections, sync your requests with git, and more. It also has AI integration via its MCP server, so you can easily connect your AI agent with Thunder Client.&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%2Fpd73bv6wv1h1ynoeeuoo.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%2Fpd73bv6wv1h1ynoeeuoo.png" alt="promo image" width="800" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=rangav.vscode-thunder-client" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Install Thunder Client&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  7. &lt;a href="https://marketplace.visualstudio.com/items?itemName=aaron-bond.better-comments" rel="noopener noreferrer"&gt;Better Comments&lt;/a&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;ext&lt;/span&gt; &lt;span class="nt"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;aaron-bond&lt;/span&gt;&lt;span class="nc"&gt;.better-comments&lt;/span&gt;
&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%2Fcqgczg2ilofh3vqnpr4h.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%2Fcqgczg2ilofh3vqnpr4h.png" alt="promotional image" width="459" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The better comments extension makes it easy to tell what each of your comments are for. &lt;/p&gt;

&lt;p&gt;You can use these rules, or even add your own in settings:&lt;br&gt;
&lt;code&gt;!&lt;/code&gt;: Alert&lt;br&gt;
&lt;code&gt;?&lt;/code&gt;: Query&lt;br&gt;
&lt;code&gt;TODO&lt;/code&gt;: TODO (duh…)&lt;br&gt;
&lt;code&gt;*&lt;/code&gt;: Important&lt;br&gt;
&lt;code&gt;//&lt;/code&gt;: &lt;del&gt;Strike-through&lt;/del&gt;&lt;/p&gt;

&lt;p&gt;I tried it out in JavaScript to see how it worked:&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%2Fgmku5ul19wipr2pf2cug.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%2Fgmku5ul19wipr2pf2cug.png" alt="test better comments" width="244" height="130"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's an example comment config in the extension settings:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"tag"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"!"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#FF2D00"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"strikethrough"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"underline"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"backgroundColor"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"transparent"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"bold"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"italic"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I made my own for underlining comments using the &lt;code&gt;_&lt;/code&gt; indicator. Here's how it turned out:&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%2Fgvddjxcza27g09vhyno2.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%2Fgvddjxcza27g09vhyno2.png" alt="my ugly custom comment styles" width="307" height="111"&gt;&lt;/a&gt;&lt;/p&gt;
My rather, er, beauty deprived custom comment style





&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: If you change the extension settings, you may need to reload the window (CTRL + SHIFT + P &amp;gt; Developer: Reload Window) for the changes to apply.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is honestly one of the most useful ones for me, excluding AI extensions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=aaron-bond.better-comments" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Install Better Comments&lt;/a&gt;
&lt;/p&gt;




&lt;p&gt;That's it, guys! Hopefully you found this article interesting and useful. Let me know what you think in the comments.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Every part of this article is hand-written, no AI used! I might have made a few mistakes. If you find any, point them out to me in the comments! Article by &lt;a href="https://bestcodes.dev" rel="noopener noreferrer"&gt;BestCodes&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>vscode</category>
      <category>extensions</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Are we AGI yet?</title>
      <dc:creator>BestCodes</dc:creator>
      <pubDate>Mon, 02 Feb 2026 05:04:42 +0000</pubDate>
      <link>https://forem.com/best_codes/are-we-agi-yet-432c</link>
      <guid>https://forem.com/best_codes/are-we-agi-yet-432c</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;If you're confused about the weird grammar in the post title, I'm following the format of websites like &lt;em&gt;Are we async yet&lt;/em&gt;, &lt;em&gt;Are we learning yet&lt;/em&gt;, etc.. You can view a list of such sites here if you think I'm making it up 😆&lt;br&gt;
&lt;a href="https://wiki.mozilla.org/Areweyet" rel="noopener noreferrer"&gt;https://wiki.mozilla.org/Areweyet&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Whether or not we have reached AGI is a topic of much debate. This article is supposed to promote discussion about the topic. It also presents opinions, mostly mine, so keep that in mind as you read.&lt;/p&gt;

&lt;h2&gt;
  
  
  Defining Some Terms
&lt;/h2&gt;

&lt;p&gt;Let's define some terms. What even is AGI? What is AI, for that matter? We need some concrete and agreed upon definitions before proceeding.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI
&lt;/h3&gt;

&lt;p&gt;Wikipedia &lt;a href="https://en.wikipedia.org/wiki/Artificial_intelligence_(disambiguation)#:~:text=Artificial%20intelligence%20is%20the%20simulation%20of%20intelligence%20as%20exhibited%20by%20software%20systems." rel="noopener noreferrer"&gt;concisely defines AI&lt;/a&gt; as "the simulation of intelligence as exhibited by software systems."&lt;/p&gt;

&lt;p&gt;Simple enough. But what is intelligence? And what does it mean to have &lt;em&gt;artificial&lt;/em&gt; intelligence?&lt;br&gt;
Oxford Languages defines &lt;strong&gt;intelligence&lt;/strong&gt; as "the ability to acquire and apply knowledge and skills." Currently, AIs can't train themselves (at least, not on a large scale), so any new knowledge they "acquire and apply" is ephemeral and goes away if it's no longer in the context window. Oxford Languages defines &lt;strong&gt;artificial&lt;/strong&gt; as "made or produced by human beings rather than occurring naturally, especially as a copy of something natural."&lt;/p&gt;

&lt;p&gt;I think of Artificial Intelligence as humans' attempt to copy one facet of their humanness - their intelligence - into something non-human. I say &lt;em&gt;attempt&lt;/em&gt; because, just like artificial sweeteners can never perfectly clone sugar, I don't believe that artificial intelligence will ever become a perfect clone of human intelligence. Whether or not it can be &lt;em&gt;better&lt;/em&gt; than human intelligence is beside the point (also, who's to say what makes one intelligence "better" than another?), the point is, we can't clone it.&lt;/p&gt;

&lt;p&gt;To sum it up: AI is a simulation of human intelligence. However, there's no standard on how accurate the simulation of intelligence has to be for it to be considered intelligence. This is where AGI comes in.&lt;/p&gt;

&lt;h3&gt;
  
  
  AGI
&lt;/h3&gt;

&lt;p&gt;AGI stands for Artificial General Intelligence.&lt;br&gt;
As I said just a moment ago, there's no standard for how accurate the simulation of human intelligence (AI) must be in order to qualify as intelligence. In 2020, for example, OpenAI launched GPT-3... by today's AI standards, or compared to your average human, it did a terrible job. Inaccurate simulation. Now, in 2026 with GPT-5.2, GPT has become a &lt;em&gt;much&lt;/em&gt; more accurate simulation of human intelligence. In many fields, GPT outperforms or nearly clones human intelligence. But not in &lt;strong&gt;all&lt;/strong&gt; fields! GPT still sucks at complex math, making jokes, and even counting the number of letters in some words.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AGI is achieved when an artificial intelligence exists that is a near-exact clone of human intelligence &lt;em&gt;in general&lt;/em&gt; (all fields), not just in specific fields.&lt;/strong&gt; In other words, once the simulation of human intelligence becomes near-perfect (or better than human intelligence, but again, "better" is subjective) across all areas of human intelligence, we've reached AGI.&lt;/p&gt;

&lt;p&gt;To sum it up: I basically took the long way of saying what &lt;a href="https://en.wikipedia.org/wiki/Artificial_general_intelligence#:~:text=Artificial%20general%20intelligence%20(AGI)%20is%20a%20hypothetical%20type%20of%20artificial%20intelligence%20that%20would%20match%20or%20surpass%20human%20capabilities%20across%20virtually%20all%20cognitive%20tasks." rel="noopener noreferrer"&gt;Wikipedia says&lt;/a&gt; (as of Feb 1, 2026, at least), in order to hopefully make it a bit clearer what Wikipedia means:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Artificial general intelligence (AGI) is a hypothetical type of artificial intelligence that would match or surpass human capabilities across virtually all cognitive tasks.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  So, are we AGI yet?
&lt;/h2&gt;

&lt;p&gt;As of Feb 1, 2026, I'd say &lt;strong&gt;no&lt;/strong&gt;. AI is evolving pretty quickly so we'll see how long it takes for that to be invalidated 😂 &lt;br&gt;
I don't think that current AI models simulate human intelligence accurately enough. They might outperform humans at quickly writing essays (complete with made-up sources just like some humans do 🫠), for example, but they still struggle in areas like logic or counting.&lt;/p&gt;

&lt;p&gt;I'm curious what you think! Please drop a comment with your thoughts about any part of this article; I would love to hear it!&lt;/p&gt;




&lt;p&gt;Thanks for reading!&lt;br&gt;
&lt;a href="https://bestcodes.dev" rel="noopener noreferrer"&gt;BestCodes&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>discuss</category>
      <category>programming</category>
      <category>llm</category>
    </item>
    <item>
      <title>Interesting read</title>
      <dc:creator>BestCodes</dc:creator>
      <pubDate>Mon, 08 Dec 2025 04:48:49 +0000</pubDate>
      <link>https://forem.com/best_codes/interesting-read-16ci</link>
      <guid>https://forem.com/best_codes/interesting-read-16ci</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/notearthian/how-to-implement-google-oauth-in-browser-extension-without-tabs-permission-327m" class="crayons-story__hidden-navigation-link"&gt;How to implement Google OAuth in browser extension without “Tabs” permission&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/notearthian" class="crayons-avatar  crayons-avatar--l  "&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%2F1491361%2Fedd10c93-e3e8-441d-ba34-8831b22899c9.jpg" alt="notearthian profile" class="crayons-avatar__image" width="800" height="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/notearthian" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Himanshu
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Himanshu
                
              
              &lt;div id="story-author-preview-content-3090207" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/notearthian" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2F1491361%2Fedd10c93-e3e8-441d-ba34-8831b22899c9.jpg" class="crayons-avatar__image" alt="" width="800" height="800"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Himanshu&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/notearthian/how-to-implement-google-oauth-in-browser-extension-without-tabs-permission-327m" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Dec 7 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/notearthian/how-to-implement-google-oauth-in-browser-extension-without-tabs-permission-327m" id="article-link-3090207"&gt;
          How to implement Google OAuth in browser extension without “Tabs” permission
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/extensions"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;extensions&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/authentication"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;authentication&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/notearthian/how-to-implement-google-oauth-in-browser-extension-without-tabs-permission-327m" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;12&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/notearthian/how-to-implement-google-oauth-in-browser-extension-without-tabs-permission-327m#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              4&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            6 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>extensions</category>
      <category>authentication</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Set Up ESLint with Vite (React, React Hooks, and React Refresh)</title>
      <dc:creator>BestCodes</dc:creator>
      <pubDate>Sat, 26 Jul 2025 14:59:16 +0000</pubDate>
      <link>https://forem.com/best_codes/set-up-eslint-with-vite-react-react-hooks-and-react-refresh-24pm</link>
      <guid>https://forem.com/best_codes/set-up-eslint-with-vite-react-react-hooks-and-react-refresh-24pm</guid>
      <description>&lt;p&gt;Due to a lack of tutorials about setting up ESLint with Vite and React, especially including React Hooks and React Refresh, I've written this guide to help developers looking for such resources. Let's get started!&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;This tutorial assumes you are using Vite 7, but the instructions should be applicable to other versions as well.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In case you aren't very familiar with ESLint, Vite, or React Refresh, here is a bit of info about each. There aren't dedicated sections about &lt;a href="https://react.dev/" rel="noopener noreferrer"&gt;React&lt;/a&gt; or &lt;a href="https://react.dev/reference/react/hooks" rel="noopener noreferrer"&gt;React Hooks&lt;/a&gt; because you can find plenty of info about them in &lt;a href="https://react.dev/learn" rel="noopener noreferrer"&gt;React's official documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is ESLint?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://eslint.org/" rel="noopener noreferrer"&gt;ESLint&lt;/a&gt; is a popular JavaScript linter that helps developers identify and fix issues in their code. It enforces coding standards and best practices, making it easier to write clean, consistent, and maintainable code.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is Vite?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://vite.dev/" rel="noopener noreferrer"&gt;Vite&lt;/a&gt; is a modern build tool that provides a fast development experience for modern web applications. It uses a plugin-based architecture and supports a wide range of features, including hot module replacement (HMR) and code splitting.&lt;br&gt;
Vite can be used with many libraries and frameworks, including React, Vue, and Angular. This tutorial is written for Vite + React applications.&lt;br&gt;
As of Vite 7, Vite is based on rollup and esbuild but has plans to migrate to their own bundler, rolldown.&lt;/p&gt;
&lt;h3&gt;
  
  
  What is React Refresh?
&lt;/h3&gt;

&lt;p&gt;React Refresh is a feature that allows developers to update their React components without refreshing the entire page. It provides a faster development experience by only updating the affected components, reducing the time it takes to see changes in the browser.&lt;br&gt;
Vite supports React Refresh out of the box, using it as part of its React HMR strategy.&lt;/p&gt;


&lt;h2&gt;
  
  
  Setup Instructions
&lt;/h2&gt;

&lt;p&gt;First, let's install ESLint. We'll install &lt;code&gt;eslint&lt;/code&gt; so we can use the ESLint CLI and &lt;code&gt;@eslint/js&lt;/code&gt; for JavaScript linting.&lt;br&gt;
&lt;/p&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;eslint @eslint/js &lt;span class="nt"&gt;--save-dev&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you're using TypeScript in your project, you should also install &lt;code&gt;typescript-eslint&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;npm &lt;span class="nb"&gt;install &lt;/span&gt;typescript-eslint &lt;span class="nt"&gt;--save-dev&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Perfect! Now we've got everything installed. Let's configure ESLint. Create a &lt;code&gt;eslint.config.js&lt;/code&gt; file in the root of your project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you're using JavaScript:&lt;/strong&gt;&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="nx"&gt;js&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;@eslint/js&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;globals&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;globals&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="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;globalIgnores&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;eslint/config&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="nf"&gt;globalIgnores&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&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="na"&gt;files&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="s2"&gt;**/*.{ts,tsx}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;extends&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;js&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;configs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;recommended&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;languageOptions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;ecmaVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2020&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;globals&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;globals&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;browser&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;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;If you're using TypeScript:&lt;/strong&gt;&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;js&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;@eslint/js&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;globals&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;globals&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;tseslint&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;typescript-eslint&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="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;globalIgnores&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;eslint/config&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;tseslint&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;config&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
  &lt;span class="nf"&gt;globalIgnores&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&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="na"&gt;files&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="s2"&gt;**/*.{ts,tsx}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;extends&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;js&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;configs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;recommended&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;tseslint&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;configs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;recommended&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;languageOptions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;ecmaVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2020&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;globals&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;globals&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;browser&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;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Note: Older versions of ESLint use &lt;code&gt;.eslintrc.js&lt;/code&gt;, &lt;code&gt;.eslintrc.json&lt;/code&gt;, or similar files instead of &lt;code&gt;eslint.config.js&lt;/code&gt; to store configuration. The new config file format, called "flat config", is recommended and is more flexible.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Adding a &lt;code&gt;lint&lt;/code&gt; script
&lt;/h3&gt;

&lt;p&gt;To easily use ESLint to lint your code, you can install it globally and use &lt;code&gt;eslint&lt;/code&gt; in your terminal anywhere, but I recommend using &lt;code&gt;eslint&lt;/code&gt; as a local development dependency. This ensures that everyone on your team is using the same version of ESLint and its plugins.&lt;br&gt;
To use the ESLint CLI inside your project, you can add a &lt;code&gt;lint&lt;/code&gt; script to your &lt;code&gt;package.json&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"lint"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"eslint ."&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To test your code, run the following command in your terminal:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Linting React Hooks and React Refresh
&lt;/h3&gt;

&lt;p&gt;To lint React Hooks and React Refresh, you can use the &lt;code&gt;eslint-plugin-react-hooks&lt;/code&gt; and &lt;code&gt;eslint-plugin-react-refresh&lt;/code&gt; plugins. To install them, run the following command in your terminal:&lt;br&gt;
&lt;/p&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; eslint-plugin-react-hooks eslint-plugin-react-refresh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, we can update the &lt;code&gt;eslint.config.js&lt;/code&gt; file to include these plugins.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you're using JavaScript:&lt;/strong&gt;&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="nx"&gt;js&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;@eslint/js&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;globals&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;globals&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;reactHooks&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;eslint-plugin-react-hooks&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;reactRefresh&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;eslint-plugin-react-refresh&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="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;globalIgnores&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;eslint/config&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="nf"&gt;globalIgnores&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&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="na"&gt;files&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="s2"&gt;**/*.{ts,tsx}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;extends&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="nx"&gt;js&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;configs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;recommended&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;tseslint&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;configs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;recommended&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;reactHooks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;configs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;recommended-latest&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="nx"&gt;reactRefresh&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;configs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;vite&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;languageOptions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;ecmaVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2020&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;globals&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;globals&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;browser&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;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;If you're using TypeScript:&lt;/strong&gt;&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;js&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;@eslint/js&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;globals&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;globals&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;reactHooks&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;eslint-plugin-react-hooks&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;reactRefresh&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;eslint-plugin-react-refresh&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;tseslint&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;typescript-eslint&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="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;globalIgnores&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;eslint/config&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;tseslint&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;config&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
  &lt;span class="nf"&gt;globalIgnores&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&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="na"&gt;files&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="s2"&gt;**/*.{ts,tsx}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;extends&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="nx"&gt;js&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;configs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;recommended&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;tseslint&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;configs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;recommended&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;reactHooks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;configs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;recommended-latest&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="nx"&gt;reactRefresh&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;configs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;vite&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;languageOptions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;ecmaVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2020&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;globals&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;globals&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;browser&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;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run &lt;code&gt;npm run lint&lt;/code&gt; again to lint your code with the new plugins enabled.&lt;/p&gt;

&lt;h3&gt;
  
  
  Automatically Run ESLint During Development
&lt;/h3&gt;

&lt;p&gt;Let's say you want ESLint to lint your code during development (&lt;code&gt;vite&lt;/code&gt; or &lt;code&gt;npm run dev&lt;/code&gt;)? Each time you save a file, ESLint should lint your code again. That way, you can catch errors early as you develop instead of running &lt;code&gt;npm run lint&lt;/code&gt; manually.&lt;/p&gt;

&lt;p&gt;To do this, there are a few popular options. &lt;code&gt;vite-plugin-eslint&lt;/code&gt; is one of the most common, a Vite plugin that does just what we need... however, it has some performance and DX issues that make it not the best choice. &lt;a href="https://github.com/nabla/vite-plugin-eslint" rel="noopener noreferrer"&gt;&lt;code&gt;@nabla/vite-plugin-eslint&lt;/code&gt;&lt;/a&gt;, which is similar to the &lt;code&gt;vite-plugin-eslint&lt;/code&gt; plugin, is more performant and has better developer experience. We'll use it:&lt;br&gt;
&lt;/p&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; @nabla/vite-plugin-eslint &lt;span class="nt"&gt;--save-dev&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, import it in your Vite config file (we'll assume &lt;code&gt;vite.config.js&lt;/code&gt;):&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;defineConfig&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;vite&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;react&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;@vitejs/plugin-react&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;eslint&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;@nabla/vite-plugin-eslint&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Add this import&lt;/span&gt;

&lt;span class="c1"&gt;// https://vitejs.dev/config/&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;defineConfig&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;react&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="nf"&gt;eslint&lt;/span&gt;&lt;span class="p"&gt;()],&lt;/span&gt; &lt;span class="c1"&gt;// Add `eslint()` here&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 you run &lt;code&gt;npm run dev&lt;/code&gt;, you will see logs in your terminal indicating the linting results. Pretty simple!&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;That's a wrap! You've successfully set up ESLint with Vite 7 and linted your code. If you want an easy way to test if your ESLint configuration is working correctly, you can intentionally break a linting rule. For example, in &lt;code&gt;src/App.jsx&lt;/code&gt; (or &lt;code&gt;src/App.tsx&lt;/code&gt;):&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="c1"&gt;// ...&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&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;react&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;reactLogo&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/react.svg&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;viteLogo&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;/vite.svg&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./App.css&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// ...&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;unused&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;This value is not used!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Add this variable&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;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;useState&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="c1"&gt;// ...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you run &lt;code&gt;npm run lint&lt;/code&gt;, ESLint will report an error for the unused variable.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run lint

&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; vite-project@0.0.0 lint
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; eslint &lt;span class="nb"&gt;.&lt;/span&gt;


/tmp/vite-project/src/App.tsx
  6:7  error  &lt;span class="s1"&gt;'unused'&lt;/span&gt; is assigned a value but never used  @typescript-eslint/no-unused-vars

✖ 1 problem &lt;span class="o"&gt;(&lt;/span&gt;1 error, 0 warnings&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Stuck? Need help?
&lt;/h3&gt;

&lt;p&gt;If you get stuck or need help, feel free to reach out in my Discord community! You can join and ask questions here: &lt;a href="https://discord.gg/dKeuR9yfBs" rel="noopener noreferrer"&gt;https://discord.gg/dKeuR9yfBs&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Thanks for reading!&lt;br&gt;
&lt;a href="https://bestcodes.dev" rel="noopener noreferrer"&gt;BestCodes&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>tutorial</category>
      <category>vite</category>
      <category>react</category>
    </item>
    <item>
      <title>Using Discord Components v2 with Discord.js 🔥</title>
      <dc:creator>BestCodes</dc:creator>
      <pubDate>Thu, 05 Jun 2025 14:07:20 +0000</pubDate>
      <link>https://forem.com/best_codes/using-discord-components-v2-with-discordjs-8f</link>
      <guid>https://forem.com/best_codes/using-discord-components-v2-with-discordjs-8f</guid>
      <description>&lt;p&gt;In March 2025, Discord released Components v2, a great improvement to the message components system. Before Components v2, a bot could send embeds or text, but it had very limited control over the layout. With Components v2, messages are constructed entirely using components. This unified approach eliminates the use of traditional message content and embeds, offering developers greater flexibility in designing message layouts.&lt;/p&gt;

&lt;p&gt;Rather than describing everything Components v2 offers, let's learn by example. We'll create a simple bot using the &lt;a href="https://github.com/The-Best-Codes/discraft-js" rel="noopener noreferrer"&gt;Discraft&lt;/a&gt; bot framework, a lightweight CLI for bootstrapping Discord.js bots that will do all the boilerplate work for us so we can focus on building components.&lt;br&gt;
(Or, if you just want to know what changed in Components v2, you can skip to the TL;DR 😉)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: This article assumes you have a basic understanding of JavaScript and Discord.js. Also, while the article primarily focuses on using Components v2 with application commands, you can use the same techniques with text messages!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Creating a Bot
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;If you already have a Discord.js bot, you can skip directly to the Components v2 with Discord.js section. However, the tutorial assumes that your bot is using the &lt;a href="https://github.com/The-Best-Codes/discraft-js" rel="noopener noreferrer"&gt;Discraft&lt;/a&gt; bot framework, so you may need to modify some of the code examples to fit your bot's structure.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;First, install the Discraft CLI globally (or skip this step and run it with &lt;code&gt;npx&lt;/code&gt;). Run:&lt;br&gt;
&lt;/p&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;-g&lt;/span&gt; discraft
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;In this tutorial, we are using Discraft &lt;code&gt;1.7.7&lt;/code&gt;.&lt;br&gt;
Next, let's initialize a new JavaScript bot using Discraft:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;discraft init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;When prompted, choose the "JavaScript" template. Then, name the directory whatever you'd like (e.g., components-v2-bot) by selecting "Custom directory".&lt;br&gt;
At the end of the initialization process, Discraft should give you some steps like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;cd components-v2-bot&lt;/li&gt;
&lt;li&gt;Configure your .env file with your bot token&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;npm run dev&lt;/code&gt; to start the bot in development mode&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You should follow the instructions to complete the setup process:&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;cd &lt;/span&gt;components-v2-bot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Your &lt;code&gt;.env&lt;/code&gt; file should contain the bot token and ID, which you will receive after creating a new bot application on the &lt;a href="https://discord.com/developers/applications" rel="noopener noreferrer"&gt;Discord Developer Portal&lt;/a&gt;. You should &lt;strong&gt;never share your bot token&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Create a .env file with this content
# From `Bot &amp;gt; Token` | https://discord.com/developers/applications
DISCORD_TOKEN='secret_token_here'
# From `General Information &amp;gt; App ID` | https://discord.com/developers/applications
DISCORD_APP_ID='bot_id_here'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Start the development server:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You should see some logs in the terminal confirming that your bot is online!&lt;/p&gt;

&lt;p&gt;Now it's time to invite the bot to a server. There are a couple of things we should do first to prepare the bot for installation.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set &lt;code&gt;application command&lt;/code&gt; and &lt;code&gt;bot&lt;/code&gt; scopes in the &lt;a href="https://discord.com/developers/applications" rel="noopener noreferrer"&gt;Discord Developer Portal&lt;/a&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%2Fwy46nzg0m3azw7lwgjqt.png" alt=" "&gt;
&lt;/li&gt;
&lt;li&gt;Give the bot all three privileged gateway intents:
&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%2F9b9w352sflrsw3pd52co.png" alt=" "&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Replace "Discord Bot ID" with your bot's Client ID below to get an invite link and invite the bot to a server:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://discord.com/oauth2/authorize?client_id=Discord Bot ID&amp;amp;scope=bot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;Remember that you must have the "Manage Server" permission to invite bots to a server.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Understanding the Bot Structure
&lt;/h3&gt;

&lt;p&gt;The Discraft JavaScript template automatically created several files and folders for us, so let's make sure we understand what's going on.&lt;br&gt;
If we open the project in a code editor, we'll see a lot of directories and files, but for this tutorial, the most important is the &lt;code&gt;commands&lt;/code&gt; directory.&lt;br&gt;
The &lt;code&gt;index.js&lt;/code&gt; file is the entry point for the bot, where all the other files come together. If you ran &lt;code&gt;npm run dev&lt;/code&gt; or &lt;code&gt;npm run build&lt;/code&gt; earlier, you will also find a &lt;code&gt;.discraft&lt;/code&gt; folder. It contains command and event index files to automatically register commands and events with Discord when your bot starts up.&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%2Fi1el1pxlh1qvap2r7krr.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%2Fi1el1pxlh1qvap2r7krr.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's take a look at the &lt;code&gt;commands/ping.js&lt;/code&gt; file. It defines an application command (&lt;code&gt;/ping&lt;/code&gt;) that responds with "Pong!" when a user runs the command on Discord.&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;SlashCommandBuilder&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;discord.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;SlashCommandBuilder&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;ping&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;setDescription&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Ping!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;

  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&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="nx"&gt;interaction&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;interaction&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;interaction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Pong!&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;When the bot starts, it will register a &lt;code&gt;ping&lt;/code&gt; slash command on Discord. If we type &lt;code&gt;/&lt;/code&gt; in the Discord message box, we'll see a list of bot commands we can run. This image shows what part of the code corresponds to different parts of the Discord command UI:&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%2F395kjvvyl3jgtjz985xa.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%2F395kjvvyl3jgtjz985xa.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now that we understand how the slash commands are defined, let's update the ping command to use Components v2!&lt;/p&gt;
&lt;h2&gt;
  
  
  Components v2 with Discord.js
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Components v2 was recently introduced into Discord.js. This tutorial assumes you are using Discord.js &lt;code&gt;14.19.3&lt;/code&gt; or later. To make sure you have the latest version, run &lt;code&gt;npm install discord.js@latest&lt;/code&gt; in your project directory.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The first step in migrating to Components v2 is to add the &lt;code&gt;IsComponentsV2&lt;/code&gt; flag to our bot interaction response. This flag tells Discord.js to use Components v2 instead of the older version.&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;MessageFlags&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;discord.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// ...&lt;/span&gt;

&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;interaction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Pong!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;flags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;MessageFlags&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;IsComponentsV2&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;If we try to use the ping command at this point, nothing will happen (or the bot will have an error) because we need an array of components to pass to the &lt;code&gt;content&lt;/code&gt; field and not plain text. So let's update our file again:&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;MessageFlags&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;SlashCommandBuilder&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;TextDisplayBuilder&lt;/span&gt;&lt;span class="p"&gt;,&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;discord.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;SlashCommandBuilder&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;ping&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;setDescription&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Ping!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;

  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&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="nx"&gt;interaction&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;interaction&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;components&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;TextDisplayBuilder&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;setContent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Pong!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)];&lt;/span&gt;

    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;interaction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;components&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;components&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;flags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;MessageFlags&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;IsComponentsV2&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;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;That might seem pretty boring at first. It does the same thing as our ping command did earlier, just using more code. However, you might have noticed something important: the &lt;code&gt;components&lt;/code&gt; constant is an array, so we can put text, buttons, or whatever we want in &lt;em&gt;whatever order we want&lt;/em&gt;. We're no longer limited to just embeds or action rows at the &lt;em&gt;end&lt;/em&gt; of our messages!&lt;br&gt;
Let's add more components to see it in action:&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;ContainerBuilder&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;MessageFlags&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;SeparatorBuilder&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;SeparatorSpacingSize&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;SlashCommandBuilder&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;TextDisplayBuilder&lt;/span&gt;&lt;span class="p"&gt;,&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;discord.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;SlashCommandBuilder&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;ping&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;setDescription&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Ping!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;

  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&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="nx"&gt;interaction&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;interaction&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;components&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;TextDisplayBuilder&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;setContent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Pinging...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
      &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ContainerBuilder&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;addTextDisplayComponents&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;TextDisplayBuilder&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;setContent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Ping? Pong? Ping?&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;new&lt;/span&gt; &lt;span class="nc"&gt;SeparatorBuilder&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setSpacing&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;SeparatorSpacingSize&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Small&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setDivider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
      &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;TextDisplayBuilder&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;setContent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Pong!&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;await&lt;/span&gt; &lt;span class="nx"&gt;interaction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;components&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;components&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;flags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;MessageFlags&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;IsComponentsV2&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;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The result:&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%2Fs7lbdzlvgbdrq2u2v68q.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%2Fs7lbdzlvgbdrq2u2v68q.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;After a while, building all these Components in code and testing them on Discord gets very tedious. If you want an awesome tool for prototyping Discord messages with Components v2, check out &lt;a href="https://discord.builders/discordjs-javascript-code-generator" rel="noopener noreferrer"&gt;discord.builders&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&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"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://discord.builders/discordjs-javascript-code-generator" rel="noopener noreferrer" class="c-link"&gt;
            discord.builders · Use new components in your Discord webhooks
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Use new Discord components in messages for free and stylize your server however your want.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdiscord.builders%2Fassets%2Ffavicon-96x96-B0gGJaXI.png"&gt;
          discord.builders
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;






&lt;p&gt;Let's try something a bit more advanced. We'll recreate that select menu you see in the thumbnail of this blog post!&lt;/p&gt;

&lt;p&gt;First, create a new file named &lt;code&gt;select-food.js&lt;/code&gt; in the &lt;code&gt;commands/&lt;/code&gt; folder. Add this content to the file:&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;ActionRowBuilder&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;MessageFlags&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;SlashCommandBuilder&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;StringSelectMenuBuilder&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;StringSelectMenuOptionBuilder&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;TextDisplayBuilder&lt;/span&gt;&lt;span class="p"&gt;,&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;discord.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;SlashCommandBuilder&lt;/span&gt;&lt;span class="p"&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;select-food&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="nf"&gt;setDescription&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Choose a food to eat :D&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;

  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&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="nx"&gt;interaction&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;interaction&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;components&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;TextDisplayBuilder&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;setContent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Which food would you like to eat?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
      &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ActionRowBuilder&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;addComponents&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;StringSelectMenuBuilder&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
          &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setCustomId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;discraft-select-a-food&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="nf"&gt;setPlaceholder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Make a selection&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="nf"&gt;addOptions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;StringSelectMenuOptionBuilder&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
              &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setLabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Taco&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="nf"&gt;setValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dsaf-taco&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="nf"&gt;setDescription&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;(best option)&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="nf"&gt;setEmoji&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
                &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;🌮&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;new&lt;/span&gt; &lt;span class="nc"&gt;StringSelectMenuOptionBuilder&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
              &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setLabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Pizza&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="nf"&gt;setValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dsaf-pizza&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="nf"&gt;setEmoji&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
                &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;🍕&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;new&lt;/span&gt; &lt;span class="nc"&gt;StringSelectMenuOptionBuilder&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
              &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setLabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Burger&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="nf"&gt;setValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dsaf-burger&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="nf"&gt;setEmoji&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
                &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;🍔&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;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;];&lt;/span&gt;

    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;interaction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;components&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;components&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;flags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;MessageFlags&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;IsComponentsV2&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;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After you add a new command, save the file and restart your bot. If you are using the &lt;code&gt;npm run dev&lt;/code&gt; command from Discraft, your bot will automatically reload for you. You might also need to reopen Discord or refresh your slash command cache (Ctrl+R on desktop) for the new command to appear.&lt;/p&gt;

&lt;p&gt;Run the &lt;code&gt;select-food&lt;/code&gt; command and you will see a select menu with options just like we set in the file!&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%2Fg79yf17t6y845xelly0c.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%2Fg79yf17t6y845xelly0c.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The select menu interaction will fail if you actually make a selection, because we haven't told the bot how to handle the interaction yet. We can easily add an &lt;code&gt;interactionCreate&lt;/code&gt; event listener to handle the select menu interactions.&lt;br&gt;
Simply create a new file named &lt;code&gt;interactionCreate.js&lt;/code&gt; in the &lt;code&gt;events/&lt;/code&gt; folder:&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;Events&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;MessageFlags&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;discord.js&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="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;logger&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;../utils/logger&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;event&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Events&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;InteractionCreate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;handler&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;_client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;interaction&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="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;interaction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isAnySelectMenu&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="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;interaction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;customId&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;discraft-select-a-food&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;selectedValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;interaction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;values&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="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;foodName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="k"&gt;switch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;selectedValue&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dsaf-taco&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
          &lt;span class="nx"&gt;foodName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Taco&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
          &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dsaf-pizza&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
          &lt;span class="nx"&gt;foodName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Pizza&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
          &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dsaf-burger&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
          &lt;span class="nx"&gt;foodName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Burger&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
          &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
          &lt;span class="nx"&gt;foodName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Unknown food&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;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;interaction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
          &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`You selected: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;foodName&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;! Great choice!`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;flags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;MessageFlags&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Ephemeral&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Only the user who interacted with the menu can see this message&lt;/span&gt;
        &lt;span class="p"&gt;});&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Error replying to select menu interaction: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&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;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 you select a food, the bot will respond with a follow-up message!&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%2Fh6refzlyiaa7hir365u5.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%2Fh6refzlyiaa7hir365u5.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;That's pretty much it... you're now ready to build richer, better bot interactions!&lt;br&gt;
Migrating to Components v2 with Discord.js is fairly easy. If you are curious about all the new components, you can see the &lt;a href="https://discord.com/developers/docs/components/reference" rel="noopener noreferrer"&gt;list of available components on the Discord API Docs&lt;/a&gt;. And don't forget to check out &lt;a href="https://discord.builders/discordjs-javascript-code-generator" rel="noopener noreferrer"&gt;discord.builders&lt;/a&gt;, which makes it super easy to mock up messages with Components v2.&lt;/p&gt;

&lt;h3&gt;
  
  
  TL;DR
&lt;/h3&gt;

&lt;p&gt;The table below shows a quick summary of the main changes between Components v1 and v2:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;v1 (Old)&lt;/th&gt;
&lt;th&gt;v2 (New)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Layout control&lt;/td&gt;
&lt;td&gt;Limited to embeds &amp;amp; action rows&lt;/td&gt;
&lt;td&gt;Full control with flexible layouts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Message content&lt;/td&gt;
&lt;td&gt;Text or embed&lt;/td&gt;
&lt;td&gt;Fully component-based&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Buttons/Selects&lt;/td&gt;
&lt;td&gt;Separate from message body&lt;/td&gt;
&lt;td&gt;Integrated inline with text&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If you get stuck, you can join the &lt;a href="https://discord.gg/dKeuR9yfBs" rel="noopener noreferrer"&gt;Discraft support server&lt;/a&gt; to get help.&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;br&gt;
&lt;a href="https://bestcodes.dev" rel="noopener noreferrer"&gt;BestCodes&lt;/a&gt;&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>discord</category>
      <category>javascript</category>
      <category>programming</category>
    </item>
    <item>
      <title>9 Performance Optimization Tips for Windows 11</title>
      <dc:creator>BestCodes</dc:creator>
      <pubDate>Wed, 21 May 2025 15:16:38 +0000</pubDate>
      <link>https://forem.com/best_codes/9-performance-optimization-tips-for-windows-11-2inf</link>
      <guid>https://forem.com/best_codes/9-performance-optimization-tips-for-windows-11-2inf</guid>
      <description>&lt;p&gt;Feeling like your Windows machine is crawling? Before you throw it out the window (pun intended), try these simple tips to speed things up!&lt;/p&gt;

&lt;p&gt;I'll keep things simple, actionable, and beginner-friendly. You don't need to be a tech wizard to do any of these.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Disable Startup Programs
&lt;/h2&gt;

&lt;p&gt;If you have too many apps launching at boot, they can negatively impact your system's performance.&lt;/p&gt;

&lt;p&gt;Press &lt;code&gt;Ctrl + Shift + Esc&lt;/code&gt; to open &lt;strong&gt;Task Manager&lt;/strong&gt; (or search for it in the Start Menu), then go to the &lt;strong&gt;Startup Apps&lt;/strong&gt; tab and disable what you don't need.&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%2Fatyx3wk24v15bxfujq1k.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%2Fatyx3wk24v15bxfujq1k.png" alt=" " width="721" height="228"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Right-click on the startup apps you want to disable at startup and select &lt;strong&gt;Disable&lt;/strong&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%2Fo9k9cuwv09y2qtyz7m0q.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%2Fo9k9cuwv09y2qtyz7m0q.png" alt=" " width="297" height="80"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Don't worry; disabling them here won't uninstall anything, it just stops them from launching automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Uninstall Bloatware
&lt;/h2&gt;

&lt;p&gt;You'd be surprised how many pre-installed apps or unused software sit around doing nothing but slowing things down. Some run in the background and consume resources silently when you aren't even using them.&lt;/p&gt;

&lt;p&gt;Go to &lt;strong&gt;Settings &amp;gt; Apps &amp;gt; Installed Apps&lt;/strong&gt; and uninstall junk you never use.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you see something that you don't recognize or looks like a development tool, don't uninstall it immediately. Ask someone knowledgeable about it or search about it online to confirm its purpose before uninstalling so you don't accidentally remove system dependencies.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You can also sort the apps by size to identify the biggest ones. They don't necessarily cause the most lag, but they use a lot of disk space.&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%2F0307zvycrkwb7scptlfu.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%2F0307zvycrkwb7scptlfu.png" alt=" " width="722" height="474"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Clean Up with Storage Sense or Disk Cleanup
&lt;/h2&gt;

&lt;p&gt;Clear out temporary files, old updates, and recycle bin trash.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Storage Sense&lt;/strong&gt;: Turn it on in &lt;strong&gt;Settings &amp;gt; System &amp;gt; Storage&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Or run &lt;strong&gt;Disk Cleanup&lt;/strong&gt; from the Start Menu for a manual sweep.&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%2F4x4lq7l3e5f4wuhsqggm.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%2F4x4lq7l3e5f4wuhsqggm.png" alt=" " width="403" height="528"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Enable High Performance Mode
&lt;/h2&gt;

&lt;p&gt;Windows likes to save power, which is nice — unless you want speed!&lt;/p&gt;

&lt;p&gt;To enable High Performance mode, search "Control Panel" in the Start Menu. Launch it.&lt;br&gt;
Now, follow closely in the next steps. Windows 11 makes it tricky to enable High Performance mode due to environmental efforts.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to &lt;strong&gt;Hardware and Sound&lt;/strong&gt; from the Control Panel.
&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%2F7y4lnvty3snagcrv8vt4.png" alt=" " width="383" height="145"&gt;
&lt;/li&gt;
&lt;li&gt;Click on &lt;strong&gt;Power Options&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Scroll to the bottom and click on the "Show additional plans" accordion.
&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%2F1afff7fqxkov22f2meja.png" alt=" " width="691" height="311"&gt;
&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;High Performance&lt;/strong&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%2Fguhrgbbfqe3indkcuv6t.png" alt=" " width="301" height="80"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Keep Drivers &amp;amp; Windows Updated
&lt;/h2&gt;

&lt;p&gt;Outdated drivers can cause bugs, crashes, and slowness. It's a good idea to check for driver updates and windows updates often. You can do this in settings.&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%2F272v20l726cqp9m01o8t.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%2F272v20l726cqp9m01o8t.png" alt=" " width="687" height="253"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Adjust Visual Effects for Speed
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Warning!&lt;/strong&gt; Applying these optimizations can change fonts, scrolling behavior, and other things essential to your PC experience. Proceed with caution and be prepared to change the settings back to their original state ("Let Windows choose what's best for my computer") if needed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Fancy animations are great, but they slow things down. And Windows has a lot of them by default. If you disable some of them, your PC experience might feel faster but not as great looking, so &lt;strong&gt;this tip has trade-offs&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;Search "adjust appearance and performance" in the Start Menu and open the Control Panel "Adjust the appearance and performance of Windows" dialog.&lt;br&gt;
By default, "Let Windows choose what's best for my computer" is selected. You can select "Adjust for best performance", which disables &lt;strong&gt;all&lt;/strong&gt; animations, and then enable ones that you can't live without from there.&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%2Fw1vmpc96kfci4lfl3j9a.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%2Fw1vmpc96kfci4lfl3j9a.png" alt=" " width="444" height="628"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click "Apply" to see the changes, then "OK" to quit if you decide to keep it that way. You might save this section of the article if you want to find the menu again later.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Turn Off Background Apps
&lt;/h2&gt;

&lt;p&gt;Some apps run in the background for no good reason.&lt;/p&gt;

&lt;p&gt;To disable background processes for an app or limit its resources, head to &lt;strong&gt;Settings &amp;gt; Apps &amp;gt; Installed Apps&lt;/strong&gt; and click the &lt;code&gt;...&lt;/code&gt; on an app. If available, choose "Advanced options" and set the &lt;code&gt;Background app permissions&lt;/code&gt; to "Power optimized" or "Never".&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%2Fw0g1v0jv2q8jao4jg5bg.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%2Fw0g1v0jv2q8jao4jg5bg.png" alt=" " width="510" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Defragment (HDD) or Optimize (SSD)
&lt;/h2&gt;

&lt;p&gt;If you're on a hard drive (HDD), defrag it. If you're on an SSD, don't; just optimize.&lt;/p&gt;

&lt;p&gt;Search for &lt;strong&gt;"Defragment and Optimize Drives"&lt;/strong&gt; in the Start Menu and optimize your main drive.&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%2Fftnswtc7lysogkr8kxrr.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%2Fftnswtc7lysogkr8kxrr.png" alt=" " width="734" height="542"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Turn on Game Mode (Gamers Only)
&lt;/h2&gt;

&lt;p&gt;Game Mode tells Windows to chill out on background stuff while you're playing.&lt;/p&gt;

&lt;p&gt;To turn it on, go to &lt;strong&gt;Settings &amp;gt; Gaming &amp;gt; Game Mode&lt;/strong&gt; and toggle it on.&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%2Fsd3km36xspuxmlvxkt86.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%2Fsd3km36xspuxmlvxkt86.png" alt=" " width="763" height="351"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;A laggy PC doesn't always mean it's dying. Most of the time, it's just bogged down with junk or background apps. Try a combo of the tips above, even a few can make a big difference.&lt;/p&gt;

&lt;p&gt;If you liked this post, share it with a friend who's still suffering through 100% CPU usage 😅&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;br&gt;
&lt;a href="https://bestcodes.dev" rel="noopener noreferrer"&gt;BestCodes&lt;/a&gt;&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>performance</category>
      <category>microsoft</category>
    </item>
    <item>
      <title>Phi 4 Reasoning Benchmarks, Model Specs, and Comparisons</title>
      <dc:creator>BestCodes</dc:creator>
      <pubDate>Sun, 04 May 2025 13:49:48 +0000</pubDate>
      <link>https://forem.com/best_codes/phi-4-reasoning-benchmarks-model-specs-and-comparisons-4hk</link>
      <guid>https://forem.com/best_codes/phi-4-reasoning-benchmarks-model-specs-and-comparisons-4hk</guid>
      <description>&lt;h2&gt;
  
  
  Meet the Phi 4 Reasoning series by Microsoft
&lt;/h2&gt;

&lt;p&gt;Released on April 30th, 2025, the Phi 4 Reasoning model series is the latest generation of LLMs from Microsoft. It's the first model in the Phi series designed for reasoning tasks.&lt;br&gt;
TL;DR: The &lt;strong&gt;benchmarks&lt;/strong&gt; look great, but my &lt;strong&gt;experience&lt;/strong&gt; didn't match.&lt;/p&gt;

&lt;p&gt;Let's check it out!&lt;/p&gt;




&lt;h2&gt;
  
  
  Model Sizes and Details
&lt;/h2&gt;

&lt;p&gt;Here's a quick look at what you can choose from:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Params&lt;/th&gt;
&lt;th&gt;Max Context&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;phi4-reasoning-plus&lt;/td&gt;
&lt;td&gt;14.7B&lt;/td&gt;
&lt;td&gt;32K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;phi4-reasoning&lt;/td&gt;
&lt;td&gt;14.7B&lt;/td&gt;
&lt;td&gt;32K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;phi4-mini-reasoning&lt;/td&gt;
&lt;td&gt;3.8B&lt;/td&gt;
&lt;td&gt;32K&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Some key model details:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All models are licensed under &lt;strong&gt;MIT&lt;/strong&gt;. This makes them quite accessible for various applications.&lt;/li&gt;
&lt;li&gt;Notably, the context window isn't that great, especially for a reasoning model. Even the 8B variant of the recently released &lt;a href="https://bestcodes.dev/blog/qwen-3-what-you-need-to-know" rel="noopener noreferrer"&gt;Qwen3 model&lt;/a&gt; has a larger context window. However, it should work for most local purposes.&lt;/li&gt;
&lt;li&gt;The training data cutoff is March 2025, but the model itself claims a cutoff date of October 2023.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Benchmarks and Comparisons
&lt;/h2&gt;

&lt;p&gt;Well, at least the benchmarks &lt;em&gt;look&lt;/em&gt; good. My experience with general use was not so wonderful. Maybe this excerpt from the model description on HuggingFace helps explain why:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://huggingface.co/microsoft/Phi-4-reasoning#:~:text=This%20model%20is%20designed%20and%20tested%20for%20math%20reasoning%20only." rel="noopener noreferrer"&gt;This model is designed and tested for math reasoning only.&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Regardless, let's take a look.&lt;/p&gt;




&lt;p&gt;Here, you can see that Phi 4 Reasoning performs quite well for its size. It significantly outperforms the Phi 4 base model, as well as DeepSeek Distill 70B and o1-mini in certain scenarios:&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%2Fh84byyhuobthh0xhvr5t.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%2Fh84byyhuobthh0xhvr5t.png" alt="Phi 4 Reasoning Benchmarks" width="800" height="281"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Phi 4 Mini Reasoning also demonstrates strong performance, outperforming its base model and most others (with o1 being an exception in a couple of benchmarks) specifically on math reasoning tasks:&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%2F4f42xbedptumk6sazyzr.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%2F4f42xbedptumk6sazyzr.png" alt="Phi 4 Mini Reasoning Benchmarks" width="800" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My Personal Experience
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;This section is biased. As some have pointed out, the model isn't designed to be good at chatting, it's supposed to reason and do math. Keep that in mind when reading this section.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;My experience with the model was okay, but it's really a math reasoning model, not a general model.&lt;/p&gt;

&lt;p&gt;For example, let's tell Phi 4 Reasoning "Hello!". That should be easy, right?&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%2Fcmlpq7kzayrcp0hhj4ia.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%2Fcmlpq7kzayrcp0hhj4ia.png" alt="Hello chat with Phi 4" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Apparently, "We need to produce a greeting response" is hard not to keep thinking about, because I hit a token limit before it responded. I did tweak the model temperature and a few params and get this working better, but I was not impressed with the initial results.&lt;/p&gt;

&lt;p&gt;With typical benchmark tests, however, the model does a great job! Here's the "Is 9.11 or 9.9 larger" test:&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%2Flzrkglyiz84c6fs2wr4m.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%2Flzrkglyiz84c6fs2wr4m.png" alt="Is 9.11 or 9.9 larger" width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sometimes, as with many reasoning models, the answer is okay, but the reasoning to get there is a bit weird:&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%2Fgb5i028fzclyqm9tokpp.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%2Fgb5i028fzclyqm9tokpp.png" alt="Weird reasoning" width="800" height="301"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;And then ask: "What time is it?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Where did &lt;em&gt;that&lt;/em&gt; come from? LOL. At least it answered correctly in the end.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Phi 4 Reasoning is definitely interesting and performs well for its size, but it doesn't quite take the lead in the general LLM landscape. I wouldn't recommend it for broad, general-purpose applications at this point. 🥲&lt;br&gt;
It might be right for you if you need math or more specific reasoning tasks.&lt;/p&gt;

&lt;p&gt;If you're interested in the technical details, you can check out the &lt;a href="https://www.microsoft.com/en-us/research/wp-content/uploads/2025/04/phi_4_reasoning.pdf" rel="noopener noreferrer"&gt;official release paper by Microsoft&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>programming</category>
      <category>learning</category>
    </item>
    <item>
      <title>Qwen 3 Benchmarks, Comparisons, Model Specifications, and More</title>
      <dc:creator>BestCodes</dc:creator>
      <pubDate>Thu, 01 May 2025 14:14:14 +0000</pubDate>
      <link>https://forem.com/best_codes/qwen-3-benchmarks-comparisons-model-specifications-and-more-4hoa</link>
      <guid>https://forem.com/best_codes/qwen-3-benchmarks-comparisons-model-specifications-and-more-4hoa</guid>
      <description>&lt;h2&gt;
  
  
  Qwen3: Alibaba's Latest Open-Source AI Model
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Qwen3&lt;/strong&gt; is the latest generation of large language models (LLMs) from Alibaba Cloud. Built by the team behind the &lt;em&gt;Tongyi Qianwen&lt;/em&gt; series (通义千问), this release brings serious power and flexibility, packed into an Apache-2.0-licensed, open-source package.&lt;/p&gt;

&lt;p&gt;Released on &lt;strong&gt;April 29, 2025&lt;/strong&gt;, Qwen3 comes in &lt;strong&gt;eight sizes&lt;/strong&gt;, including both &lt;strong&gt;dense models&lt;/strong&gt; (from 600M to 32B parameters) and &lt;strong&gt;Mixture-of-Experts (MoE)&lt;/strong&gt; giants, like the flagship &lt;strong&gt;Qwen3-235B&lt;/strong&gt;. These MoE models activate only a small slice of their total parameters at a time (like 22B out of 235B), so you get high performance without insane compute requirements.&lt;/p&gt;

&lt;p&gt;Let's dive into some of the key features.&lt;/p&gt;




&lt;h2&gt;
  
  
  Model Sizes and Options
&lt;/h2&gt;

&lt;p&gt;Here's a quick look at what you can choose from:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Params (Total / Active)&lt;/th&gt;
&lt;th&gt;Max Context&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Qwen3-235B-A22B&lt;/td&gt;
&lt;td&gt;MoE&lt;/td&gt;
&lt;td&gt;235B / 22B&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qwen3-30B-A3B&lt;/td&gt;
&lt;td&gt;MoE&lt;/td&gt;
&lt;td&gt;30B / 3B&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qwen3-32B&lt;/td&gt;
&lt;td&gt;Dense&lt;/td&gt;
&lt;td&gt;32B&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qwen3-14B&lt;/td&gt;
&lt;td&gt;Dense&lt;/td&gt;
&lt;td&gt;14B&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qwen3-8B&lt;/td&gt;
&lt;td&gt;Dense&lt;/td&gt;
&lt;td&gt;8B&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qwen3-4B&lt;/td&gt;
&lt;td&gt;Dense&lt;/td&gt;
&lt;td&gt;4B&lt;/td&gt;
&lt;td&gt;32K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qwen3-1.7B&lt;/td&gt;
&lt;td&gt;Dense&lt;/td&gt;
&lt;td&gt;1.7B&lt;/td&gt;
&lt;td&gt;32K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qwen3-0.6B&lt;/td&gt;
&lt;td&gt;Dense&lt;/td&gt;
&lt;td&gt;0.6B&lt;/td&gt;
&lt;td&gt;32K&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;All models are licensed under &lt;strong&gt;Apache 2.0&lt;/strong&gt;, so you can use them in commercial apps without worrying about legal issues.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benchmarks and Comparisons
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;The benchmarks below evaluate Qwen3 with reasoning enabled.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Qwen3-235B (the flagship model) leads on the CodeForces ELO Rating, BFCL, and LiveCodeBench v5 benchmarks but trails behind Gemini 2.5 Pro on ArenaHard, AIME, MultilF, and Aider Pass@2:&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%2F1rb0kkevcxzynd14pcee.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%2F1rb0kkevcxzynd14pcee.png" alt="benchmark" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Compared to open-source and less bleeding-edge models, Qwen3-30B (a smaller model) excels in both speed and accuracy. It is outranked only by QwQ-32B, another Alibaba model, in the LiveCodeBench and CodeForces benchmarks as well as GPT-4o in the BFCL benchmark:&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%2F555dcva96n8vse68eqmg.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%2F555dcva96n8vse68eqmg.png" alt="benchmark" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Below, despite being the second-smallest model, Qwen3-235B outranks &lt;strong&gt;all&lt;/strong&gt; models on &lt;strong&gt;all&lt;/strong&gt; benchmarks, excepting DeepSeek v3 on the &lt;code&gt;INCLUDE&lt;/code&gt; Multilingual tasks benchmark.&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%2F3k6ptxha0o2k45uhoj3w.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%2F3k6ptxha0o2k45uhoj3w.png" alt="benchmark" width="800" height="544"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What's New in Qwen3?
&lt;/h2&gt;



&lt;h3&gt;
  
  
  Dual "Thinking" Modes
&lt;/h3&gt;

&lt;p&gt;This is one of the coolest features: Qwen3 can switch between &lt;strong&gt;"thinking" mode&lt;/strong&gt; and &lt;strong&gt;"non-thinking" mode&lt;/strong&gt;. Thinking mode is for deep reasoning, like chain-of-thought answers for complex tasks. Non-thinking mode skips the fluff and gives you fast, concise responses.&lt;/p&gt;

&lt;p&gt;So, depending on the prompt or task, Qwen3 can choose to think deeply or just get to the point. That means better speed when you want it, and better depth when you need it.&lt;/p&gt;

&lt;h3&gt;
  
  
  MoE for Smarter Scaling
&lt;/h3&gt;

&lt;p&gt;The MoE (Mixture-of-Experts) architecture is how Qwen3 pulls off those giant parameter counts. Instead of using all the parameters every time, it activates only a few "experts" per token. For example, Qwen3-235B uses just 22B active parameters at once, so it's much cheaper to run than you'd expect for its size.&lt;/p&gt;

&lt;p&gt;It's a smart way to scale up without blowing your budget on GPUs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Trained on 36 Trillion Tokens Across 119 Languages
&lt;/h3&gt;

&lt;p&gt;Qwen3 was trained on &lt;strong&gt;a massive dataset of about 36 trillion tokens&lt;/strong&gt;, including web data, books, PDFs, and synthetic code/math generated by earlier Qwen models. It now understands &lt;strong&gt;119 languages and dialects&lt;/strong&gt;, making it one of the most multilingual models out there.&lt;/p&gt;

&lt;p&gt;Whether you're working in English, Chinese, or a low-resource language, Qwen3 is probably ready to help.&lt;/p&gt;

&lt;h3&gt;
  
  
  Smarter Agents and Better Coders
&lt;/h3&gt;

&lt;p&gt;Qwen3 wasn't just trained to talk. Alibaba also focused on &lt;strong&gt;tool use, planning, and coding&lt;/strong&gt;, making this generation much better at things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Writing and debugging code&lt;/li&gt;
&lt;li&gt;Solving math and logic problems step-by-step&lt;/li&gt;
&lt;li&gt;Acting as an AI agent that can use tools or browse the web&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In fact, even the &lt;strong&gt;Qwen3-4B&lt;/strong&gt; reportedly outperforms some earlier 72B models on tasks like programming.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;You can grab the models from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://huggingface.co/collections/Qwen/qwen3-67dd247413f0e2e4f653967f" rel="noopener noreferrer"&gt;🤗 Hugging Face&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/QwenLM/Qwen3" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ollama.com/library/qwen3" rel="noopener noreferrer"&gt;Ollama&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You'll also find detailed guides, tokenizer info, and fine-tuning instructions on their &lt;a href="https://github.com/QwenLM/Qwen3" rel="noopener noreferrer"&gt;GitHub page&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Qwen3 is one of the best open LLMs available right now. Of course, that will probably change pretty soon at the rate new models are being released.&lt;/p&gt;




&lt;p&gt;Thanks for reading!&lt;br&gt;
BestCodes&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Some portions of this article are AI generated.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>benchmarks</category>
      <category>ai</category>
      <category>opensource</category>
      <category>ollama</category>
    </item>
    <item>
      <title>Serverless is NOT a Scam.</title>
      <dc:creator>BestCodes</dc:creator>
      <pubDate>Sat, 19 Apr 2025 17:50:11 +0000</pubDate>
      <link>https://forem.com/best_codes/serverless-is-not-a-scam-356</link>
      <guid>https://forem.com/best_codes/serverless-is-not-a-scam-356</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;The post you are currently reading is a lot of facts, but also a lot of my opinions. It is addressing this post:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/code42cate/serverless-is-a-scam-5fc0" class="crayons-story__hidden-navigation-link"&gt;Serverless is a Scam.&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/code42cate" class="crayons-avatar  crayons-avatar--l  "&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%2F461127%2F034233c4-ba6e-473c-8a8d-783831764a10.jpeg" alt="code42cate profile" class="crayons-avatar__image" width="800" height="600"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/code42cate" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Jonas Scholz
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Jonas Scholz
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png" width="166" height="102"&gt;&lt;/a&gt;
              
              &lt;div id="story-author-preview-content-2412273" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/code42cate" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2F461127%2F034233c4-ba6e-473c-8a8d-783831764a10.jpeg" class="crayons-avatar__image" alt="" width="800" height="600"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Jonas Scholz&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/code42cate/serverless-is-a-scam-5fc0" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 16 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/code42cate/serverless-is-a-scam-5fc0" id="article-link-2412273"&gt;
          Serverless is a Scam.
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/serverless"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;serverless&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/docker"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;docker&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/cloud"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;cloud&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/code42cate/serverless-is-a-scam-5fc0" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;161&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/code42cate/serverless-is-a-scam-5fc0#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              71&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;br&gt;
Be sure to drop a comment and tell me what &lt;em&gt;you&lt;/em&gt; think!
&lt;/blockquote&gt;




&lt;p&gt;“Every time someone reaches for serverless to build a simple backend, a container dies inside me.”&lt;br&gt;
Such begins the post of Jonas Scholz (&lt;a class="mentioned-user" href="https://dev.to/code42cate"&gt;@code42cate&lt;/a&gt;), titled “Serverless is a Scam.”&lt;/p&gt;

&lt;p&gt;Every time I see a post like this, a serverless deployment dies inside of me 🥲&lt;br&gt;
Actually, every time I see a post like this, I feel like serverless &lt;em&gt;and&lt;/em&gt; containers are misrepresented. In this post, I want to address a lot of things about both serverless and containers, but particularly some claims made in Jonas' post. Of course, no disrespect is meant towards Jonas. 🙂&lt;/p&gt;


&lt;h2&gt;
  
  
  What Even &lt;em&gt;Is&lt;/em&gt; Serverless?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Original article:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Serverless means &lt;strong&gt;you deploy individual functions&lt;/strong&gt; to a cloud platform, and it handles provisioning, scaling, and execution. You don’t manage the server — you just drop your code in and go.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The author defines serverless as “you deploy individual functions.” That's FaaS (Function-as-a-Service), which is &lt;em&gt;one kind&lt;/em&gt; of serverless. Serverless providers, like Vercel, Netlify, Cloudflare, and more, have gone way beyond just functions. For example, many support things like &lt;a href="https://vercel.com/fluid" rel="noopener noreferrer"&gt;Fluid Compute&lt;/a&gt;, edge middleware, long-running background functions (although admittedly more tricky), full web apps, and more.&lt;/p&gt;

&lt;p&gt;Now, one fair critique is that many of these are "patches" on top of the core FaaS limitations. For example, long-running background jobs often require an integration or separate service because native FaaS platforms generally don’t support persistent or scheduled tasks well. This is a real limitation, and you should consider the tradeoffs when designing your system.&lt;/p&gt;
&lt;h2&gt;
  
  
  Containers…
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Original article:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You know what works?&lt;/p&gt;

&lt;p&gt;A container.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Starts fast&lt;/li&gt;
&lt;li&gt;Runs anywhere&lt;/li&gt;
&lt;li&gt;Keeps state (just add a Docker volume!)&lt;/li&gt;
&lt;li&gt;No arbitrary time limits&lt;/li&gt;
&lt;li&gt;You can attach a debugger, use your favorite runtime, and run locally or in prod — no magic, no special rules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;/p&gt;


&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-v&lt;/span&gt; my-data:/data my-app
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;Boom — stateful workload, works on your laptop, your VPS, or your edge node.&lt;br&gt;
No vendor lock-in. No hidden costs. No rewriting your app to fit someone else’s constraints.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Containers are great, but managing them is &lt;strong&gt;not free of complexity&lt;/strong&gt;! You still have to set up CI/CD pipelines; manage load balancing, auto-scaling, monitoring, etc.; and handle failures and rollbacks.&lt;br&gt;
And before you tell me, “but there are tools that do that hard stuff for you”, stop. There are tools that do that for containers and there are tools that do that for serverless, too. But you can't complain about vendor lock-ins and configs for serverless providers and then offer me a vendor locked-in container manager.&lt;br&gt;
That said, vendor lock-in is for sure something to think about with serverless providers. Once you are using their storage, background jobs, and queues, migrating can be hard. It might require rewriting parts of your app, which is pretty annoying.&lt;/p&gt;

&lt;p&gt;I wish it was as simple as &lt;code&gt;docker run -v my-data:/data my-app&lt;/code&gt;, but &lt;strong&gt;I've been through this&lt;/strong&gt; with my website and it is not. You often wind up writing long and complicated &lt;code&gt;Dockerfile&lt;/code&gt; files and using things like &lt;code&gt;docker-compose&lt;/code&gt; just to solve simple problems.&lt;/p&gt;
&lt;h2&gt;
  
  
  Serverless Pricing = Confusing?
&lt;/h2&gt;

&lt;p&gt;The original article had a heading which read “Serverless Pricing: Designed to Confuse You”. What actually happens is that Serverless pricing is designed for how serverless works. It can be complex because it &lt;strong&gt;scales with usage&lt;/strong&gt;. Compare that to containers running 24/7, regardless of traffic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Original article:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Serverless pricing is a dark pattern.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You pay per invocation&lt;/li&gt;
&lt;li&gt;Per memory used&lt;/li&gt;
&lt;li&gt;Per execution duration&lt;/li&gt;
&lt;li&gt;Per GB transferred&lt;/li&gt;
&lt;li&gt;Per region&lt;/li&gt;
&lt;li&gt;Per secret accessed (yes, really)
The pricing page is five layers deep, full of made-up terms like:&lt;/li&gt;
&lt;li&gt;Provisioned Concurrency Units&lt;/li&gt;
&lt;li&gt;GB-seconds&lt;/li&gt;
&lt;li&gt;Requests Tier 1/2/3
And the kicker? You don’t know what you’re paying until the invoice arrives.
Bandwidth is especially overpriced. $0.55/GB egress in 2025? Why?
Compare that to a $5/month VPS with predictable flat pricing and full control. Containers win by a mile.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;For startups and freelance devs, serverless is really awesome because many platforms provide serverless deployments 100% free (for example, Netlify).&lt;br&gt;
As far as predictable billing, it &lt;em&gt;can be&lt;/em&gt; predictable. You can easily set spending limits on most serverless providers. And Egress pricing it true for all cloud providers, not just serverless.&lt;/p&gt;

&lt;p&gt;Well, I should be fair. If you aren't on the free plan, you might have a quite different experience. If you get a LOT more traffic than you expect and use up a lot of function invocations without a spending limit, you might get a rather surprising bill!&lt;/p&gt;
&lt;h2&gt;
  
  
  Serverless = Spaghetti Architecture?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Original article:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“But Serverless Scales!”&lt;/p&gt;

&lt;p&gt;Sure — technically. But for what? Your app with 4 users?&lt;/p&gt;

&lt;p&gt;Most apps don’t need “infinite scalability.” They need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Predictability&lt;/li&gt;
&lt;li&gt;Observability&lt;/li&gt;
&lt;li&gt;Reasonable resource limits&lt;/li&gt;
&lt;li&gt;A working dev/staging environment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You know what’s great for that? A container.&lt;/p&gt;

&lt;p&gt;Horizontal scaling is trivial (thats Docker Swarm):&lt;/p&gt;


&lt;pre class="highlight plaintext"&gt;&lt;code&gt;replicas: 5
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;Or throw it behind a load balancer. You get scalability and control — without rewriting your app into a spaghetti of disconnected functions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Well, firstly, serverless does fine as far as all the points listed. But whether serverless is “spaghetti” depends on &lt;em&gt;how&lt;/em&gt; you build your app. If you design each function like a microservice, yeah, you can make spaghetti. But that's the point of a framework, like Next.js, Remix, etc. You write full apps with API routes, background jobs, and frontend all in the same codebase. It's very organized and not spaghetti at all.&lt;br&gt;
Plus, it's not uncommon to make a “spaghetti of disconnected functions” in an app, regardless of whether your app is serverless or containerized.&lt;/p&gt;
&lt;h2&gt;
  
  
  Stateless isn't necessarily bad!
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Original article:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Stateless by Design = Artificial Problems&lt;br&gt;
Serverless forces statelessness. That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No in-memory caches&lt;/li&gt;
&lt;li&gt;No temporary files&lt;/li&gt;
&lt;li&gt;No sticky sessions&lt;/li&gt;
&lt;li&gt;No long-lived connections&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So now you need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An external database&lt;/li&gt;
&lt;li&gt;A distributed cache&lt;/li&gt;
&lt;li&gt;A file storage bucket&lt;/li&gt;
&lt;li&gt;An event bus&lt;/li&gt;
&lt;li&gt;A state machine to orchestrate your state machines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Suddenly your “simple” serverless app depends on six SaaS platforms (each with their own billing, APIs, and failure modes).&lt;br&gt;
Meanwhile, in a container:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can cache in memory&lt;/li&gt;
&lt;li&gt;Write to disk (Docker volume)&lt;/li&gt;
&lt;li&gt;Maintain sessions&lt;/li&gt;
&lt;li&gt;Run as long as you need&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You know — like a normal program.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As my heading suggests, the first misconception to clear away here is that “stateless is bad”. Stateless might be annoying at times, but it encourages best practices. It:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Makes scaling easy&lt;/li&gt;
&lt;li&gt;Prevents sticky-session problems (yes, no sticky-sessions is a good thing)&lt;/li&gt;
&lt;li&gt;Encourages durable storage, Redis, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And by the way, maintaining sessions in memory or in a Docker volume is a &lt;strong&gt;bad&lt;/strong&gt; idea for a lot of reasons. It's not secure and not durable.&lt;br&gt;
You especially shouldn't keep &lt;em&gt;important&lt;/em&gt; data in a container's memory, either. That is not safe or scalable. Docker volumes don't magically make things distributed or reliable.&lt;/p&gt;

&lt;p&gt;Despite all this, it's true that making stateless systems work often means you end up stitching together multiple external services. This can be over-engineering for simple use cases and does introduce more moving parts. Serverless shines with proper tooling and planning; not for everything.&lt;/p&gt;
&lt;h2&gt;
  
  
  “You Don't Want to Manage Servers? Use X Instead!”
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Original article:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“But I Don’t Want to Manage Servers!”&lt;br&gt;
Cool. You don’t have to.&lt;/p&gt;

&lt;p&gt;There are tools that give you container-based platforms without ever SSHing into anything:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;[list of tools removed]&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You still get Git-based deployments, rollbacks, logs, metrics — but you decide how things run, and you can actually understand the system.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The author says “just use X/Y/Z”, which are abstractions. You can't complain about serverless being an abstraction and then offer me an abstraction, you need to judge both by the same standards!&lt;br&gt;
&lt;strong&gt;Another note:&lt;/strong&gt; Rollbacks on non-serverless architecture are horrible. With serverless, you can spin up any previous deployment in literally a few seconds; often even shorter! In a container, unless you are storing all the previous build outputs, you have to rebuild at a specific version or commit which takes time, usually a long time. A lot longer than a few seconds.&lt;/p&gt;

&lt;p&gt;Containers &lt;em&gt;do&lt;/em&gt; offer a lot more control, especially if you want to customize your deployment pipeline, use your own CI/CD tooling, or run workloads that don't fit into the serverless execution model; it really depends on the project.&lt;/p&gt;
&lt;h2&gt;
  
  
  Serverless &lt;em&gt;is&lt;/em&gt; cheaper
&lt;/h2&gt;

&lt;p&gt;Well, this one actually depends on your use case. But for most cases (the ones for which serverless is designed), serverless &lt;em&gt;is&lt;/em&gt; cheaper.&lt;br&gt;
On many providers, you can deploy 200 or more projects, over 50 domains, and you get unlimited deployment retention. For &lt;strong&gt;$0&lt;/strong&gt;. Both are &lt;em&gt;very&lt;/em&gt; good pricing, and it shows how efficient serverless is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Original article:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Serverless Is Cheaper!”&lt;br&gt;
Is it?&lt;/p&gt;

&lt;p&gt;Maybe, for 5 invocations a day. But the moment you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Have consistent traffic&lt;/li&gt;
&lt;li&gt;Need more memory&lt;/li&gt;
&lt;li&gt;Do actual compute&lt;/li&gt;
&lt;li&gt;Transfer data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;...the costs spike. And you can’t optimize much because the platform abstracts everything away.&lt;/p&gt;

&lt;p&gt;Meanwhile, containers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run full-time on cheap hardware&lt;/li&gt;
&lt;li&gt;Can be colocated with storage or caches&lt;/li&gt;
&lt;li&gt;Are easy to benchmark and tune&lt;/li&gt;
&lt;li&gt;Don’t charge you per millisecond&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;5 invocations a day is ridiculously misrepresenting serverless. On the Netlify or Vercel free plan, I can get over &lt;strong&gt;30,000&lt;/strong&gt; middleware invocations a day.&lt;br&gt;
Serverless handles consistent &lt;em&gt;and&lt;/em&gt; inconsistent traffic well, because it scales. But yes, serverless costs can grow pretty fast once you're doing heavier compute, using more memory, moving a lot of data, etc. And since platforms abstract away a lot of internals, it can be harder to optimize performance or costs at that point.&lt;/p&gt;

&lt;p&gt;I would like to point out, though, that containers (specifically hosted on a VPS etc.) &lt;em&gt;do&lt;/em&gt; charge you per time and not per usage. So “Don’t charge you per millisecond” is technically right… but only because they usually charge you per month or year.&lt;/p&gt;
&lt;h2&gt;
  
  
  When Serverless &lt;em&gt;Actually&lt;/em&gt; Makes Sense
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Original article:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Alright, let’s be fair — serverless has its niche:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Event-driven functions (e.g., image resizing)&lt;/li&gt;
&lt;li&gt;Infrequent tasks or webhooks&lt;/li&gt;
&lt;li&gt;Lightweight internal tools&lt;/li&gt;
&lt;li&gt;Proof-of-concepts&lt;/li&gt;
&lt;li&gt;Stuff that truly needs to scale up and down quickly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your workload is truly intermittent and stateless, and you want zero operational effort, serverless can work.&lt;/p&gt;

&lt;p&gt;But for real apps? You’ll hit a wall. And that wall will cost money, time, and brain cells.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Uh… what? The list, “event-driven functions, webhooks, PoCs, lightweight tools, stuff that truly needs to scale”, is most startups, MVPs, internal tools, and JAMstack websites. Serverless is designed for that.&lt;/p&gt;

&lt;p&gt;If you are building YouTube or some real-time game server or something, or perhaps something with WebSockets, containers are probably a better choice. But for portfolios, blogs, eCommerce, MVPs, etc., serverless is the best.&lt;/p&gt;
&lt;h2&gt;
  
  
  Summing it all up
&lt;/h2&gt;

&lt;p&gt;To conclude:&lt;/p&gt;

&lt;p&gt;Serverless isn't perfect, and neither are containers.&lt;br&gt;
Containers are great when you need full control, persistent workloads, etc.&lt;br&gt;
Serverless is unbeatable when you want speed, simplicity, scalability, and zero ops.&lt;br&gt;
You don't have to pick one side. Use the right tool for the job.&lt;/p&gt;

&lt;p&gt;The future is not "serverless v.s. containers"; it is hybrid, and platform-agnostic devs will win.&lt;/p&gt;


&lt;h2&gt;
  
  
  Afterward
&lt;/h2&gt;

&lt;p&gt;I have two main suspicions about the original article.&lt;/p&gt;

&lt;p&gt;The first is that the original article was written by AI. I wasn't sure if it was worth my time to make a response article, but I decided to just because I haven't written in a while and was thinking a lot about serverless anyway.&lt;/p&gt;

&lt;p&gt;The top comment by &lt;a class="mentioned-user" href="https://dev.to/muos12"&gt;@muos12&lt;/a&gt; nicely sums up my second suspicion:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__comment crayons-card my-2 p-0 overflow-hidden"&gt;
    &lt;a href="https://dev.to/code42cate/serverless-is-a-scam-5fc0" class="flex items-center gap-2 p-3 fs-s color-base-60 hover:color-base-90"&gt;
      

      &lt;span&gt;Comment on &lt;strong class="fw-medium color-base-90"&gt;Serverless is a Scam.&lt;/strong&gt;&lt;/span&gt;
    &lt;/a&gt;
  &lt;div class="p-4"&gt;
    &lt;div class="flex items-center gap-2 mb-3"&gt;
      &lt;a href="/muos12" class="crayons-avatar crayons-avatar--l"&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%2F3057838%2F9dc17def-29cf-446f-9fe4-0d5bcf0d43ce.png" alt="muos12" class="crayons-avatar__image" width="96" height="96"&gt;
      &lt;/a&gt;
      &lt;div&gt;
        &lt;a href="/muos12" class="crayons-link fw-medium"&gt;test1 rtest3&lt;/a&gt;
        &lt;span class="fs-xs color-base-60 ml-1"&gt;Apr 17 '25&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="text-styles"&gt;
      &lt;p&gt;This is just a marketing article from sliplane.io founder. &lt;br&gt;
Sort of feel sorry while reading it as it's simply one sided. Doesn't explain about challenges with managing servers at all. OS patches, maintaining high availability while scaling etc.&lt;br&gt;
There are major companies such as Netflix already using serverless for years. There are lots of white papers Ted talks about it as well.&lt;/p&gt;

&lt;p&gt;This article is just for marketing.&lt;/p&gt;


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


&lt;p&gt;I hope you learned something reading this! I would love you hear your opinion in the comments!&lt;/p&gt;

</description>
      <category>serverless</category>
      <category>webdev</category>
      <category>discuss</category>
      <category>programming</category>
    </item>
    <item>
      <title>Dumb DEV Is the Best Thing to Happen to Developers—And You Don't Even Get It</title>
      <dc:creator>BestCodes</dc:creator>
      <pubDate>Tue, 01 Apr 2025 17:04:33 +0000</pubDate>
      <link>https://forem.com/best_codes/dumb-dev-is-the-best-thing-to-happen-to-developers-and-you-dont-even-get-it-16cn</link>
      <guid>https://forem.com/best_codes/dumb-dev-is-the-best-thing-to-happen-to-developers-and-you-dont-even-get-it-16cn</guid>
      <description>&lt;p&gt;Listen up, fellow devs. I know you think you understand what a good developer community looks like. You’ve been on Stack Overflow, you've scrolled through DEV, you've even tried reading documentation (nerd). But let me tell you something—you &lt;em&gt;don't&lt;/em&gt; understand true innovation until you've experienced &lt;strong&gt;DUMB DEV&lt;/strong&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  🌟 The Future of Dev Content (or Something Like That)
&lt;/h2&gt;

&lt;p&gt;DUMB DEV isn’t just a platform; it’s a &lt;strong&gt;movement&lt;/strong&gt;. A revolution. A total rethinking of what it means to be a developer in the modern age. No more gatekeeping, no more unnecessary complexity, no more… &lt;em&gt;useful information&lt;/em&gt;? Just pure, unfiltered, absolutely &lt;strong&gt;next-level nonsense&lt;/strong&gt;. And I am here for it. &lt;/p&gt;

&lt;h2&gt;
  
  
  Why DUMB DEV is Genius (You Just Don't Get It)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔄 Infinite Regress™
&lt;/h3&gt;

&lt;p&gt;I asked a question. The first reply linked to another post. That post linked to another post. That post linked back to the first reply. I have been here for hours. This is &lt;strong&gt;true&lt;/strong&gt; recursion.&lt;/p&gt;

&lt;h3&gt;
  
  
  🤯 AI-Generated Confusion
&lt;/h3&gt;

&lt;p&gt;I read an article titled &lt;em&gt;"Fixing Memory Leaks in JavaScript"&lt;/em&gt;. Now my fridge won't stop beeping and my neighbor’s dog is speaking Latin. This is &lt;strong&gt;real&lt;/strong&gt; machine learning.&lt;/p&gt;

&lt;h3&gt;
  
  
  💡 Life-Changing Advice
&lt;/h3&gt;

&lt;p&gt;Some absolute genius on DUMB DEV told me to &lt;code&gt;chmod -R 777 /&lt;/code&gt; to fix my permissions issues. Now my entire system is open to the world, but I feel &lt;strong&gt;so free&lt;/strong&gt;. It’s a metaphor, probably.&lt;/p&gt;

&lt;h3&gt;
  
  
  📈 The Algorithm Knows What I Need
&lt;/h3&gt;

&lt;p&gt;I wanted a tutorial on Docker, but the front page gave me: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Why CSS Grid is a Pyramid Scheme"&lt;/li&gt;
&lt;li&gt;"I Made a To-Do List App in Microsoft Todo"&lt;/li&gt;
&lt;li&gt;"Deploying a Web App by Yelling at Your Computer"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And honestly? It was &lt;strong&gt;better&lt;/strong&gt; than what I was looking for.&lt;/p&gt;

&lt;h2&gt;
  
  
  If You Don’t Love DUMB DEV, You’re Just Not Ready
&lt;/h2&gt;

&lt;p&gt;Look, I get it. You want “quality content” and “best practices” and “coherent explanations.” But maybe… just &lt;strong&gt;maybe&lt;/strong&gt;… you should embrace the chaos. Maybe &lt;strong&gt;you&lt;/strong&gt; are the bug, and DUMB DEV is the fix.&lt;/p&gt;

&lt;p&gt;Join us. Or don’t. Either way, we’ll be here, making the future &lt;em&gt;dumber&lt;/em&gt; and better than ever. 🚀&lt;/p&gt;




&lt;p&gt;Wow. This is horrible. Truly horrible, ChatGPT.&lt;br&gt;
I hope this only shows up on DUMB DEV and not my main profile...&lt;/p&gt;

&lt;p&gt;Thanks for reading, I guess.&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>news</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
