VS Code remote development lets you keep Visual Studio Code on your local machine while running your project, terminal, tools, and many extensions somewhere else: an SSH-accessible machine, a container, or the Windows Subsystem for Linux. For solo developers, that can mean coding against a Raspberry Pi, Linux server, cloud VM, or Windows-hosted Linux environment without constantly copying files around. For teams, it can mean more consistent environments, fewer “works on my machine” issues, and easier onboarding.
This guide walks through the main VS Code remote development options supported by the official Remote Development extension pack: Remote - SSH, Dev Containers, WSL, and Remote - Tunnels. It also covers when each approach makes sense, how to set it up, and what to watch for with performance, security, and troubleshooting.
1. What VS Code Remote Development Is
VS Code Remote Development is a set of Visual Studio Code capabilities that let you use a container, remote machine, or Windows Subsystem for Linux — WSL as a full-featured development environment.
According to the official VS Code Remote Development documentation, this means you can:
- Develop on the same operating system you deploy to
- Use larger or more specialized hardware
- Separate your development environment from your local machine configuration
- Help new contributors start with a consistent environment
- Use tools or runtimes that are unavailable on your local OS
- Manage multiple tool or runtime versions
- Develop Linux-deployed applications from Windows through WSL
- Access the same development environment from multiple machines or locations
- Debug an application running somewhere else, such as in the cloud or at a customer site
The key architectural idea is simple: VS Code stays on your local machine, but the development environment does not have to.
The official VS Code documentation states that “no source code needs to be on your local machine” when using Remote Development. Extensions can run commands directly inside the container, WSL environment, or remote machine.
How VS Code makes remote work feel local
When you connect to a remote target, VS Code installs VS Code Server on the remote operating system. The VS Code Server is independent of any existing VS Code installation on that remote OS.
That is why the experience can feel similar to local development:
- Editor UI: Runs locally in VS Code.
- Source code: Can live on the remote machine, in WSL, or inside/mounted into a container.
- Terminal commands: Run in the remote environment.
- Extensions: Many extensions can run remotely without modification.
- Debugging: Can target applications running in the remote environment.
The official VS Code Remote Development extension pack
At the time of writing, the official Remote Development extension pack includes four extensions:
| Extension | What it is for |
|---|---|
| Remote - SSH | Open folders on a remote machine or VM using SSH. |
| Dev Containers | Work with a separate toolchain or container-based application inside, or mounted into, a container. |
| WSL | Use the Windows Subsystem for Linux as a Linux-powered development environment. |
| Remote - Tunnels | Connect to a remote machine through a secure tunnel without configuring SSH. |
VS Code documentation also mentions GitHub Codespaces as a managed remote development environment hosted in the cloud. Codespaces can be configured and created when needed, but this guide focuses on the local VS Code remote workflows from the provided source material: SSH, containers, and WSL.
2. When Remote Development Makes Sense
VS Code remote development is most useful when the environment matters as much as the editor. If your project depends on a specific operating system, hardware setup, runtime version, or deployment target, remote development can reduce friction.
Good use cases for VS Code remote development
| Scenario | Best-fit VS Code remote option | Why it helps |
|---|---|---|
| Linux server or VM development | Remote - SSH | Code stays on the remote machine; commands run where the application runs. |
| Embedded or device development | Remote - SSH | Useful for SSH-capable devices such as a Raspberry Pi. |
| Reproducible team environments | Dev Containers | Teams can define a containerized toolchain for consistency. |
| Windows machine, Linux app | WSL | Lets Windows users develop in a Linux environment. |
| Cloud or customer-site debugging | Remote - SSH or Remote - Tunnels | VS Code can connect to an existing remote environment. |
| Distributed collaboration | Live Share plus remote extensions | Enables real-time sharing, shared terminals, and shared debugging. |
Remote SSH for servers, VMs, and devices
The official documentation describes Remote - SSH as a way to connect to “any location” by opening folders on a remote machine or VM using SSH.
A practical example from the source data describes using Remote - SSH for embedded Flutter work on a Raspberry Pi. Instead of connecting peripherals such as a monitor, keyboard, and mouse to the device and setting up a full local coding workflow there, the developer connects from VS Code over SSH and works directly on the remote device.
A community discussion about Go development also describes using the Remote SSH extension with code hosted on a VM, where the code “runs on the VM” while the developer uses local VS Code as usual.
Dev Containers for consistent environments
Dev Containers are useful when the development toolchain should be separated from the host machine. The official VS Code source says Dev Containers let you work with a separate toolchain or container-based application inside, or mounted into, a container.
This is especially relevant for teams because the official documentation explicitly calls out consistency: remote development can make it easier for new contributors to get started and keep everyone on a consistent environment.
WSL for Linux development on Windows
Remote - WSL is for Windows users who need a Linux-powered development experience. The official docs describe WSL as a way to develop Linux-deployed applications using Windows Subsystem for Linux.
A community comment in the source data also describes WSL on Windows as “really nice,” while noting that personal hardware and platform-specific development needs can still influence the best setup.
Remote development for teams
For distributed teams, VS Code remote workflows can combine with collaboration practices and tools. The source data mentions:
- Live Share for pair programming, debugging, and code reviews
- Git for version control
- GitHub, GitLab, and Bitbucket for remote repositories
- GitHub Pull Requests and Issues extension for managing pull requests and issues inside VS Code
- Slack, Microsoft Teams, or Zoom for communication
- Jira, Trello, or Asana for task tracking
Remote development does not replace team process. It works best when paired with clear communication, version control, code review, documentation, and secure access practices.
3. Setting Up Remote SSH in VS Code
Remote - SSH is the most direct path into VS Code remote development when you already have access to a remote machine, VM, Linux box, or SSH-capable device.
The official VS Code docs describe Remote - SSH as the extension for opening folders on a remote machine or VM using SSH. The setup below follows the source data’s documented workflow.
Step 1: Install the Remote - SSH extension
Open VS Code on your local machine.
- Open Extensions: Click the Extensions icon in the Activity Bar, or press Ctrl+Shift+X.
- Search: Look for Remote - SSH.
- Install: Select the extension and install it.
You can also install the broader Remote Development extension pack, which includes Remote - SSH, Dev Containers, WSL, and Remote - Tunnels.
Step 2: Make sure SSH access works
Before configuring VS Code, confirm that you have SSH access to the remote machine. The source material emphasizes that Remote - SSH requires SSH access.
A simple SSH command follows this pattern:
ssh user@hostname
One provided example for a Raspberry Pi-style setup is:
ssh [email protected]
You can use either an IP address or a hostname for the remote machine, as described in the source data.
Step 3: Add a new SSH host in VS Code
Open the Command Palette:
- Windows/Linux: Ctrl+Shift+P
- macOS: Cmd+Shift+P
Then run:
Remote-SSH: Add New SSH Host...
When prompted, enter your SSH command, such as:
ssh [email protected]
VS Code can then add this host to your SSH configuration.
Step 4: Use the SSH config file
The source data also describes configuring the SSH host through the ~/.ssh/config file.
A basic host entry commonly follows this structure:
Host my-remote-dev-box
HostName your-hostname-or-ip
User your-username
Then, in VS Code, use the Command Palette and select:
Remote-SSH: Connect to Host...
Choose the configured host and connect.
Step 5: Open a remote folder
After VS Code connects, open the Explorer and choose a folder on the remote machine. At this point, your terminal and project operations run in the remote environment.
You may be prompted for the remote password during connection or when opening folders. The Raspberry Pi example in the source data notes that re-entering the password may be required for added security.
What runs where with Remote - SSH?
| Component | Local machine | Remote machine |
|---|---|---|
| VS Code user interface | Yes | No |
| Source code | Not required | Yes |
| Terminal commands | No | Yes |
| Project runtime | No | Yes |
| VS Code Server | No | Yes |
| Remote-capable extensions | Often UI locally, execution remotely | Yes, where applicable |
Remote SSH is often the simplest mental model: edit locally, run remotely, keep the project on the machine where it actually executes.
4. Using Dev Containers for Reproducible Environments
Dev Containers let you use a container as your development environment. According to the official VS Code documentation, this allows you to work with a separate toolchain or container-based application inside, or mounted into, a container.
For teams, the main benefit is consistency. Instead of asking every developer to manually install the same language versions, tools, and dependencies on their host machine, the team can define the development environment in a container configuration.
When Dev Containers are useful
Dev Containers make sense when:
- Toolchains differ by project: You need a separate toolchain for each codebase.
- Local setup is fragile: Developers frequently hit setup differences.
- New contributors need fast onboarding: The environment can be encoded in project files.
- The app is container-based: The development setup should resemble how the app runs.
- Host isolation matters: You want to avoid changing your local machine configuration.
The official VS Code docs specifically call out separating the development environment to avoid impacting local machine configuration.
Dev Containers setup flow
The source data describes the following setup process:
- Install Docker: Ensure Docker is installed and running on your local machine.
- Install Dev Containers: Use the VS Code extension for container development.
- Open folder in container: Use the Command Palette.
- Configure the container: Define the environment in
.devcontainer/devcontainer.json.
In VS Code, open the Command Palette and run:
Dev Containers: Open Folder in Container...
The source data also refers to the command as:
Remote-Containers: Open Folder in Container...
The naming may vary by extension version, but the workflow is the same: open a project folder inside a container-based environment.
The devcontainer.json file
The source data identifies .devcontainer/devcontainer.json as the file where you define the development environment.
A minimal placeholder structure looks like this:
{
"name": "project-dev-container"
}
In a real project, your team would define the environment details appropriate to that codebase. The provided source data does not specify exact image names, language versions, or container settings, so this guide does not prescribe them.
For teams, the important practice is not choosing a universal container image. It is committing the project’s development environment definition so contributors can open the same workspace consistently.
Dev Containers vs Remote SSH
| Factor | Remote - SSH | Dev Containers |
|---|---|---|
| Primary target | Remote machine or VM | Container environment |
| Requires SSH | Yes | Not necessarily, based on source data |
| Requires Docker | Not stated in sources | Yes, Docker must be installed and running |
| Best for | Servers, VMs, devices, remote Linux boxes | Reproducible project environments |
| Team consistency | Depends on remote machine setup | Defined through .devcontainer/devcontainer.json |
| Local machine impact | Source can stay remote | Toolchain can be isolated from host |
Dev Containers in Kubernetes-style workflows
The community source data includes a practical team example involving Kubernetes. The team initially proxied requests from a service to a developer’s local machine, but the extra roundtrip time exceeded request limits and felt slow.
Their revised workflow was to swap the target pod container into a “dev” image with different versions of Go and other languages, then attach to the remote container with the Kubernetes extension and work remotely in that container.
This example highlights an important pattern: remote development can avoid slow local-to-cluster loops by moving the development environment closer to where the service already runs.
5. Remote Development with WSL on Windows
Remote - WSL gives Windows users a Linux-powered development experience through Windows Subsystem for Linux.
The official VS Code documentation describes WSL support as a way to develop Linux-deployed applications using Windows Subsystem for Linux. This is especially useful when your production or deployment target is Linux but your daily workstation is Windows.
When WSL makes sense
Use WSL-based VS Code remote development when:
- You are on Windows: Your workstation is Windows, but your app expects Linux tooling.
- Your app deploys to Linux: You want a closer match to the deployment OS.
- You need Linux tools locally: You want a Linux shell and runtime without a separate VM workflow.
- You want a VS Code-native workflow: You can open a WSL session directly from VS Code.
Setting up VS Code with WSL
The source data outlines the WSL workflow:
- Enable WSL: Install WSL on your Windows machine and set up a Linux distribution.
- Install the WSL extension: Use the Remote - WSL extension.
- Open a WSL window: Use the Command Palette.
- Open your project folder: Start coding in the Linux environment.
In the Command Palette, run:
Remote-WSL: New Window
Then open your project folder inside the WSL environment.
WSL vs SSH vs Dev Containers
| Option | Best for | Key requirement from source data |
|---|---|---|
| WSL | Linux development on Windows | WSL installed with a Linux distribution |
| Remote - SSH | Remote machines, VMs, servers, SSH-capable devices | SSH access to the remote machine |
| Dev Containers | Isolated and reproducible project environments | Docker installed and running |
| Remote - Tunnels | Remote machine access without SSH configuration | Secure tunnel workflow |
WSL is not a replacement for every remote workflow. If your source code and runtime need to live on a remote VM, use SSH. If your priority is environment reproducibility, use Dev Containers. If you need Linux tooling on Windows, WSL is the natural fit.
6. Performance Tips for Large Codebases
The provided source data does not include formal VS Code remote development benchmarks, so this section avoids invented performance numbers. Instead, it focuses on performance practices grounded in the documented architecture and real workflow examples.
Keep code close to where it runs
The official VS Code docs state that source code does not need to be on your local machine. Remote extensions can run commands and other extensions directly inside the container, WSL environment, or remote machine.
For large codebases, this matters because build tools, search tools, package managers, and test runners can operate where the files and runtime already are.
Practical recommendation: If your application runs on a remote Linux machine, VM, cloud environment, or device, consider keeping the workspace there and connecting with Remote - SSH rather than copying files back and forth.
Avoid unnecessary network round trips
The Kubernetes workflow from the source data is a useful warning. A team initially proxied service requests from Kubernetes back to a developer’s local machine. That extra roundtrip time exceeded request limits and felt slow.
They improved the workflow by using a remote development container inside the environment where the service was already running.
If remote development feels slow, check whether the workflow is bouncing traffic between local and remote environments unnecessarily. Moving development closer to the runtime can be faster than proxying everything back to a laptop.
Use the right remote target
| Performance issue | Better fit from source data | Why |
|---|---|---|
| Local machine lacks required hardware | Remote - SSH | VS Code docs mention using larger or more specialized hardware. |
| Windows host, Linux tooling needed | WSL | Linux tools run in WSL instead of being adapted to Windows. |
| Project setup differs across machines | Dev Containers | Toolchain runs in a defined container environment. |
| Cluster service feels slow through local proxy | Remote container / Kubernetes extension workflow | Reduces extra roundtrip patterns described in the source data. |
Run project commands in the remote terminal
VS Code’s integrated terminal can run commands without leaving the editor. In a remote workspace, that terminal is tied to the remote environment.
Use it for:
- Builds: Run the build where the dependencies and source files live.
- Tests: Execute tests against the remote runtime environment.
- Debugging commands: Inspect logs, services, and processes remotely.
- Environment checks: Verify installed tools in the actual workspace.
Be selective with extensions
The official docs say most VS Code extensions should work unmodified in a remote environment, and extensions can run commands inside the remote target. That does not mean every extension belongs in every remote workspace.
For large team projects, keep extension usage purposeful:
- Formatting: The source data mentions Prettier.
- Linting: The source data mentions ESLint.
- Path completion: The source data mentions Path Intellisense.
- Pull requests: The source data mentions GitHub Pull Requests and Issues.
Avoid turning a shared remote workflow into an unbounded extension experiment, especially when onboarding new contributors.
7. Security Best Practices for Remote Workspaces
VS Code remote development can involve access to servers, VMs, containers, WSL distributions, or remote project environments. Security should be part of the setup, not something added later.
The source data specifically mentions SSH keys, VPNs, secure remote connections, regular software updates, and patching.
Use secure access methods
For Remote SSH workflows:
- SSH access: Required for Remote - SSH.
- SSH keys: Recommended in the source data as a way to secure remote connections.
- VPNs: Also mentioned as a way to secure remote development environments.
- Remote - Tunnels: Official VS Code documentation describes this as connecting through a secure tunnel without configuring SSH.
| Access method | Mentioned use |
|---|---|
| SSH | Connect to remote machines and VMs with Remote - SSH. |
| SSH keys | Secure remote connections. |
| VPNs | Secure remote development environments. |
| Remote - Tunnels | Connect through a secure tunnel without SSH configuration. |
Keep remote systems updated
The source data recommends regularly updating and patching software to protect against vulnerabilities.
For teams, this should apply to:
- Remote VMs
- Linux development servers
- Container images
- WSL distributions
- Developer tooling installed in remote environments
The source data does not provide a patch cadence, so organizations should align this with their own security and operations policies.
Separate development environments from local machines
The official VS Code documentation identifies environment separation as a benefit: remote development can avoid impacting local machine configuration.
This is also useful from a security and stability perspective. A project can require tools, runtimes, or dependencies without installing them directly onto every developer’s host OS.
Use version control and code review
The source data recommends Git for version control and mentions remote repositories on GitHub, GitLab, and Bitbucket. It also recommends code review through GitHub pull requests or GitLab merge requests.
For remote teams, combine VS Code remote development with:
- Git branches: Isolate work.
- Pull requests or merge requests: Review changes before merging.
- Documentation: Keep README files, comments, shared wikis, and project guidelines current.
- Issue tracking: Use systems such as GitHub issues, Jira, Trello, or Asana, as mentioned in the source data.
Be careful with shared sessions
The source data describes Live Share as supporting real-time code sharing, shared terminals, shared debugging, and voice/text chat.
Those features are powerful, but shared terminals and debugging sessions can expose sensitive environments if used carelessly. Only invite trusted collaborators and be deliberate about what workspace, terminal, or debugging context you share.
8. Common Problems and How to Fix Them
Remote development problems usually come down to access, environment setup, tool availability, or workflow design. The fixes below are grounded in the setup requirements and examples from the source data.
Problem 1: Remote - SSH cannot connect
Likely cause: SSH access is not configured or the host details are incorrect.
Fix:
- Check SSH access: Confirm you can connect with a command like:
ssh user@hostname
- Use the correct host: The source data notes you can use either an IP address or hostname.
- Add the host in VS Code: Run:
Remote-SSH: Add New SSH Host...
- Review SSH config: Ensure the host is listed in
~/.ssh/config.
Problem 2: VS Code asks for a password more than once
Likely cause: The remote machine requires authentication for connection and folder access.
Fix:
- Enter the remote password when prompted.
- Consider SSH keys: The source data recommends SSH keys for secure remote connections.
- Verify permissions: Make sure your remote user can access the project folder.
The Raspberry Pi setup example notes that users may need to re-enter the password after connecting and opening a folder.
Problem 3: Dev Containers will not start
Likely cause: Docker is not installed or not running.
Fix:
- Install Docker: The source data states Docker must be installed.
- Start Docker: Ensure Docker is running before opening the folder in a container.
- Check project config: Confirm the project has
.devcontainer/devcontainer.jsonif the workflow depends on it. - Run the command again:
Dev Containers: Open Folder in Container...
Problem 4: WSL workflow does not open
Likely cause: WSL is not enabled or no Linux distribution is installed.
Fix:
- Enable WSL: Install WSL on the Windows machine.
- Set up Linux: Configure a Linux distribution.
- Open from VS Code:
Remote-WSL: New Window
Then open your project folder inside the WSL session.
Problem 5: Remote workflow feels slow
Likely cause: The development loop may be sending traffic across unnecessary local/remote boundaries.
Fix:
- Run code where it executes: Keep the source and terminal in the remote environment when appropriate.
- Avoid local proxy loops: The Kubernetes example showed that proxying service requests to a developer’s local machine added roundtrip time and felt slow.
- Use remote containers where appropriate: The team example improved the workflow by attaching to a remote container in the cluster environment.
Problem 6: Team members have different tooling
Likely cause: Each developer has configured tools locally by hand.
Fix:
- Use Dev Containers: Define the environment in
.devcontainer/devcontainer.json. - Document setup: The source data recommends README files, comments, shared knowledge bases, and wikis.
- Use version control: Keep project configuration files in Git.
- Review changes: Use pull requests or merge requests to keep environment changes visible.
Problem 7: Collaboration is hard in a remote workspace
Likely cause: Remote access solves environment setup but not communication.
Fix:
- Use Live Share: The source data describes real-time code sharing, shared terminals, shared debugging, and chat.
- Schedule check-ins: The source data recommends daily stand-ups and regular check-ins.
- Track tasks: Use tools such as Jira, Trello, Asana, GitHub issues, or GitLab issues.
- Review code consistently: Use GitHub pull requests or GitLab merge requests.
Bottom Line
VS Code remote development is most useful when your development environment needs to live somewhere other than your laptop: a Linux VM, a cloud server, a Raspberry Pi, a Docker container, WSL, or an existing remote environment. The official VS Code Remote Development extension pack supports this through Remote - SSH, Dev Containers, WSL, and Remote - Tunnels.
For solo developers, Remote - SSH is often the fastest path when you already have a remote machine or device. For teams, Dev Containers help create reproducible environments and smoother onboarding. For Windows users building Linux-deployed applications, WSL provides a Linux-powered workflow inside VS Code.
The strongest results come from matching the tool to the workflow: keep code close to where it runs, avoid unnecessary network round trips, secure access with SSH keys or VPNs where appropriate, and pair remote environments with documentation, version control, and code review.
FAQ
What is VS Code remote development?
VS Code remote development lets you use a container, remote machine, or WSL as a full-featured development environment while working from your local VS Code interface. The official documentation says source code does not need to be on your local machine.
Which VS Code extension should I use for remote development?
Use Remote - SSH for SSH-accessible machines and VMs, Dev Containers for container-based development environments, WSL for Linux development on Windows, and Remote - Tunnels for connecting through a secure tunnel without configuring SSH.
Do I need Docker for VS Code remote development?
Only for the Dev Containers workflow described in the source data. Remote SSH requires SSH access, while WSL requires Windows Subsystem for Linux with a Linux distribution.
Can teams use VS Code remote development?
Yes. The official VS Code documentation says remote development can help new contributors get started and keep everyone on a consistent environment. The source data also recommends practices such as Git, pull requests, documentation, task tracking, and Live Share for collaboration.
Is Remote SSH useful beyond server development?
Yes. One source example describes using Remote - SSH with a Raspberry Pi for embedded development. The key requirement is SSH access, not that the remote target must be a traditional server.
How do I improve remote development performance?
The source data does not provide benchmark numbers, but it does show useful patterns: keep code and commands in the remote environment, use larger or specialized hardware when needed, and avoid workflows that add unnecessary network round trips, such as proxying remote service traffic back to a local machine when that makes requests feel slow.










