How to Change the Default Terminal in VSCode

Visual Studio Code ships with a built-in terminal panel, but it doesn't lock you into one shell. Whether you prefer Bash, Zsh, PowerShell, Command Prompt, or Fish, VSCode lets you swap the default with a few clicks or a quick settings edit. What "best" looks like depends entirely on your operating system, workflow, and the tools your projects rely on.

What the Default Terminal Actually Controls

When you open a new terminal in VSCode — either through the menu (Terminal > New Terminal) or the keyboard shortcut Ctrl+` — VSCode launches whatever shell is configured as the default terminal profile. This profile defines the executable path, startup arguments, and environment variables that shell session inherits.

VSCode introduced the terminal profiles system (replacing the older terminal.integrated.shell setting, which is now deprecated) to give developers more granular control. Each profile is a named configuration. You pick one as the default; the others stay available on demand.

How to Change the Default Terminal Profile

Method 1: Using the Terminal Dropdown (Fastest)

  1. Open a terminal panel in VSCode.
  2. Click the dropdown arrow (∨) next to the + icon in the terminal tab bar.
  3. Select Select Default Profile.
  4. A quick-pick menu appears listing all detected shell profiles on your system — choose the one you want.

VSCode immediately sets that shell as the default for all future terminal sessions in that workspace (or globally, depending on your settings scope).

Method 2: Through VSCode Settings (More Control)

  1. Open the Command Palette with Ctrl+Shift+P (or Cmd+Shift+P on macOS).
  2. Type "Terminal: Select Default Profile" and press Enter.
  3. Choose from the listed profiles.

Alternatively, go to File > Preferences > Settings (or Ctrl+,), search for terminal.integrated.defaultProfile, and select your OS-specific variant:

  • terminal.integrated.defaultProfile.windows
  • terminal.integrated.defaultProfile.linux
  • terminal.integrated.defaultProfile.osx

Set the value to the name of any profile already defined under terminal.integrated.profiles.

Method 3: Editing settings.json Directly

For developers who prefer working in raw JSON:

  1. Open the Command Palette and run "Preferences: Open User Settings (JSON)".
  2. Add or edit the relevant key. For example, on Windows:
"terminal.integrated.defaultProfile.windows": "Git Bash" 

On macOS:

"terminal.integrated.defaultProfile.osx": "zsh" 

On Linux:

"terminal.integrated.defaultProfile.linux": "bash" 

The profile name must exactly match a key defined in your terminal.integrated.profiles block.

Adding a Custom Terminal Profile

If the shell you want isn't auto-detected, you can define it manually in settings.json:

"terminal.integrated.profiles.windows": { "Git Bash": { "path": "C:\Program Files\Git\bin\bash.exe", "args": [] } } 

Common custom additions include:

ShellTypical Use Case
Git Bash (Windows)Unix-style commands on Windows
WSL (Windows Subsystem for Linux)Full Linux environment on Windows
ZshmacOS power users, Oh My Zsh plugins
FishAutosuggestions, interactive-focused workflows
PowerShell 7Cross-platform scripting, Azure/DevOps tooling

VSCode auto-detects many of these if they're installed, but manual paths are sometimes needed when the binary lives outside the standard install location.

Workspace vs. User Scope 🖥️

This is where setup variables start to diverge significantly. VSCode settings apply at two levels:

  • User scope — applies globally across every project you open
  • Workspace scope — applies only to the current project folder, stored in .vscode/settings.json

If you work on projects that each require a different shell — say, a Python project using WSL and a .NET project using PowerShell — workspace-scoped terminal profiles let you enforce the right shell per repo without touching your global preferences. Teams can also commit .vscode/settings.json to source control so every contributor opens the same default terminal automatically.

What Affects Which Shell Works Best for You

The mechanics of changing the default terminal are straightforward. The less obvious question is which profile to set as default — and that's where individual variables matter considerably:

  • Operating system — macOS defaults to Zsh since Catalina; Windows users have Command Prompt, PowerShell, and WSL as distinct options with real capability differences
  • Project toolchain — some CLI tools behave differently across shells; Makefiles, shell scripts, and certain package managers assume a POSIX-compatible shell
  • Plugin ecosystem — Zsh with Oh My Zsh, or Fish with its built-in features, can significantly change the interactive experience inside VSCode's terminal panel
  • Team or organizational standards — shared repos with committed workspace settings may already define a preferred shell
  • Performance on your machine — heavier shells with extensive plugin configs can add noticeable startup latency on older hardware or constrained environments like remote SSH sessions

Switching Profiles on the Fly 🔄

Setting a default doesn't prevent you from running other shells when needed. The + dropdown in the terminal panel always lists every configured profile. You can have multiple terminal sessions open simultaneously — one running Bash, another running PowerShell — without changing the default at all. The default just determines what opens automatically when no profile is explicitly chosen.

For developers working across different environments, this flexibility is one of the more practical aspects of VSCode's terminal system. The right default for a local development machine, a remote SSH connection, or a containerized dev environment often isn't the same shell — and VSCode's profile system accommodates all three scenarios independently.

What works cleanly in one setup can introduce friction in another, and the right choice sits at the intersection of your operating system, the projects you maintain, and the tools those projects depend on.