<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Muhammad Hamid Raza</title>
    <description>The latest articles on DEV Community by Muhammad Hamid Raza (@hamidrazadev).</description>
    <link>https://dev.to/hamidrazadev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3131979%2F8333e423-4d9b-4851-ab42-f268ef4993c4.png</url>
      <title>DEV Community: Muhammad Hamid Raza</title>
      <link>https://dev.to/hamidrazadev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hamidrazadev"/>
    <language>en</language>
    <item>
      <title>VS Code 1.131 Is Here — And It Just Got a Whole Lot Smarter 🚀</title>
      <dc:creator>Muhammad Hamid Raza</dc:creator>
      <pubDate>Wed, 29 Jul 2026 16:54:50 +0000</pubDate>
      <link>https://dev.to/hamidrazadev/vs-code-1131-is-here-and-it-just-got-a-whole-lot-smarter-5bi</link>
      <guid>https://dev.to/hamidrazadev/vs-code-1131-is-here-and-it-just-got-a-whole-lot-smarter-5bi</guid>
      <description>&lt;p&gt;VS Code dropped another update, and honestly? This one hits differently.&lt;/p&gt;

&lt;p&gt;If you've been using AI agents in your editor, you already know the struggle — multiple subagents running in the background, no idea what they're doing, your terminal talking over your screen reader, and your Markdown file just sitting there silently judging you.&lt;/p&gt;

&lt;p&gt;VS Code 1.131, released July 29, 2026, tackles exactly these pain points. This release is quietly one of the most developer-experience-focused updates in a while, even if the changelog doesn't scream it.&lt;/p&gt;

&lt;p&gt;So, what's new? And should you care? Let's find out.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is VS Code 1.131?
&lt;/h2&gt;

&lt;p&gt;VS Code 1.131 is the latest stable release of Visual Studio Code — Microsoft's wildly popular, open-source code editor used by millions of developers worldwide.&lt;/p&gt;

&lt;p&gt;Every few weeks, the VS Code team ships updates that range from tiny bug fixes to full architecture overhauls. Version 1.131 lands somewhere in the middle — a meaningful release that pushes agent tooling, accessibility, and built-in AI features forward without breaking your entire workflow.&lt;/p&gt;

&lt;p&gt;The headline features this time around are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;More visibility into running subagents&lt;/strong&gt; in the Agents window&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in dictation&lt;/strong&gt; (no extension needed anymore)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A hybrid Markdown editor&lt;/strong&gt; in the Agents window&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There's also important work happening under the hood with the new &lt;strong&gt;Agent Host architecture&lt;/strong&gt;, and small but useful wins for Python developers and accessibility users.&lt;/p&gt;

&lt;p&gt;Let's walk through each one.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Release Matters
&lt;/h2&gt;

&lt;p&gt;Here's the thing about developer tools — the best updates aren't always the flashiest ones. They're the ones that fix the small friction points you didn't even realize were slowing you down.&lt;/p&gt;

&lt;p&gt;VS Code 1.131 is full of those.&lt;/p&gt;

&lt;p&gt;If you're using AI agents to help with your code, you've probably experienced the "black box" problem: a subagent is running, you know &lt;em&gt;something&lt;/em&gt; is happening, but you have no idea if it's been going for 3 seconds or 3 minutes, or what it's even doing right now.&lt;/p&gt;

&lt;p&gt;That's now fixed.&lt;/p&gt;

&lt;p&gt;If you've ever wanted to just &lt;em&gt;speak&lt;/em&gt; your chat prompt instead of typing it — and you didn't want to hunt down an extension, install it, configure it, and pray it works — that's now also fixed.&lt;/p&gt;

&lt;p&gt;And if you write Markdown in VS Code and work inside the Agents window, there's a new hybrid editor that lets you read, write, and even leave comments that your agent can act on.&lt;/p&gt;

&lt;p&gt;Small changes. Real impact.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's New in VS Code 1.131 — Feature by Feature
&lt;/h2&gt;

&lt;h3&gt;
  
  
  👀 Subagents: Finally, Some Visibility
&lt;/h3&gt;

&lt;p&gt;When your agent delegates a task to a subagent (like running a parallel search or analysis), you can now see what's happening &lt;strong&gt;without opening the subagent's full conversation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Right in the Agents window, each running subagent shows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Which model&lt;/strong&gt; it's using&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;How long it's been running&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Which tool&lt;/strong&gt; it's actively calling at that moment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last one is huge. Instead of staring at a spinner wondering if something froze, you can see "Oh, it's running &lt;code&gt;readFile&lt;/code&gt; right now." That's the kind of transparency that actually builds trust in agent tooling.&lt;/p&gt;

&lt;p&gt;You can still click into any subagent to read its full conversation, while the parent conversation stays right where you left it.&lt;/p&gt;




&lt;h3&gt;
  
  
  🎙️ Built-In Dictation (Experimental)
&lt;/h3&gt;

&lt;p&gt;This one surprised me.&lt;/p&gt;

&lt;p&gt;VS Code now has &lt;strong&gt;built-in dictation&lt;/strong&gt; — no VS Code Speech extension required. You can dictate in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chat inputs&lt;/li&gt;
&lt;li&gt;Text editors&lt;/li&gt;
&lt;li&gt;The integrated terminal&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All three surfaces share &lt;strong&gt;one microphone session&lt;/strong&gt;, which means no overlapping recordings and no "wait, where did that text go?" moments.&lt;/p&gt;

&lt;p&gt;The transcription model is &lt;strong&gt;Nemotron&lt;/strong&gt;, which runs completely &lt;strong&gt;offline on your device&lt;/strong&gt;. Your audio never leaves your machine. It downloads the model on first use, and that's it.&lt;/p&gt;

&lt;p&gt;A couple of settings worth knowing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;dictation.showTranscript&lt;/code&gt; — shows a live transcript as you speak&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;dictation.experimental.llmCleanup&lt;/code&gt; — lets Copilot clean up filler words and add formatting to your transcript as you go&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Platform support right now:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows x64 and Arm64 ✅&lt;/li&gt;
&lt;li&gt;macOS Apple Silicon ✅&lt;/li&gt;
&lt;li&gt;Linux x64 and Arm64 (glibc 2.34+) ✅&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not supported yet: VS Code for the Web, Intel-based Macs, and 32-bit/Arm32 systems. More platforms are in progress.&lt;/p&gt;




&lt;h3&gt;
  
  
  📝 Hybrid Markdown Editor (Experimental)
&lt;/h3&gt;

&lt;p&gt;The Agents window now has a &lt;strong&gt;hybrid Markdown editor&lt;/strong&gt;. Instead of staring at raw &lt;code&gt;.md&lt;/code&gt; syntax, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;View&lt;/strong&gt; your Markdown as rendered output&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Edit&lt;/strong&gt; it in-place&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add comments&lt;/strong&gt; that your agent can act on&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can switch between the regular text editor and this new hybrid view using &lt;strong&gt;Reopen Editor With&lt;/strong&gt; — works both in the Agents window and in regular editor windows.&lt;/p&gt;

&lt;p&gt;This is still experimental, but if you write docs, READMEs, or spec files inside your agent workflow, it's already genuinely useful.&lt;/p&gt;




&lt;h3&gt;
  
  
  🏗️ Agent Host Architecture (Under the Hood)
&lt;/h3&gt;

&lt;p&gt;This one's a bigger deal than it sounds.&lt;/p&gt;

&lt;p&gt;VS Code is rearchitecting how agent sessions work around something called the &lt;strong&gt;Agent Host&lt;/strong&gt; — a dedicated process that runs agent harnesses like Copilot, Claude, and Codex using the &lt;strong&gt;Agent Host Protocol (AHP)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;What does that mean practically?&lt;/p&gt;

&lt;p&gt;Because each session lives in its own process, &lt;strong&gt;the same agent session can now be connected to and rendered from multiple VS Code windows at once&lt;/strong&gt;. That's a pretty significant architectural unlock for complex workflows.&lt;/p&gt;

&lt;p&gt;To try it early: enable &lt;code&gt;chat.agentHost.enabled&lt;/code&gt; and select an agent host harness from the harness dropdown.&lt;/p&gt;

&lt;p&gt;It's rolling out gradually, so don't panic if you don't see it yet.&lt;/p&gt;




&lt;h3&gt;
  
  
  🐾 VS Code Pet (Very Experimental)
&lt;/h3&gt;

&lt;p&gt;Okay, this one's just fun.&lt;/p&gt;

&lt;p&gt;Type &lt;code&gt;/vscode-pet&lt;/code&gt; in chat to meet your new VS Code companion. That's literally all we know. Go discover it yourself. 😊&lt;/p&gt;




&lt;h3&gt;
  
  
  ♿ Accessibility: Quieter, Smarter Terminal Updates
&lt;/h3&gt;

&lt;p&gt;Screen reader users get a useful improvement in this release.&lt;/p&gt;

&lt;p&gt;The new setting &lt;code&gt;terminal.integrated.accessibleViewPreserveCursorPosition&lt;/code&gt; (set to &lt;code&gt;always&lt;/code&gt;) keeps your cursor position in the terminal Accessible View steady even when new output arrives. You can read at your own pace without the view jumping around.&lt;/p&gt;

&lt;p&gt;On top of that, terminal live updates now use &lt;strong&gt;non-interrupting ARIA status announcements&lt;/strong&gt; instead of assertive alerts, so output is available to screen readers without constantly interrupting other speech.&lt;/p&gt;

&lt;p&gt;Small change. Big difference for accessibility.&lt;/p&gt;




&lt;h3&gt;
  
  
  🖥️ Control the Terminal Resize Overlay
&lt;/h3&gt;

&lt;p&gt;You know that columns-by-rows overlay that pops up when you resize the terminal? Turns out, some people find it distracting.&lt;/p&gt;

&lt;p&gt;You can now disable it entirely with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;terminal.integrated.resizeDimensionsOverlay.enabled
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set it to &lt;code&gt;false&lt;/code&gt; and it's gone. Change applies immediately to open terminals — no restart needed.&lt;/p&gt;




&lt;h3&gt;
  
  
  🐍 Python: Faster Startup, Smarter Environments
&lt;/h3&gt;

&lt;p&gt;Python Environments is now the default environment-management experience in both VS Code Stable and Insiders, having hit 100% rollout.&lt;/p&gt;

&lt;p&gt;The key improvements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Conda discovery is deferred&lt;/strong&gt; until actually needed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Concurrent environment scans are consolidated&lt;/strong&gt; instead of running separately&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pylance can now use the last-known interpreter&lt;/strong&gt; while a full refresh continues in the background&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Translation: Python projects start faster. You spend less time waiting and more time coding.&lt;/p&gt;




&lt;h2&gt;
  
  
  VS Code 1.131 vs 1.130 — What Actually Changed
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Before (1.130)&lt;/th&gt;
&lt;th&gt;After (1.131)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Subagent visibility&lt;/td&gt;
&lt;td&gt;Open conversation to check progress&lt;/td&gt;
&lt;td&gt;See model, time, and tool inline&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dictation&lt;/td&gt;
&lt;td&gt;Required Speech extension&lt;/td&gt;
&lt;td&gt;Built-in, offline, no extension needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Markdown in Agents&lt;/td&gt;
&lt;td&gt;Raw text editor only&lt;/td&gt;
&lt;td&gt;Hybrid view with rendered preview + comments&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Terminal resize overlay&lt;/td&gt;
&lt;td&gt;Always visible&lt;/td&gt;
&lt;td&gt;Optional, can be disabled&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Screen reader updates&lt;/td&gt;
&lt;td&gt;Assertive/interrupting alerts&lt;/td&gt;
&lt;td&gt;Non-interrupting ARIA status&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Python startup&lt;/td&gt;
&lt;td&gt;Full environment scan every time&lt;/td&gt;
&lt;td&gt;Deferred Conda, faster launch&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Tips for Getting the Most Out of 1.131
&lt;/h2&gt;

&lt;p&gt;💡 &lt;strong&gt;Try dictation in your next chat prompt.&lt;/strong&gt; Even if you type fast, speaking a long system prompt or context block can be faster. Enable it, speak naturally, let LLM cleanup do the rest.&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Explore the Agent Host early.&lt;/strong&gt; Enable &lt;code&gt;chat.agentHost.enabled&lt;/code&gt; and experiment with it before it becomes the default. Getting familiar now will save you confusion later.&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Use subagent visibility as a debugging signal.&lt;/strong&gt; If a subagent has been calling the same tool for two minutes, something might be stuck. You'll now catch it without opening its full conversation.&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Don't force the hybrid Markdown editor everywhere.&lt;/strong&gt; It's best in the Agents window when you're working on docs your agent needs to reference or modify. For regular editing, the text editor is still faster.&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Update immediately.&lt;/strong&gt; VS Code is rolling out gradually. Use &lt;strong&gt;Check for Updates&lt;/strong&gt; from inside VS Code if you don't want to wait.&lt;/p&gt;




&lt;h2&gt;
  
  
  Common Mistakes to Avoid with These New Features
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Forgetting dictation is platform-limited.&lt;/strong&gt;&lt;br&gt;
If you're on an Intel Mac or VS Code for the Web and wondering why built-in dictation isn't showing up — that's why. Check the platform support list before assuming it's broken.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Expecting agent host to be fully stable.&lt;/strong&gt;&lt;br&gt;
It's still rolling out. Some behaviors might feel unpolished. Enable it to explore, but don't build critical workflows around it just yet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Leaving &lt;code&gt;dictation.experimental.llmCleanup&lt;/code&gt; enabled on a slow connection.&lt;/strong&gt;&lt;br&gt;
The cleanup feature sends your transcript to a language model. If your connection is spotty, the cleanup step might lag or fail. VS Code falls back to the raw transcript, but it's worth knowing how it works.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ignoring the subagent model info.&lt;/strong&gt;&lt;br&gt;
That little detail — which model your subagent is using — matters more than you'd think. If a subagent is using a slower or weaker model than you expected, you'll now catch it at a glance.&lt;/p&gt;




&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;VS Code 1.131 isn't a flashy update. There's no headline-stealing new feature that everyone will screenshot and post about.&lt;/p&gt;

&lt;p&gt;But it's a &lt;em&gt;solid&lt;/em&gt; one.&lt;/p&gt;

&lt;p&gt;Better agent transparency, built-in offline dictation, a smarter Markdown experience, faster Python startup, and thoughtful accessibility improvements — all in one release. That's the kind of steady, deliberate progress that makes a tool genuinely great to use every day.&lt;/p&gt;

&lt;p&gt;If you haven't updated yet, open VS Code and hit &lt;strong&gt;Check for Updates&lt;/strong&gt;. Or grab the Insiders build if you want to stay on the bleeding edge.&lt;/p&gt;

&lt;p&gt;For more developer content, tips, and breakdowns like this one, check out &lt;strong&gt;&lt;a href="https://hamidrazadev.com" rel="noopener noreferrer"&gt;hamidrazadev.com&lt;/a&gt;&lt;/strong&gt; — I write regularly about the tools, workflows, and features that actually matter to working developers.&lt;/p&gt;

&lt;p&gt;If this post saved you some scroll time through the changelog, share it with a developer friend who'll appreciate it. 🙌&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>javascript</category>
    </item>
    <item>
      <title>How to Set Up Prettier in Next.js (With Every Error Fixed Step by Step)</title>
      <dc:creator>Muhammad Hamid Raza</dc:creator>
      <pubDate>Mon, 27 Jul 2026 12:06:15 +0000</pubDate>
      <link>https://dev.to/hamidrazadev/how-to-set-up-prettier-in-nextjs-with-every-error-fixed-step-by-step-196d</link>
      <guid>https://dev.to/hamidrazadev/how-to-set-up-prettier-in-nextjs-with-every-error-fixed-step-by-step-196d</guid>
      <description>&lt;p&gt;You just started a fresh Next.js project. Your code looks messy. Your tabs and spaces are at war. A teammate opens the same file and now there are 47 formatting "changes" in the diff — even though nothing actually changed.&lt;/p&gt;

&lt;p&gt;Sound familiar? 😅&lt;/p&gt;

&lt;p&gt;That's exactly why Prettier exists. It's a code formatter that takes your messy code and makes it clean, consistent, and predictable. Every time. Automatically.&lt;/p&gt;

&lt;p&gt;But setting it up in a modern Next.js project isn't always smooth. Especially if you're using &lt;strong&gt;ESLint Flat Config&lt;/strong&gt; (&lt;code&gt;eslint.config.mjs&lt;/code&gt;), &lt;strong&gt;TypeScript&lt;/strong&gt;, &lt;strong&gt;Tailwind CSS&lt;/strong&gt;, and &lt;strong&gt;pnpm&lt;/strong&gt;. The internet is full of outdated tutorials that either miss steps or don't tell you what to do when things break.&lt;/p&gt;

&lt;p&gt;This guide covers the full setup &lt;strong&gt;and&lt;/strong&gt; every real error you might run into — with exact fixes for each one.&lt;/p&gt;

&lt;p&gt;Let's get into it. 🚀&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is Prettier?
&lt;/h2&gt;

&lt;p&gt;Prettier is an &lt;strong&gt;opinionated code formatter&lt;/strong&gt;. You give it your code, it gives it back — clean, consistent, and formatted exactly the way you configured it.&lt;/p&gt;

&lt;p&gt;Think of it like autocorrect for your code. You type fast and messy, and Prettier quietly cleans up after you before you even notice.&lt;/p&gt;

&lt;p&gt;It handles things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Consistent use of single or double quotes&lt;/li&gt;
&lt;li&gt;Trailing commas&lt;/li&gt;
&lt;li&gt;Semicolons at the end of lines&lt;/li&gt;
&lt;li&gt;Line length limits&lt;/li&gt;
&lt;li&gt;Indentation width&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Prettier doesn't care about logic or bugs — that's ESLint's job. Prettier only cares about &lt;strong&gt;how your code looks&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;Inconsistent formatting is a silent killer of team productivity. One developer uses tabs, another uses spaces. One prefers single quotes, the other uses double quotes. The result? Git shows hundreds of "changes" in every pull request that are just formatting noise — not actual code changes.&lt;/p&gt;

&lt;p&gt;Prettier solves this completely. Once it's set up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Every file gets formatted the same way, every time&lt;/li&gt;
&lt;li&gt;Your team stops fighting over style preferences&lt;/li&gt;
&lt;li&gt;Code reviews focus on logic, not formatting&lt;/li&gt;
&lt;li&gt;Tailwind class orders stay consistent with &lt;code&gt;prettier-plugin-tailwindcss&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;VS Code can format your file automatically every time you save&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The setup is a one-time cost that saves you time forever.&lt;/p&gt;




&lt;h2&gt;
  
  
  Full Setup Guide (Step by Step)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Install Prettier and Its Plugins
&lt;/h3&gt;

&lt;p&gt;Open your terminal in your project root and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pnpm add &lt;span class="nt"&gt;-D&lt;/span&gt; prettier eslint-config-prettier prettier-plugin-tailwindcss
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here's what each package does:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;prettier&lt;/code&gt;&lt;/strong&gt; — The core formatter&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;eslint-config-prettier&lt;/code&gt;&lt;/strong&gt; — Turns off ESLint formatting rules that conflict with Prettier&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;prettier-plugin-tailwindcss&lt;/code&gt;&lt;/strong&gt; — Automatically sorts your Tailwind CSS classes in the correct order&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Step 2: Create Your Prettier Config
&lt;/h3&gt;

&lt;p&gt;In your project root, create a file called &lt;code&gt;.prettierrc&lt;/code&gt;:&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;"semi"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"singleQuote"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tabWidth"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"trailingComma"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"es5"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"printWidth"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"plugins"&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="s2"&gt;"prettier-plugin-tailwindcss"&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;&lt;strong&gt;What each option does:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;semi&lt;/code&gt; — Adds semicolons at the end of statements&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;singleQuote&lt;/code&gt; — Uses &lt;code&gt;'&lt;/code&gt; instead of &lt;code&gt;"&lt;/code&gt; for strings&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tabWidth&lt;/code&gt; — Uses 2 spaces for indentation&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;trailingComma: "es5"&lt;/code&gt; — Adds trailing commas where valid in ES5 (arrays, objects)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;printWidth&lt;/code&gt; — Wraps lines longer than 100 characters&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;plugins&lt;/code&gt; — Activates the Tailwind class sorting plugin&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Step 3: Create a &lt;code&gt;.prettierignore&lt;/code&gt; File
&lt;/h3&gt;

&lt;p&gt;You don't want Prettier touching generated files, build outputs, or lock files. Create &lt;code&gt;.prettierignore&lt;/code&gt; in your project root:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.next
node_modules
public
pnpm-lock.yaml
docs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Step 4: Add npm Scripts
&lt;/h3&gt;

&lt;p&gt;Open your &lt;code&gt;package.json&lt;/code&gt; and add these scripts:&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="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;"dev"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"next dev"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"build"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"next build"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"next start"&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;"next lint"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"format"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"prettier --write ."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"format:check"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"prettier --check ."&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;ul&gt;
&lt;li&gt;
&lt;code&gt;pnpm format&lt;/code&gt; — Formats every file in your project&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pnpm format:check&lt;/code&gt; — Checks formatting without changing files (great for CI)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Step 5: Update Your ESLint Config
&lt;/h3&gt;

&lt;p&gt;Open your &lt;code&gt;eslint.config.mjs&lt;/code&gt; and add &lt;code&gt;eslint-config-prettier&lt;/code&gt; at the end of your config array:&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;eslintConfigPrettier&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;eslint-config-prettier&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="c1"&gt;// ... your existing ESLint rules&lt;/span&gt;
  &lt;span class="nx"&gt;eslintConfigPrettier&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This must go &lt;strong&gt;last&lt;/strong&gt; in the array. It disables ESLint rules that would conflict with Prettier's formatting decisions.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 6: VS Code Auto-Format on Save (Optional but Highly Recommended)
&lt;/h3&gt;

&lt;p&gt;Create or update &lt;code&gt;.vscode/settings.json&lt;/code&gt; in your project root:&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;"editor.defaultFormatter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"esbenp.prettier-vscode"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"editor.formatOnSave"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"[typescript]"&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;"editor.defaultFormatter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"esbenp.prettier-vscode"&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;"[typescriptreact]"&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;"editor.defaultFormatter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"esbenp.prettier-vscode"&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;blockquote&gt;
&lt;p&gt;Make sure you have the &lt;strong&gt;Prettier - Code formatter&lt;/strong&gt; extension installed in VS Code (&lt;code&gt;esbenp.prettier-vscode&lt;/code&gt;).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now every time you hit &lt;code&gt;Ctrl + S&lt;/code&gt;, your file gets formatted automatically. ✅&lt;/p&gt;




&lt;h2&gt;
  
  
  Debugging Every Error (The Real Journey)
&lt;/h2&gt;

&lt;p&gt;Here's where most tutorials stop — and where developers get stuck. Let's fix every error you might hit.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔴 Error 1: &lt;code&gt;Invalid project directory provided, no such directory: portfolio\lint&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Full error:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;next lint
&lt;span class="go"&gt;Invalid project directory provided, no such directory: H:\...\portfolio\lint
[ELIFECYCLE] Command failed with exit code 1.
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why it happens:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In Next.js 15/16 (and sometimes 14.2+), the CLI argument parser has a known bug where it misreads &lt;code&gt;lint&lt;/code&gt; as a directory path instead of a subcommand — especially when using ESLint Flat Config (&lt;code&gt;eslint.config.mjs&lt;/code&gt;). So it looks for a folder called &lt;code&gt;lint&lt;/code&gt; and fails.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Change your &lt;code&gt;lint&lt;/code&gt; script in &lt;code&gt;package.json&lt;/code&gt; to call ESLint directly:&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="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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If ESLint isn't already installed locally, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pnpm add &lt;span class="nt"&gt;-D&lt;/span&gt; eslint
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then run:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;This bypasses Next's CLI argument parser entirely. It's faster, cleaner, and fully compatible with ESLint v9+ and Flat Config.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔴 Error 2: &lt;code&gt;TypeError: Converting circular structure to JSON&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Full error:&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;TypeError: Converting circular structure to JSON
  --&amp;gt; starting at object with constructor 'Object'
  |   property 'configs' -&amp;gt; object with constructor 'Object'
  |   property 'flat' -&amp;gt; object with constructor 'Object'
  |   ...
  |   property 'plugins' -&amp;gt; object with constructor 'Object'
  --- property 'react' closes the circle
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why it happens:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your &lt;code&gt;eslint.config.mjs&lt;/code&gt; is using &lt;code&gt;FlatCompat&lt;/code&gt; to extend &lt;code&gt;"next/core-web-vitals"&lt;/code&gt;. Under the hood, &lt;code&gt;FlatCompat&lt;/code&gt; from &lt;code&gt;@eslint/eslintrc&lt;/code&gt; tries to serialize the config using &lt;code&gt;JSON.stringify()&lt;/code&gt; to validate it. But &lt;code&gt;eslint-plugin-react&lt;/code&gt; (included inside Next's config) contains &lt;strong&gt;circular object references&lt;/strong&gt; — objects that point back to themselves. &lt;code&gt;JSON.stringify()&lt;/code&gt; can't handle circular references, so it crashes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Drop &lt;code&gt;FlatCompat&lt;/code&gt; entirely. Import &lt;code&gt;@next/eslint-plugin-next&lt;/code&gt; directly.&lt;/p&gt;

&lt;p&gt;First, install it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pnpm add &lt;span class="nt"&gt;-D&lt;/span&gt; @next/eslint-plugin-next
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note for pnpm users:&lt;/strong&gt; pnpm uses strict package isolation. Even if &lt;code&gt;@next/eslint-plugin-next&lt;/code&gt; is used internally by &lt;code&gt;eslint-config-next&lt;/code&gt;, pnpm won't hoist it to your root &lt;code&gt;node_modules&lt;/code&gt; unless you explicitly install it. That's why you need to add it manually.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then replace your &lt;code&gt;eslint.config.mjs&lt;/code&gt; with this:&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;nextPlugin&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@next/eslint-plugin-next&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;eslintConfigPrettier&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;eslint-config-prettier&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="cm"&gt;/** @type {import('eslint').Linter.Config[]} */&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;eslintConfig&lt;/span&gt; &lt;span class="o"&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="s1"&gt;**/*.{js,mjs,cjs,ts,jsx,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;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@next/next&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;nextPlugin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;rules&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="nx"&gt;nextPlugin&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;rules&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;nextPlugin&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="s1"&gt;core-web-vitals&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;rules&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="nx"&gt;eslintConfigPrettier&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;ignores&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.next/**&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;node_modules/**&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;out/**&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;docs/**&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;public/**&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="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;eslintConfig&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No &lt;code&gt;FlatCompat&lt;/code&gt;. No circular JSON crash. Clean and native. ✅&lt;/p&gt;




&lt;h3&gt;
  
  
  🔴 Error 3: &lt;code&gt;Cannot find package '@next/eslint-plugin-next'&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Full error:&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;Error [ERR_MODULE_NOT_FOUND]: Cannot find package '@next/eslint-plugin-next'
imported from H:\...\portfolio\eslint.config.mjs
Did you mean to import "@next/eslint-plugin-next/dist/index.js"?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why it happens:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;pnpm uses &lt;strong&gt;strict package isolation&lt;/strong&gt; by design. It doesn't hoist nested dependencies to your root &lt;code&gt;node_modules&lt;/code&gt; the way npm does. So even though &lt;code&gt;@next/eslint-plugin-next&lt;/code&gt; is used internally by the &lt;code&gt;next&lt;/code&gt; package, your code can't import it unless it's explicitly listed as your own dependency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Install it directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pnpm add &lt;span class="nt"&gt;-D&lt;/span&gt; @next/eslint-plugin-next
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run lint again:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;






&lt;h3&gt;
  
  
  🔴 Error 4: 155 TypeScript and JSX Parsing Errors
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Sample errors:&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;app/_error.tsx  28:1  error  Parsing error: The keyword 'interface' is reserved
app/about/loading.tsx  5:9  error  Parsing error: Unexpected token &amp;lt;
app/api/ask/route.ts  15:52  error  Parsing error: Unexpected token ModelId
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why it happens:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ESLint's default parser is &lt;code&gt;espree&lt;/code&gt;, which only understands plain JavaScript. It doesn't know TypeScript keywords like &lt;code&gt;interface&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt;, or generics. It also doesn't know JSX syntax like &lt;code&gt;&amp;lt;Component /&amp;gt;&lt;/code&gt;. You need to tell ESLint to use &lt;code&gt;@typescript-eslint/parser&lt;/code&gt; for your &lt;code&gt;.ts&lt;/code&gt; and &lt;code&gt;.tsx&lt;/code&gt; files.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Install the TypeScript ESLint parser and plugin:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pnpm add &lt;span class="nt"&gt;-D&lt;/span&gt; @typescript-eslint/parser @typescript-eslint/eslint-plugin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then update your &lt;code&gt;eslint.config.mjs&lt;/code&gt; to use the TypeScript parser:&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;nextPlugin&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@next/eslint-plugin-next&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;tsParser&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@typescript-eslint/parser&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;tsPlugin&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@typescript-eslint/eslint-plugin&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;eslintConfigPrettier&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;eslint-config-prettier&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="cm"&gt;/** @type {import('eslint').Linter.Config[]} */&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;eslintConfig&lt;/span&gt; &lt;span class="o"&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;ignores&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.next/**&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;node_modules/**&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;out/**&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;build/**&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;docs/**&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;public/**&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="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="s1"&gt;**/*.ts&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;**/*.tsx&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;**/*.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;**/*.jsx&lt;/span&gt;&lt;span class="dl"&gt;'&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@next/next&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;nextPlugin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&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="nx"&gt;tsPlugin&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;parser&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;tsParser&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;parserOptions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;ecmaFeatures&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;jsx&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="p"&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;rules&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="nx"&gt;nextPlugin&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;rules&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;nextPlugin&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="s1"&gt;core-web-vitals&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;rules&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="nx"&gt;eslintConfigPrettier&lt;/span&gt;&lt;span class="p"&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;eslintConfig&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run lint again:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;All 155 parsing errors disappear. ✅&lt;/p&gt;




&lt;h3&gt;
  
  
  🔴 Error 5: Circular JSON Error Returns After Re-Adding FlatCompat
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why it happens:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If at any point you re-introduce &lt;code&gt;FlatCompat&lt;/code&gt; to extend &lt;code&gt;"next/core-web-vitals"&lt;/code&gt; or &lt;code&gt;"next/typescript"&lt;/code&gt;, the circular JSON error comes back. &lt;code&gt;FlatCompat&lt;/code&gt; is fundamentally incompatible with the current version of &lt;code&gt;eslint-plugin-react&lt;/code&gt; bundled inside &lt;code&gt;eslint-config-next&lt;/code&gt; and ESLint v9+.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Do &lt;strong&gt;not&lt;/strong&gt; use &lt;code&gt;FlatCompat&lt;/code&gt; at all. The final working &lt;code&gt;eslint.config.mjs&lt;/code&gt; below is the definitive version that handles everything — Next.js rules, TypeScript parsing, JSX, and Prettier compatibility — without touching &lt;code&gt;FlatCompat&lt;/code&gt; or &lt;code&gt;@eslint/eslintrc&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="nx"&gt;nextPlugin&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@next/eslint-plugin-next&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;tsParser&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@typescript-eslint/parser&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;tsPlugin&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@typescript-eslint/eslint-plugin&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;eslintConfigPrettier&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;eslint-config-prettier&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="cm"&gt;/** @type {import('eslint').Linter.Config[]} */&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;eslintConfig&lt;/span&gt; &lt;span class="o"&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;ignores&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.next/**&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;node_modules/**&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;out/**&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;build/**&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;docs/**&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;public/**&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="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="s1"&gt;**/*.ts&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;**/*.tsx&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;**/*.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;**/*.jsx&lt;/span&gt;&lt;span class="dl"&gt;'&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@next/next&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;nextPlugin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&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="nx"&gt;tsPlugin&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;parser&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;tsParser&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;parserOptions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;ecmaFeatures&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;jsx&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="p"&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;rules&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="nx"&gt;nextPlugin&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;rules&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;nextPlugin&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="s1"&gt;core-web-vitals&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;rules&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="nx"&gt;eslintConfigPrettier&lt;/span&gt;&lt;span class="p"&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;eslintConfig&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the config that works. Keep it and don't look back.&lt;/p&gt;




&lt;h2&gt;
  
  
  Pros and Cons: &lt;code&gt;FlatCompat&lt;/code&gt; vs Native Flat Config
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;FlatCompat&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;Native Flat Config&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Works with ESLint v9+&lt;/td&gt;
&lt;td&gt;❌ Often breaks&lt;/td&gt;
&lt;td&gt;✅ Fully supported&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TypeScript support&lt;/td&gt;
&lt;td&gt;Needs extra setup&lt;/td&gt;
&lt;td&gt;✅ With &lt;code&gt;@typescript-eslint/parser&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pnpm compatibility&lt;/td&gt;
&lt;td&gt;❌ Circular JSON crash&lt;/td&gt;
&lt;td&gt;✅ Works perfectly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code complexity&lt;/td&gt;
&lt;td&gt;More boilerplate&lt;/td&gt;
&lt;td&gt;✅ Cleaner and simpler&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recommended for new projects&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If you're starting a Next.js project today, go native Flat Config from day one. &lt;code&gt;FlatCompat&lt;/code&gt; was a bridge for legacy configs — it's not meant to be the destination.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final File Checklist
&lt;/h2&gt;

&lt;p&gt;Here's everything you should have set up:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;.prettierrc&lt;/code&gt;&lt;/strong&gt; (project root)&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;"semi"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"singleQuote"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tabWidth"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"trailingComma"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"es5"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"printWidth"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"plugins"&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="s2"&gt;"prettier-plugin-tailwindcss"&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;&lt;strong&gt;&lt;code&gt;.prettierignore&lt;/code&gt;&lt;/strong&gt; (project root)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.next
node_modules
public
pnpm-lock.yaml
docs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;code&gt;eslint.config.mjs&lt;/code&gt;&lt;/strong&gt; (project root)&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;nextPlugin&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@next/eslint-plugin-next&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;tsParser&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@typescript-eslint/parser&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;tsPlugin&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@typescript-eslint/eslint-plugin&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;eslintConfigPrettier&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;eslint-config-prettier&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;eslintConfig&lt;/span&gt; &lt;span class="o"&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;ignores&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.next/**&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;node_modules/**&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;out/**&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;build/**&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;docs/**&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;public/**&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="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="s1"&gt;**/*.ts&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;**/*.tsx&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;**/*.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;**/*.jsx&lt;/span&gt;&lt;span class="dl"&gt;'&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@next/next&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;nextPlugin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&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="nx"&gt;tsPlugin&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;parser&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;tsParser&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;parserOptions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;ecmaFeatures&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;jsx&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="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;rules&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="nx"&gt;nextPlugin&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;rules&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;nextPlugin&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="s1"&gt;core-web-vitals&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;rules&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="nx"&gt;eslintConfigPrettier&lt;/span&gt;&lt;span class="p"&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;eslintConfig&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;&lt;code&gt;package.json&lt;/code&gt; scripts&lt;/strong&gt;&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="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;"dev"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"next dev"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"build"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"next build"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"next start"&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="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"format"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"prettier --write ."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"format:check"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"prettier --check ."&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;&lt;strong&gt;&lt;code&gt;.vscode/settings.json&lt;/code&gt;&lt;/strong&gt; (optional but recommended)&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;"editor.defaultFormatter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"esbenp.prettier-vscode"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"editor.formatOnSave"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"[typescript]"&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;"editor.defaultFormatter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"esbenp.prettier-vscode"&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;"[typescriptreact]"&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;"editor.defaultFormatter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"esbenp.prettier-vscode"&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;h2&gt;
  
  
  Best Tips
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Always put &lt;code&gt;eslintConfigPrettier&lt;/code&gt; last&lt;/strong&gt; in your ESLint config array. It needs to override any formatting rules that come before it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commit your &lt;code&gt;.prettierrc&lt;/code&gt; to version control&lt;/strong&gt; so every teammate uses the same formatting rules automatically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use &lt;code&gt;pnpm format:check&lt;/code&gt; in your CI pipeline&lt;/strong&gt; to catch unformatted code before it gets merged.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install the Prettier VS Code extension&lt;/strong&gt; (&lt;code&gt;esbenp.prettier-vscode&lt;/code&gt;) — it makes the whole workflow seamless.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Never mix &lt;code&gt;FlatCompat&lt;/code&gt; with native Flat Config imports&lt;/strong&gt; in the same file. Pick one approach and stick with it.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Common Mistakes to Avoid
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Mistake 1: Keeping &lt;code&gt;next lint&lt;/code&gt; as your lint script&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;next lint&lt;/code&gt; uses Next.js's CLI parser, which has a known argument parsing bug in newer versions. Switching to &lt;code&gt;eslint .&lt;/code&gt; directly is more stable and faster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 2: Using &lt;code&gt;FlatCompat&lt;/code&gt; in ESLint v9+ projects&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;FlatCompat&lt;/code&gt; tries to convert legacy ESLint configs. But &lt;code&gt;eslint-plugin-react&lt;/code&gt; (bundled in &lt;code&gt;eslint-config-next&lt;/code&gt;) now contains circular object references that crash &lt;code&gt;JSON.stringify()&lt;/code&gt;. The fix is native Flat Config — no &lt;code&gt;FlatCompat&lt;/code&gt; needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 3: Forgetting &lt;code&gt;@next/eslint-plugin-next&lt;/code&gt; with pnpm&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;pnpm doesn't hoist nested packages. Even if &lt;code&gt;next&lt;/code&gt; uses &lt;code&gt;@next/eslint-plugin-next&lt;/code&gt; internally, you need to install it explicitly in your own &lt;code&gt;package.json&lt;/code&gt; or the import will fail.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 4: Missing the TypeScript parser&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ESLint's default parser doesn't understand TypeScript or JSX. If you don't set &lt;code&gt;@typescript-eslint/parser&lt;/code&gt; as your &lt;code&gt;languageOptions.parser&lt;/code&gt;, you'll get hundreds of "Unexpected token" errors on perfectly valid code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 5: Not ignoring &lt;code&gt;.next/&lt;/code&gt; and &lt;code&gt;node_modules/&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ESLint will try to lint every file it can find unless you tell it otherwise. Always add &lt;code&gt;ignores&lt;/code&gt; in your config and a &lt;code&gt;.prettierignore&lt;/code&gt; file to skip build artifacts.&lt;/p&gt;




&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;Setting up Prettier in a modern Next.js project isn't as simple as the docs make it look — especially once you add TypeScript, Tailwind CSS, ESLint Flat Config, and pnpm into the mix. But once it's working, it's one of the best quality-of-life improvements you can make to your workflow.&lt;/p&gt;

&lt;p&gt;Here's a quick recap of what you did:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Installed Prettier with Tailwind sorting and ESLint compatibility&lt;/li&gt;
&lt;li&gt;✅ Created &lt;code&gt;.prettierrc&lt;/code&gt; and &lt;code&gt;.prettierignore&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;✅ Fixed the &lt;code&gt;next lint&lt;/code&gt; path bug by calling &lt;code&gt;eslint .&lt;/code&gt; directly&lt;/li&gt;
&lt;li&gt;✅ Fixed the circular JSON crash by removing &lt;code&gt;FlatCompat&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;✅ Fixed pnpm's strict isolation with a direct &lt;code&gt;@next/eslint-plugin-next&lt;/code&gt; install&lt;/li&gt;
&lt;li&gt;✅ Fixed 155 TypeScript parsing errors with &lt;code&gt;@typescript-eslint/parser&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;✅ Set up VS Code to auto-format on every save&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your codebase is cleaner, your team stays consistent, and you never have to argue about tabs vs spaces again. 😊&lt;/p&gt;

&lt;p&gt;If you found this guide helpful, share it with your team — chances are they've hit the same errors too. And for more practical dev guides, visit &lt;strong&gt;&lt;a href="https://hamidrazadev.com" rel="noopener noreferrer"&gt;hamidrazadev.com&lt;/a&gt;&lt;/strong&gt; where I write about real-world frontend development, Next.js, TypeScript, and more.&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>prettier</category>
      <category>eslint</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Why Claude Has Stricter Limits Than Other AIs — and Why That's Exactly What Makes It Great</title>
      <dc:creator>Muhammad Hamid Raza</dc:creator>
      <pubDate>Sun, 26 Jul 2026 16:48:03 +0000</pubDate>
      <link>https://dev.to/hamidrazadev/why-claude-has-stricter-limits-than-other-ais-and-why-thats-exactly-what-makes-it-great-50og</link>
      <guid>https://dev.to/hamidrazadev/why-claude-has-stricter-limits-than-other-ais-and-why-thats-exactly-what-makes-it-great-50og</guid>
      <description>&lt;p&gt;You asked Claude to do something. It paused. It thought carefully. And then it gave you a response so clean and well-structured that you actually read the whole thing.&lt;/p&gt;

&lt;p&gt;Meanwhile, some other AI just confidently made up a court case that never happened. 😬&lt;/p&gt;

&lt;p&gt;There's a pattern here worth exploring. Claude has real limits — on tokens, on behaviors, on what it will and won't do. And at first glance, that can feel frustrating. But the more you work with it, the more you realize: those limits aren't bugs. They're the whole point.&lt;/p&gt;

&lt;p&gt;So what's actually going on? Why does Claude hold itself back in ways other AIs don't — and why does that restraint make it one of the most trusted AI models available today?&lt;/p&gt;

&lt;p&gt;Let's break it all down.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Are Tokens, and Why Do They Matter?
&lt;/h2&gt;

&lt;p&gt;Before we talk about limits, let's make sure we're on the same page about what a "token" actually is.&lt;/p&gt;

&lt;p&gt;A token is basically a chunk of text. It could be a word, part of a word, or even a single character — depending on how the AI splits it. When you type a message to Claude, your message gets converted into tokens. When Claude replies, that reply is also made of tokens.&lt;/p&gt;

&lt;p&gt;Every AI model has a &lt;strong&gt;context window&lt;/strong&gt; — the total number of tokens it can "see" at once, including your entire conversation history. Think of it like working memory. Once you go over the limit, older parts of the conversation start falling out of view.&lt;/p&gt;

&lt;p&gt;Claude's context window is large. Claude 3 models support up to &lt;strong&gt;200,000 tokens&lt;/strong&gt; — that's enough to process an entire novel. For most real-world tasks, that's more than plenty.&lt;/p&gt;

&lt;p&gt;But here's the thing: having a big window isn't the only thing that matters. What the model &lt;em&gt;does&lt;/em&gt; inside that window — how carefully it reasons, how honestly it responds — matters far more.&lt;/p&gt;




&lt;h2&gt;
  
  
  Claude Does Have Limits. Let's Be Honest About Them.
&lt;/h2&gt;

&lt;p&gt;It would be easy to just hype Claude up and ignore the trade-offs. That's not the goal here.&lt;/p&gt;

&lt;p&gt;Claude has genuine constraints:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rate limits on free tiers&lt;/strong&gt; that can slow heavy usage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stricter content policies&lt;/strong&gt; that mean it'll decline certain requests&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No live internet access by default&lt;/strong&gt; in its base form&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Refusals for tasks it deems harmful&lt;/strong&gt;, even when the request seems reasonable to you&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some users find this annoying. There are moments where you're mid-project and Claude pumps the brakes in a way that feels overcautious.&lt;/p&gt;

&lt;p&gt;That's a real friction point. No sugarcoating.&lt;/p&gt;

&lt;p&gt;But let's zoom out and look at &lt;em&gt;why&lt;/em&gt; those limits exist — because that context changes everything.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Claude's Limits Exist: The Bigger Picture
&lt;/h2&gt;

&lt;p&gt;Anthropic, the company behind Claude, was founded with one specific goal: to build AI that is &lt;strong&gt;safe and beneficial for humanity&lt;/strong&gt;. Not just powerful. Not just impressive. Actually trustworthy and safe.&lt;/p&gt;

&lt;p&gt;That mission shapes every design decision.&lt;/p&gt;

&lt;p&gt;Claude is built using an approach called &lt;strong&gt;Constitutional AI (CAI)&lt;/strong&gt;. Instead of just training the model to be helpful and hoping for the best, Anthropic gave Claude a set of principles — a kind of internal compass — and trained it to evaluate its own outputs against those principles.&lt;/p&gt;

&lt;p&gt;This is why Claude:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Won't help you build something harmful, even if you phrase the request cleverly&lt;/li&gt;
&lt;li&gt;Tells you when it's uncertain instead of guessing confidently&lt;/li&gt;
&lt;li&gt;Declines tasks it finds ethically problematic, even under pressure&lt;/li&gt;
&lt;li&gt;Tries to be honest even when honesty is uncomfortable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These aren't accidental behaviors. They're intentional design.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The limits aren't weakness. They're integrity.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Matters for Developers and Everyday Users
&lt;/h2&gt;

&lt;p&gt;Let's get practical. Why should you care about any of this?&lt;/p&gt;

&lt;p&gt;Because when you ship something to production — or when you hand a tool to someone who depends on it — reliability and honesty matter more than raw output speed.&lt;/p&gt;

&lt;p&gt;Here's what Claude's approach delivers in practice:&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ You Can Trust the Output More
&lt;/h3&gt;

&lt;p&gt;Claude is designed to say "I don't know" or "I'm not sure" rather than fabricating an answer. For developers using Claude in apps, this is huge. A confidently wrong AI is genuinely dangerous. A carefully honest one is useful.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Refusals Protect You Too
&lt;/h3&gt;

&lt;p&gt;That moment Claude refuses a request? Sometimes it's protecting your users, your reputation, or your product from going somewhere it shouldn't. AI that agrees with everything isn't a feature — it's a liability.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Long-Context Performance That Holds Up
&lt;/h3&gt;

&lt;p&gt;A 200K token context window isn't just a number. Claude actually maintains coherence across that entire window. Some models advertise large windows but degrade badly toward the end. Claude's performance stays consistent — that's the engineering quality underneath the limits.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Better Reasoning, Not Just More Output
&lt;/h3&gt;

&lt;p&gt;Claude is consistently ranked among the top models in reasoning, coding, and nuanced writing tasks. It's not because it produces the most text. It's because it thinks more carefully before producing any.&lt;/p&gt;




&lt;h2&gt;
  
  
  Claude vs Other AI Models: A Fair Comparison
&lt;/h2&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;Claude&lt;/th&gt;
&lt;th&gt;Some Competitors&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Context Window&lt;/td&gt;
&lt;td&gt;Up to 200K tokens&lt;/td&gt;
&lt;td&gt;Varies widely&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Refusal on harmful requests&lt;/td&gt;
&lt;td&gt;Yes, by design&lt;/td&gt;
&lt;td&gt;Varies by model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Honesty about uncertainty&lt;/td&gt;
&lt;td&gt;Strong&lt;/td&gt;
&lt;td&gt;Inconsistent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Constitutional safety layer&lt;/td&gt;
&lt;td&gt;Yes (CAI)&lt;/td&gt;
&lt;td&gt;Rare&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Raw speed on free tier&lt;/td&gt;
&lt;td&gt;Moderate&lt;/td&gt;
&lt;td&gt;Sometimes faster&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reasoning quality&lt;/td&gt;
&lt;td&gt;Top-tier&lt;/td&gt;
&lt;td&gt;Varies&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This table isn't here to say Claude is perfect at everything. It isn't. There are tasks where other models are faster, cheaper, or more permissive.&lt;/p&gt;

&lt;p&gt;But if your priority is &lt;strong&gt;a model you can actually trust&lt;/strong&gt; — one that won't hallucinate facts, won't agree with bad ideas just to seem helpful, and won't put harmful content in front of your users — Claude's design philosophy is a real advantage.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tips: Getting the Most Out of Claude Within Its Limits
&lt;/h2&gt;

&lt;p&gt;Working &lt;em&gt;with&lt;/em&gt; Claude's design rather than against it makes a massive difference.&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Be specific in your prompts.&lt;/strong&gt; Claude responds better to clear, detailed instructions than vague ones. The more context you give, the better the output.&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Respect the refusals — then rephrase.&lt;/strong&gt; If Claude pushes back, it's often because the prompt is ambiguous or hits a sensitive area. Try rephrasing with more context about what you actually need and why.&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Break large tasks into smaller chunks.&lt;/strong&gt; Even with a 200K context window, long tasks benefit from being broken into steps. Treat Claude like a thoughtful collaborator, not a magic button.&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Use Claude for tasks that need trust.&lt;/strong&gt; Code review, writing analysis, research summaries, customer-facing copy — these are areas where Claude's careful, honest output shines.&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Don't fight the safety features.&lt;/strong&gt; If a certain task keeps getting refused, ask yourself honestly if the output could be misused. Often, Claude is catching something worth catching.&lt;/p&gt;




&lt;h2&gt;
  
  
  Common Mistakes People Make With Claude
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ❌ Assuming limits mean low quality
&lt;/h3&gt;

&lt;p&gt;Some users equate more permissiveness with higher quality. It's actually the opposite. A model that will do anything isn't more capable — it's less trustworthy.&lt;/p&gt;

&lt;h3&gt;
  
  
  ❌ Hitting rate limits and blaming the model
&lt;/h3&gt;

&lt;p&gt;Rate limits on free tiers exist because inference is expensive. They're not a reflection of Claude's capabilities. Upgrading to a paid plan removes most of these friction points.&lt;/p&gt;

&lt;h3&gt;
  
  
  ❌ Prompting vaguely and expecting perfection
&lt;/h3&gt;

&lt;p&gt;Claude isn't a mind reader. If your prompt is a half-sentence, you'll get a half-baked result. Invest 30 extra seconds in your prompt and watch the output quality jump.&lt;/p&gt;

&lt;h3&gt;
  
  
  ❌ Comparing outputs without comparing task types
&lt;/h3&gt;

&lt;p&gt;"ChatGPT did this and Claude wouldn't" is only meaningful if you're comparing the same task. Different models make different trade-offs. Claude's trade-offs favor safety and accuracy. That matters for some use cases more than others.&lt;/p&gt;

&lt;h3&gt;
  
  
  ❌ Ignoring Claude's uncertainty signals
&lt;/h3&gt;

&lt;p&gt;When Claude says "I'm not certain about this" — listen. That's a feature. Don't override it. Verify the information instead.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion: Limits Are Part of the Design. That's the Point.
&lt;/h2&gt;

&lt;p&gt;Here's the honest truth: Claude has limits. It refuses some things. It has rate caps. It doesn't always do what you want on the first try.&lt;/p&gt;

&lt;p&gt;But those limits reflect a deliberate choice to build AI that is careful, honest, and trustworthy — not just fast and agreeable.&lt;/p&gt;

&lt;p&gt;In a world full of AI models racing to do more, say more, and agree with more, Claude's restraint is actually rare. And increasingly, that restraint is exactly what developers, companies, and everyday users are looking for.&lt;/p&gt;

&lt;p&gt;Because the goal was never to build the most talkative AI. The goal was to build one you can actually rely on. 🚀&lt;/p&gt;

&lt;p&gt;If this post helped you see Claude's design in a new light, I'd love for you to share it. You can find more developer content, tutorials, and AI breakdowns at &lt;strong&gt;&lt;a href="https://hamidrazadev.com" rel="noopener noreferrer"&gt;hamidrazadev.com&lt;/a&gt;&lt;/strong&gt; — drop by whenever you want practical, honest tech content written by someone who actually builds with these tools.&lt;/p&gt;

</description>
      <category>claude</category>
      <category>ai</category>
      <category>llm</category>
      <category>webdev</category>
    </item>
    <item>
      <title>VS Code 1.130 Is Here — And It Makes AI-Assisted Coding Feel Way Less Annoying</title>
      <dc:creator>Muhammad Hamid Raza</dc:creator>
      <pubDate>Fri, 24 Jul 2026 12:57:27 +0000</pubDate>
      <link>https://dev.to/hamidrazadev/vs-code-1130-is-here-and-it-makes-ai-assisted-coding-feel-way-less-annoying-4l07</link>
      <guid>https://dev.to/hamidrazadev/vs-code-1130-is-here-and-it-makes-ai-assisted-coding-feel-way-less-annoying-4l07</guid>
      <description>&lt;p&gt;If you've ever been deep in an AI-assisted coding session and got interrupted by one approval popup after another, you know the pain. It's like trying to watch a movie and someone keeps pausing it to ask, "Are you sure? Are you &lt;em&gt;really&lt;/em&gt; sure?"&lt;/p&gt;

&lt;p&gt;VS Code 1.130, released on &lt;strong&gt;July 22, 2026&lt;/strong&gt;, quietly fixes a lot of those friction points. And along the way, it brings some genuinely useful upgrades to agent workflows, chat visibility, terminal file links, and more.&lt;/p&gt;

&lt;p&gt;So — what actually changed, and does any of it matter in your daily dev life? Let's walk through it. 🚀&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is VS Code 1.130?
&lt;/h2&gt;

&lt;p&gt;VS Code releases updates on a regular cadence. Version 1.130 is the latest stable release, and it's focused heavily on &lt;strong&gt;making AI agent sessions smoother and more manageable&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you use GitHub Copilot, Claude, or Codex inside VS Code, this update is directly relevant to your workflow. Even if you don't, there are quality-of-life improvements worth knowing about.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Release Matters
&lt;/h2&gt;

&lt;p&gt;The way we write code is changing fast. AI coding agents now handle multi-file edits, run terminal commands, and take actions on your behalf — all inside the editor.&lt;/p&gt;

&lt;p&gt;But managing those agents has been clunky. You'd approve tool after tool manually, get lost in long diff views, and lose track of what the agent actually changed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;VS Code 1.130 addresses these pain points directly.&lt;/strong&gt; The team has rearchitected how agent sessions work, improved how you review changes, and added smarter ways to handle approvals.&lt;/p&gt;

&lt;p&gt;If AI-assisted coding is already part of your workflow, this update makes it noticeably cleaner. If it isn't yet, now is a good time to start paying attention.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's New in VS Code 1.130
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔧 The Agent Host — A Smarter Foundation for AI Sessions
&lt;/h3&gt;

&lt;p&gt;The biggest architectural change in this release is the &lt;strong&gt;agent host&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Think of it like moving your AI coding session into its own dedicated room, instead of running it in the same crowded space as everything else. The agent host is a separate process that runs agent harnesses — including Copilot, Claude, and Codex — based on the &lt;strong&gt;Agent Host Protocol (AHP)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Why does that matter? Because now the same agent session can be &lt;strong&gt;connected to and rendered from multiple VS Code windows at once&lt;/strong&gt;. You can have your agent running in one window and check its progress from another — no need to restart or duplicate work.&lt;/p&gt;

&lt;p&gt;The Copilot agent on the agent host is also powered by the &lt;strong&gt;Copilot SDK&lt;/strong&gt;, which aligns it with the Copilot CLI, the standalone GitHub Copilot app, and other Copilot products. This means more consistent behavior across tools.&lt;/p&gt;

&lt;p&gt;To try it, enable &lt;code&gt;chat.agentHost.enabled&lt;/code&gt; and select an agent host harness from the harness dropdown.&lt;/p&gt;




&lt;h3&gt;
  
  
  ✅ Assisted Tool Approvals — Fewer Interruptions, Smarter Decisions
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Setting:&lt;/strong&gt; &lt;code&gt;chat.assistedPermissions.enabled&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Here's the one that's going to save you the most frustration.&lt;/p&gt;

&lt;p&gt;When an AI agent runs a task, it often calls multiple tools along the way — reading files, running commands, making edits. Each tool call can trigger an approval prompt. On a long-running task, those prompts stack up fast and break your flow.&lt;/p&gt;

&lt;p&gt;With &lt;strong&gt;assisted tool approvals&lt;/strong&gt;, the language model itself evaluates the risk level of each tool call. Low-risk actions can run automatically. Only genuinely risky actions ask for your approval.&lt;/p&gt;

&lt;p&gt;It's like having a capable assistant who uses good judgment — they handle the routine stuff and only interrupt you when something actually needs your sign-off.&lt;/p&gt;

&lt;p&gt;Enable the setting to add &lt;strong&gt;Assisted permissions&lt;/strong&gt; to the permissions picker for agents running on the agent host.&lt;/p&gt;




&lt;h3&gt;
  
  
  👀 Agents Window Improvements (Preview)
&lt;/h3&gt;

&lt;p&gt;The Agents window got a meaningful round of upgrades. Here's what changed:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;File-level diff statistics&lt;/strong&gt;&lt;br&gt;
Each file header in the Changes editor now shows live insertion and deletion counts next to the file path. No more guessing how much each file changed — you can scan a multi-file diff and immediately know which files were touched heavily and which had minor edits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Compact multi-file diff view&lt;/strong&gt;&lt;br&gt;
The diff view now uses a tighter gutter layout. Empty space before the code is removed. File headers, line numbers, and unchanged-region controls share consistent alignment. More room for actual code review — especially helpful on narrower screens.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Compact quick chats&lt;/strong&gt;&lt;br&gt;
Quick chats now appear as single-line rows in the sessions list. Regular sessions still show a second line with stats, status, and timestamps. This makes it easier to tell quick chats from full project sessions at a glance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Worktree support for all agent harnesses&lt;/strong&gt;&lt;br&gt;
Previously, the New Worktree checkbox in the Agents window only worked with the Copilot harness. Now Claude and Codex sessions also support Git worktrees, so you can spin up parallel sessions for different features in the same workspace — regardless of which agent you're using.&lt;/p&gt;




&lt;h3&gt;
  
  
  💬 Chat Timestamps
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Setting:&lt;/strong&gt; &lt;code&gt;chat.verbose&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Small addition, surprisingly useful. Chat requests and responses now show timestamps. You can hover over the message toolbar to see when an interaction happened and how long it took.&lt;/p&gt;

&lt;p&gt;If you've ever come back to a chat session and had no idea whether those edits were from two minutes ago or two hours ago, this solves that problem. You can disable it with &lt;code&gt;chat.verbose&lt;/code&gt; if you prefer a cleaner view.&lt;/p&gt;




&lt;h3&gt;
  
  
  📊 Aggregate AI Credit Usage for Copilot Business and Enterprise
&lt;/h3&gt;

&lt;p&gt;If your organization uses Copilot Business or Copilot Enterprise, you can now see your total AI credit usage for the current billing cycle directly in the &lt;strong&gt;Copilot status menu&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Before this change, credit usage only appeared when you had a user-level budget configured. Most org-managed users had no way to see how many credits they'd consumed.&lt;/p&gt;

&lt;p&gt;Now, even without a user-level budget set, the status menu shows the total credits used so far in the billing cycle. It's a small thing, but it helps you understand your usage without leaving the editor.&lt;/p&gt;




&lt;h3&gt;
  
  
  ⚡ Clickable File Links in Git Diffs with Mnemonic Prefixes
&lt;/h3&gt;

&lt;p&gt;This one's for terminal users.&lt;/p&gt;

&lt;p&gt;When Git's &lt;code&gt;diff.mnemonicPrefix&lt;/code&gt; option is enabled, Git diff output uses prefixes like &lt;code&gt;i/&lt;/code&gt; for the index and &lt;code&gt;w/&lt;/code&gt; for the working tree. These look informative but have historically made file paths in terminal output non-clickable.&lt;/p&gt;

&lt;p&gt;VS Code 1.130 now recognizes those prefixes and removes them from the link target so the correct file opens when you click. VS Code also handles the numeric &lt;code&gt;1/&lt;/code&gt; and &lt;code&gt;2/&lt;/code&gt; prefixes produced by &lt;code&gt;git diff --no-index&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If you rely on terminal-based Git workflows, this removes a small but real piece of friction.&lt;/p&gt;




&lt;h3&gt;
  
  
  🏗️ TypeScript 7 — Under the Hood
&lt;/h3&gt;

&lt;p&gt;The VS Code codebase is now compiled using the &lt;strong&gt;release version of TypeScript 7&lt;/strong&gt;. The team also switched to the TypeScript 7 extension.&lt;/p&gt;

&lt;p&gt;This is an engineering milestone more than a user-facing feature, but it signals a big step in the TypeScript ecosystem. If you want to read more, the TypeScript team published a full release announcement worth checking out.&lt;/p&gt;




&lt;h2&gt;
  
  
  Before vs. After: Agent Workflows in VS Code
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Before 1.130&lt;/th&gt;
&lt;th&gt;After 1.130&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Approval prompt for every tool call&lt;/td&gt;
&lt;td&gt;Model evaluates risk; low-risk calls run automatically&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agent session tied to one window&lt;/td&gt;
&lt;td&gt;Same session visible from multiple windows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Worktrees only for Copilot harness&lt;/td&gt;
&lt;td&gt;Worktrees work for Claude and Codex too&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No timestamps in chat&lt;/td&gt;
&lt;td&gt;Timestamps visible on hover&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mnemonic prefix paths not clickable in terminal&lt;/td&gt;
&lt;td&gt;Clickable and correctly resolved&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Credit usage hidden without user budget&lt;/td&gt;
&lt;td&gt;Total usage shown in status menu&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Best Tips for Getting the Most Out of VS Code 1.130
&lt;/h2&gt;

&lt;p&gt;💡 &lt;strong&gt;Enable the agent host gradually.&lt;/strong&gt; It's still rolling out and some features require it. Start by enabling &lt;code&gt;chat.agentHost.enabled&lt;/code&gt; and testing your preferred harness.&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Try assisted permissions on a low-stakes project first.&lt;/strong&gt; It's a smart feature, but get familiar with how the model evaluates risk before relying on it for critical tasks.&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Use worktrees for parallel feature work.&lt;/strong&gt; Now that Claude and Codex support them, you can run separate agent sessions for different branches without interfering with your main workspace.&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Check the Copilot status menu if you're on a Business or Enterprise plan.&lt;/strong&gt; Knowing your credit usage in real time helps you plan more effectively.&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Enable mnemonic prefixes in Git if you use the terminal heavily.&lt;/strong&gt; The clickable link support makes diff navigation genuinely faster.&lt;/p&gt;




&lt;h2&gt;
  
  
  Common Mistakes to Avoid
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Skipping the update and wondering why new features aren't showing up.&lt;/strong&gt;&lt;br&gt;
VS Code 1.130 is rolling out gradually. If you want it immediately, use &lt;strong&gt;Check for Updates&lt;/strong&gt; in VS Code. Or download the &lt;strong&gt;Insiders build&lt;/strong&gt; if you always want the latest.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enabling assisted permissions and forgetting about it.&lt;/strong&gt;&lt;br&gt;
This feature is smart, but it's not infallible. The model makes judgment calls. Keep an eye on what runs automatically, especially in the early days of using it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Confusing quick chats and project sessions in the Agents window.&lt;/strong&gt;&lt;br&gt;
The compact row style makes quick chats visually distinct from regular sessions. Take a few minutes to understand the new layout so you don't accidentally close a session you wanted to keep.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ignoring the chat timestamp feature.&lt;/strong&gt;&lt;br&gt;
It sounds minor. But if you run long sessions or collaborate on the same workspace, knowing when an AI interaction happened can save real debugging time.&lt;/p&gt;




&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;VS Code 1.130 isn't a flashy release, but it's a thoughtful one. The team is building toward a more stable, more capable foundation for AI-assisted development — and the improvements in this release show real progress.&lt;/p&gt;

&lt;p&gt;The agent host architecture is the biggest story here. It's still rolling out, but once it lands fully, it's going to change how agent sessions feel in a meaningful way. Fewer interruptions, more visibility, better multi-harness support — it all adds up.&lt;/p&gt;

&lt;p&gt;If you work with AI coding agents regularly, update today and explore the new settings. The improvements are subtle but genuinely useful.&lt;/p&gt;

&lt;p&gt;And if you're just starting to explore AI-assisted coding in VS Code, this is a solid time to dive in. The tooling is getting better with every release. 😊&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Happy coding — and as always, keep building things that matter.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Want more practical dev content like this? Head over to *&lt;/em&gt;&lt;a href="https://hamidrazadev.com" rel="noopener noreferrer"&gt;hamidrazadev.com&lt;/a&gt;** for more articles, guides, and resources. If this post saved you some time or taught you something new, share it with a fellow developer — it goes a long way.* 🙌&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>ai</category>
    </item>
    <item>
      <title>Folder Structures Explained: The Right Way to Organize Any Project (Any Language, Any Framework)</title>
      <dc:creator>Muhammad Hamid Raza</dc:creator>
      <pubDate>Fri, 24 Jul 2026 08:13:08 +0000</pubDate>
      <link>https://dev.to/hamidrazadev/folder-structures-explained-the-right-way-to-organize-any-project-any-language-any-framework-5hgg</link>
      <guid>https://dev.to/hamidrazadev/folder-structures-explained-the-right-way-to-organize-any-project-any-language-any-framework-5hgg</guid>
      <description>&lt;p&gt;Have you ever opened a project someone else wrote and thought, &lt;em&gt;"What is even happening here?"&lt;/em&gt; 😅&lt;/p&gt;

&lt;p&gt;Files dumped in the root. Folders named &lt;code&gt;stuff&lt;/code&gt;, &lt;code&gt;temp2&lt;/code&gt;, and &lt;code&gt;final_FINAL&lt;/code&gt;. No clear pattern. Nothing where you expect it.&lt;/p&gt;

&lt;p&gt;We've all been there — and honestly, most of us have created that mess at least once. The good news? Folder structure is a skill. Once you learn it, your projects feel instantly more professional, easier to debug, and way less stressful to work with.&lt;/p&gt;

&lt;p&gt;So, whether you're building a React app, a Django API, a mobile app, or a simple CLI tool, this guide will show you the folder structures that actually work — and why they work.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is a Folder Structure?
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;folder structure&lt;/strong&gt; is the way you organize your project's files and directories on disk.&lt;/p&gt;

&lt;p&gt;Think of it like organizing a kitchen. If your spices are in one spot, your pots in another, and your cutting boards hung up neatly, cooking is easy. But if everything is scattered around randomly, even making toast becomes stressful.&lt;/p&gt;

&lt;p&gt;Your code project is the same. A good folder structure tells every file where it belongs — and tells every developer (including future-you) where to find it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Folder Structure Actually Matters
&lt;/h2&gt;

&lt;p&gt;Bad folder structure isn't just ugly. It causes real problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Debugging takes longer&lt;/strong&gt; because you can't find the file that's causing the issue.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Onboarding new developers is painful&lt;/strong&gt; when nobody can figure out the layout.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scaling your project becomes hard&lt;/strong&gt; because you have no room to grow cleanly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI coding agents like Cursor and bolt.new work better&lt;/strong&gt; when your project is organized. They navigate your code more accurately and make fewer mistakes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A good structure saves hours every week. It's one of those habits that pays you back constantly.&lt;/p&gt;




&lt;h2&gt;
  
  
  The 5 Most Common Folder Structures (With Examples)
&lt;/h2&gt;

&lt;p&gt;Let's go through the main types you'll encounter — and when to use each one.&lt;/p&gt;




&lt;h3&gt;
  
  
  1. 🗂️ Flat Structure
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it looks like:&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;my-project/
├── index.js
├── utils.js
├── styles.css
├── db.js
└── README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Small scripts, quick prototypes, or learning projects. Nothing more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it works:&lt;/strong&gt; Zero overhead. You just write code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails:&lt;/strong&gt; The moment your project grows beyond 10 files, this becomes a nightmare. Everything is mixed together with no organization.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Use this only when you know the project will never grow.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  2. 📁 Layer-Based Structure (MVC / Separation of Concerns)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it looks like:&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;my-project/
├── controllers/
│   ├── userController.js
│   └── productController.js
├── models/
│   ├── userModel.js
│   └── productModel.js
├── views/
│   ├── home.html
│   └── dashboard.html
├── routes/
│   └── index.js
├── middleware/
│   └── auth.js
└── app.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Backend APIs, Node.js/Express apps, Django, Laravel, Ruby on Rails.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it works:&lt;/strong&gt; You always know where something lives based on what it does. Controllers do one job. Models do another. Clean separation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real example:&lt;/strong&gt; When you get a bug report saying "the login is broken," you go straight to &lt;code&gt;controllers/userController.js&lt;/code&gt;. No hunting required.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. 🧩 Feature-Based Structure
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it looks like:&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;src/
├── features/
│   ├── auth/
│   │   ├── AuthPage.jsx
│   │   ├── authSlice.js
│   │   ├── authService.js
│   │   └── auth.test.js
│   ├── dashboard/
│   │   ├── DashboardPage.jsx
│   │   ├── dashboardSlice.js
│   │   └── dashboardService.js
│   └── products/
│       ├── ProductList.jsx
│       ├── productSlice.js
│       └── productService.js
├── shared/
│   ├── components/
│   ├── hooks/
│   └── utils/
└── main.jsx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; React, Vue, Angular apps. Medium to large frontend projects. Any app where features grow over time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it works:&lt;/strong&gt; Everything about one feature lives together. When you work on the &lt;code&gt;auth&lt;/code&gt; feature, you open the &lt;code&gt;auth/&lt;/code&gt; folder and never leave it. No jumping between five unrelated directories.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is the structure most senior developers recommend for modern frontend projects.&lt;/strong&gt; ✅&lt;/p&gt;




&lt;h3&gt;
  
  
  4. 🏗️ Domain-Driven Structure
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it looks like:&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;src/
├── domain/
│   ├── user/
│   │   ├── User.ts
│   │   ├── UserRepository.ts
│   │   └── UserService.ts
│   └── order/
│       ├── Order.ts
│       ├── OrderRepository.ts
│       └── OrderService.ts
├── infrastructure/
│   ├── database/
│   └── email/
├── application/
│   └── useCases/
└── presentation/
    └── api/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Large-scale enterprise applications, microservices, TypeScript monorepos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it works:&lt;/strong&gt; Each business domain (user, order, product) is completely self-contained. Teams can own domains independently. Scaling is clean.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it's not for beginners:&lt;/strong&gt; The overhead is real. Don't use this for a to-do app. Use it when your business logic is genuinely complex.&lt;/p&gt;




&lt;h3&gt;
  
  
  5. 📦 Monorepo Structure
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it looks like:&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;my-monorepo/
├── apps/
│   ├── web/
│   ├── mobile/
│   └── admin/
├── packages/
│   ├── ui/
│   ├── utils/
│   └── config/
├── package.json
└── turbo.json (or nx.json)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Full-stack projects where the frontend, backend, and shared packages live in one repository. Popular with Turborepo and Nx.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it works:&lt;/strong&gt; Shared code stays shared. No copy-pasting the same utility function into three different repos. Changes to a shared package update everywhere.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real example:&lt;/strong&gt; Your web app and mobile app both need the same date-formatting function. Put it in &lt;code&gt;packages/utils&lt;/code&gt; and both apps import it directly.&lt;/p&gt;




&lt;h2&gt;
  
  
  Language &amp;amp; Framework Quick Reference
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Project Type&lt;/th&gt;
&lt;th&gt;Recommended Structure&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;React / Next.js&lt;/td&gt;
&lt;td&gt;Feature-Based&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vue.js&lt;/td&gt;
&lt;td&gt;Feature-Based or Layer-Based&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Node.js / Express API&lt;/td&gt;
&lt;td&gt;Layer-Based (MVC)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Django / Flask&lt;/td&gt;
&lt;td&gt;Layer-Based&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Laravel / PHP&lt;/td&gt;
&lt;td&gt;Layer-Based (built-in)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;React Native&lt;/td&gt;
&lt;td&gt;Feature-Based&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TypeScript / NestJS&lt;/td&gt;
&lt;td&gt;Domain-Driven&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Full-Stack Monorepo&lt;/td&gt;
&lt;td&gt;Monorepo Structure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CLI Tool or Script&lt;/td&gt;
&lt;td&gt;Flat or Light Layer-Based&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enterprise SaaS&lt;/td&gt;
&lt;td&gt;Domain-Driven or Monorepo&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  A Recommended Starter Structure for React + Node Projects
&lt;/h2&gt;

&lt;p&gt;If you're building a full-stack app and just want something solid to start with, this works well:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;my-app/
├── client/                  ← React frontend
│   └── src/
│       ├── features/
│       ├── shared/
│       │   ├── components/
│       │   ├── hooks/
│       │   └── utils/
│       ├── pages/
│       └── main.jsx
├── server/                  ← Node.js backend
│   ├── controllers/
│   ├── models/
│   ├── routes/
│   ├── middleware/
│   └── app.js
├── .env
├── .gitignore
└── README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Clean. Scalable. Easy for any developer to understand on day one.&lt;/p&gt;




&lt;h2&gt;
  
  
  Best Tips for Folder Structure 💡
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Do this:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Name folders by what they do, not by what they contain (&lt;code&gt;auth/&lt;/code&gt; not &lt;code&gt;components2/&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;✅ Keep a &lt;code&gt;shared/&lt;/code&gt; or &lt;code&gt;common/&lt;/code&gt; folder for things used across features&lt;/li&gt;
&lt;li&gt;✅ Keep configuration files at the root level (&lt;code&gt;.env&lt;/code&gt;, &lt;code&gt;tsconfig.json&lt;/code&gt;, etc.)&lt;/li&gt;
&lt;li&gt;✅ Add a &lt;code&gt;README.md&lt;/code&gt; in complex folders if the structure isn't obvious&lt;/li&gt;
&lt;li&gt;✅ Be consistent — pick a structure and stick to it across the whole project&lt;/li&gt;
&lt;li&gt;✅ Keep your test files close to the code they test (co-location)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Avoid this:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;❌ Naming folders &lt;code&gt;temp&lt;/code&gt;, &lt;code&gt;new&lt;/code&gt;, &lt;code&gt;stuff&lt;/code&gt;, or &lt;code&gt;misc&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;❌ Putting everything in one giant &lt;code&gt;components/&lt;/code&gt; folder regardless of feature&lt;/li&gt;
&lt;li&gt;❌ Switching structures halfway through a project without refactoring&lt;/li&gt;
&lt;li&gt;❌ Over-engineering a small project with enterprise-level folder depth&lt;/li&gt;
&lt;li&gt;❌ Ignoring structure entirely "until later" — later never comes&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Common Mistakes Developers Make 👀
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Mistake 1: Starting with no structure at all&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It feels faster at first. But after 50 files, you're lost. Start with even a light structure on day one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 2: Copying a structure without understanding it&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You see a GitHub repo with a fancy structure and copy it into your weekend project. Now you spend more time navigating folders than writing code. Match the structure to the project size.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 3: Going too deep too early&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;src/features/auth/components/forms/inputs/PasswordInput.jsx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's five levels deep for an input field. Breathe. Start shallow and only add depth when it's genuinely needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 4: Treating structure as permanent&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your project will grow. Your structure should evolve with it. Flat → Layer-Based → Feature-Based is a completely valid progression. Refactoring your folder structure is normal and healthy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 5: Inconsistency across the team&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Half the team organizes by feature, half by layer, and nobody agreed on it. Establish a structure at the start and document it in your &lt;code&gt;README.md&lt;/code&gt;.&lt;/p&gt;




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

&lt;p&gt;Folder structure is one of those things that feels optional until it isn't. A messy project slows you down, frustrates your team, and makes the code harder to trust.&lt;/p&gt;

&lt;p&gt;The right structure doesn't have to be complex. It just needs to be &lt;strong&gt;consistent&lt;/strong&gt;, &lt;strong&gt;purposeful&lt;/strong&gt;, and &lt;strong&gt;matched to your project size&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Start simple. Grow intentionally. And remember — a well-organized project is a joy to work in, both for you and everyone who touches it after you. 🚀&lt;/p&gt;

&lt;p&gt;If this post helped you think differently about how you organize your projects, share it with a developer friend who might need it. And for more practical guides like this, check out &lt;strong&gt;&lt;a href="https://hamidrazadev.com" rel="noopener noreferrer"&gt;hamidrazadev.com&lt;/a&gt;&lt;/strong&gt; — there's plenty more where this came from.&lt;/p&gt;

&lt;p&gt;Got a folder structure you swear by? Drop it in the comments — I'd love to see how other developers organize their work.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>cleancode</category>
      <category>architecture</category>
      <category>programming</category>
    </item>
    <item>
      <title>GitHub vs GitLab: Which One Should You Actually Use in 2026?</title>
      <dc:creator>Muhammad Hamid Raza</dc:creator>
      <pubDate>Mon, 20 Jul 2026 08:25:22 +0000</pubDate>
      <link>https://dev.to/hamidrazadev/github-vs-gitlab-which-one-should-you-actually-use-in-2026-2emb</link>
      <guid>https://dev.to/hamidrazadev/github-vs-gitlab-which-one-should-you-actually-use-in-2026-2emb</guid>
      <description>&lt;p&gt;If you have ever started a new project and stared at the screen wondering, "Wait… should I put this on GitHub or GitLab?" — you are not alone. 😄&lt;/p&gt;

&lt;p&gt;Every developer hits this crossroads at some point. Both platforms are powerful. Both are built around Git. And both have passionate fans who will defend their choice like it is a religion.&lt;/p&gt;

&lt;p&gt;But here is the real question: &lt;strong&gt;which one is actually right for you?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this post, we will break down the honest differences between GitHub and GitLab — no hype, no bias, just what you actually need to know to make a smart choice.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is GitHub?
&lt;/h2&gt;

&lt;p&gt;GitHub is a cloud-based platform where developers store, share, and collaborate on code. It uses &lt;strong&gt;Git&lt;/strong&gt; under the hood — the version control system that tracks changes to your code over time.&lt;/p&gt;

&lt;p&gt;Think of GitHub like Google Drive, but for your code. Instead of just saving files, it also remembers every change you ever made, lets you work with a team, and makes it easy to show your work to the world.&lt;/p&gt;

&lt;p&gt;GitHub was launched in 2008 and was acquired by Microsoft in 2018. Today it hosts millions of public and private repositories and is widely used by individual developers, open-source communities, and large companies.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is GitLab?
&lt;/h2&gt;

&lt;p&gt;GitLab is also a Git-based platform for hosting code and collaborating on projects. But it goes a step further.&lt;/p&gt;

&lt;p&gt;Where GitHub focuses on being a great place to host and share code, &lt;strong&gt;GitLab is built to be a complete DevOps platform&lt;/strong&gt; — meaning it tries to bring your entire software development lifecycle into one tool. That includes planning, coding, testing, deploying, and monitoring.&lt;/p&gt;

&lt;p&gt;GitLab was founded in 2011 and offers both a cloud-hosted version (GitLab.com) and a self-hosted version you can run on your own servers.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Comparison Actually Matters
&lt;/h2&gt;

&lt;p&gt;Choosing the wrong platform is not the end of the world — but it can slow you down.&lt;/p&gt;

&lt;p&gt;If you pick GitHub for a project that needs heavy CI/CD pipelines, you might end up paying more or stitching together extra tools. If you pick GitLab for an open-source project where community visibility matters, you might miss out on the massive developer audience GitHub brings.&lt;/p&gt;

&lt;p&gt;This decision affects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;How you set up your workflows&lt;/strong&gt; — CI/CD, code reviews, deployments&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How your team collaborates&lt;/strong&gt; — issue tracking, merge requests, access controls&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your budget&lt;/strong&gt; — free tiers differ, and advanced features have different pricing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your career visibility&lt;/strong&gt; — GitHub profiles are widely viewed by employers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So yes, it is worth thinking about. Not forever. Just for a few minutes. 😊&lt;/p&gt;




&lt;h2&gt;
  
  
  GitHub vs GitLab: A Practical Comparison
&lt;/h2&gt;

&lt;p&gt;Let's go feature by feature and see how they stack up.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔹 Community and Open Source
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;GitHub wins here — by a lot.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GitHub has the largest developer community in the world. Almost every popular open-source project lives on GitHub. If you want to contribute to open source, get noticed, or build a public portfolio, GitHub is where the action is.&lt;/p&gt;

&lt;p&gt;GitLab has a community too, but it is much smaller for public open-source discovery.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for open source:&lt;/strong&gt; GitHub ✅&lt;/p&gt;




&lt;h3&gt;
  
  
  🔹 CI/CD (Continuous Integration / Continuous Deployment)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;GitLab wins here — and it is not close.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GitLab CI/CD is built directly into the platform, deeply integrated, and very powerful right out of the box. You get a feature-rich pipeline tool without needing to install or configure third-party services.&lt;/p&gt;

&lt;p&gt;GitHub has &lt;strong&gt;GitHub Actions&lt;/strong&gt;, which is also solid and has improved a lot. But GitLab's CI/CD has been around longer and offers more built-in features without extra setup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for CI/CD:&lt;/strong&gt; GitLab ✅ (GitHub Actions is a strong second)&lt;/p&gt;




&lt;h3&gt;
  
  
  🔹 Self-Hosting
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;GitLab wins clearly.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If your company or team needs to host everything on your own servers — maybe for security, compliance, or privacy reasons — GitLab makes this easy with GitLab Community Edition (free) and GitLab Enterprise Edition.&lt;/p&gt;

&lt;p&gt;GitHub offers GitHub Enterprise for self-hosting, but it is more expensive and less flexible than GitLab's self-hosted options.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for self-hosting:&lt;/strong&gt; GitLab ✅&lt;/p&gt;




&lt;h3&gt;
  
  
  🔹 User Interface and Experience
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;GitHub wins for simplicity.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GitHub's interface is clean, familiar, and very beginner-friendly. Most developers feel comfortable on GitHub within minutes.&lt;/p&gt;

&lt;p&gt;GitLab's interface is more feature-rich, which is great once you know your way around. But for newcomers, it can feel a little overwhelming at first. The navigation has more layers because there is simply more to explore.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for beginners:&lt;/strong&gt; GitHub ✅&lt;/p&gt;




&lt;h3&gt;
  
  
  🔹 Free Tier
&lt;/h3&gt;

&lt;p&gt;Both platforms offer free plans, but they differ in what they include.&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;GitHub Free&lt;/th&gt;
&lt;th&gt;GitLab Free&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Private repos&lt;/td&gt;
&lt;td&gt;✅ Unlimited&lt;/td&gt;
&lt;td&gt;✅ Unlimited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CI/CD minutes&lt;/td&gt;
&lt;td&gt;2,000 per month&lt;/td&gt;
&lt;td&gt;400 per month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pages / Hosting&lt;/td&gt;
&lt;td&gt;✅ GitHub Pages&lt;/td&gt;
&lt;td&gt;✅ GitLab Pages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Container Registry&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Self-hosting&lt;/td&gt;
&lt;td&gt;❌ (Enterprise only)&lt;/td&gt;
&lt;td&gt;✅ Community Edition&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;GitHub's free tier gives more CI/CD minutes.&lt;/strong&gt; GitLab's free tier gives you more DevOps tools overall, but the pipeline minutes are more limited.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔹 Security and Compliance Features
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;GitLab leads here for enterprise teams.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GitLab has built-in security scanning tools — dependency scanning, container scanning, SAST, DAST — available even on lower-tier plans. This makes it popular in regulated industries where security audits matter.&lt;/p&gt;

&lt;p&gt;GitHub has security features too (Dependabot, secret scanning, code scanning), and they have improved significantly. But GitLab's security toolset is more deeply integrated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for security-focused teams:&lt;/strong&gt; GitLab ✅&lt;/p&gt;




&lt;h3&gt;
  
  
  🔹 Project Management and Issue Tracking
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Both are solid, but GitLab goes deeper.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GitLab includes boards, epics, roadmaps, time tracking, and milestones — all built in. It tries to replace tools like Jira for teams that want everything in one place.&lt;/p&gt;

&lt;p&gt;GitHub has Issues and Projects too, and they work well. But for complex project management, GitLab has more native features.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for project management:&lt;/strong&gt; GitLab ✅ (GitHub is catching up)&lt;/p&gt;




&lt;h3&gt;
  
  
  🔹 Integrations and Ecosystem
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;GitHub wins — it has a massive marketplace.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GitHub Marketplace has thousands of integrations, apps, and actions built by the community. Whatever tool your team uses — Slack, Jira, Figma, AWS, Azure, anything — there is likely a GitHub integration for it.&lt;/p&gt;

&lt;p&gt;GitLab integrates with most popular tools too, but the ecosystem is not as wide as GitHub's.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for integrations:&lt;/strong&gt; GitHub ✅&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick Summary Table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;GitHub&lt;/th&gt;
&lt;th&gt;GitLab&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Open Source Community&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CI/CD Built-in&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Self-hosting&lt;/td&gt;
&lt;td&gt;⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Beginner Friendliness&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security Tools&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Integrations&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Project Management&lt;/td&gt;
&lt;td&gt;⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Free CI/CD Minutes&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Which One Should You Choose?
&lt;/h2&gt;

&lt;p&gt;Here is a simple guide based on real situations:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose GitHub if you:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Are a student or beginner learning development&lt;/li&gt;
&lt;li&gt;Want to build a visible portfolio&lt;/li&gt;
&lt;li&gt;Are contributing to or starting an open-source project&lt;/li&gt;
&lt;li&gt;Need a large ecosystem of integrations&lt;/li&gt;
&lt;li&gt;Want a simple, friendly interface&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Choose GitLab if you:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Need a full DevOps pipeline out of the box&lt;/li&gt;
&lt;li&gt;Want to self-host your code for privacy or compliance&lt;/li&gt;
&lt;li&gt;Work in a team with complex project management needs&lt;/li&gt;
&lt;li&gt;Are in a regulated industry that needs built-in security scanning&lt;/li&gt;
&lt;li&gt;Want everything — planning, coding, testing, deploying — in one place&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Best Tips for Using Either Platform 💡
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Use descriptive commit messages.&lt;/strong&gt; "Fixed bug" tells nobody anything. "Fix null pointer error in user login flow" is far more useful.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protect your main branch.&lt;/strong&gt; Always set branch protection rules to avoid accidental pushes directly to &lt;code&gt;main&lt;/code&gt; or &lt;code&gt;master&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use &lt;code&gt;.gitignore&lt;/code&gt; from day one.&lt;/strong&gt; Do not push your &lt;code&gt;node_modules&lt;/code&gt;, &lt;code&gt;.env&lt;/code&gt; files, or build artifacts. Use a &lt;code&gt;.gitignore&lt;/code&gt; file before your first commit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write a proper README.&lt;/strong&gt; Your repository's first impression is its README. Spend a few minutes on it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use merge/pull request templates.&lt;/strong&gt; They save time and improve code reviews enormously.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tag your releases.&lt;/strong&gt; Use Git tags and releases so your team and users can track versions clearly.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Common Mistakes People Make 🔧
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Committing secrets or API keys
&lt;/h3&gt;

&lt;p&gt;This is the classic mistake. You push a &lt;code&gt;.env&lt;/code&gt; file or accidentally hardcode an API key. GitHub and GitLab both scan for this now, but the damage can happen fast. Use environment variables and add &lt;code&gt;.env&lt;/code&gt; to your &lt;code&gt;.gitignore&lt;/code&gt; immediately.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Working directly on the main branch
&lt;/h3&gt;

&lt;p&gt;Beginners often push all their changes straight to &lt;code&gt;main&lt;/code&gt;. This works until it doesn't. Set up a branching strategy (like Git Flow or feature branches) early.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Ignoring CI/CD because it "looks complicated"
&lt;/h3&gt;

&lt;p&gt;A lot of developers skip CI/CD because it feels like extra work at the start. Then they waste hours on manual deployments. Even a simple pipeline that runs your tests automatically saves enormous time.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Thinking one platform is always better
&lt;/h3&gt;

&lt;p&gt;Neither GitHub nor GitLab is universally superior. The best one depends on your team size, workflow, budget, and goals. Choose based on your needs, not trends.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Never reading the docs
&lt;/h3&gt;

&lt;p&gt;Both platforms have excellent documentation. When something seems impossible, the answer is almost always already in the docs.&lt;/p&gt;




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

&lt;p&gt;Both GitHub and GitLab are excellent platforms. They are not enemies — they are tools. And like most tools, the right choice depends on what you are building and how you work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub&lt;/strong&gt; is the home of open source. It is beginner-friendly, community-rich, and has a massive ecosystem. If you are building your portfolio or contributing to the world's code, GitHub is hard to beat.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitLab&lt;/strong&gt; is the DevOps powerhouse. It is built for teams that want one platform to manage the entire software lifecycle, with strong CI/CD, self-hosting, and enterprise security baked in.&lt;/p&gt;

&lt;p&gt;If you are just starting out, GitHub is a great first home. As your projects grow and your needs evolve, you will naturally figure out which fits best. And honestly? Many teams use both.&lt;/p&gt;

&lt;p&gt;The important thing is to start building. 🚀&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Want more developer guides like this? Check out &lt;a href="https://hamidrazadev.com" rel="noopener noreferrer"&gt;hamidrazadev.com&lt;/a&gt; for more practical posts that help you grow as a developer. If this article helped you, share it with someone who is still deciding — you might save them an afternoon of confusion. Drop a comment with which platform you use and why!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>github</category>
      <category>gitlab</category>
      <category>git</category>
      <category>devops</category>
    </item>
    <item>
      <title>VS Code 1.129 Is Here — Agent Hosts, Modern UI, and a `!` Trick You'll Actually Use</title>
      <dc:creator>Muhammad Hamid Raza</dc:creator>
      <pubDate>Sat, 18 Jul 2026 15:48:55 +0000</pubDate>
      <link>https://dev.to/hamidrazadev/vs-code-1129-is-here-agent-hosts-modern-ui-and-a-trick-youll-actually-use-1gkg</link>
      <guid>https://dev.to/hamidrazadev/vs-code-1129-is-here-agent-hosts-modern-ui-and-a-trick-youll-actually-use-1gkg</guid>
      <description>&lt;p&gt;VS Code just dropped version 1.129, and this one isn't your typical "we fixed some stuff" release. 🚀&lt;/p&gt;

&lt;p&gt;This update brings a &lt;strong&gt;completely rearchitected agent system&lt;/strong&gt;, a brand-new editor panel inside the Agents window, a slick quality-of-life shortcut for running terminal commands, and — possibly the most talked-about thing — a first look at a modernized VS Code UI.&lt;/p&gt;

&lt;p&gt;If you've been using GitHub Copilot, Claude, or Codex inside VS Code, you're going to want to read this. Things are changing in a big way, and mostly for the better.&lt;/p&gt;

&lt;p&gt;So, what actually landed in VS Code 1.129, and which features are worth turning on today?&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is VS Code 1.129?
&lt;/h2&gt;

&lt;p&gt;Visual Studio Code 1.129 is the July 2026 release of Microsoft's free, open-source code editor. It shipped on &lt;strong&gt;July 15, 2026&lt;/strong&gt;, with a gradual rollout to all users (you can force the update right now by going to &lt;strong&gt;Help → Check for Updates&lt;/strong&gt;).&lt;/p&gt;

&lt;p&gt;This release is heavy on &lt;strong&gt;AI and agent improvements&lt;/strong&gt;, which makes sense given how central Copilot and third-party AI tools have become to the daily dev workflow. But it also adds some genuinely useful editor-level changes that don't require any AI setup at all.&lt;/p&gt;

&lt;p&gt;Let's break it all down.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Release Matters
&lt;/h2&gt;

&lt;p&gt;VS Code has been steadily evolving from a code editor into something closer to an AI-powered development environment. Version 1.129 makes the biggest structural bet on that direction yet.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;agent host&lt;/strong&gt; — the flagship feature of this release — fundamentally changes how AI agent sessions run inside VS Code. Instead of being tightly coupled to a single editor window, agent sessions now live in their own dedicated process. That means you can open the same agent session across multiple windows simultaneously.&lt;/p&gt;

&lt;p&gt;Think of it like this: before, your AI session was tied to one browser tab. Now it's more like a shared Google Doc — multiple windows, same live session.&lt;/p&gt;

&lt;p&gt;For developers juggling multiple projects, reviewing agent-generated code across workspaces, or just working across monitors, this is a meaningful upgrade.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Big Features in VS Code 1.129
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🤖 The Agent Host — A New Architecture for AI Sessions
&lt;/h3&gt;

&lt;p&gt;The agent host is the core infrastructure change in this release. Instead of running agent sessions inside the editor process itself, VS Code now spins up a &lt;strong&gt;separate dedicated process&lt;/strong&gt; called the agent host. This process runs agent harnesses — Copilot, Claude, and Codex — based on a new open protocol called the &lt;strong&gt;Agent Host Protocol (AHP)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here's why that matters in practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multiple windows, one session.&lt;/strong&gt; You can connect to and render the same agent session from multiple VS Code windows at once. No more duplicating your context across tabs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Aligned behavior across products.&lt;/strong&gt; The Copilot agent on the agent host is powered by the Copilot SDK, which means it behaves consistently with the Copilot CLI, the standalone Copilot app, and other Copilot products. Less "why does it work here but not there" confusion.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To try it, enable the &lt;code&gt;chat.agentHost.enabled&lt;/code&gt; setting and select an agent host harness from the harness dropdown in the editor window.&lt;/p&gt;

&lt;p&gt;Worth noting: not every feature in this release works with every harness. Some features are agent-host-only, and some have extra settings to enable specific agents (like &lt;code&gt;chat.agents.claude.preferAgentHost&lt;/code&gt; for Claude on the agent host).&lt;/p&gt;




&lt;h3&gt;
  
  
  🗂️ New Editor Panel in the Agents Window (Experimental)
&lt;/h3&gt;

&lt;p&gt;If you use the Agents window, you've probably felt the friction of switching back and forth between the chat panel and the file-review panel. The new &lt;strong&gt;editor panel&lt;/strong&gt; fixes that.&lt;/p&gt;

&lt;p&gt;It merges the editor and the detail area into a &lt;strong&gt;single docked pane&lt;/strong&gt; with a shared tab bar. You get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Files and diffs opening directly next to your chat conversation — no separate panels to juggle.&lt;/li&gt;
&lt;li&gt;An improved diff experience with toggle between inline and side-by-side views, collapse/expand all, and a more compact diff representation that shows more change on screen.&lt;/li&gt;
&lt;li&gt;The next action (like "Create Pull Request") right in the editor tab title — no hunting through menus.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session state persistence.&lt;/strong&gt; Each session remembers its side-pane width, open editors, active file, and collapsed state across session switches and reloads.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To enable it, turn on the &lt;code&gt;sessions.layout.singlePaneDetailPanel&lt;/code&gt; setting and reload your window (it's read at startup, so the reload is required).&lt;/p&gt;

&lt;p&gt;This is experimental, but it feels like the kind of change that becomes the default pretty quickly.&lt;/p&gt;




&lt;h3&gt;
  
  
  ⚡ Run Terminal Commands with &lt;code&gt;!&lt;/code&gt; from Chat
&lt;/h3&gt;

&lt;p&gt;Here's the shortcut you didn't know you needed.&lt;/p&gt;

&lt;p&gt;You can now &lt;strong&gt;prefix any chat message with &lt;code&gt;!&lt;/code&gt;&lt;/strong&gt; to run its contents as a terminal command directly — no need to copy, switch to the terminal, paste, and run.&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="o"&gt;!&lt;/span&gt; npm run build
&lt;span class="o"&gt;!&lt;/span&gt; git status
&lt;span class="o"&gt;!&lt;/span&gt; python manage.py migrate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It works in agent host sessions in both the editor window and the Agents window. Small feature on paper, but when you're deep in a conversation with an agent and need to quickly verify something in the terminal, it saves more context-switching than you'd expect.&lt;/p&gt;




&lt;h3&gt;
  
  
  🎨 Modern UI Preview (Experimental)
&lt;/h3&gt;

&lt;p&gt;This is the one people have been waiting for. 👀&lt;/p&gt;

&lt;p&gt;VS Code 1.129 introduces a &lt;strong&gt;modernized workbench UI&lt;/strong&gt; — updated look and feel across the editor, available as an experimental opt-in via the &lt;code&gt;workbench.experimental.modernUI&lt;/code&gt; setting. It's already enabled by default in Insiders builds.&lt;/p&gt;

&lt;p&gt;Details on exactly what's changing are still rolling out as this is a preview, but if you want to see where VS Code's visual direction is heading, enable it and take a look.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔑 Session-Management Tools for Agents
&lt;/h3&gt;

&lt;p&gt;Agents on the agent host now have access to a suite of &lt;strong&gt;session-management tools&lt;/strong&gt;. This means an agent can — with your permission — list your active sessions, read another session's recent conversation, create a new session to hand off a sub-task, and even send a message to a session it created.&lt;/p&gt;

&lt;p&gt;A few important guardrails are baked in: sending a message to another session always asks for your confirmation first, an agent can't message its own chat, and the number of sends per request is capped to prevent runaway session spawning.&lt;/p&gt;

&lt;p&gt;This is the kind of feature that starts to feel like working with a team of agents rather than a single assistant.&lt;/p&gt;




&lt;h3&gt;
  
  
  🏢 GitHub Enterprise Support for Copilot in the Agent Host
&lt;/h3&gt;

&lt;p&gt;If your Copilot access comes through a &lt;strong&gt;GitHub Enterprise (GHE) instance&lt;/strong&gt;, you can now sign in and use Copilot in VS Code through the agent host. Previously, only &lt;code&gt;github.com&lt;/code&gt; accounts could complete the sign-in flow in the agent host — GHE users were effectively locked out.&lt;/p&gt;

&lt;p&gt;With 1.129, VS Code runs the OAuth flow and requests Copilot tokens from your GHE host instead. This works in both the editor window and the Agents window, with both the Copilot and Claude agents.&lt;/p&gt;

&lt;p&gt;To use it, make sure &lt;code&gt;chat.agentHost.enabled&lt;/code&gt; is on, then sign in and choose your GHE instance.&lt;/p&gt;




&lt;h3&gt;
  
  
  📁 Other Improvements Worth Knowing
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Reopen Editor from the Toolbar&lt;/strong&gt; — When a file supports multiple editors (like a Markdown file that can open as raw text or a preview), you can now switch directly from the editor toolbar via the &lt;code&gt;...&lt;/code&gt; menu → Reopen Editor With. No need to open the Command Palette for this anymore.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Migrate Prompt Files to Skills&lt;/strong&gt; — If you have custom prompt files (&lt;code&gt;*.prompt.md&lt;/code&gt;) for slash commands, VS Code now offers a migration interface to convert them into skills for compatibility with agent host harnesses. Enable &lt;code&gt;chat.customizations.promptMigration.enabled&lt;/code&gt; to access it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;BYOK Models in the Agents Window&lt;/strong&gt; — You can now use Bring Your Own Key (BYOK) models in the Agents window when using the Copilot harness on the agent host.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agents Window UX Improvements&lt;/strong&gt; — The new-session flow now remembers your last agent mode and approvals settings as defaults. Plus, the worktree/folder isolation option is now a simple checkbox instead of a dropdown.&lt;/p&gt;




&lt;h2&gt;
  
  
  Comparison: Agent Sessions Before vs After 1.129
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Before 1.129&lt;/th&gt;
&lt;th&gt;After 1.129&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Session process&lt;/td&gt;
&lt;td&gt;Tied to the editor process&lt;/td&gt;
&lt;td&gt;Dedicated agent host process&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-window support&lt;/td&gt;
&lt;td&gt;Not available&lt;/td&gt;
&lt;td&gt;Same session across multiple windows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Copilot behavior alignment&lt;/td&gt;
&lt;td&gt;Varied by surface&lt;/td&gt;
&lt;td&gt;Aligned via Copilot SDK&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub Enterprise support&lt;/td&gt;
&lt;td&gt;Not supported in agent host&lt;/td&gt;
&lt;td&gt;Fully supported&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Diff review in Agents window&lt;/td&gt;
&lt;td&gt;Separate panels&lt;/td&gt;
&lt;td&gt;Unified docked editor (experimental)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Terminal from chat&lt;/td&gt;
&lt;td&gt;Copy → switch → paste&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;!&lt;/code&gt; prefix, done&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Best Tips for Getting the Most Out of 1.129
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;✅ Enable the agent host gradually.&lt;/strong&gt; Turn on &lt;code&gt;chat.agentHost.enabled&lt;/code&gt; first, get comfortable with it, then layer in features like the single-pane editor panel or session-management tools. Don't flip every experimental toggle at once.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Use &lt;code&gt;!&lt;/code&gt; for quick terminal checks during chat.&lt;/strong&gt; It's most useful when you're mid-conversation with an agent and want to verify something fast — think &lt;code&gt;! git log --oneline -5&lt;/code&gt; or &lt;code&gt;! node -v&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Try the modern UI on Insiders.&lt;/strong&gt; If you want to preview it with the least friction, switch to the VS Code Insiders build where it's already the default.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ GHE users: update and sign in fresh.&lt;/strong&gt; If you've been unable to use Copilot on the agent host with a GHE account, this release fixes that. You may need to sign out and sign back in to pick up the new authentication flow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Migrate your prompt files.&lt;/strong&gt; If you have &lt;code&gt;.prompt.md&lt;/code&gt; files for custom slash commands, the new migration tool in the AI Customizations overview is the easiest path to cross-harness compatibility.&lt;/p&gt;




&lt;h2&gt;
  
  
  Common Mistakes to Avoid
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;🚫 Expecting all new features to work on every harness.&lt;/strong&gt; Several 1.129 features — like session-management tools and some agent-host-specific options — only work when an agent is running on the agent host. If a feature isn't showing up, check whether &lt;code&gt;chat.agentHost.enabled&lt;/code&gt; is on and the right harness is selected.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🚫 Forgetting to reload after enabling the new editor panel.&lt;/strong&gt; The &lt;code&gt;sessions.layout.singlePaneDetailPanel&lt;/code&gt; setting is read once at startup. Enabling it without reloading means you won't see any change — and then you'll wonder why the setting "doesn't work."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🚫 Treating the modern UI preview as production-ready.&lt;/strong&gt; It's experimental. Great to explore, but probably not the time to rely on it in a high-stakes client demo just yet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🚫 Missing the gradual rollout.&lt;/strong&gt; VS Code 1.129 is rolling out gradually. If you don't see it yet, go to &lt;strong&gt;Help → Check for Updates&lt;/strong&gt; to pull it immediately instead of waiting for the rollout to reach you.&lt;/p&gt;




&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;VS Code 1.129 is a meaningful step forward — not just a collection of bug fixes and small tweaks, but a release that actually reshapes how AI-assisted development works inside the editor.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;agent host&lt;/strong&gt; is the biggest structural change: agent sessions in their own process, connectable from multiple windows, aligned with the broader Copilot ecosystem. The &lt;strong&gt;new editor panel&lt;/strong&gt; in the Agents window makes reviewing AI-generated code feel natural rather than clunky. The &lt;strong&gt;&lt;code&gt;!&lt;/code&gt; prefix&lt;/strong&gt; is the tiny shortcut you'll use every single day once you know it exists. And the &lt;strong&gt;modern UI preview&lt;/strong&gt; gives us a glimpse of where VS Code's look is heading.&lt;/p&gt;

&lt;p&gt;Not everything in 1.129 is production-ready yet — several features are explicitly experimental. But the direction is clear, and it's a good one.&lt;/p&gt;

&lt;p&gt;Update, explore the new settings, and let the agent host do some of the heavy lifting for you. 💡&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Want more write-ups like this? I cover VS Code releases, frontend dev, and developer tools at *&lt;/em&gt;&lt;a href="https://hamidrazadev.com" rel="noopener noreferrer"&gt;hamidrazadev.com&lt;/a&gt;*&lt;em&gt;. Drop a comment if there's a feature you want me to dig into deeper — or share this post if it saved you time!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>vscode</category>
      <category>ai</category>
      <category>productivity</category>
    </item>
    <item>
      <title>GPT-5.6 vs Claude Fable 5: Which AI Model Should Developers Use in 2026?</title>
      <dc:creator>Muhammad Hamid Raza</dc:creator>
      <pubDate>Wed, 15 Jul 2026 04:11:08 +0000</pubDate>
      <link>https://dev.to/hamidrazadev/gpt-56-vs-claude-fable-5-which-ai-model-should-developers-use-in-2026-ea0</link>
      <guid>https://dev.to/hamidrazadev/gpt-56-vs-claude-fable-5-which-ai-model-should-developers-use-in-2026-ea0</guid>
      <description>&lt;p&gt;The AI model race is moving fast. Almost too fast. Just when you think you've picked a winner, a new release drops and your comparison sheet is already out of date.&lt;/p&gt;

&lt;p&gt;July 2026 gave us two major launches within weeks of each other: OpenAI's &lt;strong&gt;GPT-5.6 family&lt;/strong&gt; and Anthropic's &lt;strong&gt;Claude Fable 5&lt;/strong&gt;. Both are frontier-class models. Both are targeting serious developers, enterprise teams, and ambitious agentic workflows. Both are genuinely impressive.&lt;/p&gt;

&lt;p&gt;But which one actually fits your use case? And which one gives you better value for money? 🤔&lt;/p&gt;

&lt;p&gt;Let's break it down honestly — no fluff, no fanboy takes. Just the facts, the benchmarks, and what they mean for your real-world work.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is GPT-5.6?
&lt;/h2&gt;

&lt;p&gt;GPT-5.6 is OpenAI's newest model family, launched on July 9, 2026. It comes in three tiers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sol&lt;/strong&gt; — the flagship, highest capability&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Terra&lt;/strong&gt; — balanced performance for everyday work&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Luna&lt;/strong&gt; — the fastest and most cost-efficient option&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The whole family is built around one core idea: &lt;strong&gt;getting more useful work done per token&lt;/strong&gt;. OpenAI trained GPT-5.6 to be efficient by default, with the ability to scale up to &lt;code&gt;max&lt;/code&gt; or even &lt;code&gt;ultra&lt;/code&gt; mode (which runs four agents in parallel) when you need maximum firepower.&lt;/p&gt;

&lt;p&gt;It's available through ChatGPT, the OpenAI API, and Codex.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is Claude Fable 5?
&lt;/h2&gt;

&lt;p&gt;Claude Fable 5 is Anthropic's fifth-generation model, launched on June 9, 2026 and fully rolled out by July 1. It sits at the &lt;strong&gt;Mythos tier&lt;/strong&gt; of Anthropic's model lineup — which places it among their highest-capability class.&lt;/p&gt;

&lt;p&gt;Fable 5 is designed for &lt;strong&gt;long-running, complex, and asynchronous tasks&lt;/strong&gt;. Think multi-day coding sessions, large-scale enterprise knowledge work, and agentic pipelines that need minimal hand-holding. It's thorough, proactive, and designed to check its own work.&lt;/p&gt;

&lt;p&gt;It's available to Pro, Max, Team, and Enterprise Claude users, and also through AWS, Google Cloud, and Microsoft Foundry.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Comparison Matters
&lt;/h2&gt;

&lt;p&gt;Picking the wrong model for your workload doesn't just hurt your results — it affects your costs, your team's velocity, and sometimes your product's reliability.&lt;/p&gt;

&lt;p&gt;If you're building an AI-powered app, running an agentic coding pipeline, or just trying to choose the right API to integrate into your SaaS product, this decision has real weight. Both models are expensive at the frontier tier. You want to spend wisely. ⚡&lt;/p&gt;

&lt;p&gt;The benchmarks help, but they don't tell the whole story. Let's go through both.&lt;/p&gt;




&lt;h2&gt;
  
  
  GPT-5.6 vs Claude Fable 5: The Key Differences
&lt;/h2&gt;

&lt;h3&gt;
  
  
  💰 Pricing
&lt;/h3&gt;

&lt;p&gt;This is one of the clearest differences between the two.&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;Input (per 1M tokens)&lt;/th&gt;
&lt;th&gt;Output (per 1M tokens)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.6 Sol&lt;/td&gt;
&lt;td&gt;$5&lt;/td&gt;
&lt;td&gt;$30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.6 Terra&lt;/td&gt;
&lt;td&gt;$2.50&lt;/td&gt;
&lt;td&gt;$15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.6 Luna&lt;/td&gt;
&lt;td&gt;$1&lt;/td&gt;
&lt;td&gt;$6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Fable 5&lt;/td&gt;
&lt;td&gt;$10&lt;/td&gt;
&lt;td&gt;$50&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;GPT-5.6 Sol is &lt;strong&gt;half the input cost&lt;/strong&gt; and &lt;strong&gt;40% cheaper on output&lt;/strong&gt; compared to Fable 5. At scale, that difference compounds quickly. If you're running thousands of long-context API calls a day, this matters a lot.&lt;/p&gt;

&lt;p&gt;Fable 5 does offer a &lt;strong&gt;90% prompt caching discount&lt;/strong&gt; on input tokens, which can significantly reduce costs on repeated or templated prompts.&lt;/p&gt;




&lt;h3&gt;
  
  
  🧠 General Intelligence
&lt;/h3&gt;

&lt;p&gt;On the &lt;strong&gt;Artificial Analysis Intelligence Index v4.1&lt;/strong&gt; — a broad measure covering agentic work, coding, scientific reasoning, and general capabilities — the scores are remarkably close:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Claude Fable 5: &lt;strong&gt;59.9&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;GPT-5.6 Sol (max reasoning): &lt;strong&gt;58.9&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For general intelligence, they're essentially neck and neck. Neither has a clear runaway lead here.&lt;/p&gt;




&lt;h3&gt;
  
  
  🤖 Long-Horizon Agentic Tasks
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;Agents' Last Exam&lt;/strong&gt; is an evaluation of long-running professional workflows across 55 fields. Here, GPT-5.6 Sol pulls ahead:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GPT-5.6 Sol: &lt;strong&gt;53.6%&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Claude Fable 5: &lt;strong&gt;40.5%&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's a meaningful 13-point gap. For workflows that span extended tasks across multiple domains, GPT-5.6 Sol performs noticeably better on this specific benchmark.&lt;/p&gt;

&lt;p&gt;That said, Claude Fable 5 is built for multi-day autonomous sessions and can run for extended periods inside agent harnesses like Claude Code. The benchmark and the real-world experience don't always map perfectly.&lt;/p&gt;




&lt;h3&gt;
  
  
  💻 Coding
&lt;/h3&gt;

&lt;p&gt;This is where things get interesting. It depends on &lt;em&gt;which&lt;/em&gt; coding benchmark you look at.&lt;/p&gt;

&lt;p&gt;On the &lt;strong&gt;Artificial Analysis Coding Agent Index v1.1&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GPT-5.6 Sol: &lt;strong&gt;80&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Claude Fable 5: &lt;strong&gt;77.2&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;GPT-5.6 has a slight edge here.&lt;/p&gt;

&lt;p&gt;But on &lt;strong&gt;SWE-Bench Pro&lt;/strong&gt; — a benchmark testing real-world software engineering on actual codebases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Claude Fable 5: &lt;strong&gt;80%&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;GPT-5.6 Sol: &lt;strong&gt;64.6%&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's a 15-point gap in Fable 5's favor on a benchmark many developers consider closer to real work. For large migrations, complex implementations, and multi-day autonomous coding sessions, Fable 5's advantage on SWE-Bench Pro is hard to ignore.&lt;/p&gt;




&lt;h3&gt;
  
  
  🖥️ Computer Use and Browsing
&lt;/h3&gt;

&lt;p&gt;For computer use tasks — where the model controls a computer to complete tasks — GPT-5.6 Sol leads:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OSWorld 2.0&lt;/strong&gt;: GPT-5.6 Sol 62.6% vs Claude Opus 4.8 (Fable 5 not tested here) 54.8%&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;BrowseComp&lt;/strong&gt;: GPT-5.6 Sol 90.4% vs Fable 5 84.4%&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your agent needs to browse the web, fill forms, or interact with a GUI, GPT-5.6 Sol currently has stronger benchmarks in this area.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔒 Cybersecurity
&lt;/h3&gt;

&lt;p&gt;Both models take safety seriously, but their approaches differ.&lt;/p&gt;

&lt;p&gt;GPT-5.6 Sol scores &lt;strong&gt;73.5%&lt;/strong&gt; on ExploitBench (vs GPT-5.5's 47.9%), making it their strongest security model yet. OpenAI has a "Trusted Access for Cyber" program for verified defensive security professionals.&lt;/p&gt;

&lt;p&gt;Claude Fable 5 includes robust cybersecurity safeguards and automatically routes many sensitive queries to a safer fallback model (Opus 4.8). This protects against misuse but can limit some legitimate security research workflows.&lt;/p&gt;

&lt;p&gt;If you're doing authorized penetration testing or defensive security work, you'll want to check access programs for both providers.&lt;/p&gt;




&lt;h3&gt;
  
  
  🌐 Vision and Document Understanding
&lt;/h3&gt;

&lt;p&gt;Claude Fable 5 has a strong emphasis on &lt;strong&gt;vision-assisted work&lt;/strong&gt; — it can understand diagrams, charts, and tables inside PDFs and even use vision to check its own coding output against design goals.&lt;/p&gt;

&lt;p&gt;GPT-5.6 Sol also handles multimodal work well, scoring &lt;strong&gt;83%&lt;/strong&gt; on MMMU Pro (with tools). Both are strong here, and this one's largely a wash for most use cases.&lt;/p&gt;




&lt;h2&gt;
  
  
  When to Use GPT-5.6 Sol
&lt;/h2&gt;

&lt;p&gt;GPT-5.6 Sol makes sense when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cost efficiency matters at scale&lt;/strong&gt; — it's meaningfully cheaper than Fable 5 for similar capability&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You need strong agentic performance&lt;/strong&gt; — Agents' Last Exam results show it handles multi-step professional workflows well&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Computer use is central to your workflow&lt;/strong&gt; — stronger benchmarks on BrowseComp and OSWorld&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You want the &lt;code&gt;ultra&lt;/code&gt; multi-agent mode&lt;/strong&gt; — four agents running in parallel for demanding tasks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You're already in the OpenAI/Codex ecosystem&lt;/strong&gt; — zero migration friction&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  When to Use Claude Fable 5
&lt;/h2&gt;

&lt;p&gt;Claude Fable 5 makes sense when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real-world coding depth matters more than benchmark breadth&lt;/strong&gt; — SWE-Bench Pro results are significantly stronger&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You need multi-day autonomous agent sessions&lt;/strong&gt; — built specifically for this use case with Claude Code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You work in enterprise workflows&lt;/strong&gt; — designed to handle complex, multi-stage knowledge work with minimal oversight&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You're on AWS, Google Cloud, or Microsoft Foundry&lt;/strong&gt; — native integrations are available&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vision + document understanding is a core need&lt;/strong&gt; — especially in finance, legal, and architecture workflows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your team values Anthropic's safety approach&lt;/strong&gt; — automatic fallback routing adds a layer of protection&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Practical Tips for Choosing
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;✅ Do run a real test with your own prompts.&lt;/strong&gt; Benchmarks are helpful but your actual use case might behave differently. Both providers offer API access — test on your real data before committing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Do factor in caching.&lt;/strong&gt; Claude Fable 5's 90% prompt caching discount can significantly reduce costs if your prompts have a lot of repeated context (like system prompts or document chunks).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Do consider the ecosystem.&lt;/strong&gt; If your app is already OpenAI-native, switching to Fable 5 means reworking your integration. If you're starting fresh, both are viable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Do think about task type, not just model quality.&lt;/strong&gt; For web agents and computer use, GPT-5.6 Sol has the edge today. For deep coding tasks in real codebases, Fable 5's SWE-Bench numbers are hard to dismiss.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;❌ Don't rely on a single benchmark.&lt;/strong&gt; Every benchmark has its context. Agents' Last Exam and SWE-Bench Pro measure different things. Read what each eval actually tests.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;❌ Don't ignore the safety requirements.&lt;/strong&gt; Claude Fable 5 requires 30-day data retention for safety monitoring. If your use case has strict data handling requirements, check this carefully before integrating.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;❌ Don't assume the most expensive model is always the best choice for your task.&lt;/strong&gt; GPT-5.6 Terra ($2.50/$15) outperforms Claude Fable 5 on some benchmarks at a fraction of the price.&lt;/p&gt;




&lt;h2&gt;
  
  
  Common Mistakes Developers Make When Comparing AI Models
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Treating one benchmark as the whole story.&lt;/strong&gt; It's tempting to see "GPT-5.6 wins on Agents' Last Exam" and call it settled. But a different benchmark — SWE-Bench Pro — tells a very different story. No single number captures everything.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ignoring cost at scale.&lt;/strong&gt; It's easy to run a few API calls and not think about price. But at production scale, the difference between $5/$30 and $10/$50 per million tokens adds up fast. Do the math for your actual usage volume before deciding.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Picking based on brand loyalty.&lt;/strong&gt; Some teams are Team OpenAI or Team Anthropic before they've even tested. That's a fine starting point, but make the final call based on your actual workload.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Not testing vision-heavy workflows.&lt;/strong&gt; If your product processes PDFs, invoices, diagrams, or screenshots, you need to test that specific scenario. General benchmarks may not reflect how each model handles your document types.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Forgetting that models evolve quickly.&lt;/strong&gt; Both GPT-5.6 and Claude Fable 5 are already being evaluated against Claude Mythos (Anthropic's higher tier) and will face new releases soon. The landscape shifts fast — avoid over-engineering your entire pipeline around one model.&lt;/p&gt;




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

&lt;p&gt;Both GPT-5.6 Sol and Claude Fable 5 are impressive frontier models that genuinely push what's possible with AI-assisted development in 2026.&lt;/p&gt;

&lt;p&gt;If cost efficiency and strong agentic performance across broad workflows are your priority, &lt;strong&gt;GPT-5.6 Sol&lt;/strong&gt; is a compelling choice — especially given its lower price point and strong computer use benchmarks.&lt;/p&gt;

&lt;p&gt;If you're doing deep, real-world coding work, running multi-day autonomous agent sessions, or handling complex enterprise pipelines that need thorough, self-checking intelligence, &lt;strong&gt;Claude Fable 5&lt;/strong&gt; has clear strengths — particularly on SWE-Bench Pro, which reflects more realistic software engineering scenarios.&lt;/p&gt;

&lt;p&gt;The honest answer? There's no universal winner. The right model depends on your specific workload. Test both, measure what actually matters for your product, and let the results — not the marketing — guide you.&lt;/p&gt;

&lt;p&gt;Curious what else is happening in the AI and developer tooling space? Check out more practical posts at &lt;strong&gt;&lt;a href="https://hamidrazadev.com" rel="noopener noreferrer"&gt;hamidrazadev.com&lt;/a&gt;&lt;/strong&gt; 🚀&lt;/p&gt;

&lt;p&gt;If this comparison saved you some research time, share it with your team or drop it in your dev community — there's always someone else trying to make the same call right now.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>llm</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>VS Code 1.128 Is Here: Multi-Chat Agent Sessions, Copilot Vision, and OS-Level Shortcuts 🚀</title>
      <dc:creator>Muhammad Hamid Raza</dc:creator>
      <pubDate>Wed, 08 Jul 2026 16:38:05 +0000</pubDate>
      <link>https://dev.to/hamidrazadev/vs-code-1128-is-here-multi-chat-agent-sessions-copilot-vision-and-os-level-shortcuts-1ed0</link>
      <guid>https://dev.to/hamidrazadev/vs-code-1128-is-here-multi-chat-agent-sessions-copilot-vision-and-os-level-shortcuts-1ed0</guid>
      <description>&lt;p&gt;Ever had five different conversations going with an AI assistant, all about the same project, but scattered across five separate tabs? You lose track of which chat had the good idea. You forget which one was just testing something weird. It gets messy fast.&lt;/p&gt;

&lt;p&gt;VS Code 1.128 (released July 8, 2026) tackles exactly that problem, along with a few other genuinely useful upgrades. Let's walk through what's new, in plain language. 😊&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is VS Code 1.128?
&lt;/h2&gt;

&lt;p&gt;VS Code 1.128 is simply the latest update to Visual Studio Code, the free code editor made by Microsoft that millions of developers use every day.&lt;/p&gt;

&lt;p&gt;Think of it like a phone getting a software update. Your phone still works the same way, but suddenly you have new camera features or better battery controls. VS Code updates work the same way: same editor you know, but with new tools added on top.&lt;/p&gt;

&lt;p&gt;This release focuses heavily on &lt;strong&gt;Chat and Agents&lt;/strong&gt;, the part of VS Code where you talk to an AI to help you write code, debug, or answer questions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Release Matters
&lt;/h2&gt;

&lt;p&gt;If you use AI chat inside your editor, you already know the small annoyances: switching between chats, losing context, or not being able to attach an image when you need to show a bug visually.&lt;/p&gt;

&lt;p&gt;This update directly fixes those friction points. It also adds a shortcut feature that goes beyond the editor itself, and gives teams more control over how AI usage is tracked. In short: less busywork, more focus on actual coding.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benefits with Real-Life Examples
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Multiple chats in one Claude session&lt;/strong&gt; 💬&lt;br&gt;
Instead of opening a brand-new session every time you want to try a different approach, you can now keep related chats grouped together. Example: one chat adds a &lt;code&gt;/health&lt;/code&gt; endpoint to your Express app, while a peer chat writes tests for it at the same time, and a forked chat tries an alternative way to build the same feature. All three stay organized under one session instead of cluttering your session list.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Quick chats without opening a workspace&lt;/strong&gt; ⚡&lt;br&gt;
Sometimes you just want to ask a quick question, not open an entire project folder. Now you can start a chat in the Agents window without picking a workspace first. It's like asking a coworker a quick question in the hallway instead of walking them to your desk.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Copilot Vision, now generally available&lt;/strong&gt; 👀&lt;br&gt;
You can paste, drag, or drop images and PDFs straight into Chat. Say you have a screenshot of a broken UI layout — you can hand that directly to the agent instead of typing out a long description of what's wrong.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Read-only subagent chats (Preview)&lt;/strong&gt;&lt;br&gt;
When an agent delegates work to helper subagents, you can now watch their progress in a read-only view without accidentally interrupting them. Useful when you want visibility without micromanaging.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Configurable browser tab placement&lt;/strong&gt; 🔧&lt;br&gt;
You can choose whether integrated browser tabs open in your active editor group, a dedicated side group, or their own window. Small thing, but it keeps your workspace from feeling cluttered.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;OS-level keyboard shortcuts&lt;/strong&gt;&lt;br&gt;
You can now set up shortcuts that trigger VS Code commands even when VS Code isn't the focused window. For example, a &lt;code&gt;cmd+shift+a&lt;/code&gt; shortcut on macOS that opens the Agents window instantly, no matter what app you're currently in.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Beginner Approach vs Better Approach: Managing Multiple AI Conversations
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Beginner approach:&lt;/strong&gt; Open a new top-level session every time you want to try a different idea. Result: ten sessions, no idea which one has the code you actually want to keep.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Better approach (as of 1.128):&lt;/strong&gt; Use multiple chats inside one Claude session. Add a chat, fork from an earlier turn, or run chats in parallel — all while keeping everything grouped under one session that's easy to find later.&lt;/p&gt;

&lt;p&gt;This isn't about one method being "wrong." It's just that as your AI usage grows, organized sessions save real time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Best Tips for Using These New Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Try forking a chat&lt;/strong&gt; before starting a totally new session. If an idea works, you keep it. If it doesn't, you didn't lose your original conversation.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Use quick chats for one-off questions.&lt;/strong&gt; Don't open a whole workspace just to ask something simple.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Turn on OS-level shortcuts sparingly.&lt;/strong&gt; They're powerful, but pick a key combo that doesn't clash with shortcuts your other apps already use.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;If you're on a team,&lt;/strong&gt; check with your admin about the new OpenTelemetry settings for Copilot — managed settings will always override your personal ones.&lt;/li&gt;
&lt;li&gt;⚠️ &lt;strong&gt;Remember:&lt;/strong&gt; chats without a workspace only work when the agent host is enabled through the &lt;code&gt;chat.agentHost.enabled&lt;/code&gt; setting.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Common Mistakes People Make
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Assuming every chat needs its own session.&lt;/strong&gt; This gets overwhelming fast. The new multi-chat model exists specifically so you don't have to do this anymore.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Forgetting that BYOK (Bring Your Own Key) models don't use utility models by default.&lt;/strong&gt; If you're using your own key as the main agent and notice chat titles or commit messages aren't generating, it's because &lt;code&gt;chat.byokUtilityModelDefault&lt;/code&gt; needs to be set. It's not a bug, it's a default behavior worth knowing about.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Not checking the &lt;code&gt;modelOptions&lt;/code&gt; settings when using Custom Endpoint models.&lt;/strong&gt; If your provider has strict parameter requirements, setting &lt;code&gt;temperature&lt;/code&gt; or &lt;code&gt;top_p&lt;/code&gt; incorrectly (or forgetting to set them to &lt;code&gt;null&lt;/code&gt; when needed) can cause request failures.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ignoring the difference between &lt;code&gt;sideGroup&lt;/code&gt; and &lt;code&gt;window&lt;/code&gt; for browser tabs.&lt;/strong&gt; People often pick one, get annoyed, and don't realize there's a setting to change it.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;VS Code 1.128 is a solid, practical update. Multi-chat agent sessions make working with Claude in VS Code more organized. Copilot Vision going GA means images and PDFs are now a natural part of your chat workflow. And OS-level shortcuts mean VS Code can be one keypress away, even when it's not in focus.&lt;/p&gt;

&lt;p&gt;None of this reinvents the editor. It just removes small annoyances that add up over a normal coding day, which honestly is what good updates should do. 💡&lt;/p&gt;

&lt;p&gt;If you found this useful, feel free to share it with a fellow developer who's still juggling ten browser tabs of AI chats. And if you want more practical, no-fluff dev content like this, check out more posts at &lt;a href="https://hamidrazadev.com" rel="noopener noreferrer"&gt;hamidrazadev.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Got a favorite feature from this release? Drop a comment below and let's talk about it! 👇&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>webdev</category>
      <category>ai</category>
      <category>productivity</category>
    </item>
    <item>
      <title>The New HTTP QUERY Method: Why GET and POST Weren't Enough</title>
      <dc:creator>Muhammad Hamid Raza</dc:creator>
      <pubDate>Sun, 05 Jul 2026 10:19:28 +0000</pubDate>
      <link>https://dev.to/hamidrazadev/the-new-http-query-method-why-get-and-post-werent-enough-1lc5</link>
      <guid>https://dev.to/hamidrazadev/the-new-http-query-method-why-get-and-post-werent-enough-1lc5</guid>
      <description>&lt;p&gt;Have you ever built a search feature and hit a wall because your filters were too long for a URL? 😅 Yeah, me too. You start with a clean &lt;code&gt;GET /search?q=...&lt;/code&gt; request, everything's happy, and then someone adds ten more filters and suddenly your URL looks like a ransom note.&lt;/p&gt;

&lt;p&gt;Most of us just switch to &lt;code&gt;POST&lt;/code&gt; at that point and move on with our lives. It works, sure. But it always felt a little... off. POST is meant for creating or changing things, not for asking a question.&lt;/p&gt;

&lt;p&gt;Turns out the IETF felt the same way. In June 2026, they published &lt;strong&gt;RFC 10008&lt;/strong&gt;, which defines a brand-new HTTP method called &lt;strong&gt;QUERY&lt;/strong&gt;. It's built specifically to fix this exact headache. Let's break down what it is, why it matters, and how you'd actually use it. 🚀&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is the HTTP QUERY Method?
&lt;/h2&gt;

&lt;p&gt;Think of HTTP methods like different types of requests you can make to a waiter at a restaurant.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GET&lt;/strong&gt; is like pointing at a menu item. Simple, safe, repeatable — you can point at it a hundred times and nothing changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;POST&lt;/strong&gt; is like telling the waiter "surprise me, and also charge my card." It might change something, and doing it twice could mean two charges.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;QUERY&lt;/strong&gt; is the new one: it's like handing the waiter a detailed written note describing exactly what you want, but with a promise attached — "this is just a question, not an order, so ask it as many times as you need."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In technical terms, QUERY lets you send a request with a body (just like POST), but it's explicitly marked as &lt;strong&gt;safe&lt;/strong&gt; and &lt;strong&gt;idempotent&lt;/strong&gt; — meaning it won't change server state, and repeating it is completely fine.&lt;/p&gt;

&lt;p&gt;Here's what it looks like in practice:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="nf"&gt;QUERY&lt;/span&gt; &lt;span class="nn"&gt;/feed&lt;/span&gt; &lt;span class="k"&gt;HTTP&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;1.1&lt;/span&gt;
&lt;span class="na"&gt;Host&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;example.org&lt;/span&gt;
&lt;span class="na"&gt;Content-Type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;application/x-www-form-urlencoded&lt;/span&gt;

q=foo&amp;amp;limit=10&amp;amp;sort=-published
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Compare that to the old GET-with-a-giant-URL approach:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="nf"&gt;GET&lt;/span&gt; &lt;span class="nn"&gt;/feed?q=foo&amp;amp;limit=10&amp;amp;sort=-published&lt;/span&gt; &lt;span class="k"&gt;HTTP&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;1.1&lt;/span&gt;
&lt;span class="na"&gt;Host&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;example.org&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same intent, but QUERY moves the data into the body, where it belongs when things get complex.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Topic Matters
&lt;/h2&gt;

&lt;p&gt;You might be thinking, "okay, cool, but why should I care about one new HTTP verb?" Fair question. Here's the real-world pain it solves:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. URL length limits are real.&lt;/strong&gt; The spec itself points out that request URIs often need to stay under roughly 8000 characters. If your search has a dozen filters, a full-text query, and some tags, you can blow past that fast.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. URLs get logged everywhere.&lt;/strong&gt; Proxies, browser history, server logs, analytics tools — they all love to record URLs. If your "query" contains anything sensitive, that's a problem. A request body is far less likely to get logged the same way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. POST breaks caching and safe retries.&lt;/strong&gt; If your query is actually a POST, browsers and caches can't safely retry it after a dropped connection, because POST might have side effects. QUERY tells everyone in the chain: "relax, this is just a read."&lt;/p&gt;

&lt;p&gt;If you've ever debugged a flaky search endpoint or worried about sensitive data leaking into a URL, this method was made for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benefits with Real-Life Examples
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cleaner architecture for complex searches.&lt;/strong&gt; Imagine an e-commerce filter with brand, price range, size, color, and rating. With QUERY, all of that lives in a structured request body instead of a mile-long URL string. Way easier to read and maintain.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Safe automatic retries.&lt;/strong&gt; Since QUERY is idempotent, your HTTP client (or a proxy) can safely resend the request if the connection drops — no risk of accidentally triggering something twice, unlike a risky POST retry.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Built-in caching support.&lt;/strong&gt; RFC 10008 explains that responses to QUERY requests are cacheable, similar to GET. So a cache can store the result and serve it again for an identical query, saving your server some work.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Content negotiation like a champ.&lt;/strong&gt; The &lt;code&gt;Accept-Query&lt;/code&gt; header lets a server advertise which query formats it understands — say, &lt;code&gt;application/sql&lt;/code&gt; or &lt;code&gt;application/jsonpath&lt;/code&gt; — so clients know exactly what to send before they even try.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Optional shareable URLs.&lt;/strong&gt; A server can still hand back a &lt;code&gt;Location&lt;/code&gt; header pointing to a URI that represents the same query, so you &lt;em&gt;can&lt;/em&gt; bookmark or share a query result if you want to — you're just not forced to cram everything into the URL upfront.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  GET vs POST vs QUERY: Quick Comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;GET&lt;/th&gt;
&lt;th&gt;QUERY&lt;/th&gt;
&lt;th&gt;POST&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Safe (no side effects)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Maybe not&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Idempotent (safe to repeat)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Maybe not&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Has a request body&lt;/td&gt;
&lt;td&gt;No defined meaning&lt;/td&gt;
&lt;td&gt;Yes, expected&lt;/td&gt;
&lt;td&gt;Yes, expected&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cacheable&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Only in special cases&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Good for long/complex queries&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Sort of, but semantics are unclear&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The short version: QUERY gives you POST's flexibility (a body for your data) with GET's safety guarantees (safe, idempotent, cacheable). It really is the best of both worlds for read-only operations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Best Tips for Using QUERY
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Always set a &lt;code&gt;Content-Type&lt;/code&gt; header.&lt;/strong&gt; The spec is strict here — if it's missing or doesn't match your actual body content, the server is expected to reject the request with a 4xx error.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check for support first.&lt;/strong&gt; You can send an &lt;code&gt;OPTIONS&lt;/code&gt; request and look at the &lt;code&gt;Allow&lt;/code&gt; header, or check for an &lt;code&gt;Accept-Query&lt;/code&gt; header, to see if a server actually supports QUERY before relying on it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use it for reads only.&lt;/strong&gt; If your request changes data on the server, that's not a QUERY — stick with POST, PUT, or PATCH for that.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Take advantage of conditional requests.&lt;/strong&gt; Just like GET, QUERY supports things like &lt;code&gt;If-Modified-Since&lt;/code&gt;, so you can avoid re-downloading a query result that hasn't changed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Don't put sensitive data in a &lt;code&gt;Location&lt;/code&gt; URI.&lt;/strong&gt; If your query result gets a temporary URL, make sure that URL itself doesn't leak sensitive query details.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Common Mistakes People Make
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Mistake 1: Treating QUERY like a normal POST.&lt;/strong&gt;&lt;br&gt;
It's tempting to just swap the method name and call it done. But since QUERY promises to be safe and idempotent, any implementation that changes server state under the hood is technically breaking the contract — even if nothing crashes right away.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 2: Forgetting that QUERY needs CORS preflight.&lt;/strong&gt;&lt;br&gt;
If you're calling this from a browser across origins, QUERY isn't in the CORS-safelisted method list, so your browser will send a preflight &lt;code&gt;OPTIONS&lt;/code&gt; request first. Skipping this consideration can lead to confusing failures in production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 3: Assuming every server supports it already.&lt;/strong&gt;&lt;br&gt;
QUERY is brand new as of this RFC. Many servers, frameworks, and even browsers won't support it out of the box yet. Always check for support instead of assuming.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 4: Ignoring the &lt;code&gt;Accept-Query&lt;/code&gt; header.&lt;/strong&gt;&lt;br&gt;
If a server tells you exactly which formats it accepts, use that information instead of guessing and getting a &lt;code&gt;415 Unsupported Media Type&lt;/code&gt; response.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;The HTTP QUERY method fills a real gap that a lot of developers have quietly worked around for years — usually by misusing POST or fighting with URL length limits. Now there's an official, standardized way to send a safe, idempotent request with a full body, and get proper caching and retry behavior for free.&lt;/p&gt;

&lt;p&gt;It's not going to replace GET or POST. It's simply the right tool for a very specific job: asking a detailed question without changing anything. If you build APIs with search, filtering, or reporting features, this is worth keeping on your radar as tooling and framework support catches up.&lt;/p&gt;

&lt;p&gt;If this cleared things up for you, I'd love for you to share it with a fellow developer who's fighting with a 3,000-character search URL right now. 😄 You can find more practical, beginner-friendly dev content over at &lt;a href="https://hamidrazadev.com" rel="noopener noreferrer"&gt;hamidrazadev.com&lt;/a&gt; — drop a comment if you have questions or your own QUERY use case!&lt;/p&gt;

</description>
      <category>http</category>
      <category>webdev</category>
      <category>api</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Visual Studio Code 1.127: Everything New in the July 2026 Update</title>
      <dc:creator>Muhammad Hamid Raza</dc:creator>
      <pubDate>Wed, 01 Jul 2026 10:11:14 +0000</pubDate>
      <link>https://dev.to/hamidrazadev/visual-studio-code-1127-everything-new-in-the-july-2026-update-538f</link>
      <guid>https://dev.to/hamidrazadev/visual-studio-code-1127-everything-new-in-the-july-2026-update-538f</guid>
      <description>&lt;p&gt;If you open &lt;strong&gt;Visual Studio Code&lt;/strong&gt; every day, you know the feeling. A new update appears, you skim the release notes, promise yourself you'll read them later... and then get back to debugging that one mysterious error that somehow disappeared after adding a &lt;code&gt;console.log()&lt;/code&gt; 👀.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Visual Studio Code 1.127&lt;/strong&gt; release brings several meaningful improvements, especially if you use AI-powered development, build web applications, or simply want a smoother coding experience. So what's actually worth your attention? Let's break it down. 🚀&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is Visual Studio Code 1.127?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Visual Studio Code 1.127&lt;/strong&gt; is the July 2026 update of Microsoft's popular code editor.&lt;/p&gt;

&lt;p&gt;Like most VS Code releases, this update focuses on improving developer productivity instead of introducing flashy changes. Many improvements make existing workflows smoother, especially around AI agents, browser integration, and session management.&lt;/p&gt;

&lt;p&gt;Whether you're a student learning programming or an experienced developer working on large projects, these updates aim to reduce friction while writing and testing code.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Update Matters
&lt;/h2&gt;

&lt;p&gt;Small improvements add up.&lt;/p&gt;

&lt;p&gt;Imagine spending a few seconds less every time you organize AI sessions, review changes, or test your web app. Those seconds become minutes, and those minutes become hours over weeks of development.&lt;/p&gt;

&lt;p&gt;This release helps developers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;spend less time switching between tools&lt;/li&gt;
&lt;li&gt;organize AI workflows more easily&lt;/li&gt;
&lt;li&gt;test browser-based applications inside VS Code&lt;/li&gt;
&lt;li&gt;understand AI usage more clearly&lt;/li&gt;
&lt;li&gt;work with fewer interruptions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these features magically write perfect software. They simply make the development process a little smoother.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's New in Visual Studio Code 1.127
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🌐 Browser Tools for AI Agents Are Now Generally Available
&lt;/h3&gt;

&lt;p&gt;One of the biggest highlights is that browser tools for AI agents are now generally available.&lt;/p&gt;

&lt;p&gt;Agents can now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open web pages&lt;/li&gt;
&lt;li&gt;Read page content&lt;/li&gt;
&lt;li&gt;Take screenshots&lt;/li&gt;
&lt;li&gt;Click buttons&lt;/li&gt;
&lt;li&gt;Navigate websites&lt;/li&gt;
&lt;li&gt;Help validate web applications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For frontend developers, this reduces the need to constantly switch between VS Code and an external browser during certain AI-assisted workflows.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔒 Per-Site Browser Permissions
&lt;/h3&gt;

&lt;p&gt;The integrated browser now supports individual permissions for each website.&lt;/p&gt;

&lt;p&gt;Supported permissions include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Camera&lt;/li&gt;
&lt;li&gt;Microphone&lt;/li&gt;
&lt;li&gt;Geolocation&lt;/li&gt;
&lt;li&gt;Clipboard&lt;/li&gt;
&lt;li&gt;Bluetooth&lt;/li&gt;
&lt;li&gt;USB devices&lt;/li&gt;
&lt;li&gt;Sensors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of allowing everything globally, VS Code asks for permission per site, similar to modern web browsers.&lt;/p&gt;

&lt;p&gt;This gives developers better control while testing browser features.&lt;/p&gt;




&lt;h3&gt;
  
  
  📂 Better Agent Session Organization
&lt;/h3&gt;

&lt;p&gt;If you've ever had several AI sessions open at once, you know how quickly things become messy.&lt;/p&gt;

&lt;p&gt;VS Code 1.127 introduces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Custom session groups&lt;/li&gt;
&lt;li&gt;Drag-and-drop organization&lt;/li&gt;
&lt;li&gt;Pinning sessions&lt;/li&gt;
&lt;li&gt;Moving multiple sessions together&lt;/li&gt;
&lt;li&gt;Collapsible groups&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of it like organizing folders on your desktop instead of leaving everything scattered everywhere.&lt;/p&gt;




&lt;h3&gt;
  
  
  💬 Chat Input Banners
&lt;/h3&gt;

&lt;p&gt;The Agents window can now display helpful banners above the chat input.&lt;/p&gt;

&lt;p&gt;Examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Failed CI checks&lt;/li&gt;
&lt;li&gt;New pull request comments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of hunting through different windows, you can respond directly inside your current workflow.&lt;/p&gt;




&lt;h3&gt;
  
  
  💰 Subagent Credit Visibility
&lt;/h3&gt;

&lt;p&gt;When AI delegates work to subagents, you can now hover over them to see how many AI credits were used.&lt;/p&gt;

&lt;p&gt;This adds more transparency and helps developers better understand resource usage.&lt;/p&gt;




&lt;h3&gt;
  
  
  ✨ Improved Multi-Chat Sessions
&lt;/h3&gt;

&lt;p&gt;Multi-chat sessions continue to improve with several useful additions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create multiple chats inside one session&lt;/li&gt;
&lt;li&gt;Close and reopen chats&lt;/li&gt;
&lt;li&gt;Permanently delete chats&lt;/li&gt;
&lt;li&gt;Fork conversations into peer chats&lt;/li&gt;
&lt;li&gt;Better progress tracking across chats&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes complex AI-assisted development easier to organize.&lt;/p&gt;




&lt;h3&gt;
  
  
  ⚡ Better Session Layout
&lt;/h3&gt;

&lt;p&gt;Several interface improvements make sessions easier to work with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Consistent header buttons&lt;/li&gt;
&lt;li&gt;Cleaner workspace indicators&lt;/li&gt;
&lt;li&gt;Combined file change summaries&lt;/li&gt;
&lt;li&gt;Automatic focus on the chat input when switching sessions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These aren't dramatic changes, but they remove small annoyances that developers experience every day.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ /troubleshoot for AI Sessions
&lt;/h2&gt;

&lt;p&gt;If an AI session behaves unexpectedly, you can now use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/troubleshoot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The command analyzes session logs and helps explain issues such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ignored custom instructions&lt;/li&gt;
&lt;li&gt;slow responses&lt;/li&gt;
&lt;li&gt;unexpected behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of guessing what happened, you get more useful diagnostic information.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧪 Terminal Sandboxing
&lt;/h2&gt;

&lt;p&gt;On macOS and Linux, many agent-invoked terminal commands now run inside a sandbox by default.&lt;/p&gt;

&lt;p&gt;This means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;restricted filesystem access&lt;/li&gt;
&lt;li&gt;blocked network access&lt;/li&gt;
&lt;li&gt;fewer approval prompts for safer commands&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Commands requiring broader access still request permission.&lt;/p&gt;




&lt;h2&gt;
  
  
  🤖 Built-in Ollama Provider Deprecation
&lt;/h2&gt;

&lt;p&gt;The built-in Ollama provider has been deprecated.&lt;/p&gt;

&lt;p&gt;If you use Ollama inside VS Code, the recommended approach is now the official Ollama extension.&lt;/p&gt;

&lt;p&gt;This change helps model providers ship updates faster without waiting for VS Code releases.&lt;/p&gt;




&lt;h2&gt;
  
  
  Benefits with Real-Life Examples
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;✅ &lt;strong&gt;Cleaner AI workflows&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Instead of scrolling through dozens of sessions, you can organize them into logical groups.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;✅ &lt;strong&gt;Safer browser testing&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When testing a web app that requests camera access, permissions are granted per site instead of globally.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;✅ &lt;strong&gt;Less context switching&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pull request comments and CI failures appear directly where you're already working.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;✅ &lt;strong&gt;Better transparency&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Credit usage helps teams understand how AI resources are being consumed.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;✅ &lt;strong&gt;Improved debugging&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;/troubleshoot&lt;/code&gt; command provides insights instead of leaving you guessing.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Visual Studio Code 1.127 vs Earlier Versions
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Earlier Versions&lt;/th&gt;
&lt;th&gt;VS Code 1.127&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Basic AI session management&lt;/td&gt;
&lt;td&gt;Better grouping and drag-and-drop organization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Browser tools in preview&lt;/td&gt;
&lt;td&gt;Browser tools generally available&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Limited browser permissions&lt;/td&gt;
&lt;td&gt;Per-site permission model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Less visibility into AI usage&lt;/td&gt;
&lt;td&gt;Subagent credit information&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Simpler multi-chat experience&lt;/td&gt;
&lt;td&gt;Improved multi-chat management&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Best Tips
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Do
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Keep your AI sessions organized with groups.&lt;/li&gt;
&lt;li&gt;Use browser tools when validating web applications.&lt;/li&gt;
&lt;li&gt;Review permission prompts before granting access.&lt;/li&gt;
&lt;li&gt;Try &lt;code&gt;/troubleshoot&lt;/code&gt; if AI responses seem unusual.&lt;/li&gt;
&lt;li&gt;Update extensions alongside VS Code for the best compatibility.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ❌ Don't
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Ignore permission requests without reading them.&lt;/li&gt;
&lt;li&gt;Leave dozens of sessions open if they are no longer needed.&lt;/li&gt;
&lt;li&gt;Assume AI-generated changes are always correct. Review them carefully.&lt;/li&gt;
&lt;li&gt;Forget to migrate if you're still using the deprecated built-in Ollama provider.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Common Mistakes Developers Make
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Ignoring release notes
&lt;/h3&gt;

&lt;p&gt;Many developers install updates without checking what's new.&lt;/p&gt;

&lt;p&gt;Even spending five minutes reading the highlights can reveal features that save time every day.&lt;/p&gt;




&lt;h3&gt;
  
  
  Treating AI like autopilot
&lt;/h3&gt;

&lt;p&gt;AI tools are helpful, but they still need human review.&lt;/p&gt;

&lt;p&gt;Always verify generated code before committing it.&lt;/p&gt;




&lt;h3&gt;
  
  
  Keeping messy sessions
&lt;/h3&gt;

&lt;p&gt;Leaving every conversation open makes it harder to find the work that actually matters.&lt;/p&gt;

&lt;p&gt;Grouping sessions keeps projects much easier to navigate.&lt;/p&gt;




&lt;h3&gt;
  
  
  Forgetting extension updates
&lt;/h3&gt;

&lt;p&gt;Some new VS Code capabilities work best when related extensions are also up to date.&lt;/p&gt;

&lt;p&gt;Keeping both current helps avoid compatibility issues.&lt;/p&gt;




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

&lt;p&gt;&lt;strong&gt;Visual Studio Code 1.127&lt;/strong&gt; isn't about huge visual changes. Instead, it focuses on refining everyday development.&lt;/p&gt;

&lt;p&gt;The improvements to AI agents, browser tools, permissions, session management, and diagnostics are practical additions that can make daily coding feel a little more organized and efficient.&lt;/p&gt;

&lt;p&gt;If you spend hours inside VS Code each week, even small workflow improvements are worth exploring.&lt;/p&gt;

&lt;p&gt;If you found this article helpful, consider sharing it with other developers who might benefit from it. You can also discover more practical developer tutorials, guides, and articles at &lt;strong&gt;&lt;a href="https://hamidrazadev.com" rel="noopener noreferrer"&gt;https://hamidrazadev.com&lt;/a&gt;&lt;/strong&gt;. Happy coding! 🚀&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>vscode</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>DX Matters Too: Why Developer Experience Deserves the Same Love as UX</title>
      <dc:creator>Muhammad Hamid Raza</dc:creator>
      <pubDate>Sun, 28 Jun 2026 11:06:52 +0000</pubDate>
      <link>https://dev.to/hamidrazadev/dx-matters-too-why-developer-experience-deserves-the-same-love-as-ux-d11</link>
      <guid>https://dev.to/hamidrazadev/dx-matters-too-why-developer-experience-deserves-the-same-love-as-ux-d11</guid>
      <description>&lt;p&gt;Everyone talks about UX. But who's talking about the people &lt;em&gt;building&lt;/em&gt; the product? 🤔&lt;/p&gt;




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

&lt;p&gt;You've heard it a thousand times: "Make it a great experience for the user." And yes, that matters. Nobody wants a confusing app.&lt;/p&gt;

&lt;p&gt;But here's something we don't say out loud enough — &lt;strong&gt;what about the developer sitting at 11 PM, fighting a broken CLI, cryptic error messages, and documentation that reads like a legal contract?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Developer Experience, or DX, is the UX for the people who &lt;em&gt;build&lt;/em&gt; things. And for a long time, it's been treated like an afterthought.&lt;/p&gt;

&lt;p&gt;If you've ever rage-quit a library because the docs were useless, spent hours just getting a "Hello World" running, or stared at an error message that told you absolutely nothing — you've experienced bad DX firsthand.&lt;/p&gt;

&lt;p&gt;So let's talk about it. Because DX deserves the spotlight. 🚀&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is Developer Experience (DX)?
&lt;/h2&gt;

&lt;p&gt;Developer Experience is how a developer &lt;em&gt;feels&lt;/em&gt; and &lt;em&gt;works&lt;/em&gt; when using a tool, API, framework, SDK, or platform.&lt;/p&gt;

&lt;p&gt;Think of it like this: &lt;strong&gt;UX is how your users feel using your app. DX is how developers feel building it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If a user gets confused by a button, that's a UX problem.&lt;br&gt;&lt;br&gt;
If a developer gets confused by your package setup, broken error messages, or missing documentation — that's a DX problem.&lt;/p&gt;

&lt;p&gt;DX covers things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How easy is it to install and get started?&lt;/li&gt;
&lt;li&gt;Are error messages actually helpful?&lt;/li&gt;
&lt;li&gt;Is the documentation clear and complete?&lt;/li&gt;
&lt;li&gt;Does the API feel intuitive and consistent?&lt;/li&gt;
&lt;li&gt;How fast is the local development feedback loop?&lt;/li&gt;
&lt;li&gt;Are there good examples to follow?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's not just about "developer happiness" (though that matters too). Good DX directly affects &lt;strong&gt;how fast teams ship&lt;/strong&gt;, &lt;strong&gt;how many bugs slip through&lt;/strong&gt;, and &lt;strong&gt;whether people adopt your tool at all&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Developer Experience Actually Matters
&lt;/h2&gt;

&lt;p&gt;Here's a truth most product managers and business owners overlook:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Developers are users too.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When a developer struggles to use your API, SDK, or platform, they don't push through it out of loyalty. They Google the competition, find something easier, and move on.&lt;/p&gt;

&lt;p&gt;And beyond adoption — bad DX slows everything down internally too.&lt;/p&gt;

&lt;p&gt;When your team's own development workflow is painful, onboarding new engineers takes weeks instead of days. Simple tasks become complicated. Simple bugs become mysterious. Time that could go into building features goes into fighting the environment.&lt;/p&gt;

&lt;p&gt;Good DX is a &lt;em&gt;multiplier&lt;/em&gt;. When your dev tooling, APIs, and internal systems are clean and intuitive:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Developers ship faster&lt;/li&gt;
&lt;li&gt;Bugs get caught earlier&lt;/li&gt;
&lt;li&gt;Onboarding becomes smooth&lt;/li&gt;
&lt;li&gt;Code stays consistent&lt;/li&gt;
&lt;li&gt;Teams stay motivated&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And that directly improves the final product — which means, ironically, &lt;strong&gt;good DX leads to better UX&lt;/strong&gt; in the end.&lt;/p&gt;




&lt;h2&gt;
  
  
  Real Benefits of Prioritizing DX (With Examples)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;✅ Faster onboarding&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
When your README is clear, your CLI has a guided setup, and your examples actually work — a new team member can be productive in hours instead of weeks. Think of how Vercel's &lt;code&gt;npx create-next-app&lt;/code&gt; gets you running in under two minutes. That's intentional DX at work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Better error messages mean fewer lost hours&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A good error message tells you what went wrong, where, and ideally how to fix it. A bad one says &lt;code&gt;Error: undefined&lt;/code&gt;. Rust's compiler is famous for giving helpful, readable error messages. Developers genuinely appreciate that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Clear docs reduce the "wall of shame"&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The "wall of shame" is that moment where you close the docs tab and paste into ChatGPT instead. Stripe's API documentation is a gold standard — clear, well-organized, and full of real examples. When docs are good, developers trust the product.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Intuitive APIs reduce cognitive load&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
When an API behaves consistently and predictably, developers spend less mental energy remembering edge cases. React's hook design, for example, follows consistent rules that feel natural once learned.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Fast feedback loops keep developers in flow&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Hot reloading, instant previews, fast build times — these aren't luxuries. They're productivity tools. When you break a developer's flow with a 30-second rebuild every save, you're draining energy and focus.&lt;/p&gt;




&lt;h2&gt;
  
  
  UX vs DX: Two Sides of the Same Coin
&lt;/h2&gt;

&lt;p&gt;People sometimes treat UX and DX as competing priorities. They're not. They're complementary.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;UX Focus&lt;/th&gt;
&lt;th&gt;DX Focus&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Who is the user?&lt;/td&gt;
&lt;td&gt;End users (customers, visitors)&lt;/td&gt;
&lt;td&gt;Developers (builders, integrators)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Key concern&lt;/td&gt;
&lt;td&gt;Is the interface easy and pleasant?&lt;/td&gt;
&lt;td&gt;Is the tooling easy and productive?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Measured by&lt;/td&gt;
&lt;td&gt;Task success, satisfaction, retention&lt;/td&gt;
&lt;td&gt;Onboarding time, error rate, adoption&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Common pain points&lt;/td&gt;
&lt;td&gt;Confusing UI, slow load, broken flows&lt;/td&gt;
&lt;td&gt;Bad docs, cryptic errors, fragile setup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tools that help&lt;/td&gt;
&lt;td&gt;Figma, user testing, analytics&lt;/td&gt;
&lt;td&gt;CLI tools, SDKs, sandboxes, good docs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The best products invest in &lt;strong&gt;both&lt;/strong&gt;. A beautiful app built on a nightmare codebase will slow down every future improvement. Great DX makes it possible to maintain great UX over time.&lt;/p&gt;




&lt;h2&gt;
  
  
  Best Practices: How to Improve DX
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;💡 Write documentation like you're teaching a friend&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Don't assume knowledge. Explain what something does, why it exists, and show a working example. Add comments inside code samples. One good example beats three paragraphs of explanation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💡 Make error messages human-readable&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Every error should answer: what went wrong, where did it happen, and what should I do next? If your error message is just a stack trace with no context, it's not helpful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💡 Build a great getting-started experience&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The first five minutes are everything. If a developer can't see results fast, they'll leave. Offer a working starter template, a one-command setup, or a sandbox playground.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💡 Be consistent across your API or codebase&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
If you name one thing &lt;code&gt;getUserById&lt;/code&gt;, don't name the next one &lt;code&gt;fetchUserData&lt;/code&gt;. Consistency lets developers predict how things work. Inconsistency forces them to check docs for every single call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💡 Listen to developer feedback&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
If multiple developers ask the same question, that's a DX problem — not a developer problem. Update your docs, improve the error, or simplify the flow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💡 Test your own DX&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Hand your tool to a new developer and watch them use it without help. Where do they get stuck? That's where your DX needs work.&lt;/p&gt;




&lt;h2&gt;
  
  
  Common Mistakes That Kill Developer Experience
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;❌ Assuming developers will "figure it out"&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
No, they won't. They'll Google it. If they find a better alternative, they'll use that instead. Good DX is never accidental — it's designed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;❌ Writing docs after the fact&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Documentation written as an afterthought shows. It's usually incomplete, outdated, or just confusing. Treat docs as part of the product, not a checkbox you tick before launch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;❌ Returning vague errors&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;Something went wrong&lt;/code&gt; is not an error message. It's an apology that doesn't help. Every error state should give the developer something to act on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;❌ Neglecting the local development experience&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
If your app needs 12 steps to run locally — environment variables, Docker containers, manual seed data, two separate config files — that's a DX issue. Simplify wherever you can.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;❌ Breaking changes without clear migration paths&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Introducing a breaking change and just saying "update your code" is painful. Provide changelogs, migration guides, and deprecation warnings. Developers respect that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;❌ Ignoring the onboarding experience for your own internal systems&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
DX isn't just for public-facing tools. If your internal codebase, CI/CD setup, or component library is confusing, new team members suffer. Internal DX matters just as much.&lt;/p&gt;




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

&lt;p&gt;Here's the bottom line: &lt;strong&gt;UX and DX are both about respect.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;UX is about respecting your users' time and attention. DX is about respecting your developers' time and energy.&lt;/p&gt;

&lt;p&gt;When you invest in Developer Experience, you're not just making life easier for engineers. You're building a foundation that lets great products get shipped faster, maintained better, and improved continuously.&lt;/p&gt;

&lt;p&gt;The next time someone says "let's focus on the user experience," add this to the conversation: &lt;em&gt;"And let's also take care of the people building it."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Because when developers feel good about the tools they use and the environment they work in, the things they build are better. And that? That's good for everyone. 😊&lt;/p&gt;




&lt;p&gt;If this gave you a new way to think about development, I'd love for you to check out more articles at &lt;a href="https://hamidrazadev.com" rel="noopener noreferrer"&gt;hamidrazadev.com&lt;/a&gt;. There's a lot more on frontend development, tooling, and building things the right way.&lt;/p&gt;

&lt;p&gt;If it was useful — share it with a developer friend who deserves better DX. They'll appreciate it. 🙌&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>devex</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
