<?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.134 Is Here — Side-by-Side Chats, Prompt Timeline, and More Features You'll Actually Use</title>
      <dc:creator>Muhammad Hamid Raza</dc:creator>
      <pubDate>Thu, 20 Aug 2026 09:03:11 +0000</pubDate>
      <link>https://dev.to/hamidrazadev/vs-code-1134-is-here-side-by-side-chats-prompt-timeline-and-more-features-youll-actually-use-2ck2</link>
      <guid>https://dev.to/hamidrazadev/vs-code-1134-is-here-side-by-side-chats-prompt-timeline-and-more-features-youll-actually-use-2ck2</guid>
      <description>&lt;p&gt;If you've ever scrolled forever trying to find something you typed ten minutes ago in a long chat session... VS Code 1.134 just heard your pain. 😅&lt;/p&gt;

&lt;p&gt;Released on &lt;strong&gt;August 19, 2026&lt;/strong&gt;, this update is one of those rare releases that feels like the team was watching over your shoulder while you worked. It fixes small but real annoyances, adds tools for managing complex agent sessions, and makes the whole editor feel a bit more like a smart workspace and less like a blank canvas you have to fight every day.&lt;/p&gt;

&lt;p&gt;So what exactly changed? Let's break it down in plain English.&lt;/p&gt;




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

&lt;p&gt;Visual Studio Code is the most popular free code editor in the world. Millions of developers use it daily — from students writing their first Python script to professionals building large-scale apps.&lt;/p&gt;

&lt;p&gt;Every month or so, the VS Code team ships a new version packed with bug fixes, performance improvements, and new features. Version &lt;strong&gt;1.134&lt;/strong&gt; is the latest of those updates, focused on three main areas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Agents&lt;/strong&gt; — how VS Code handles AI-powered sessions and multi-window workflows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chat&lt;/strong&gt; — organizing and navigating your conversations with AI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Editor Experience&lt;/strong&gt; — small quality-of-life improvements that make daily work smoother&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Think of it like a phone software update — except instead of fixing battery drain, it fixes the things that slow you down while writing code.&lt;/p&gt;




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

&lt;p&gt;AI-powered coding tools have become a normal part of most developers' workflows. But as those tools get more powerful, the conversations get longer, the sessions get more complex, and managing everything becomes its own challenge.&lt;/p&gt;

&lt;p&gt;VS Code 1.134 addresses that challenge head-on.&lt;/p&gt;

&lt;p&gt;If you've used GitHub Copilot inside VS Code for any extended session, you know the feeling:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You're mid-task and can't remember what you asked earlier&lt;/li&gt;
&lt;li&gt;You want to compare two different agent responses&lt;/li&gt;
&lt;li&gt;You made a bunch of file changes but can't trace which prompt caused them&lt;/li&gt;
&lt;li&gt;You need to find a specific line from your conversation but scrolling takes forever&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This release tackles all of those problems — not with flashy features, but with practical, focused solutions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Key Features in VS Code 1.134 — With Real-Life Examples
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. 🗂️ Side-by-Side Chats (Grid Layout)
&lt;/h3&gt;

&lt;p&gt;Imagine you're comparing two approaches for the same problem. You ask the agent one way, then another. But switching between those conversations constantly is frustrating — like flipping between two browser tabs when you wish you could just split the screen.&lt;/p&gt;

&lt;p&gt;VS Code 1.134 lets you do exactly that. You can now &lt;strong&gt;arrange chats in horizontal or vertical groups&lt;/strong&gt; inside a session. Drag a chat — or a subagent chat — into a group and view them side by side.&lt;/p&gt;

&lt;p&gt;You can also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hold &lt;code&gt;Alt&lt;/code&gt; and click a chat in the Chats picker to open it directly to the side&lt;/li&gt;
&lt;li&gt;Create a "side chat" to start a fresh conversation beside your current one&lt;/li&gt;
&lt;li&gt;Restore the exact same layout when you reload the window or return to the session&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is genuinely useful when you're running parallel tasks or comparing results from different agent prompts without losing context.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. ⏱️ Prompt Timeline
&lt;/h3&gt;

&lt;p&gt;Long agent sessions are powerful — but they also produce a wall of conversation that's hard to navigate. Which prompt caused those file changes? Where did you start exploring that feature? Which earlier idea should you revisit?&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Prompt Timeline&lt;/strong&gt; solves this with a clean timeline in the transcript gutter of the Agents window. Each dot represents one of your prompts. The highlighted dot shows where you are right now.&lt;/p&gt;

&lt;p&gt;Hover over the timeline to see a list of your prompts. Click one to jump to it instantly. And if a prompt changed any files, the timeline shows you exactly &lt;strong&gt;how many lines were added or removed&lt;/strong&gt; — and lets you open the diff right there.&lt;/p&gt;

&lt;p&gt;You can control how the timeline appears using the &lt;code&gt;sessions.chatTimeline.display&lt;/code&gt; setting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ruler&lt;/code&gt; — shows the timeline beside the scrollbar&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;off&lt;/code&gt; — hides it completely&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of it like a chapter list for your agent session. You can finally stop scrolling through everything just to find where you were.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. 🔍 Find in Chat
&lt;/h3&gt;

&lt;p&gt;This one is simple but long overdue.&lt;/p&gt;

&lt;p&gt;You can now use &lt;code&gt;workbench.action.chat.find&lt;/code&gt; to &lt;strong&gt;search your entire conversation&lt;/strong&gt; — including content that's not currently visible on screen. It works in the Chat view, chat editors, and the Agents window.&lt;/p&gt;

&lt;p&gt;It supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Case-sensitive matching&lt;/li&gt;
&lt;li&gt;Whole-word matching&lt;/li&gt;
&lt;li&gt;Regular expressions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When you jump to a match, VS Code scrolls it into view and even &lt;strong&gt;expands collapsed work summaries&lt;/strong&gt; if the match is inside them.&lt;/p&gt;

&lt;p&gt;If you've ever said "I know I typed this somewhere earlier..." — this feature is for you.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. 🌐 Open HTML Files in the Integrated Browser by Default
&lt;/h3&gt;

&lt;p&gt;Frontend developers, this one's for you.&lt;/p&gt;

&lt;p&gt;If your workflow involves frequently previewing local HTML files rather than editing them, you can now set the &lt;strong&gt;integrated browser as the default editor&lt;/strong&gt; for HTML files. Configure it through &lt;code&gt;workbench.editorAssociations&lt;/code&gt; or directly from the editor header.&lt;/p&gt;

&lt;p&gt;The integrated browser works just like a standalone browser tab — but it stays connected to your HTML file. Any links inside the file open in new tabs so the association is preserved.&lt;/p&gt;

&lt;p&gt;No more switching to Chrome just to check if your layout looks right. 💡&lt;/p&gt;




&lt;h3&gt;
  
  
  5. 🏠 Agent Host — Connect Multiple Windows to One Session
&lt;/h3&gt;

&lt;p&gt;This is a more advanced feature, but worth knowing about.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Agent Host&lt;/strong&gt; lets you connect to the same agent session from multiple VS Code windows. It runs agent processes in a dedicated environment using the Agent Host Protocol (AHP), and the Copilot agent inside it is powered by the Copilot SDK — so its behavior is consistent with the CLI, the standalone Copilot app, and other Copilot tools.&lt;/p&gt;

&lt;p&gt;If you work across multiple monitors or windows, this means your agent session doesn't have to be isolated to one window. You can attach to it from wherever you're working.&lt;/p&gt;

&lt;p&gt;The feature is still actively being developed, and the team is welcoming feedback through GitHub issues.&lt;/p&gt;




&lt;h3&gt;
  
  
  6. 🪟 Improved Side Pane Layout
&lt;/h3&gt;

&lt;p&gt;The single-pane layout now follows your &lt;code&gt;workbench.editor.showTabs&lt;/code&gt; setting more naturally:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;With &lt;strong&gt;multiple tabs&lt;/strong&gt; visible, the layout stays familiar&lt;/li&gt;
&lt;li&gt;With &lt;strong&gt;single&lt;/strong&gt; or &lt;strong&gt;none&lt;/strong&gt; settings, a compact single-title header takes over — much cleaner for minimal setups&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Text file editors in this mode now use &lt;strong&gt;file breadcrumbs in the header&lt;/strong&gt;, just like the Changes editor — so you always know exactly what you're looking at.&lt;/p&gt;

&lt;p&gt;The side pane also holds its size and visibility when you switch between sessions. No more unexpected layout jumps.&lt;/p&gt;




&lt;h3&gt;
  
  
  7. ✖️ Close Other Editors with Alt+Click
&lt;/h3&gt;

&lt;p&gt;Small feature, real time-saver.&lt;/p&gt;

&lt;p&gt;You know how you sometimes end up with eight tabs open and you just want to keep one? Normally you'd right-click a tab and dig through a context menu.&lt;/p&gt;

&lt;p&gt;Now you can just hold &lt;code&gt;Alt&lt;/code&gt; and the close button on any tab &lt;strong&gt;transforms into "Close Other Editors"&lt;/strong&gt;. Click it, and every other tab closes except the one you clicked on.&lt;/p&gt;

&lt;p&gt;That's it. Clean and fast.&lt;/p&gt;




&lt;h2&gt;
  
  
  Before vs. After — What Actually Changed for Daily Work
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Situation&lt;/th&gt;
&lt;th&gt;Before 1.134&lt;/th&gt;
&lt;th&gt;After 1.134&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Comparing two agent responses&lt;/td&gt;
&lt;td&gt;Open one, close it, open the other&lt;/td&gt;
&lt;td&gt;Drag both into a side-by-side group&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Finding an earlier prompt&lt;/td&gt;
&lt;td&gt;Scroll through the whole session&lt;/td&gt;
&lt;td&gt;Jump directly using the Prompt Timeline&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Searching conversation history&lt;/td&gt;
&lt;td&gt;Manual scrolling&lt;/td&gt;
&lt;td&gt;Ctrl+F style search with regex support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Previewing HTML files&lt;/td&gt;
&lt;td&gt;Switch to an external browser&lt;/td&gt;
&lt;td&gt;Use the integrated browser as default&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Keeping one tab, closing the rest&lt;/td&gt;
&lt;td&gt;Right-click → context menu&lt;/td&gt;
&lt;td&gt;Alt+click the close button&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;None of these changes are dramatic on their own. But together they remove a surprising amount of friction from the daily workflow.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tips and Do's &amp;amp; Don'ts
&lt;/h2&gt;

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

&lt;ul&gt;
&lt;li&gt;Enable the Prompt Timeline (&lt;code&gt;sessions.chatTimeline.display: ruler&lt;/code&gt;) if you run long agent sessions — it pays off immediately&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;Alt+click&lt;/code&gt; on chat items in the Chats picker to open them to the side instead of navigating away&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;workbench.editorAssociations&lt;/code&gt; for HTML if you're a frontend developer previewing files regularly&lt;/li&gt;
&lt;li&gt;Check for updates manually if you want 1.134 now — VS Code rolls out updates gradually, so use &lt;strong&gt;Help → Check for Updates&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;❌ Don't:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ignore the Agent Host documentation if you work with multiple windows — it's worth a quick read&lt;/li&gt;
&lt;li&gt;Forget that the Find in Chat tool supports regex — it's more powerful than a plain text search&lt;/li&gt;
&lt;li&gt;Close the side pane between sessions if you're actively comparing chats — 1.134 now preserves its size and position&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;&lt;strong&gt;1. Waiting for the update to appear automatically&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;VS Code uses a gradual rollout, so not everyone gets the update on day one. If you want 1.134 right now, go to &lt;code&gt;Help → Check for Updates&lt;/code&gt; and grab it manually. Waiting and wondering why you don't see the new features is a common time-waster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Overlooking the Prompt Timeline setting&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Prompt Timeline defaults to showing beside the scrollbar. If you don't see it, check &lt;code&gt;sessions.chatTimeline.display&lt;/code&gt; in your settings. Some users enable the single-pane layout without realizing the timeline is available — don't miss it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Not using Find in Chat for long conversations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It's natural to scroll when looking for something — because that's how we've always done it. But the new Find in Chat works across the entire conversation, including collapsed summaries. Make it a habit early so you stop wasting time scrolling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Forgetting that the Agent Host is still in development&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Agent Host is genuinely useful, but it's early stage. If something doesn't work as expected, file an issue rather than assuming it's a permanent limitation. The team is actively improving it.&lt;/p&gt;




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

&lt;p&gt;VS Code 1.134 is not a "wow, everything changed" release. But it is a &lt;strong&gt;well-thought-out, practical improvement&lt;/strong&gt; to how you work with AI-powered sessions, long conversations, and everyday editor tasks.&lt;/p&gt;

&lt;p&gt;Side-by-side chats, the Prompt Timeline, Find in Chat, HTML preview by default, the Alt+click tab shortcut — each of these is small on its own. But if you spend hours every day in VS Code, these are exactly the kinds of improvements that add up.&lt;/p&gt;

&lt;p&gt;The team is clearly paying attention to how developers actually use the editor — not just adding features, but fixing the rough edges. 🚀&lt;/p&gt;

&lt;p&gt;If you want to try the latest features before the next stable release, grab the &lt;a href="https://code.visualstudio.com/insiders/" rel="noopener noreferrer"&gt;Insiders build&lt;/a&gt; — it gets updates as soon as they're ready.&lt;/p&gt;




&lt;p&gt;👉 &lt;strong&gt;Want more posts like this?&lt;/strong&gt; I cover the latest in VS Code, frontend development, and developer tools at &lt;a href="https://hamidrazadev.com" rel="noopener noreferrer"&gt;hamidrazadev.com&lt;/a&gt;. Come check it out, and if this post saved you some time, share it with a developer friend who might find it useful. ✌️&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Vibe Coding Is Fun — But It Might Be Quietly Ruining Your Learning Journey 🚨</title>
      <dc:creator>Muhammad Hamid Raza</dc:creator>
      <pubDate>Wed, 19 Aug 2026 07:15:21 +0000</pubDate>
      <link>https://dev.to/hamidrazadev/vibe-coding-is-fun-but-it-might-be-quietly-ruining-your-learning-journey-3o9k</link>
      <guid>https://dev.to/hamidrazadev/vibe-coding-is-fun-but-it-might-be-quietly-ruining-your-learning-journey-3o9k</guid>
      <description>&lt;p&gt;You open your laptop. You have a project idea. You type it into an AI tool. It spits out 200 lines of working code. You paste it in. It runs perfectly.&lt;/p&gt;

&lt;p&gt;You feel like a genius. 🚀&lt;/p&gt;

&lt;p&gt;But here is the thing — do you actually know what just happened? Can you explain any of that code? Could you fix it if it broke tomorrow? Could you write even 10 lines of it yourself?&lt;/p&gt;

&lt;p&gt;If your honest answer is "not really," then welcome to the trap that is quietly swallowing an entire generation of beginner developers.&lt;/p&gt;

&lt;p&gt;We need to talk about vibe coding.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is Vibe Coding, Exactly?
&lt;/h2&gt;

&lt;p&gt;Vibe coding is a style of programming where you describe what you want in plain English, let an AI tool generate the code for you, and keep going without deeply understanding what was written.&lt;/p&gt;

&lt;p&gt;The term got popular because it matches a certain feeling — you are in flow, things are getting built, you feel productive. You are vibing.&lt;/p&gt;

&lt;p&gt;Think of it like ordering food at a restaurant by just saying "surprise me" every single time. The food might taste great. But you will never learn to cook.&lt;/p&gt;

&lt;p&gt;Vibe coding is not the same as using AI to help you learn or speed up repetitive work. There is a real difference between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Using AI as a tool while understanding the output&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Using AI as a crutch that replaces understanding entirely&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vibe coding is the second one. And for beginners, it is a serious problem.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Matters More Than People Admit
&lt;/h2&gt;

&lt;p&gt;Most beginners start coding because they want to build things. That is a great motivation.&lt;/p&gt;

&lt;p&gt;But building things and understanding things are not the same. When you are learning to drive, someone can steer the wheel for you while you sit in the seat. You might reach your destination. But you have not learned to drive.&lt;/p&gt;

&lt;p&gt;Vibe coding gives beginners the destination without the journey. And the journey is literally where the learning happens.&lt;/p&gt;

&lt;p&gt;Programming is not a collection of finished code snippets. It is a way of thinking. It is logic, problem-solving, pattern recognition, debugging, and understanding how things connect. None of that grows when you skip the thinking step.&lt;/p&gt;

&lt;p&gt;The market does not care how fast your AI can generate code. It cares whether &lt;strong&gt;you&lt;/strong&gt; can solve problems, adapt when things break, and build things that actually work.&lt;/p&gt;




&lt;h2&gt;
  
  
  How Vibe Coding Quietly Damages Beginner Growth
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. You Skip the Struggle — And the Struggle Is the Lesson
&lt;/h3&gt;

&lt;p&gt;There is a reason teachers give you practice problems instead of just showing you the answer. The struggle is not a bug in learning. It is the feature.&lt;/p&gt;

&lt;p&gt;When you sit with a problem, try different approaches, fail a few times, and finally figure it out — that is when your brain actually builds a mental model. That model sticks.&lt;/p&gt;

&lt;p&gt;Vibe coding removes the struggle entirely. You never build the model. So two weeks later, you cannot remember how to write a simple loop. And that is not laziness. It is just how learning works.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. You Cannot Debug What You Do Not Understand
&lt;/h3&gt;

&lt;p&gt;Here is a scenario every vibe coder eventually faces.&lt;/p&gt;

&lt;p&gt;The AI-generated code works on day one. On day five, something breaks. You ask the AI to fix it. It gives you updated code. That breaks something else. You are now in a loop of asking, pasting, and hoping — with no idea what is actually going wrong.&lt;/p&gt;

&lt;p&gt;Debugging requires understanding. If you do not know what a piece of code is supposed to do, you cannot figure out why it is not doing it.&lt;/p&gt;

&lt;p&gt;Beginners who vibe code end up paralyzed the moment something does not work. They have no foundation to fall back on.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. You Develop Zero Problem-Solving Instincts
&lt;/h3&gt;

&lt;p&gt;A senior developer looks at a broken feature and knows roughly where to start looking. They read an error message and already have a mental shortlist of suspects. That instinct is built over years of actually solving problems.&lt;/p&gt;

&lt;p&gt;Vibe coding replaces your problem-solving loop with an AI-prompting loop. Instead of "why is this happening and how do I fix it," the thought becomes "let me paste this error into ChatGPT."&lt;/p&gt;

&lt;p&gt;That sounds convenient. And sometimes it is. But when you have never trained your own instincts, you have no backup when the AI fails you — and it will fail you.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. You Miss the Connections Between Concepts
&lt;/h3&gt;

&lt;p&gt;Programming is not a list of isolated facts. Everything connects. Variables relate to functions. Functions relate to scope. Scope relates to closures. Closures relate to async behavior. And so on.&lt;/p&gt;

&lt;p&gt;When you vibe code, you jump straight to output without tracing those connections. You end up with a patchwork of half-understood pieces that do not form a real picture.&lt;/p&gt;

&lt;p&gt;At some point, every developer needs to build something complex. That is when the gaps in understanding show up all at once — and it is overwhelming.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. You Build a False Confidence That Eventually Cracks
&lt;/h3&gt;

&lt;p&gt;This one hurts the most.&lt;/p&gt;

&lt;p&gt;Beginners who vibe code often feel more confident than those who struggle honestly. They have projects. They have demos. They can share links.&lt;/p&gt;

&lt;p&gt;But put them in a technical interview or a real team environment where they need to explain their code, extend it, or write something from scratch — and the confidence shatters.&lt;/p&gt;

&lt;p&gt;That moment is genuinely painful. And it is avoidable.&lt;/p&gt;




&lt;h2&gt;
  
  
  Vibe Coding vs. Intentional AI-Assisted Learning
&lt;/h2&gt;

&lt;p&gt;Let's be honest — AI tools are here to stay. Refusing to use them is not the answer. The answer is using them the right way.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Vibe Coding&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Intentional AI-Assisted Learning&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Paste code without reading it&lt;/td&gt;
&lt;td&gt;Read every line and understand what it does&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Use AI to avoid thinking&lt;/td&gt;
&lt;td&gt;Use AI to check your thinking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skip errors by asking AI to rewrite&lt;/td&gt;
&lt;td&gt;Debug errors yourself first, then consult AI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Build projects without knowing the concepts&lt;/td&gt;
&lt;td&gt;Learn concepts first, use AI to speed up practice&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cannot explain your own code&lt;/td&gt;
&lt;td&gt;Can walk anyone through what you wrote&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The difference is not the tool. It is your relationship with the output.&lt;/p&gt;




&lt;h2&gt;
  
  
  Practical Tips for Beginners Who Want to Actually Learn 💡
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Do these things:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Write code by hand first, even if it is slow and painful&lt;/li&gt;
&lt;li&gt;✅ When you use AI-generated code, read every single line and look up what you do not understand&lt;/li&gt;
&lt;li&gt;✅ Try to rebuild the AI's solution yourself after studying it&lt;/li&gt;
&lt;li&gt;✅ Use AI to explain concepts, not to replace your understanding of them&lt;/li&gt;
&lt;li&gt;✅ Keep a learning journal — write down what you figured out today in your own words&lt;/li&gt;
&lt;li&gt;✅ Solve at least a few practice problems every week without AI help&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Avoid these habits:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;❌ Pasting code you have never read into your project&lt;/li&gt;
&lt;li&gt;❌ Moving on from a topic the moment the code "works"&lt;/li&gt;
&lt;li&gt;❌ Using AI as your first response to every problem&lt;/li&gt;
&lt;li&gt;❌ Building portfolios full of projects you cannot explain&lt;/li&gt;
&lt;li&gt;❌ Skipping fundamentals because AI can handle them&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Common Mistakes Beginners Make With Vibe Coding
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Mistake 1: Treating working code as understood code&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Code running without errors is not the same as code you understand. A lot of beginners make this assumption and end up building on a foundation they do not actually have.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 2: Jumping to complex projects too early&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Vibe coding makes it easy to build things that look impressive but require zero understanding. Beginners think they are ready for advanced work when they have not even covered the basics. The gap catches up with them fast.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 3: Replacing learning resources with AI chat&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Documentation, courses, and tutorials are designed to build knowledge step by step. AI answers are designed to be immediately useful. Those are different goals. Relying only on AI chat for learning skips the structured progression that actually builds skills.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 4: Never reading error messages&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Error messages are not obstacles. They are information. Beginners who vibe code often stop reading error messages entirely because they just paste them into AI. Over time, they lose the ability to interpret them. Error messages are one of the most valuable debugging tools you have.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 5: Assuming AI-generated code is always correct&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AI tools make mistakes. They use outdated syntax. They misunderstand context. They generate code that looks right but has subtle bugs. A developer who does not understand the code cannot catch those mistakes — and ships broken software.&lt;/p&gt;




&lt;h2&gt;
  
  
  So, Is Vibe Coding Completely Bad?
&lt;/h2&gt;

&lt;p&gt;No. That would be a lazy take.&lt;/p&gt;

&lt;p&gt;Vibe coding has a place. For experienced developers, it is a productivity tool. For people building internal prototypes, it can speed things up. For exploring an unfamiliar technology, it can show you what is possible before you dig in.&lt;/p&gt;

&lt;p&gt;But for someone who is still learning? For someone who has not yet built a mental model of how programming actually works?&lt;/p&gt;

&lt;p&gt;Vibe coding at that stage is like using a calculator before you understand math. You get the right answers. You learn nothing.&lt;/p&gt;

&lt;p&gt;The phase where you struggle with concepts, write bad code, break things, and fix them slowly — that phase is not something to escape. It is the phase where you actually become a developer. Skip it, and you skip the most important part of the whole journey.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Note of Encouragement 😊
&lt;/h2&gt;

&lt;p&gt;If you have been vibe coding and you are reading this feeling a little uncomfortable — that is okay. Recognizing the problem is the first step.&lt;/p&gt;

&lt;p&gt;You do not have to throw away your AI tools. You just have to change how you use them.&lt;/p&gt;

&lt;p&gt;Slow down. Read the code. Ask yourself why it works. Try writing it yourself. Break it on purpose and figure out how to fix it. That is what learning actually looks like.&lt;/p&gt;

&lt;p&gt;The developers who will stand out in the next few years are not the ones who best know how to prompt AI. They are the ones who understand programming deeply enough to work with AI intelligently.&lt;/p&gt;

&lt;p&gt;That kind of understanding does not come from vibing. It comes from doing the real work.&lt;/p&gt;

&lt;p&gt;You have got this. 💪&lt;/p&gt;




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

&lt;p&gt;Vibe coding feels productive. It delivers results fast. And for experienced developers, it genuinely is a useful approach. But for beginners who are still building foundational skills, it removes the very process that creates those skills.&lt;/p&gt;

&lt;p&gt;The learning phase is not a hurdle to get past. It is the whole point.&lt;/p&gt;

&lt;p&gt;Use AI tools. Explore them. But use them as a supplement to your learning, not a replacement for it. Read the code you use. Understand what you build. Debug your own problems. Build slow, and build well.&lt;/p&gt;

&lt;p&gt;Your future self — the one sitting in a real interview, working on a real product, solving a real problem — will thank you for it.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Want more honest takes on the developer journey? Head over to *&lt;/em&gt;&lt;a href="https://hamidrazadev.com" rel="noopener noreferrer"&gt;hamidrazadev.com&lt;/a&gt;** for more practical articles just like this one. If this post made you think, share it with a fellow beginner who needs to hear it. Drop a comment below — have you caught yourself vibe coding? How did you course-correct? 👇*&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>VS Code 1.133 Is Here — And These 4 New Features Will Change How You Code</title>
      <dc:creator>Muhammad Hamid Raza</dc:creator>
      <pubDate>Fri, 14 Aug 2026 10:37:39 +0000</pubDate>
      <link>https://dev.to/hamidrazadev/vs-code-1133-is-here-and-these-4-new-features-will-change-how-you-code-21e8</link>
      <guid>https://dev.to/hamidrazadev/vs-code-1133-is-here-and-these-4-new-features-will-change-how-you-code-21e8</guid>
      <description>&lt;p&gt;VS Code just dropped another update. 🚀&lt;/p&gt;

&lt;p&gt;If you've been opening the editor every single day and feeling like something could be smoother, faster, or just a little less annoying — this release has a few answers.&lt;/p&gt;

&lt;p&gt;VS Code 1.133 shipped on &lt;strong&gt;August 12, 2026&lt;/strong&gt;, and while it's not the most massive release in history, the features it brings are genuinely useful. Especially if you're working with AI agents, long chat conversations, or building HTML files and wanting instant feedback.&lt;/p&gt;

&lt;p&gt;So what actually changed? Let's break it down in plain, honest terms.&lt;/p&gt;




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

&lt;p&gt;VS Code (Visual Studio Code) is a free, open-source code editor made by Microsoft. It's one of the most popular tools for developers worldwide, and the team releases updates regularly with new features, fixes, and improvements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Version 1.133&lt;/strong&gt; is the latest stable release. It focuses on three main areas: AI agent flexibility, a better chat experience, and a smarter live browser preview.&lt;/p&gt;

&lt;p&gt;Nothing revolutionary on the surface — but when you're coding every day, small quality-of-life upgrades add up fast.&lt;/p&gt;




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

&lt;p&gt;Most developers don't celebrate small editor updates. You open the editor, see a "1.133 available" notification, click update, and move on.&lt;/p&gt;

&lt;p&gt;But skipping the release notes is how you miss features that could save you 10 minutes every day.&lt;/p&gt;

&lt;p&gt;Here's why 1.133 is worth your attention:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you use &lt;strong&gt;Claude or Copilot&lt;/strong&gt; for AI-assisted coding, you now have more provider flexibility.&lt;/li&gt;
&lt;li&gt;If you have &lt;strong&gt;long AI chat conversations&lt;/strong&gt;, you won't lose track of your prompts anymore.&lt;/li&gt;
&lt;li&gt;If you &lt;strong&gt;preview HTML locally&lt;/strong&gt;, it now refreshes automatically on every save.&lt;/li&gt;
&lt;li&gt;And if GitHub authentication gets in your way, there's a new workaround for that too.&lt;/li&gt;
&lt;/ul&gt;

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




&lt;h2&gt;
  
  
  The 4 New Features Worth Knowing
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Mix Anthropic and Copilot Models in a Single Claude Session
&lt;/h3&gt;

&lt;p&gt;This one is big if you use the Claude agent in VS Code.&lt;/p&gt;

&lt;p&gt;Previously, your Claude session was tied to one provider — either your &lt;strong&gt;GitHub Copilot subscription&lt;/strong&gt; or your own &lt;strong&gt;Claude API key&lt;/strong&gt;. If you wanted to switch, you had to reconfigure the entire agent host. That was annoying.&lt;/p&gt;

&lt;p&gt;Now, the model picker shows &lt;strong&gt;both groups at once&lt;/strong&gt;. You can switch between Anthropic models (billed to your API key) and Copilot models (billed to your Copilot subscription) between turns — without touching any settings.&lt;/p&gt;

&lt;p&gt;Think of it like switching between two toolkits mid-project without putting anything away first.&lt;/p&gt;

&lt;p&gt;This is especially useful when you want to try a different model for a specific task or compare outputs without interrupting your workflow.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Open the Agents Window Without GitHub Sign-In
&lt;/h3&gt;

&lt;p&gt;Setting: &lt;code&gt;chat.agentHost.allowSignedOutWhenUsable&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This is marked &lt;strong&gt;experimental&lt;/strong&gt;, but it solves a real frustration.&lt;/p&gt;

&lt;p&gt;Before this, opening the Agents window always showed a GitHub sign-in prompt — and you couldn't dismiss it. If your machine couldn't reach &lt;code&gt;github.com&lt;/code&gt;, or you simply didn't need GitHub in your workflow, you were stuck staring at that screen.&lt;/p&gt;

&lt;p&gt;If you already had &lt;strong&gt;Claude configured with an API key&lt;/strong&gt;, you didn't need GitHub at all. But the editor forced you through the sign-in step anyway.&lt;/p&gt;

&lt;p&gt;With this new experimental setting enabled, the Agents window opens &lt;strong&gt;without the GitHub sign-in gate&lt;/strong&gt;. Authentication becomes per-agent or per-model instead of blocking the whole window.&lt;/p&gt;

&lt;p&gt;Right now this only works for Claude. Copilot with custom model keys and Codex support is planned for future releases.&lt;/p&gt;

&lt;p&gt;To enable it:&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;"chat.agentHost.allowSignedOutWhenUsable"&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="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  3. Sticky Scroll for Chat Prompts
&lt;/h3&gt;

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

&lt;p&gt;This is a simple feature, but once you use it, you'll wonder how you lived without it.&lt;/p&gt;

&lt;p&gt;If you've had a long back-and-forth conversation in the VS Code chat panel — asking Claude or Copilot to debug, refactor, explain, generate, and review code — you know how fast it gets overwhelming. You scroll down to read a response, and suddenly you've lost track of which question that response was even answering.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sticky scroll for prompts&lt;/strong&gt; pins the last prompt you scrolled past to the top of the chat window. It shows you its position in the conversation, and you can click it to jump back or use the previous/next buttons to step through your prompts one by one.&lt;/p&gt;

&lt;p&gt;It works the same way as sticky scroll in the code editor — but for your chat history. 👀&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Auto-Reload HTML Files in the Integrated Browser
&lt;/h3&gt;

&lt;p&gt;Setting: &lt;code&gt;workbench.browser.autoReloadOnFileChange&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If you've ever worked on a plain HTML file in VS Code and used the built-in browser preview, you know the pain. You save your file, switch to the preview, and... nothing changed. You have to manually reload it. Every. Single. Time.&lt;/p&gt;

&lt;p&gt;This feature kills that friction.&lt;/p&gt;

&lt;p&gt;Now, when you have a local HTML file open in the integrated browser, it &lt;strong&gt;refreshes automatically&lt;/strong&gt; whenever the file changes on disk. Save your file, and the preview updates immediately — no manual reload needed.&lt;/p&gt;

&lt;p&gt;You can toggle auto-reload per tab or set it globally using the setting above.&lt;/p&gt;

&lt;p&gt;It's a small thing. But if you're doing any kind of front-end work or quick HTML prototyping, it's a genuine time-saver.&lt;/p&gt;




&lt;h2&gt;
  
  
  Benefits at a Glance
&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;What It Solves&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Mix Anthropic + Copilot models&lt;/td&gt;
&lt;td&gt;No more provider lock-in per session&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agents window without GitHub sign-in&lt;/td&gt;
&lt;td&gt;Unblocks users who don't need GitHub&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sticky scroll for chat prompts&lt;/td&gt;
&lt;td&gt;Never lose your place in long AI conversations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auto-reload HTML preview&lt;/td&gt;
&lt;td&gt;Instant feedback without manual refresh&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Comparison: Before vs. After 1.133
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Using Claude with Multiple Providers
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Before:&lt;/strong&gt; Pick one provider. Want to switch? Reconfigure the agent host.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After:&lt;/strong&gt; Both providers live in the same model picker. Switch mid-conversation. No reconfiguration needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  HTML Preview Workflow
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Before:&lt;/strong&gt; Save → switch to preview → manually reload → check result → repeat forever.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After:&lt;/strong&gt; Save → preview updates automatically. Done.&lt;/p&gt;

&lt;h3&gt;
  
  
  Long AI Chat Sessions
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Before:&lt;/strong&gt; Scroll through 40 turns of conversation and lose track of which prompt a response belongs to.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After:&lt;/strong&gt; The prompt sticks to the top of the screen. You always know where you are.&lt;/p&gt;




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

&lt;p&gt;&lt;strong&gt;✅ Enable sticky scroll early.&lt;/strong&gt; If you use chat regularly, turn on &lt;code&gt;chat.stickyScroll.enabled&lt;/code&gt; right now. You'll notice the difference immediately in longer sessions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Try the unsigned Agents window if GitHub is slowing you down.&lt;/strong&gt; If you already use Claude via API key and GitHub sign-in is just friction, enable &lt;code&gt;chat.agentHost.allowSignedOutWhenUsable&lt;/code&gt; and simplify your workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Use auto-reload for static HTML prototyping.&lt;/strong&gt; It's not just for agent edits — your own saved changes trigger the reload too. Great for quick mockups and style experiments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Explore the mixed model picker.&lt;/strong&gt; If you have both a Copilot subscription and a Claude API key, the new model picker makes switching between them genuinely easy. Test both on the same task and see which output suits you better.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Update immediately if you want these features now.&lt;/strong&gt; VS Code 1.133 is rolling out gradually. Use &lt;strong&gt;Help → Check for Updates&lt;/strong&gt; in the editor to get it right away without waiting.&lt;/p&gt;




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

&lt;p&gt;&lt;strong&gt;❌ Ignoring experimental settings.&lt;/strong&gt; Features labeled "experimental" are still real, working features — they're just not fully finalized. The Agents-window-without-sign-in setting works today for Claude. Don't dismiss it just because of the label.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;❌ Forgetting to enable settings.&lt;/strong&gt; A few features in this release (sticky scroll, auto-reload, unsigned agents) are &lt;strong&gt;not on by default&lt;/strong&gt;. If you're waiting to see these features magically appear, they won't. Open your settings and enable them manually.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;❌ Assuming mixed model support works for all agents.&lt;/strong&gt; Right now, switching providers mid-session only works within Claude sessions. It doesn't extend to every agent or configuration. Read the docs before expecting it everywhere.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;❌ Skipping the agent host documentation.&lt;/strong&gt; The agent host is getting more powerful with every release. If you're not familiar with it yet, the &lt;a href="https://code.visualstudio.com/docs" rel="noopener noreferrer"&gt;VS Code Agent Host documentation&lt;/a&gt; is worth a read.&lt;/p&gt;




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

&lt;p&gt;VS Code 1.133 isn't a flashy, headline-grabbing release. But it's a polished one.&lt;/p&gt;

&lt;p&gt;The ability to &lt;strong&gt;mix Anthropic and Copilot models&lt;/strong&gt; in a single session gives you real flexibility when working with AI tools. &lt;strong&gt;Sticky scroll for chat prompts&lt;/strong&gt; solves a genuine usability problem that grows worse the longer your conversations get. &lt;strong&gt;Auto-reload HTML preview&lt;/strong&gt; removes a small friction that adds up to a lot of lost seconds over a long day. And the &lt;strong&gt;unsigned Agents window&lt;/strong&gt; quietly removes a blocker for a whole group of developers who didn't need GitHub standing between them and their tools.&lt;/p&gt;

&lt;p&gt;Good tools get better in small steps. This release is exactly that.&lt;/p&gt;

&lt;p&gt;Update your editor, enable the settings that fit your workflow, and keep building.&lt;/p&gt;




&lt;p&gt;💡 Enjoyed this breakdown? More posts like this live at &lt;strong&gt;&lt;a href="https://hamidrazadev.com" rel="noopener noreferrer"&gt;hamidrazadev.com&lt;/a&gt;&lt;/strong&gt; — practical dev content, tool breakdowns, and real-world tips.&lt;/p&gt;

&lt;p&gt;If this helped you, share it with a teammate who hasn't updated yet. Drop a comment if you've already tried any of these features — I'd love to hear what your experience has been like.&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
    <item>
      <title>CSS Container Queries: Write Truly Responsive Components (Finally!)</title>
      <dc:creator>Muhammad Hamid Raza</dc:creator>
      <pubDate>Tue, 11 Aug 2026 07:32:46 +0000</pubDate>
      <link>https://dev.to/hamidrazadev/css-container-queries-write-truly-responsive-components-finally-3bl4</link>
      <guid>https://dev.to/hamidrazadev/css-container-queries-write-truly-responsive-components-finally-3bl4</guid>
      <description>&lt;p&gt;Most of us have written media queries that felt... a little wrong. You're styling a card component, but you're checking the &lt;em&gt;viewport&lt;/em&gt; width to decide how it should look. The card lives inside a sidebar, though. So when the sidebar is narrow — even on a wide screen — your card still renders like it has all the space in the world. 🙃&lt;/p&gt;

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

&lt;p&gt;CSS Container Queries fix exactly this. And if you haven't used them yet, this post will change how you think about responsive design.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Are CSS Container Queries?
&lt;/h2&gt;

&lt;p&gt;Here's the simple version: &lt;strong&gt;a container query lets an element respond to the size of its &lt;em&gt;parent container&lt;/em&gt;, not the viewport.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Think of it like this. Imagine you're a chameleon. With media queries, you change color based on the weather outside — the whole environment. With container queries, you change color based on the &lt;em&gt;room you're standing in&lt;/em&gt;. Much more accurate. Much more useful.&lt;/p&gt;

&lt;p&gt;In code terms, you define a container, and then you write styles that activate based on how wide (or tall) that container is.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.card-wrapper&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;container-type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;inline-size&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;@container&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;400px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nc"&gt;.card&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;flex-direction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. The &lt;code&gt;.card&lt;/code&gt; now adapts based on &lt;code&gt;.card-wrapper&lt;/code&gt;'s width, not the browser window.&lt;/p&gt;




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

&lt;p&gt;Here's the problem with viewport-based media queries for components.&lt;/p&gt;

&lt;p&gt;You build a &lt;code&gt;ProductCard&lt;/code&gt; component. It looks great in the main content area. Then a designer drops it into a sidebar. Suddenly it breaks — because the sidebar is only 280px wide, but your media query triggers at 768px viewport width. The viewport is still wide. The component has no idea it's in a tight space.&lt;/p&gt;

&lt;p&gt;This is such a common frustration that developers have patched around it for years using JavaScript resize observers, custom hooks, or just making separate components. That's a lot of workarounds for something CSS should handle natively.&lt;/p&gt;

&lt;p&gt;Container queries &lt;em&gt;are&lt;/em&gt; the native solution. They've been in all major browsers since late 2023, and by 2025 browser support crossed 94%+. There is no good reason not to use them.&lt;/p&gt;




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

&lt;p&gt;Here's what container queries actually give you in day-to-day work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Truly reusable components.&lt;/strong&gt; A card component can live in a sidebar, a grid, a modal, or a full-width section — and style itself correctly in each case. You write it once. It works everywhere. ✅&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cleaner component code.&lt;/strong&gt; Instead of passing a &lt;code&gt;variant="compact"&lt;/code&gt; prop to a card just to handle narrow layouts, let CSS handle it. Your component logic stays focused on behavior, not presentation math.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Better design systems.&lt;/strong&gt; Design system teams love this. A &lt;code&gt;Button&lt;/code&gt;, &lt;code&gt;Card&lt;/code&gt;, or &lt;code&gt;ListItem&lt;/code&gt; component can now be truly layout-agnostic. It adapts to wherever the design places it without needing every consuming team to override styles.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Less JavaScript.&lt;/strong&gt; Before container queries, libraries like &lt;code&gt;react-use-measure&lt;/code&gt; or custom &lt;code&gt;ResizeObserver&lt;/code&gt; hooks were common. Container queries replace most of those use cases with two lines of CSS.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Easier maintenance.&lt;/strong&gt; When styles live with the container instead of scattered across breakpoints at the page level, debugging is much faster. You open the component's CSS, not 400 lines of &lt;code&gt;@media&lt;/code&gt; rules. 🔧&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Media Queries vs Container Queries
&lt;/h2&gt;

&lt;p&gt;This comparison &lt;em&gt;does&lt;/em&gt; make sense here, because knowing when to use each one is the whole point.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Situation&lt;/th&gt;
&lt;th&gt;Use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Layout changes at the page level (header collapses, sidebar hides)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Media Query&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A component adapts based on where it's placed&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Container Query&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Typography scaling for the whole page&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Media Query&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A card switches from column to row layout in different contexts&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Container Query&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dark mode, print styles&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Media Query&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A widget component used across multiple layout zones&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Container Query&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Short version: &lt;strong&gt;page-level layout → media queries. Component-level layout → container queries.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You will still use both. They solve different problems. Container queries don't replace media queries — they complete them.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to Use Container Queries (Step by Step)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Define the container
&lt;/h3&gt;

&lt;p&gt;Add &lt;code&gt;container-type&lt;/code&gt; to the parent element you want to query against.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.sidebar&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;container-type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;inline-size&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;inline-size&lt;/code&gt; means you're querying the &lt;em&gt;width&lt;/em&gt; of the container (which is the horizontal size in most writing modes). There's also &lt;code&gt;size&lt;/code&gt; if you want to query both width and height.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Optionally name the container
&lt;/h3&gt;

&lt;p&gt;Naming is useful when you have nested containers and need to query a specific ancestor.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.sidebar&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;container-type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;inline-size&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;container-name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;sidebar&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;Or shorthand:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.sidebar&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;container&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;sidebar&lt;/span&gt; &lt;span class="p"&gt;/&lt;/span&gt; &lt;span class="n"&gt;inline-size&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;h3&gt;
  
  
  Step 3: Write your container query
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="k"&gt;@container&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;500px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nc"&gt;.card&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="py"&gt;gap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1rem&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="c"&gt;/* Using a named container */&lt;/span&gt;
&lt;span class="k"&gt;@container&lt;/span&gt; &lt;span class="n"&gt;sidebar&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;300px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nc"&gt;.card-title&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.25rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the full API for the most common use cases. There's also &lt;code&gt;max-width&lt;/code&gt;, &lt;code&gt;aspect-ratio&lt;/code&gt;, and &lt;code&gt;orientation&lt;/code&gt; queries available.&lt;/p&gt;




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

&lt;p&gt;&lt;strong&gt;✅ Do: Apply &lt;code&gt;container-type&lt;/code&gt; to the wrapper, not the component itself.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The container and the element being queried should be different elements. Querying your own size creates a circular reference. Wrap the component in a &lt;code&gt;div&lt;/code&gt; and apply &lt;code&gt;container-type&lt;/code&gt; there.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* Correct */&lt;/span&gt;
&lt;span class="nc"&gt;.card-wrapper&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;container-type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;inline-size&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Avoid: the card querying itself */&lt;/span&gt;
&lt;span class="nc"&gt;.card&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;container-type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;inline-size&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c"&gt;/* then @container styles for .card itself won't work as expected */&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;✅ Do: Use container queries for layout decisions, not content decisions.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Swapping from a stacked layout to a side-by-side layout based on container width — great use case. Changing &lt;em&gt;text content&lt;/em&gt; based on container size — that's better handled in JavaScript or with conditional rendering in your framework.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Do: Combine with CSS custom properties for cleaner scaling.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.card-wrapper&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;container-type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;inline-size&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--card-padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.75rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;@container&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;400px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nc"&gt;.card-wrapper&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="py"&gt;--card-padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.5rem&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="nc"&gt;.card&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--card-padding&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;✅ Do: Name your containers when nesting.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Unnamed queries match the nearest ancestor container. When you have nested containers, name them to be explicit and avoid surprising style inheritance.&lt;/p&gt;




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

&lt;p&gt;&lt;strong&gt;1. Forgetting to set &lt;code&gt;container-type&lt;/code&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Writing a &lt;code&gt;@container&lt;/code&gt; query without first declaring &lt;code&gt;container-type&lt;/code&gt; on the parent does nothing. No error, no warning — just silence. This trips up almost everyone the first time. Always double-check the parent has the declaration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Querying the element that is also the container.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If &lt;code&gt;.card&lt;/code&gt; has both &lt;code&gt;container-type: inline-size&lt;/code&gt; and &lt;code&gt;@container&lt;/code&gt; rules targeting &lt;code&gt;.card&lt;/code&gt;, you'll get unexpected behavior. The element cannot query its own size cleanly. Use a wrapper.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Replacing media queries entirely.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Some developers get excited and try to remove all media queries. Don't. Page-level layout (navigation collapsing, footer restructuring, font scaling for the whole page) still belongs to media queries. Container queries handle &lt;em&gt;component&lt;/em&gt; layout. Know the difference.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Not testing in all the layout positions the component lives in.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The whole point of container queries is that your component adapts. But you need to actually test it in every context it'll be used — sidebar, main column, modal, full-width section. A component that works in isolation might still break somewhere in the app if you haven't checked.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Worrying about browser support when you don't need to.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Container queries have strong support across Chrome, Edge, Firefox, and Safari. If you're not supporting very old browsers, you can use them today without polyfills. Check caniuse.com if you need to verify for your specific audience, but for most modern projects the answer is: go ahead. ⚡&lt;/p&gt;




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

&lt;p&gt;CSS Container Queries solve one of the longest-standing frustrations in responsive web development. The idea is simple: components should respond to &lt;em&gt;where they live&lt;/em&gt;, not just how big the screen is.&lt;/p&gt;

&lt;p&gt;If you've been shipping &lt;code&gt;variant&lt;/code&gt; props, &lt;code&gt;ResizeObserver&lt;/code&gt; hooks, or duplicated CSS just to handle components in different layout contexts — container queries are the cleaner answer you've been waiting for.&lt;/p&gt;

&lt;p&gt;The API is small. The browser support is solid. And once you start using it, you'll wonder how you built component libraries without it.&lt;/p&gt;

&lt;p&gt;Start with one component. Pick a card, a widget, or a sidebar item that behaves differently in different layouts. Replace that logic with a container query. See how it feels.&lt;/p&gt;

&lt;p&gt;Once you do, you probably won't go back. 🚀&lt;/p&gt;




&lt;p&gt;If this helped you, I'd love for you to share it with a dev friend who's still wrestling with layout props and media queries. More practical guides like this are on &lt;a href="https://hamidrazadev.com" rel="noopener noreferrer"&gt;hamidrazadev.com&lt;/a&gt; — drop by anytime.&lt;/p&gt;

&lt;p&gt;Got questions or a use case you want to talk through? Leave a comment below. Happy to help.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>css</category>
      <category>frontend</category>
      <category>beginners</category>
    </item>
    <item>
      <title>VS Code 1.132 Is Here — And It's Packed with Features You'll Actually Use 🚀</title>
      <dc:creator>Muhammad Hamid Raza</dc:creator>
      <pubDate>Thu, 06 Aug 2026 09:26:56 +0000</pubDate>
      <link>https://dev.to/hamidrazadev/vs-code-1132-is-here-and-its-packed-with-features-youll-actually-use-2687</link>
      <guid>https://dev.to/hamidrazadev/vs-code-1132-is-here-and-its-packed-with-features-youll-actually-use-2687</guid>
      <description>&lt;p&gt;Have you ever wished you could ask a quick question without breaking your AI agent's flow? Or leave feedback on a web page element the same way you'd leave a comment in a PR? VS Code 1.132, released on &lt;strong&gt;August 5, 2026&lt;/strong&gt;, brings exactly those moments — and a handful more that quietly make your daily coding life smoother.&lt;/p&gt;

&lt;p&gt;Let's walk through everything new, and why it matters.&lt;/p&gt;




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

&lt;p&gt;Visual Studio Code 1.132 is the latest monthly release from the VS Code team. Every release ships with new features, fixes, and quality improvements — but this one leans heavily into the &lt;strong&gt;AI and agent experience&lt;/strong&gt;, making it one of the more exciting drops of the year.&lt;/p&gt;

&lt;p&gt;From smarter chat interactions to a revamped dictation engine and a browser you can annotate like a document, 1.132 is pushing VS Code closer to a full AI-native development environment.&lt;/p&gt;




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

&lt;p&gt;AI-assisted coding is no longer a novelty — it's a workflow. Millions of developers now rely on agents to write code, run tasks, and navigate projects. VS Code 1.132 doubles down on making that workflow feel &lt;strong&gt;less like fighting tools and more like working with a teammate&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;At the same time, it improves things that matter beyond AI — like terminal output readability, dictation accuracy, and Markdown editing.&lt;/p&gt;

&lt;p&gt;Whether you're a solo dev, a student, or working in a large team, something in this release will likely improve how your day feels at the keyboard.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Big New Features — With Real-Life Context
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🤖 Agent Host: One Agent Session, Multiple Windows
&lt;/h3&gt;

&lt;p&gt;Previously, each VS Code window had its own isolated agent session. If you were working across windows, you had to juggle multiple contexts — annoying when you're deep in a large project.&lt;/p&gt;

&lt;p&gt;The new &lt;strong&gt;Agent Host&lt;/strong&gt; lets you connect to the &lt;strong&gt;same agent session from multiple VS Code windows&lt;/strong&gt;. It runs AI harnesses like Copilot, Claude, and Codex in a dedicated process, using the new Agent Host Protocol (AHP).&lt;/p&gt;

&lt;p&gt;Think of it like having one shared whiteboard that every window can see and write on.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The Copilot agent on the agent host is powered by the Copilot SDK, so its behavior stays consistent with the Copilot CLI and standalone Copilot app.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  🪟 Agents Window: Your Mission Control for Agent Sessions
&lt;/h3&gt;

&lt;p&gt;The new &lt;strong&gt;Agents Window&lt;/strong&gt; gives you a dedicated space to start and monitor multiple agent sessions at once.&lt;/p&gt;

&lt;p&gt;Above the chat input, you'll see &lt;strong&gt;live status pills&lt;/strong&gt; that update in real time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Changes&lt;/strong&gt; — shows how many file changes the agent has made; click to view a live multi-file diff&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Previews&lt;/strong&gt; — quick access to Markdown previews for files the agent creates or edits&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Subagents&lt;/strong&gt; — follow what's happening inside a subagent in a separate chat&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Browsers&lt;/strong&gt; — watch the agent interact with an integrated browser&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the kind of visibility you need when an agent is touching ten files across three folders. Instead of wondering what just changed, you can see it live.&lt;/p&gt;




&lt;h3&gt;
  
  
  💬 Side Chats with &lt;code&gt;/btw&lt;/code&gt; — Ask Without Interrupting
&lt;/h3&gt;

&lt;p&gt;This one is genuinely clever. You're running an agent turn — maybe it's refactoring a module or generating a test suite — and you have a quick question. Do you stop the agent? Do you wait?&lt;/p&gt;

&lt;p&gt;Now you can just type &lt;code&gt;/btw&lt;/code&gt; in the chat input to open a &lt;strong&gt;side chat&lt;/strong&gt;. It shares the context and prompt cache of your primary chat, so your question is informed by what's already happening. The agent keeps going; you get your answer.&lt;/p&gt;

&lt;p&gt;You can also &lt;strong&gt;select text in a chat response&lt;/strong&gt; to ask a follow-up question about that specific part. Very useful when a response is long and one paragraph needs clarification.&lt;/p&gt;

&lt;p&gt;Want to share context across chats? Drag chat tabs into the input box, or type &lt;code&gt;#chat:&lt;/code&gt; and pick a chat by name.&lt;/p&gt;




&lt;h3&gt;
  
  
  🌐 Commenting in the Integrated Browser
&lt;/h3&gt;

&lt;p&gt;Imagine you're reviewing a generated web page in VS Code's built-in browser and the layout is slightly off in one section. Instead of describing it in words ("the button near the top, I think?"), you can now &lt;strong&gt;click directly on the element&lt;/strong&gt; and attach a comment.&lt;/p&gt;

&lt;p&gt;Use the &lt;code&gt;workbench.action.browser.addElementCommentToChat&lt;/code&gt; keyboard shortcut to enter comment mode. Select multiple elements, add a note to each, then send the whole set of annotated feedback straight to the chat. Precise, fast, and way clearer than text descriptions.&lt;/p&gt;




&lt;h3&gt;
  
  
  🎙️ Multilingual Dictation — Now Actually Smart
&lt;/h3&gt;

&lt;p&gt;VS Code's built-in dictation received a major upgrade. The new default model is &lt;strong&gt;multilingual Nemotron 3.5&lt;/strong&gt;, which runs entirely on-device (your audio never leaves your machine).&lt;/p&gt;

&lt;p&gt;What's new:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Language auto-detection&lt;/strong&gt;: dictation can follow your &lt;code&gt;agents.voice.language&lt;/code&gt; setting or automatically detect the language from your system locale&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shell-aware cleanup in the terminal&lt;/strong&gt;: say "git commit dash m hello world" and it produces &lt;code&gt;git commit -m "Hello World"&lt;/code&gt; — not the literal words&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom instructions&lt;/strong&gt;: run &lt;em&gt;Voice: Configure Dictation Instructions&lt;/em&gt; and add a &lt;code&gt;dictation.md&lt;/code&gt; file to your project or home directory to teach it your terminology and formatting preferences&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Onboarding experience&lt;/strong&gt;: first-time users see a microphone waveform, a device picker, and links to settings before they start&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your network restrictions block the model download, an action lets you import an official Foundry Local model package from disk — no internet required.&lt;/p&gt;




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

&lt;p&gt;VS Code 1.131 introduced the &lt;strong&gt;hybrid Markdown editor&lt;/strong&gt; — a view that combines rendered Markdown with in-place editing and agent-actionable comments.&lt;/p&gt;

&lt;p&gt;In 1.132, Markdown diffs now open &lt;strong&gt;inside&lt;/strong&gt; that hybrid editor. The modified document stays editable while gutter indicators highlight what's been added, changed, or deleted — just like code diffs, but for rendered Markdown.&lt;/p&gt;

&lt;p&gt;You can switch between the text diff view and the Markdown editor with diff annotations using the editor type dropdown. This is marked experimental, but it already works well enough for daily use.&lt;/p&gt;




&lt;h3&gt;
  
  
  🖥️ Terminal Output Reflow
&lt;/h3&gt;

&lt;p&gt;This is a small fix with a surprisingly large quality-of-life impact.&lt;/p&gt;

&lt;p&gt;Previously, expanded terminal output in Chat used a fixed width. If you resized your panel, lines would wrap too early on narrow views or leave dead space on wide ones.&lt;/p&gt;

&lt;p&gt;Now, &lt;strong&gt;terminal output reflows&lt;/strong&gt; to match the available width as you resize. It works for both the Local agent harness and the Copilot harness on the agent host. Clean, readable, and no more awkward wrapping mid-command.&lt;/p&gt;




&lt;h2&gt;
  
  
  Comparison: Before vs. After 1.132 for Agent Workflows
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Situation&lt;/th&gt;
&lt;th&gt;Before 1.132&lt;/th&gt;
&lt;th&gt;After 1.132&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Working across two windows&lt;/td&gt;
&lt;td&gt;Two isolated agent sessions&lt;/td&gt;
&lt;td&gt;One shared agent session&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quick question during agent turn&lt;/td&gt;
&lt;td&gt;Stop the agent or wait&lt;/td&gt;
&lt;td&gt;Open a side chat with &lt;code&gt;/btw&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Browser feedback&lt;/td&gt;
&lt;td&gt;Describe elements in words&lt;/td&gt;
&lt;td&gt;Comment directly on page elements&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dictating terminal commands&lt;/td&gt;
&lt;td&gt;Literal transcription&lt;/td&gt;
&lt;td&gt;Shell-aware cleanup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Watching agent file changes&lt;/td&gt;
&lt;td&gt;Unclear unless you check manually&lt;/td&gt;
&lt;td&gt;Live status pills above chat input&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Best Tips for Getting the Most from 1.132 ✅
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Use &lt;code&gt;/btw&lt;/code&gt; for quick questions&lt;/strong&gt; — don't interrupt agent turns for things that can wait in a side chat&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set up &lt;code&gt;dictation.md&lt;/code&gt;&lt;/strong&gt; with your project's terminology before using voice heavily — it'll save you a lot of corrections&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enable &lt;code&gt;breadcrumbs.showEditorType&lt;/code&gt;&lt;/strong&gt; if you switch between diff and regular editors often — the dropdown saves time&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Try the Markdown diff view&lt;/strong&gt; on files where your agent is making large edits — seeing the rendered diff is much clearer than a raw text diff&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Drag chat tabs into the input&lt;/strong&gt; when you want to share context across multiple chat sessions&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;&lt;strong&gt;Ignoring the status pills.&lt;/strong&gt; A lot of developers dismiss the live status pills above the chat input as visual noise. They're not — they're your only real-time window into what an agent is doing across your project. Get in the habit of checking them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Not configuring dictation instructions.&lt;/strong&gt; Out of the box, Nemotron 3.5 is solid but generic. Adding a &lt;code&gt;dictation.md&lt;/code&gt; file with your preferred terms, abbreviations, and formatting rules makes a real difference, especially on long coding sessions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Assuming the agent host is always on.&lt;/strong&gt; The &lt;code&gt;ChatAgentHostEnabled&lt;/code&gt; policy has been removed, so administrators can no longer centrally disable it — but individual developers can still toggle it via &lt;code&gt;chat.agentHost.enabled&lt;/code&gt;. If agent behavior feels inconsistent, check this setting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Skipping the dictation onboarding.&lt;/strong&gt; The new onboarding shows you a live waveform and lets you pick your microphone before you start. Skipping it and diving straight in often leads to picking the wrong mic or missing a setting that affects quality.&lt;/p&gt;




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

&lt;p&gt;VS Code 1.132 is a thoughtful release. It doesn't reinvent the editor — it tightens up the agent experience, adds the kind of small contextual touches that make a workflow feel polished, and quietly fixes the rough edges that accumulated over the last few releases.&lt;/p&gt;

&lt;p&gt;Side chats with &lt;code&gt;/btw&lt;/code&gt;, element-level browser commenting, shell-aware dictation, live agent status pills — these are the kinds of features that sound small in a changelog but genuinely change how a day at the keyboard feels.&lt;/p&gt;

&lt;p&gt;If you haven't updated yet, do it now. Use &lt;strong&gt;Check for Updates&lt;/strong&gt; in VS Code, or download the latest nightly Insiders build to get features even earlier.&lt;/p&gt;

&lt;p&gt;For more posts like this, check out &lt;a href="https://hamidrazadev.com" rel="noopener noreferrer"&gt;hamidrazadev.com&lt;/a&gt; — practical dev content without the fluff. If this helped you, share it with a teammate who's living in VS Code all day. They'll thank you. 😊&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>productivity</category>
      <category>webdev</category>
      <category>ai</category>
    </item>
    <item>
      <title>Next.js 16.3 Is Here — And It's the Biggest Update Since 16.0</title>
      <dc:creator>Muhammad Hamid Raza</dc:creator>
      <pubDate>Tue, 04 Aug 2026 08:57:42 +0000</pubDate>
      <link>https://dev.to/hamidrazadev/nextjs-163-is-here-and-its-the-biggest-update-since-160-3hgb</link>
      <guid>https://dev.to/hamidrazadev/nextjs-163-is-here-and-its-the-biggest-update-since-160-3hgb</guid>
      <description>&lt;p&gt;If you've ever opened a Next.js project, run &lt;code&gt;next dev&lt;/code&gt;, and watched your laptop fans spin up like a jet engine — this update is for you. 🚀&lt;/p&gt;

&lt;p&gt;Next.js 16.3 dropped on August 3rd, 2026, and honestly, the changelog reads like a wish list that someone actually delivered on. Less memory. Faster builds. Faster rendering. Smarter prefetching. New devtools. Oh, and an entire suite of opt-in features that bring SPA-style snappiness to your server-rendered apps.&lt;/p&gt;

&lt;p&gt;Sound too good to be true? Let's walk through everything together — clearly, practically, and without the jargon overload.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is Next.js 16.3?
&lt;/h2&gt;

&lt;p&gt;Next.js is the popular React framework built by Vercel. It helps developers build fast, production-ready web apps with features like server-side rendering, static generation, file-based routing, and more.&lt;/p&gt;

&lt;p&gt;Version 16.3 is not a complete rewrite. Think of it like a major tune-up on a car you already love. The engine is the same, but they've cleaned out the oil, replaced the air filter, upgraded the exhaust, and added a GPS that actually works.&lt;/p&gt;

&lt;p&gt;Every improvement in 16.3 either makes your &lt;strong&gt;development experience faster&lt;/strong&gt;, your &lt;strong&gt;app's runtime faster&lt;/strong&gt;, or both — with zero changes to your existing app code.&lt;/p&gt;




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

&lt;p&gt;Here's the honest truth about working with Next.js before this update.&lt;/p&gt;

&lt;p&gt;Dev sessions on large projects could chew through gigabytes of RAM. If you had 50+ routes, your machine would slow down over time. Builds felt slow on CI. Navigations sometimes felt sluggish compared to SPAs. And error boundaries were a bit of a minefield.&lt;/p&gt;

&lt;p&gt;These aren't small complaints. They're the kinds of daily friction that add up over a long project. And 16.3 takes a serious swing at fixing most of them.&lt;/p&gt;

&lt;p&gt;Whether you're a student building your first portfolio or an engineer shipping production apps, these improvements will be noticeable from day one.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's New — Feature by Feature
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🧠 Up to 90% Less Memory in Dev
&lt;/h3&gt;

&lt;p&gt;This is probably the headline feature. Turbopack (Next.js's Rust-based bundler) now uses &lt;strong&gt;disk caching&lt;/strong&gt; and &lt;strong&gt;memory eviction&lt;/strong&gt; by default during development.&lt;/p&gt;

&lt;p&gt;In real-world tests on &lt;code&gt;vercel.com&lt;/code&gt;'s dashboard, memory dropped from &lt;strong&gt;21.5 GB to 2 GB&lt;/strong&gt; after compiling 50 routes. On &lt;code&gt;nextjs.org&lt;/code&gt;, it went from 4,600 MB down to 840 MB.&lt;/p&gt;

&lt;p&gt;To put that in human terms: if your dev server used to feel like a memory black hole after a few hours of work, it now behaves more like a well-organized tool that actually gives memory back when it's done with it.&lt;/p&gt;

&lt;p&gt;No config change needed. It just works after upgrading.&lt;/p&gt;




&lt;h3&gt;
  
  
  ⚡ Faster Builds — Up to 5.5×
&lt;/h3&gt;

&lt;p&gt;The same disk caching that improved dev is now enabled by default for &lt;code&gt;next build&lt;/code&gt; too. Turbopack can read unchanged artifacts from cache instead of recompiling everything from scratch.&lt;/p&gt;

&lt;p&gt;In tests, the &lt;code&gt;vercel.com/geist&lt;/code&gt; project went from a &lt;strong&gt;30-second cold build to a 5.5-second cached build&lt;/strong&gt;. That's not a typo.&lt;/p&gt;

&lt;p&gt;For CI pipelines that run dozens of builds a day, this is a significant time (and cost) saving.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔷 TypeScript 7 Support for Faster Type Checking
&lt;/h3&gt;

&lt;p&gt;TypeScript 7 is a native Rust port of the TypeScript compiler, and it's roughly &lt;strong&gt;10× faster&lt;/strong&gt; at type checking than the previous Node.js-based version.&lt;/p&gt;

&lt;p&gt;To use it during &lt;code&gt;next build&lt;/code&gt;, you just bump your local TypeScript version:&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@^7
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. No special flags. No extra configuration.&lt;/p&gt;




&lt;h3&gt;
  
  
  🖥️ 22% More Requests Handled Under Load
&lt;/h3&gt;

&lt;p&gt;The App Router rendering layer now uses &lt;strong&gt;native Node.js streams&lt;/strong&gt; instead of web streams. Previously, there was overhead from converting between the two during server-side rendering. Removing that conversion layer lets your server handle up to &lt;strong&gt;22% more requests under the same load&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;No changes to your code. Just upgrade and your server gets faster automatically.&lt;/p&gt;




&lt;h3&gt;
  
  
  🤖 Versioned Docs for AI Coding Agents
&lt;/h3&gt;

&lt;p&gt;Here's a thoughtful addition. When you run &lt;code&gt;next dev&lt;/code&gt;, Next.js now writes an &lt;code&gt;AGENTS.md&lt;/code&gt; file that points AI coding agents (like Cursor, GitHub Copilot, etc.) to the documentation that matches &lt;strong&gt;your specific version of Next.js&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;No more agents giving you advice based on the wrong version of the docs. They now read the docs bundled right inside your &lt;code&gt;node_modules&lt;/code&gt;. It's a small detail that makes AI-assisted development noticeably more reliable.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔗 Fewer Prefetch Requests
&lt;/h3&gt;

&lt;p&gt;Previously, every visible link could trigger its own prefetch request. In large apps, this led to dozens of network requests firing at once.&lt;/p&gt;

&lt;p&gt;In 16.3, small prefetches are &lt;strong&gt;automatically bundled together&lt;/strong&gt;, reducing the total number of requests. Larger shared segments still stay separate so they can be reused across routes.&lt;/p&gt;

&lt;p&gt;Less network chatter. Faster perceived load times.&lt;/p&gt;




&lt;h3&gt;
  
  
  📦 Better Caching for Static Assets
&lt;/h3&gt;

&lt;p&gt;Immutable static assets (files that never change after they're built) can now be &lt;strong&gt;reused across deployments&lt;/strong&gt;. Since they're immutable, there's no risk of serving stale files from the previous version. It's safe, and it means repeat visitors load your site faster after a new deploy.&lt;/p&gt;




&lt;h3&gt;
  
  
  🛡️ Custom Error Boundaries with &lt;code&gt;catchError&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Before 16.3, React error boundaries in Next.js had real limitations. They interfered with &lt;code&gt;notFound()&lt;/code&gt; and &lt;code&gt;redirect()&lt;/code&gt;. They couldn't retry server components that failed. And they had no clean way to re-fetch failed data.&lt;/p&gt;

&lt;p&gt;16.3 introduces a &lt;code&gt;catchError&lt;/code&gt; API that fixes all of this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;use client&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;catchError&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;ErrorInfo&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;next/error&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;ErrorFallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;retry&lt;/span&gt; &lt;span class="p"&gt;}:&lt;/span&gt; &lt;span class="nx"&gt;ErrorInfo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;retry&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Try again&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;catchError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ErrorFallback&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;retry()&lt;/code&gt; function re-fetches the boundary's children — including any Server Components that failed — without a full page reload. This is a genuinely useful addition for handling real-world errors gracefully.&lt;/p&gt;




&lt;h3&gt;
  
  
  🗂️ Built-In Glob Imports
&lt;/h3&gt;

&lt;p&gt;Turbopack now supports &lt;code&gt;import.meta.glob&lt;/code&gt;, the same API Vite users have been enjoying for a while. It lets you import multiple files from the file system in one line, with hot-module reloading support:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;posts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;glob&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./posts/*.md&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;eager&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is especially handy for blog pages, documentation sites, or any pattern where you're loading content from local files dynamically.&lt;/p&gt;




&lt;h2&gt;
  
  
  Instant Navigations — The Big Opt-In Suite
&lt;/h2&gt;

&lt;p&gt;This deserves its own section because it's not just one feature. It's a whole approach to making Next.js apps feel as fast as SPAs without giving up the benefits of server rendering.&lt;/p&gt;

&lt;p&gt;You enable it by adding two flags to your &lt;code&gt;next.config.ts&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nextConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;NextConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;cacheComponents&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="na"&gt;partialPrefetching&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here's what that unlocks:&lt;/p&gt;

&lt;h3&gt;
  
  
  Instant Insights (New DevTool)
&lt;/h3&gt;

&lt;p&gt;A new panel in the Next.js DevTools that &lt;strong&gt;automatically surfaces slow navigations&lt;/strong&gt; while you work. Each insight also gives you a prompt you can pass to your AI agent to fix the issue. No more guessing which routes feel sluggish.&lt;/p&gt;

&lt;h3&gt;
  
  
  Partial Prefetching
&lt;/h3&gt;

&lt;p&gt;Before 16.3, you had two options: a shared loading shell via &lt;code&gt;loading.tsx&lt;/code&gt;, or aggressive full-page prefetching with &lt;code&gt;&amp;lt;Link prefetch={true}&amp;gt;&lt;/code&gt;. Both were limiting.&lt;/p&gt;

&lt;p&gt;Partial Prefetching lets Next.js extract &lt;strong&gt;per-route loading shells&lt;/strong&gt; and gives you fine-grained control over how much content to prefetch per link. It's more flexible and less wasteful.&lt;/p&gt;

&lt;h3&gt;
  
  
  Better Incremental Static Regeneration (ISR)
&lt;/h3&gt;

&lt;p&gt;Previously, if you didn't prerender a page at build time, the first visitor had to wait for it to generate — no loading shell, just a wait.&lt;/p&gt;

&lt;p&gt;Now, even pages you didn't prerender can &lt;strong&gt;serve an instant loading shell to the first visitor&lt;/strong&gt;, then upgrade to the fully rendered version in the background. Every later visitor gets the final cached content.&lt;/p&gt;

&lt;h3&gt;
  
  
  Navigation Inspector (New DevTool)
&lt;/h3&gt;

&lt;p&gt;Because Next.js disables prefetching in dev, it was hard to know exactly what a user would see during a navigation. The Navigation Inspector lets you &lt;strong&gt;pause navigations at the shell&lt;/strong&gt; so you can visually inspect the loading state before the full page loads. Incredibly useful for QA and polish.&lt;/p&gt;

&lt;h3&gt;
  
  
  Playwright Test Helper
&lt;/h3&gt;

&lt;p&gt;This one's for teams who care about preventing regressions. The new &lt;code&gt;instant()&lt;/code&gt; helper for Playwright lets you write tests that assert what content should be &lt;strong&gt;immediately visible&lt;/strong&gt; during a navigation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;instant&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@next/playwright&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;product title is available immediately&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;goto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/products/shoes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;instant&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;click&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;a[href="/products/hats"]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;locator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;h1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nf"&gt;toContainText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Baseball Cap&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If a refactor accidentally makes that content slow to appear, the test fails. No surprises in production.&lt;/p&gt;




&lt;h2&gt;
  
  
  Experimental Features Worth Knowing About
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Rust-Based React Compiler
&lt;/h3&gt;

&lt;p&gt;The React Compiler already optimizes your components at build time, so you don't have to manually add &lt;code&gt;useMemo&lt;/code&gt; and &lt;code&gt;useCallback&lt;/code&gt; everywhere. Until now, it ran through Babel in Node.js.&lt;/p&gt;

&lt;p&gt;16.3 ships an experimental Rust port that runs &lt;strong&gt;directly inside Turbopack&lt;/strong&gt;, skipping the Babel step entirely. In tests on large apps like &lt;code&gt;v0&lt;/code&gt;, this cut the time from &lt;code&gt;next dev&lt;/code&gt; to a ready page by &lt;strong&gt;34% on a cold build and 46% on a warm one&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You can try it today:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nextConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;NextConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;reactCompiler&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="na"&gt;experimental&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;turbopackRustReactCompiler&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's experimental, but the numbers are impressive.&lt;/p&gt;

&lt;h3&gt;
  
  
  Network Resilience (&lt;code&gt;useOffline&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;With &lt;code&gt;experimental.useOffline&lt;/code&gt; enabled, when the network drops, instead of throwing an error, Next.js keeps the request &lt;strong&gt;pending and retries automatically&lt;/strong&gt; when the connection returns.&lt;/p&gt;

&lt;p&gt;A new &lt;code&gt;useOffline&lt;/code&gt; hook also lets you show the user a banner so they know what's happening:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useOffline&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;next/offline&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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;OfflineBanner&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;isOffline&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useOffline&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;isOffline&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;You're offline. Retrying when you reconnect.&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Combined with Partial Prefetching, prefetched routes can still render their shell while offline. It's a small feature that makes apps feel much more resilient on spotty connections.&lt;/p&gt;




&lt;h2&gt;
  
  
  Before vs. After — At a Glance
&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 16.3&lt;/th&gt;
&lt;th&gt;After 16.3&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Dev server memory (50 routes)&lt;/td&gt;
&lt;td&gt;~21.5 GB&lt;/td&gt;
&lt;td&gt;~2 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Build time (cached)&lt;/td&gt;
&lt;td&gt;Baseline&lt;/td&gt;
&lt;td&gt;Up to 5.5× faster&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SSR request throughput&lt;/td&gt;
&lt;td&gt;Baseline&lt;/td&gt;
&lt;td&gt;Up to 22% more&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Error boundaries&lt;/td&gt;
&lt;td&gt;Limited, interfered with &lt;code&gt;redirect&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Full control with &lt;code&gt;catchError&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Prefetching&lt;/td&gt;
&lt;td&gt;All-or-nothing&lt;/td&gt;
&lt;td&gt;Fine-grained per link&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Glob imports&lt;/td&gt;
&lt;td&gt;Not built-in&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;import.meta.glob&lt;/code&gt; supported&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI agent docs&lt;/td&gt;
&lt;td&gt;Generic&lt;/td&gt;
&lt;td&gt;Version-matched automatically&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 16.3
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;✅ Upgrade immediately for the free wins.&lt;/strong&gt;&lt;br&gt;
Memory savings, faster builds, and faster SSR require zero code changes. Run &lt;code&gt;npm install next@latest&lt;/code&gt; and you're done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Try TypeScript 7 if type checking feels slow.&lt;/strong&gt;&lt;br&gt;
If &lt;code&gt;next build&lt;/code&gt; type checking is a bottleneck on your team's CI, bumping to &lt;code&gt;typescript@^7&lt;/code&gt; is low-risk and potentially high-reward.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Enable Instant Navigations on a branch first.&lt;/strong&gt;&lt;br&gt;
The &lt;code&gt;cacheComponents&lt;/code&gt; and &lt;code&gt;partialPrefetching&lt;/code&gt; flags change navigation behavior. Test on a feature branch before rolling them out to production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Use the Navigation Inspector before shipping.&lt;/strong&gt;&lt;br&gt;
If you care about perceived performance, use the new DevTools panel to check what loading states users actually see during navigations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Write an &lt;code&gt;instant()&lt;/code&gt; Playwright test for your most important routes.&lt;/strong&gt;&lt;br&gt;
If you have a product page or checkout flow, protect its navigation speed with a regression test. Future you will thank present you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;❌ Don't skip the error boundary migration if you're using custom boundaries.&lt;/strong&gt;&lt;br&gt;
The old approach is still supported, but &lt;code&gt;catchError&lt;/code&gt; is cleaner and more capable. It's worth migrating.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;❌ Don't enable the experimental Rust React Compiler in production yet.&lt;/strong&gt;&lt;br&gt;
It's promising, but it's still experimental. Use it locally to measure the gains, then wait for a stable release before shipping it.&lt;/p&gt;


&lt;h2&gt;
  
  
  Common Mistakes to Watch Out For
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Upgrading without testing &lt;code&gt;cacheComponents&lt;/code&gt; behavior.&lt;/strong&gt;&lt;br&gt;
Cache Components changes how data is cached and served. If you turn it on in an existing app without reading the migration guide, you might see unexpected behavior with dynamic data. Always test on a staging environment first.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Assuming TypeScript 7 is a drop-in replacement for all projects.&lt;/strong&gt;&lt;br&gt;
For most projects it is, but if you rely heavily on Babel-based transforms, the interplay with the Rust React Compiler may need a bit of extra configuration. Check the docs before flipping both on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ignoring the Instant Insights panel.&lt;/strong&gt;&lt;br&gt;
It's easy to dismiss DevTools notifications during development, but the Instant Insights panel actually tells you something actionable. If a route shows up as slow, it's worth spending five minutes on the fix while you're in that area of the codebase.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Forgetting that experimental features can change.&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;useOffline&lt;/code&gt; and &lt;code&gt;turbopackRustReactCompiler&lt;/code&gt; are experimental. Their APIs could change in a future release. Build on them for learning and prototyping, but don't build critical production paths around them just yet.&lt;/p&gt;


&lt;h2&gt;
  
  
  How to Upgrade Right Now
&lt;/h2&gt;

&lt;p&gt;Just run this in your project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;next@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or with pnpm:&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 next@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it for the stable improvements. For Instant Navigations, add the two flags to your config. For experimental features, follow the individual guides in the docs.&lt;/p&gt;




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

&lt;p&gt;Next.js 16.3 is one of those releases where the team clearly listened. The 90% memory reduction in dev is huge. The build speed improvements are real and measurable. The SSR throughput gains cost you nothing. And Instant Navigations gives you a proper upgrade path toward SPA-style responsiveness without abandoning the server-rendering model that makes Next.js worth using in the first place.&lt;/p&gt;

&lt;p&gt;It's not a revolutionary release that breaks everything. It's a thoughtful, well-executed one that makes the framework noticeably better for everyone who uses it daily.&lt;/p&gt;

&lt;p&gt;If you've been on the fence about upgrading your Next.js projects, 16.3 is the push you needed. The gains are real, and the migration path is gentle.&lt;/p&gt;

&lt;p&gt;Give it a try, and if you found this walkthrough useful, share it with a teammate or fellow developer who's still running a memory-hungry dev server. 😊&lt;/p&gt;

&lt;p&gt;For more practical dev guides, deep dives, and developer content, head over to &lt;strong&gt;&lt;a href="https://hamidrazadev.com" rel="noopener noreferrer"&gt;hamidrazadev.com&lt;/a&gt;&lt;/strong&gt; — there's always something worth reading there.&lt;/p&gt;

&lt;p&gt;Happy building! 🔧&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>webdev</category>
      <category>typescript</category>
      <category>performance</category>
    </item>
    <item>
      <title>Claude Opus 5 Is Here — And It's the Most Capable Everyday AI Model Yet 🚀</title>
      <dc:creator>Muhammad Hamid Raza</dc:creator>
      <pubDate>Tue, 04 Aug 2026 06:18:53 +0000</pubDate>
      <link>https://dev.to/hamidrazadev/claude-opus-5-is-here-and-its-the-most-capable-everyday-ai-model-yet-4fdd</link>
      <guid>https://dev.to/hamidrazadev/claude-opus-5-is-here-and-its-the-most-capable-everyday-ai-model-yet-4fdd</guid>
      <description>&lt;p&gt;You know that feeling when a tool you already rely on suddenly gets &lt;em&gt;dramatically&lt;/em&gt; better, for the exact same price? That's what Anthropic just delivered with Claude Opus 5.&lt;/p&gt;

&lt;p&gt;Released on July 24, 2026, Claude Opus 5 is not a quiet point-release. It is a genuine step change in the Opus tier — better at coding, smarter at reasoning, more aligned, and still priced at the same rate as its predecessor, Opus 4.8.&lt;/p&gt;

&lt;p&gt;Whether you are a developer using AI to write and debug code, a researcher running complex multi-step analyses, or a builder trying to ship products faster, Opus 5 was designed with you in mind.&lt;/p&gt;

&lt;p&gt;So what exactly changed, and is it worth switching to? Let's break it all down.&lt;/p&gt;




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

&lt;p&gt;Claude Opus 5 is Anthropic's latest flagship AI model in the Opus tier — their highest-capability class of models available for general use.&lt;/p&gt;

&lt;p&gt;Think of Claude's model lineup like a team with different specialists. Haiku is fast and lightweight. Sonnet balances speed and smarts. Opus is the deep thinker — the one you bring in when the problem is hard and you need the best result, not just the quickest one.&lt;/p&gt;

&lt;p&gt;Opus 5 is the newest and most powerful version of that deep thinker.&lt;/p&gt;

&lt;p&gt;It sits below Claude Fable 5 (the current top-tier model) and the restricted-access Claude Mythos 5, but it comes remarkably close to Fable 5's performance — at &lt;strong&gt;half the price per task&lt;/strong&gt; on many benchmarks. That is not a small deal.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Claude Opus 5 Matters
&lt;/h2&gt;

&lt;p&gt;Here is the honest truth about AI models in 2026: the race is no longer just about raw capability. It is about who can get you frontier-level intelligence without burning through your budget in the process.&lt;/p&gt;

&lt;p&gt;Opus 5 is Anthropic's answer to that. It is designed to be used &lt;em&gt;every single day&lt;/em&gt; — for coding, research, writing, analysis, and long-running automated workflows — without requiring the cost of a top-tier frontier model for every task.&lt;/p&gt;

&lt;p&gt;It is now the &lt;strong&gt;default model on Claude Max&lt;/strong&gt; and the &lt;strong&gt;strongest model on Claude Pro&lt;/strong&gt;. In other words, if you are already on Claude, you are probably using Opus 5 right now.&lt;/p&gt;




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

&lt;p&gt;&lt;strong&gt;1. Top of the leaderboard on coding tasks&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On Frontier-Bench v0.1, Opus 5 outperforms every other model and more than doubles Opus 4.8's performance — at a lower cost per task. On CursorBench 3.2 at max effort, it lands within 0.5% of Fable 5's peak score, at half the cost.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What this means for you:&lt;/em&gt; You can tackle harder engineering problems with the same budget. Think complex refactors, root-cause debugging, and building full features end to end.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Dramatically better at agentic, multi-step work&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On Zapier AutomationBench — a benchmark for completing real business workflows from start to finish — Opus 5's pass rate is around 1.5 times the next-best model, at the same cost. Even at its &lt;em&gt;lowest&lt;/em&gt; effort setting, Opus 5 passes more tasks than any other model on the leaderboard.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Real example from early-access testing:&lt;/em&gt; A trading firm engineer used Opus 5 to build a full market data feed for a new exchange in a single session. Previous models could not complete this task at all, even with detailed plans from the engineer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. A massive leap on novel problem-solving&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On ARC-AGI 3 — an evaluation where the model must solve completely new problem types it has never seen before — Opus 5 scored &lt;strong&gt;three times higher than the next-best model&lt;/strong&gt;. That is not a small margin. That is a different class of reasoning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Better computer use, at less cost&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On OSWorld 2.0, a computer use benchmark, Opus 5 outperforms every other model at any given cost — and it surpasses Fable 5's best result at just over a third of the cost.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Improved scientific research capabilities&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Opus 5 outperforms Opus 4.8 on every single life sciences evaluation Anthropic runs, including structural biology, organic chemistry, and bioinformatics. On organic chemistry tasks, it scores more than 10 percentage points higher than Opus 4.8. On protein-related tasks, it scores nearly 8 points higher.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Stronger visual outputs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Early adopters noted better animations, games, 3D work, and visual artifacts — the strongest visual output from an Opus model to date.&lt;/p&gt;




&lt;h2&gt;
  
  
  Opus 5 vs Opus 4.8 — Is the Upgrade Real?
&lt;/h2&gt;

&lt;p&gt;Yes, and here is the honest picture:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What Changed&lt;/th&gt;
&lt;th&gt;Opus 4.8&lt;/th&gt;
&lt;th&gt;Opus 5&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Frontier-Bench performance&lt;/td&gt;
&lt;td&gt;Baseline&lt;/td&gt;
&lt;td&gt;More than 2×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ARC-AGI 3&lt;/td&gt;
&lt;td&gt;Lower&lt;/td&gt;
&lt;td&gt;3× next-best&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Price per million input tokens&lt;/td&gt;
&lt;td&gt;$5&lt;/td&gt;
&lt;td&gt;$5 (same)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Price per million output tokens&lt;/td&gt;
&lt;td&gt;$25&lt;/td&gt;
&lt;td&gt;$25 (same)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alignment (behavioral audit score)&lt;/td&gt;
&lt;td&gt;Higher&lt;/td&gt;
&lt;td&gt;2.3 (lowest of recent models)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Default on Claude Max&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes (still default)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fast mode (2.5× speed)&lt;/td&gt;
&lt;td&gt;Available&lt;/td&gt;
&lt;td&gt;Available&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The short version: same price, significantly better results. The biggest gains are on hard, long-horizon tasks — exactly the kind of work where Opus models are supposed to shine.&lt;/p&gt;

&lt;p&gt;One real note on honest nuance: Opus 5 stays &lt;strong&gt;behind Mythos 5 on cybersecurity exploitation tasks&lt;/strong&gt; by design. Anthropic has intentionally kept those capabilities gated in the restricted-access Mythos tier, and Opus 5's safety classifiers are tuned accordingly.&lt;/p&gt;




&lt;h2&gt;
  
  
  Best Tips for Getting the Most from Opus 5
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Use the effort setting for your task type.&lt;/strong&gt; Opus 5 comes with per-turn effort controls — including an &lt;code&gt;xhigh&lt;/code&gt; reasoning mode. For simple tasks, use lower effort to save tokens and speed up the response. For deep debugging, root-cause analysis, or long research tasks, bump it up. The model's performance scales noticeably with effort level.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let it verify its own work.&lt;/strong&gt; One of the biggest shifts in Opus 5 is how it checks itself. In testing, it repeatedly caught its own errors during planning — before writing a single line of code. Trust the process, and give it room to think rather than rushing it toward an answer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use it for long agentic workflows.&lt;/strong&gt; If you have been holding off on building multi-step AI agents because earlier models kept losing the thread halfway through, Opus 5 is worth trying again. Lovable reported 22% improvement over Opus 4.7 on their hardest agentic coding tasks, with significantly less run-to-run variance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pair it with Claude Code for serious engineering tasks.&lt;/strong&gt; The Fast mode integration in Claude Code makes this combination a good fit for iterative build-debug cycles where you need both speed and depth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Developers: check out the two new beta features.&lt;/strong&gt; Mid-conversation tool changes let you swap which tools Claude can use mid-session without breaking your prompt cache. Automatic fallbacks route flagged requests to the best available model instead of returning a block. Both are useful for production agentic systems.&lt;/p&gt;




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

&lt;p&gt;&lt;strong&gt;Treating every task the same.&lt;/strong&gt; Opus 5 is powerful, but that does not mean you should use max-effort mode for a simple summary or a quick code snippet. Match the effort to the task. The model is efficient by design — use that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Expecting it to replace human judgment on risky decisions.&lt;/strong&gt; Opus 5 is notably more honest about its own uncertainty and limitations than previous versions. It will push back on bad designs (early testers reported it holding its ground in code reviews rather than just agreeing). That is a feature, not a flaw. Let it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ignoring the safety fallback settings.&lt;/strong&gt; If you are building production systems, set up the automatic fallback option on the API. It routes classifier-flagged requests to the best available model automatically, so you do not end up with unexpected blocks in your workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Assuming your old prompts still need heavy optimization.&lt;/strong&gt; Opus 5 is more instruction-following and better at picking up intent from context. Prompts that needed heavy engineering to work with earlier models may now work more simply. Test before you over-engineer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Confusing Opus 5 with a niche research model.&lt;/strong&gt; Some people mentally categorize the Opus tier as "the expensive one for edge cases." Opus 5 is specifically designed to be an everyday model — it's the default on Claude Max precisely because Anthropic built it to work efficiently across normal daily usage.&lt;/p&gt;




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

&lt;p&gt;Claude Opus 5 is a meaningful upgrade in every area that matters for practical developer and knowledge work: coding performance, agentic reliability, reasoning depth, and alignment. It delivers frontier-adjacent intelligence at the same price as its predecessor, which is the kind of thing that actually changes how people build.&lt;/p&gt;

&lt;p&gt;If you are already using Claude, you are likely already on Opus 5. If you are using the API and want to try it explicitly, the model string is &lt;code&gt;claude-opus-5&lt;/code&gt;. Pricing is $5 per million input tokens and $25 per million output tokens — unchanged from Opus 4.8.&lt;/p&gt;

&lt;p&gt;The AI field is moving fast, and it is not always easy to tell which updates are genuinely meaningful versus just marketing. This one is real. 💡&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Want more breakdowns like this one? Check out &lt;a href="https://hamidrazadev.com" rel="noopener noreferrer"&gt;hamidrazadev.com&lt;/a&gt; for practical developer content on AI tools, frontend development, and everything in between. If this post helped you, share it with a developer friend — it genuinely helps the community grow. Drop a comment below if you have questions or have already been testing Opus 5 in your own projects. Would love to hear what you find.&lt;/em&gt; 👀&lt;/p&gt;

</description>
      <category>claude</category>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <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>
  </channel>
</rss>
