https://code.visualstudio.com/updates/v1_56 Skip to content Visual Studio Code * Docs * Updates * Blog * API * Extensions * FAQ * Learn * Search * Download * Search Search * [ ] Search Search * Download VS Code Download VS Code Download Version 1.56 is now available! Read about the new features and fixes from April. Dismiss this update Updates * April 2021 * March 2021 * February 2021 * January 2021 * November 2020 * October 2020 * September 2020 * August 2020 * July 2020 * June 2020 * May 2020 * April 2020 * March 2020 * February 2020 * January 2020 * November 2019 * October 2019 * September 2019 * August 2019 * July 2019 * June 2019 * May 2019 Updates [April 2021 ] April 2021 (version 1.56) Downloads: Windows: User System ARM | Mac: Universal 64 bit Arm64 | Linux: snap deb rpm tarball ARM Welcome to the April 2021 release of Visual Studio Code. The VS Code team has been busy this month working on several longer lead time updates so check out the Preview features section to learn what's upcoming. Here are some of the highlights included in this release: * Improved hover feedback - Helps you quickly find clickable editor actions. * Terminal profile improvements - Create a custom default terminal profile. * Debugger inline values - Display variable values inline during debugging sessions. * Notebook KaTeX support - Math support in notebook Markdown cells. * Remote - Containers volumes view - Manage mounted volumes within Docker containers. * winget installation - VS Code is available via the Windows Package Manager. * New introductory videos - Videos for getting started with VS Code as well as working with C++. * Terminal tabs preview - Get a first look at managing open terminals with the new tabs view. If you'd like to read these release notes online, go to Updates on code.visualstudio.com. Join us live at the VS Code team's livestream on Tuesday, May 11 at 8am Pacific (4pm London) to see a demo of what's new in this release, and ask us questions live. Insiders: Want to try new features as soon as possible? You can download the nightly Insiders build and try the latest updates as soon as they are available. Workbench Improved action hover feedback We have changed the mouse hover feedback for actions all around the workbench, to provide a better UX around clickable actions. Actions hover feedback is improved with a background color. Untitled editors hint We have noticed that many new users are not aware that a language has to be set in order to get full VS Code language support. To help with this problem, we have introduced a hint for untitled editors to help users set the correct language mode. The untitled hint might not be helpful to advanced users, so it goes away immediately as you start typing or you can select don't show to never display the hint again. Untitled editor shows an untitled hint Default custom editor and notebook resolution If you have two editors that both state they should be your default editor for a resource (for example, an image viewer and an image editor), you will receive a prompt to resolve the conflict. In the short video below, the user opens a PNG file, which is associated with two editors. The notification lets the user keep using the Luna Paint Image Editor or configure a new default, which they do and start using the binary Hex Editor. A image editor is opened and the user is prompted with a notification to configure their default editor or keep the current one Updated custom dialogs We have updated our custom dialog styles, which you can enable via "window.dialogStyle": "custom". VS Code now dims the background so there is better focus on the dialog and also uses the secondary button style when there is more than one action. An example of a custom dialog with a dimmed background and secondary buttons Product Icon Theme: Fluent Icons You can theme the secondary button style by using the following color tokens: * button.secondaryBackground * button.secondaryForeground * button.secondaryHoverBackground Auto update only enabled extensions You can now configure VS Code to auto update only your extensions that are currently enabled. Auto update only enabled extensions Theme: GitHub Light Theme Terminal Profile improvements Last iteration, we introduced terminal profiles. The terminal now supports setting a default profile with the terminal.integrated.defaultProfile. settings. Environment and icon support was also added to the profiles system: "terminal.integrated.profiles.windows": { "PowerShell": { "source": "PowerShell", "overrideName": true, "icon": "terminal-powershell", "env": { "TEST_VAR": "value" } } }, "terminal.integrated.defaultProfile.windows": "PowerShell", Going forward, these settings are the recommended way to switch out the default terminal configuration and the terminal.integrated.shell and terminal.integrated.shellArgs settings have been deprecated. New terminal picker Profiles and setting shortcuts have moved out of the dropdown and into a new + button with a dropdown. When selected, the dropdown button displays a menu This also supports creating a new split terminal based on a non-default profile. New keybindings The terminal has several new default keybindings this release: * Move to previous terminal - Ctrl+PageUp (macOS Cmd+Shift+]) * Move to next terminal - Ctrl+PageDown (macOS Cmd+shift+[) * Focus terminal tabs view - Ctrl+Shift+\ (macOS Cmd+Shift+\) - Terminal tabs preview As always, these default keybindings can be removed or custom keybindings can be added via the keybindings system. Linux selection paste command The new command workbench.action.terminal.pasteSelection is available on Linux to paste into the terminal from the selection clipboard. Tasks Removal of Tasks 0.1.0 with upgrade Tasks 2.0.0 has been available and working well for over three years, and tasks 0.1.0 has been deprecated throughout that time. In light of our Node.js-free renderer goal, tasks 0.1.0 has been deleted rather than brought into the Node.js-free world. When you open a folder that contains 0.1.0 tasks, they will be automatically upgraded to version 2.0.0 for you. Tasks upgrade notification No "Task" prefix in terminal tabs When using the new Terminal tabs feature, the "Task" prefix will no longer be added to the terminal name. Instead, tasks are indicated by the "tools" icon to make better use of the available space. Tasks as terminal tabs Better matching with eslint-stylish The $eslint-stylish problem matcher matches multiline problems more accurately. Debugging Breakpoints view improvements Access type is shown for data breakpoints For data breakpoints, VS Code now shows the access type ("Read", "Write", or "Access") next to its name in the Breakpoints view. The Breakpoints view shows the access types "Read", "Write" and "Access" being rendered next to the breakpoint name Better status/error reporting for exception breakpoints For exception breakpoints, VS Code now shows their individual verification status and detailed reason in the Breakpoints view. If an exception breakpoint cannot be verified (for example because its condition contains a syntax error), it will be grayed out and, on hover, the corresponding error message is shown. The Breakpoints view shows disabled exception breakpoints that on hover show the error message Other UI improvements Alternative behavior for Stop and Disconnect commands A debug session is typically stopped via the Debug: Stop and Debug: Disconnect commands. If the debug session is of type launch, the Stop command does not only stop the session but it also terminates the debuggee. For attach type debug sessions, there is a Disconnect command, which stops debugging and resumes execution of the debuggee. With this release, it is now possible to flip this behavior by pressing the Alt modifier while triggering the command from the Debug toolbar. Altering the behavior makes it possible to leave the debuggee running for launch type debug sessions, and to terminate the debuggee for attach type debug sessions. Apart from using Alt with the default commands, it is also possible to access both the Debug: Stop and Debug: Disconnect commands from the Command Palette for both launch and attach debug sessions. The alternative behavior is only available for debug extensions that have opted in to this feature. Improved flow for installing missing debug extensions We have improved the flow if a user wants to start debugging but hasn't installed the necessary language extension that provides debugging support (like Python or Java). When this happens, VS Code now prompts the user to install the appropriate extension. VS Code prompts to install the Python extension if it is missing Call stack column stopped indicator VS Code now renders the Call Stack column indicator every time a debuggee is stopped on a line. This should help identify where on a line the program is currently stopped. An code execution is stopped and a column indicator is rendered in the middle of a line Inline values by default for some languages VS Code's debugger UI supports Inline values that show variable values inline in the editor when stepping through source code. This feature is based on a generic implementation in VS Code core and so may not be a perfect fit for all languages, even sometimes showing incorrect values because the generic approach doesn't understand the underlying source language. For these reasons, the feature was not enabled by default. With a new debugger extension API, it is now possible for language extensions to provide correct inline value support and we are enabling the Improved inline values feature by default. To enable this feature, the debug.inlineValues setting has a new (default) value auto. When set to auto, inline values are automatically enabled for those languages that have "improved inline value" support. The Debugger for Java extension is one of the first debugger extensions to adopt the API. In the screenshot below, the accurate values of the Java variables are displayed right next to their usage. Java extension displaying inline values in the editor while debugging You can get inline values while debugging PowerShell scripts using the Inline Values support for PowerShell extension. Debug view displayed on break The default value of the debug.openDebug setting is now openOnDebugBreak so that on every breakpoint hit, VS Code will open the Debug view. The Debug view is also displayed on first session start. JavaScript debugging As usual, the complete list of changes can be found in the vscode-js-debug changelog. Improved breakpoint diagnostic tool discoverability Based on heuristics, VS Code will show a notification that suggests opening the breakpoint diagnostic tool if it detects the user may be having trouble getting breakpoints to bind. Notification that reads "It looks like you might be having trouble with breakpoints, would you like to open our diagnostic tool?" This prompt will initially be visible only to a subset of users as we experiment with its efficacy and assertiveness. Private Class Field Support Private class fields are now visible and can be inspected in the debugger. Notebooks Toggle line numbers You can now temporarily toggle the line numbers of a cell in the current session from the cell toolbar, or change the visibility of line numbers for all notebooks through the notebook.lineNumbers setting. Toggle line number of a cell Cell toolbar position per file type The cell toolbar position can be now customized per file type through the notebook.cellToolbarLocation setting. For example, you can have the cell toolbar on the right side for GitHub Issue notebooks but have it on the left for Jupyter notebooks. Math support in Markdown cells You can now use math equations inside of notebook Markdown cells: Math being rendered in a Jupyter notebook VS Code uses KaTeX for rendering the equations. There are two ways to embed a math equation into a Markdown cell: * Using single dollar signs: $...$. This creates an inline math equation. * Using single dollar signs: $$...$$. This creates an centered, block math equation. We implemented math support using an experimental notebook markup renders API, which is still in development. Our eventual goal with this API is to also allow extensions to extend the rendering of Markdown in notebooks. Languages Markdown preview typographer support The new markdown.preview.typographer setting lets you enabled smart quotes and simple typographic replacements in the built-in Markdown preview. In the example below, Markdown text such as (c) gets automatically replaced by copyright symbol (c) in the preview: Smart quotes and text replacement in the Markdown preview The markdown.preview.typographer setting is disabled by default. More files recognized as shellscript Files with the .xsession and .xprofile filename extensions will be automatically recognized as shellscript. Preview features Terminal tabs Tabs in the terminal are available as a preview feature and can be enabled with the following setting: "terminal.integrated.tabs.enabled": true The tabs view is a split pane to the right of two split terminals. It contains icons and labels for each terminal instance. When enabled, the new tabs view will only show by default when there are at least two terminals. For single terminals, the tab is "inlined" into the panel title like so: Terminal tab inlined into the panel title for a single terminal Each tab supports several actions via the context menu. Right-clicking on a tab displays a menu Split and kill terminal are available on hover. Hovering the tab item shows inline action icons We've tried to align how the new tabs behave with how the Explorer works. Here are some of the other behaviors: * Double-clicking the empty space will create a new terminal. * Double-clicking the sash will toggle the tabs view width between the "ideal" size that displays all the titles without truncating and a narrow view that shows only the icons. * The tabs can be moved to the left side using the terminal.integrated.tabs.location setting. * Various other configuration settings are available under terminal.integrated.tabs. Terminal statuses Along with tabs, we have introduced the concept of statuses to the terminal. A terminal can have many statuses, each of which represents a state the terminal can be in temporarily, with the highest severity one being displayed next to the tab. Status icons appear to the right of the terminal title in the tabs view. On hover, details of the status and any associated actions are presented. On a tab associated with a terminal that requires a relaunch, a yellow triangle with an exclamation mark is to the right of the terminal title For now, these states are supported: * Relaunch needed: A warning icon status is used if an extension wants to change a terminal's environment. * Disconnected: A plug icon status is used when the terminal loses its connection with its process. * Bell: A bell icon appears when the bell is enabled via the terminal.integrated.enableBell setting and the terminal bell triggers. We plan to support task states soon so that task run status is available at a glance even without activating the tab. Welcome Page walkthroughs We have expanded the walkthroughs contribution for placing content on the Getting Started page to allow for Markdown in both step descriptions and step main content. Extension contributions to the Getting Started page are an experimental feature, and can be enabled with "workbench.welcomePage.experimental.extensionContributions": true,. The short video belows show an example walkthrough to teach users about the Luna Paint extension. Stepping through the Luna Paint extension's walkthrough contribution Custom hover support in Activity bar and Panel In this milestone, we added experimental support for custom hovers in the Activity bar and Panel. You can enable custom hovers using the setting workbench.experimental.useCustomHover. Custom hover in Activity Bar and Panel Theme: GitHub Light Theme Product Icon Theme: Fluent Icons Remote Repositories (RemoteHub) As part of this release, we are previewing a new built-in extension, Remote Repositories (RemoteHub), which allows you to instantly browse, search, edit, and commit to any GitHub repository directly from within VS Code without having to clone or have the repository locally. It is currently only available in the Insiders edition of VS Code. Getting started To get started, run the Open Remote Repository... command from the Command Palette. From there, you can paste in any GitHub URL, or choose to search for a specific repository or pull request. Open Remote Repository picker Theme: Amethyst Dark Theme Once you enter a URL or choose a repository or pull request, VS Code will open a new workspace for that repository. The remote status indicator, on the left side of the Status bar, shows the connected remote provider name, for example GitHub, for the remote repository. Remote Repositories Demo showing various source control operations Theme: Amethyst Dark Theme Features * Instantly open any GitHub repository without cloning or having the repository locally. * Easily edit and contribute to any GitHub repository - directly commit your changes to GitHub, or open a pull request. * Continue in another environment - via the Continue on... command (accessible from the Command Palette or the remote indicator quick pick menu). + Clone the repository locally + Clone the repository into a container - requires the Remote - Containers extension * Provides a familiar user interface similar to working on a local repository (*see "Limitations" below). + Explorer - Open, copy, move, rename, and delete files and folders + Search - Fast full-text search^* + Source Control - Stage and commit your changes, as well as many other source control actions + Timeline view - See file history with diff support + Quick Open - Quickly find files to open + Remote Indicator - Shows the provider that the remote repository is connected to (for example, GitHub) * Work on different branches simultaneously - each remote branch is treated like a separate worktree (in Git parlance), meaning that any changes you make are isolated to that branch. You don't need to stash your changes just to switch to a new branch in order to checkout a PR or start on a new work item. And when you go back to the previous branch, your changes will still be there. * Install the GitHub Pull Requests and Issues extension, and quickly view, explore, and checkout pull requests, view and start working on issues. Limitations * Limited language intelligence - Many language servers don't yet understand this virtualized environment. TypeScript supports single file intelligence for remote repositories. * Limited extension support - As with language servers, many extensions don't work with remote repositories. Extensions can opt-out and will not be activated for virtual workspaces. See the Extension authoring section below for more details. * Search - Full-text search requires a pre-built index for exact text matching, otherwise it will fallback to GitHub's fuzzy default-branch only native search. * Terminals - Not supported. Any terminals open will be on your local file system. * Debugging - Not supported. * Tasks - Not supported. Tell us what you think We are very excited for you to play with Remote Repositories (RemoteHub) and can't wait for your thoughts and feedback. We are just getting started on this journey, so expect the feature set to grow and the limitations to shrink as we continue development. We will also be expanding the set of supported providers. GitHub is just the first provider we are supporting, with Azure Repos coming soon. TypeScript 4.3 This release continues to improve our support for the upcoming TypeScript 4.3 release. You can read more about the new language features and improvements in TypeScript 4.3 on the TypeScript blog. Here are some of the editor improvements it enables: * Support for override. There are also Quick Fixes for adding the override keyword. * Import statement completions. This is like auto import, except you are typing in the import statement itself. * JSDoc @link tag support. To start using the TypeScript 4.3 nightly builds, just install the TypeScript Nightly extension. Please share your feedback and let us know if you run into any bugs with TypeScript 4.3. Workspace Trust In last milestone's release notes, we shared our work on Workspace Trust specifically for extension authors. We made great progress this milestone for both the extension API and user experiences. That being said, Workspace Trust will remain disabled for this release, but we would love for you to try it out and provide feedback. You can enable the feature with the following setting security.workspace.trust.enabled. Once enabled, you will see the following dialog when opening folders in VS Code. Workspace Trust startup dialog This dialog is important for allowing the user to make a decision early and understand the impact of their decision. Once you understand the feature, you may want to customize when to display the dialog using the security.workspace.trust.startupPrompt setting. You can follow the development of Workspace Trust and provide feedback in issue #106488. Contributions to extensions Remote Development Work continues on the Remote Development extensions, which allow you to use a container, remote machine, or the Windows Subsystem for Linux (WSL) as a full-featured development environment. Feature highlights in 1.56 include: * New volume view when you Clone Repository in Container Volume. * Local terminal warning when connected to a remote. * Prompt to install Docker Desktop when starting with the Remote - Container extension. You can learn about new extension features and bug fixes in the Remote Development release notes. GitHub Pull Requests and Issues Work continues on the GitHub Pull Requests and Issues extension, which allows you to work on, create, and manage pull requests and issues. To learn about all the new features and updates, you can see the full changelog for the 0.26.0 release of the extension. Extension authoring Define whether your extension supports a virtual workspace The new Remote Repositories extension lets you open a folder with content directly from GitHub. It does so by providing a virtual file system and opening a workspace on it. Other extensions do the same. They serve content from ftp-servers, from cloud storage, or from databases and seamlessly provide these as files to the user in VS Code. The virtual file system feature has existed for some time, however we have observed that not all extensions can support running in a virtual workspace, where the workspace files do not exist physically on disk. For this reason, we have added support for an extension to signal whether it supports running in a virtual workspaces or not. When an extension has opted-out, it will not be activated by VS Code for a virtual workspace and the user will not see errors from this extension. An extension opts out of a virtual workspace setup in the package.json as shown below: { "capabilities": { "virtualWorkspaces": false } } The goal is that as many extensions as possible support running in a virtual workspace. However, this is not always possible, particularly when an extension is using components that assume that files are physically present. The Virtual Workspaces guide documents how an extension can support a virtual workspace. Call to Action: Please check whether your extension can handle virtual workspaces, and set the virtualWorkspaces capability accordingly in your package.json. There will be a transition period until extensions have adopted the new virtualWorkspaces property. Until then, we maintain an internal list for extensions that we think should have the virtualWorkspaces capability set to false. This was done based on an analysis whether the extensions is using the Node.js fs module and is therefore accessing the file system directly. However, the extension author is in a much better position to assess whether an extension supports the virtualWorkspaces capability. To track the adoption, we have created the following tracking issue #122836. If your extension is in the list and you have adopted the virtualWorkspaces capability, please add a comment in the above issue. Remote indicator menu Extensions can now contribute to the remote indicator menu: Remote indicator on the left of the Status bar The statusBar/remoteIndicator menu contribution point adds a command to the remote indicator menu. "contributes": { "menus": { "statusBar/remoteIndicator": [ { "command": "remote-wsl.newWindow", "when": "!remoteName && isWindows", "group": "remote_10_wsl_0_local@1" } ]}, "commands": [ { "command": "remote-wsl.newWindow", "title": "New WSL Window", "category": "Remote-WSL" } ] } To allow the menu to sort entries based on the provider, the group needs to follow a specific syntax: For commands from remotes: remote_${orderOfGroups}_${remoteName)_$ {internalGrouping}@${orderInGroup} For commands from virtual file systems: virtualfs_${orderOfGroups}_$ {fileScheme)_${internalGrouping}@${orderInGroup} * orderOfGroups is a 2-digit number used to sort the groups * remoteName is first part of the remoteAuthority (wsl, ssh,...) * fileScheme is the URI schema of the virtual file system * internalGrouping is of free use for each contribution * orderInGroup is used to sort entries within your group Example: remote_10_wsl_1-open@1 iframes now used for most webviews Ever since the webview API was first introduced, we've implemented webview using Electron's webview tag. On the web however, VS Code's webviews are instead implemented using standard