Embed native RDP / external application windows inside VS Code editor tabs
@zhichli is already working on this.
Since Jun 25, 2026.
Assessment
This issue has not been assessed yet.
Description
Type: Feature Request
Feature Request: Allow extensions to embed native remote desktop sessions inside an editor tab
Summary
I would like VS Code to support embedding a native Remote Desktop / RDP session directly inside an editor tab, in the same area where files such as runTest.js are displayed.
Currently, VS Code extensions can open Webviews, terminals, custom editors, and external applications, but there does not seem to be an official API that allows an extension to host a native OS window, such as mstsc.exe, inside a VS Code editor tab.
Use case
I am building a VS Code extension for remote development and automation. The goal is to let users manage SSH, macros, terminal automation, and remote desktop connections from a single VS Code workspace.
A useful workflow would be:
- Open VS Code.
- Select a saved remote machine.
- Open an RDP session.
- Display the remote desktop directly inside a VS Code editor tab, next to source files, terminals, and extension views.
This would make VS Code a unified remote operations workspace rather than forcing users to switch between VS Code and a separate Remote Desktop window.
Current limitations
At the moment, the available options are:
- Launch
mstsc.exeor another RDP client externally. - Use a Webview with an HTML5 remote desktop gateway such as Apache Guacamole.
- Open a browser-based remote desktop interface inside VS Code’s Simple Browser or a custom Webview.
These workarounds are useful, but they are not equivalent to embedding a native RDP client directly in VS Code.
Launching an external RDP client breaks the integrated workflow, while using a web gateway requires extra infrastructure and is more complex for users to install.
Requested capability
It would be helpful if VS Code provided an official API that allows extensions to embed or host native external application windows inside an editor tab or custom editor.
For example, an extension could start a process such as:
mstsc.exe
and attach its window to a VS Code editor area.
A possible API could look conceptually like:
vscode.window.createNativeWindowPanel({
title: 'Remote Desktop',
executable: 'mstsc.exe',
args: ['connection.rdp'],
viewColumn: vscode.ViewColumn.One
});
This does not need to be specific to RDP. The general capability would be useful for tools that need to display native UI inside VS Code while remaining part of the workspace.
Security considerations
I understand that embedding native windows inside VS Code may have security, portability, and sandboxing implications.
A safe version of this feature could include:
- Explicit user confirmation before launching or embedding a native application.
- Workspace Trust restrictions.
- Extension permission declarations.
- Platform-specific support only where feasible.
- Clear separation between Webviews and native embedded windows.
- No automatic access to credentials or system resources beyond the launched process.
Why this would be valuable
This would enable extensions to provide a much more integrated experience for:
- Remote desktop / RDP tools.
- VM consoles.
- Embedded device consoles.
- Legacy enterprise tools.
- Remote administration workflows.
- Development environments that require both code and graphical remote access.
For users, the benefit would be a single VS Code workspace containing code, terminals, logs, automation tools, and remote desktop sessions.
Alternative
If embedding arbitrary native windows is not feasible, another useful option would be an official remote desktop view API or a recommended extension API pattern for building integrated RDP/VNC/remote display clients inside VS Code.
Thank you for considering this feature request.
VS Code version: Code - Insiders 1.127.0-insider (2858f2c0200dc2f4f87aca248c69daaf85f3ce69, 2026-06-23T09:46:13-07:00)
OS version: Windows_NT x64 10.0.26200
Modes:
System Info
| Item | Value |
|---|---|
| CPUs | Intel(R) Core(TM) Ultra 7 165U (14 x 2688) |
| GPU Status | 2d_canvas: enabled GPU0: VENDOR= 0x8086, DEVICE=0x7d45 [Intel(R) Graphics], DRIVER_VENDOR=Intel, DRIVER_VERSION=32.0.101.8724 ACTIVE GPU1: VENDOR= 0x1414, DEVICE=0x008c [Microsoft Basic Render Driver], DRIVER_VERSION=10.0.26100.7309 Machine model name: Machine model version: direct_rendering_display_compositor: disabled_off_ok gpu_compositing: enabled multiple_raster_threads: enabled_on opengl: enabled_on rasterization: enabled raw_draw: disabled_off_ok skia_graphite: disabled_off trees_in_viz: disabled_off video_decode: enabled video_encode: enabled webgl: enabled webgpu: enabled webnn: disabled_off |
| Load (avg) | undefined |
| Memory (System) | 15.46GB (2.04GB free) |
| Process Argv | --crash-reporter-id 4a8cb585-4f3c-4fa8-99da-226ec4527ec7 |
| Screen Reader | no |
| VM | 0% |
Extensions (12)
| Name | Identifier | Author | Version |
|---|---|---|---|
| Kotlin | fwcd.kotlin | fwcd | 0.2.36 |
| GraphQL: Syntax Highlighting | graphql.vscode-graphql-syntax | GraphQL | 1.3.10 |
| Kotlin Language | mathiasfrohlich.kotlin | mathiasfrohlich | 1.7.1 |
| Remote Manager | mavenshu.remote-manager | mavenshu | 1.0.37 |
| PowerShell | ms-vscode.powershell | ms-vscode | 2026.1.1 |
| Language Support for Java(TM) by Red Hat | redhat.java | redhat | 1.54.0 |
| Gradle for Java | vscjava.vscode-gradle | vscjava | 3.17.3 |
| Debugger for Java | vscjava.vscode-java-debug | vscjava | 0.59.0 |
| Project Manager for Java | vscjava.vscode-java-dependency | vscjava | 0.27.5 |
| Extension Pack for Java | vscjava.vscode-java-pack | vscjava | 0.31.1 |
| Test Runner for Java | vscjava.vscode-java-test | vscjava | 0.45.0 |
| Maven for Java | vscjava.vscode-maven | vscjava | 0.45.3 |
A/B Experiments
vsliv368:30146709
pythonvspyt551:31249597
nativeloc1:31118317
dwcopilot:31158714
dwoutputs:31242946
copilot_t_ci:31333650
g012b348:31231168
pythonrdcb7:31268811
pythonpcpt1cf:31399617
6518g693:31302842
6abeh943:31336334
envsactivate1:31349248
editstats-enabled:31346256
cloudbuttont:31366566
3efgi100_wstrepl:31403338
cp_cls_t_966_ss:31526232
4je02754:31455664
8hhj4413:31478653
ge8j1254_inline_auto_hint_haiku:31490507
cp_cls_c_1081:31454833
conptydll_true:31485575
ia-use-proxy-models-svc:31446143
e9c30283:31453065
test_treatment2:31471001
c9b86496:31447327
idci7584:31454084
e3e4d672:31454087
ei9d7968:31462942
nes-extended-on:31455475
de16b994:31458079
89g7j272:31506658
hhf17803:31462392
7e187181:31482583
i2gc6536:31472020
52612955:31508042
h08i8180:31475367
ddid_t:31478204
hmra_i5g22:31518061
bjc72774_agent_sandbox:31538428
7df3h592:31491241
cp_cls_t_1082:31535311
logging_enabled_new:31490725
jb_cp_cls_t_632:31537244
b1g4i769:31503653
ha629193:31508444
cdk-lw-on:31524445
f9bf7985:31531254
31fi7170_t:31517328
a1ije391_t:31533808
api_cot_ctrl:31509853
g4a0e106:31510899
41836166:31537719
prpt_srch:31513639
jbcp_cls_pctr_t:31531130
cp_intellij_t_nes:31533504
jf4hg949:31526829
control_a71ac258:31538452
h561g132:31534507
ihg5j128:31534457
- Dominant language
- TypeScript
- Stars
- 193k
- Forks
- 42.9k
- PR merge metrics
- PR metrics pending
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from microsoft/vscode
-
testplan-item
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
-
new release
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
-
testplan-item
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
-
testplan-item
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
All issues in microsoft/vscode
Similar issues
-
clawsweeper:fix-shape-clear clawsweeper:queueable-fix clawsweeper:source-repro impact:ux-friction issue-rating: 🦞 diamond lobster no-stale P3
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
community first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
Difficulty 1/5 Under an hour Newbie friendliness 76/100
-
code-quality refactoring
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
github/gh-aw-firewall#8816 ·
-
integration:quickjs org:external priority:backlog topic:code-interpreter topic:middleware type:feature
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
langchain-ai/deepagents#6450 ·
-
Difficulty 1/5 Under an hour Newbie friendliness 88/100
vercel/react-tweet#225 ·