is now available! Read about the new features and fixes from September.

July 2018 (version 1.26)

Update 1.26.1: The update addresses these issues.

Downloads: Windows: x64 | Mac: Intel | Linux 64-bit: deb rpm tarball | 32-bit: deb rpm tarball


Welcome to the July 2018 release of Visual Studio Code. There are a number of significant updates in this version that we hope you will like, some of the key highlights include:

If you'd like to read these release notes online, go to Updates on code.visualstudio.com.
You can also check out this 1.26 release highlights video from Cloud Developer Advocate Brian Clark.

The release notes are arranged in the following sections related to VS Code focus areas. Here are some further updates:

  • Workbench - New View menu layout, copy relative path action, offline mode.
  • Integrated Terminal - Improved multiline support, rendering improvements.
  • Languages - Convert named imports to namespace imports, JSX folding.
  • Debugging - Improved stop session and smart step debugging.
  • Preview Features - Themable custom tool and menu bar for Windows and Linux.
  • Extension Authoring - QuickInput API, extensionPack declaration, webview titlebar icons.

Insiders: Want to see new features as soon as possible? You can download the nightly Insiders build and try the latest updates as soon as they are available. And for the latest Visual Studio Code news, updates, and content, follow us on Twitter @code!

Workbench

Breadcrumbs

The editor now has a navigation bar above its contents - we call it Breadcrumbs. It shows the current location and allows you to quickly navigate between symbols and files. To start using breadcrumbs, enable it with the View > Show Breadcrumbs command or via the breadcrumbs.enabled setting.

When using editor tabs (default), breadcrumbs are displayed in a separate row below the editor title. If you are not using editor tabs, breadcrumbs show as an interactive file path next to the title.

Breadcrumbs enabled

Breadcrumbs always show the file path and, with the help of extensions, the symbol path up to the cursor position. The symbols shown are the same as in Outline view and Go to Symbol and so existing extensions will just work with breadcrumbs.

The appearance of breadcrumbs can be customized. If you have very long paths or are only interested in either file paths or symbols paths, you can use the breadcrumbs.filePath and breadcrumbs.symbolPath settings. Both support on, off, and last and they define if or what part of the path you see.

To interact with breadcrumbs, use the Focus Breadcrumbs command or press ⇧⌘. (Windows, Linux Ctrl+Shift+.). It will select that last element and open a dropdown that allows you to navigate to a sibling file or symbol. Use the (Windows, Linux Left) and (Windows, Linux Right) keyboard shortcuts to go to elements before or after the current element. When the dropdown appears, simply start typing - all matching elements will be highlighted and the best match will be selected for quick navigation.

Breadcrumbs active

You can also interact with breadcrumbs without the picker. Press ⇧⌘; (Windows, Linux Ctrl+Shift+;) to focus the last element, use (Windows, Linux Left) and (Windows, Linux Right) to navigate, and use Space to reveal the element in the editor.

Problems panel Quick Fixes

You can now apply Quick Fixes from the Problems panel. A light bulb indicating Quick Fixes is shown when you hover or select a problem entry. Quick Fixes can be applied by clicking on the light bulb or by opening the context menu for the problem entry.

Quick fixes

Note: The light bulb indicator is shown only if the extension contributing Quick Fixes provides Diagnostic information associated with the Quick Fix.

User setup for Windows

Announced last release, the user setup package for Windows is now available on stable. Installing the user setup does not require Administrator privileges as the location will be under your user Local AppData (LOCALAPPDATA) folder. User setup also provides a smoother background update experience.

Download User Setup

If you are a current user of the system-wide Windows setup, you will be prompted to install user setup, which we recommend using from now on. Don't worry, all your settings and extensions will be kept during the transition. During installation, you will also be prompted to uninstall the system-wide setup.

Grid: Automated maximize of minimized editors

One feature we lost during the introduction of the grid editor layout last milestone was the ability to have editors automatically maximize when you focus them and they are in their minimized state. This feature is now working as before:

Grid maximize

Note: You can always maximize the active editor via View: Maximize Editor Group (workbench.action.minimizeOtherEditors) or reset all editor sizes via View: Reset Editor Group Sizes (workbench.action.evenEditorWidths).

View menu cleanup

The View menu was growing very large and we decided to move many of the entries into a separate Appearance sub-menu to clean it up.

View menu

Copy relative path

VS Code always had an action to copy the absolute path of a file to the clipboard (⌘K ⌥⌘C (Windows Shift+Alt+C, Linux Ctrl+K Ctrl+Alt+C)). There is now a new action Copy Relative Path (⌘K ⇧⌥⌘C (Windows Ctrl+K Ctrl+Shift+C, Linux Ctrl+K Ctrl+Shift+Alt+C)) to copy the file path relative to the workspace folder root.

Note: You can get to this action from the context menu (for example, on a tab or a file in the File Explorer) by pressing and holding the Shift key (Alt key on macOS) before opening the menu.

Custom view: File resource decorations

Custom views showing file resources will now have file decorations (Git, problems) shown. You can disable them using the settings explorer.decorations.colors and explorer.decorations.badges which disables them in File Explorer, Open Editors and Custom views.

Custom view decorations

Run npm scripts from package.json

You can now run an npm script in a package.json file from the hover as shown below or from the context menu.

npm script hover

Opening folder URIs

You can now open an URI as a folder in VS Code, if there is an extension contributing a FileSystemProvider for that URI. We introduced a new command-line argument --folder-uri to do this.

The following CLI command opens the VS Code GitHub repository as a folder, if you have RemoteHub extension installed.

code --folder-uri remotehub://github.com/microsoft/vscode

Open folder URI

Rapid render

On startup, the basic workbench layout is now restored much faster. The restoration order is Activity Bar, Side Bar, and Status Bar, followed by headers and icons, and then the Explorer and editor region are populated.

Rapid render

Rapid render is meant to improve perceived performance as the time you are looking at an empty canvas is reduced. We have more ideas how to improve rendering performance and we are interested in your feedback.

Output panel

VS Code's main, window, and shared processes each have their own logging channel, where you can now view the telemetry events sent when the log level is set to "Trace". Data common to all telemetry events will not be visible here for the sake of brevity. The complete payload of each telemetry event is logged in a separate log file named telemetry.log which you can access via the Developer: Open Log File... command.

Offline mode

Some users do not want any outgoing network requests from VS Code unless they specifically invoke features that require online access. To support this offline mode, we have added new settings to turn off features such as automatic extension update checking, querying settings for A/B experiments, and fetching of online data for auto-completions.

Below is the complete list of settings to control VS Code features that make network requests:

  • update.mode
  • update.showReleaseNotes
  • extensions.autoupdate
  • extensions.autoCheckUpdates
  • extensions.showRecommendationsOnlyOnDemand
  • workbench.settings.enableNaturalLanguageSearch
  • workbench.enableExperiments
  • telemetry.enableTelemetry
  • telemetry.enableCrashReporter
  • git.autofetch
  • npm.fetchOnlinePackageInfo

Accessibility improvements

We have fixed a large number of accessibility issues - mostly around keyboard navigation, screen reader support, and color contrast. The full list can be found here.

Integrated Terminal

Column selection

Column selection is now supported within the Integrated Terminal via Alt+click.

Terminal column selection

Improved multiline support

Double clicking to select words in the terminal now selects words that are split over lines.

Frontend and backend are now synchronized

The data stream that comes into the Integrated Terminal is now synchronized with the backing pseudoterminal/shell process. This means that the data coming into the terminal can no longer flood the UI thread and cause unresponsiveness, SIGINT (Ctrl+C) should always be responsive, and the time command should return accurate results.

Dynamic texture atlas

The Integrated Terminal now defaults to using a "dynamic texture atlas" for canvas rendering. This changes the caching strategy used by the terminal to store character glyphs. Instead of being a fixed set of glyphs on the default background, glyphs are now added to the texture atlas as they are required, regardless of the background being used. This should reduce the first terminal start up time and the rendering time of characters not using the default background, as well as improving overall rendering performance.

This came in as an upstream community contribution to xterm.js.

Languages

TypeScript 3.0

VS Code now ships with TypeScript 3.0.1. This major update brings support for project references, better support for tuples, and other language and tooling features. You can read more about TypeScript 3.0 here.

Better error reporting

The TypeScript team has done a lot of work to make JavaScript and TypeScript error messages smarter and clearer. Some error messages now include links to relevant locations in the source code.

Related locations showing in a diagnostic. Clicking on 'box.ts' will show the definition of 'width' in 'box'

Messages for unions and other complex types should also be more concise and helpful. For example, a simple type error in JSX could sometimes produce a complex error message like this:

How this simple type error used to be reported by TypeScript 2.8

Thanks to TypeScript 3.0, the error is much more readable in VS Code 1.26:

How the error is now reported

JSX tag completion

JSX tags are now closed automatically when you type > in a JavaScript or TypeScript file:

Tag completion of JSX tags

This behavior matches what VS Code already provided in HTML files. Auto closing of tags can be disabled by setting "javascript.autoClosingTags": false and "typescript.autoClosingTags": false.

Add all missing imports Quick Fix

The Add missing import Quick Fix can now be applied to all missing imports in a JavaScript/TypeScript file:

Adding multiple missing imports with a single quick fix

This Quick Fix will only add imports for symbols with a single potential definition. If there are multiple potential definitions of a symbol in the current project, for example having two different files export a symbol called Button, you must Quick Fix the individual error and select the specific import that you intended.

To use this Quick Fix in JavaScript files, enable semantic checking.

JSX folding

JSX tags are now foldable when using syntax aware folding.

Folding JSX tags

Convert between named imports and namespace imports

Two new refactorings let you quickly convert between named imports and namespace imports in JavaScript and TypeScript:

convert to namespace import

Quickly navigate jsconfig.json and tsconfig.json project references by Ctrl clicking on project reference paths (Cmd+click on macOS):

Cmd click on the path to open the referenced project's tsconfig

The extends path is now also clickable.

Debugging

Improved stop debug behavior

In previous releases, the Debug: Stop action (found on the Debug toolbar) would always kill a debuggee and its child processes immediately, without giving the debuggee a chance to clean up gracefully. Some users didn't like this behavior because they were forced to do manual cleanup after stopping a debug session.

In this release, we've improved the Debug: Stop action in the following way:

  1. When pressing Stop for the first time, the debuggee is no longer killed immediately but it is requested to shutdown gracefully (and to clean up everything as necessary).

  2. If there are no breakpoints (or problems) in that shutdown code, the debuggee and the debug session will terminate. The user will not see any difference in behavior to previous versions of VS Code.

  3. However, if the debugger hits a breakpoint in the shutdown code or if the debuggee does not terminate properly by itself, then the debug session will not end.

  4. In this case, pressing the Stop button again will force terminate the debuggee. So if you see that a debug session doesn't end when you press the red Stop button, then press the button again to force a shutdown of the debuggee.

Note: This feature is only supported by debugger extensions that have opted into implementing it. Currently this is only the built-in Node.js debugger. We expect other debug extensions to support this feature soon.

Changed smartStep behavior for Node/Chrome debugging

Previously, "smartStep": true would cause the Node.js debugger to not stop in source code without source maps. This can happen in two ways:

  • Files that don't have source maps at all (source code that isn't transpiled or .js files shipped with node modules).
  • Transpiled files that do have source maps, but there are individual lines that aren't mapped (extra lines that TypeScript inserts when down compiling some features like async/await).

With VS Code 1.26, "smartStep": true will only affect the second type, lines that are missing from a source map. Now you'll be able to step into .js files while still skipping TS async/await code.

We changed this because we realized that the old smartStep behavior was too aggressive. Skipping inserted code is usually correct, but skipping in the first scenario only makes sense for some projects and users. In addition, using the skipFiles option in your launch.json configuration file does a better job of covering the case for entire files, since it can target files more precisely and is faster.

So, if you are using smartStep and notice that the debugger is no longer auto-skipping through files without source maps, you can use skipFiles to get the previous behavior back. See Skipping uninteresting code for examples of how to configure skipFiles to skip source code in node_modules, internal node files, or any other files that you don't want to step through.

Extensions

This release makes it easier to search for extensions by adding IntelliSense autocompletions to the extension search field. This will help you refine your extension searches to filter results based on things like category and install state; or sort results by name, rating, or install count. Type '@' or ⌃Space (Windows, Linux Ctrl+Space) to trigger suggestions for supported query parameters.

Extension Search IntelliSense

Extension Pack management

Extension Pack management has become a lot smoother in this release. An Extension Pack is installed, uninstalled, enabled or disabled always as a single pack. You can also now uninstall or disable an extension belonging to an Extension Pack without requiring you to uninstall or disable the entire Extension Pack.

There is also a new Extension Pack tab when you open extension details showing which extensions are bundled in the Extension Pack.

Extension Pack

Note: This needs adoption by Extension Packs. See Extension Packs revisited for more details.

Disabling extensions from command line

You can now disable extensions from the command line using the new argument --disable-extension.

  • code <folder_path> --disable-extension ms-python.python - Opens the folder with ms-python.python extension disabled.
  • code <folder_path> --disable-extension ms-python.python --disable-extension ms-dotnettools.csharp - Opens the folder with ms-python.python and ms-dotnettools.csharp extensions disabled.

Preview Features

Preview features are not ready for release but are functional enough to use. We welcome your early feedback while they are under development.

New Settings editor

In this milestone, we continued work on a GUI for editing settings. It's still a preview, but if you'd like to try it out, you can open it with the Preferences: Open Settings (Preview) command. We would like to hear any feedback you have - you can leave it on this GitHub issue.

New Settings editor

Some of the new changes compared to last month are:

  • The header UX has been refreshed and cleaned up, and the actions to only show modified settings and to open the JSON editor have been moved under the ... menu to the right.
  • The table of contents on the left is now collapsed by default, and expands as you scroll to reveal the current section.
  • Setting descriptions are now rendered as Markdown. Some settings have external links to relevant docs, and references to other settings are now clickable links that scroll to the setting. The enumDescriptions of enum-type settings are now shown after the setting description (and in the JSON editor as well):

setting links and Markdown

  • A new control for the files.exclude and search.exclude settings makes it easier to add or remove glob patterns, and to see which ones are applied for the current scope:

new exclude control

  • The controls in the settings editor are now themable. See the new theme colors under New theme colors.

Custom title bar and menus for Windows/Linux

This milestone we improved the custom menus on Windows and Linux when the custom title bar is enabled. While still in preview, you can try it out by setting window.titleBarStyle to custom in your settings.json.

Some highlights include:

  • The menus are now themable. See the new theme colors under New theme colors.

    Themed Menus

  • Keyboard and mouse interaction with the menus is more coherent. Before, there were several focus indicators making the menus unclear. Now, the menus function in way that is much more familiar.

  • Many accessibility issues have been resolved to improve the experience for those needing larger zoom levels or using screen readers.

We will continue to improve the new menus and title bar as well as address issues tagged with the workbench-title or workbench-menu labels.

Extension Authoring

QuickInput API

The QuickPick and InputBox APIs are now stable. They allow for more flexible collection of user input than the existing showQuickPick and showInputBox APIs. There are samples of QuickInput API usage in a sample extension.

Multi-step input sample

Extension Packs revisited

Defining an Extension Pack now uses a new property called extensionPack instead of extensionDependencies in package.json. This is because extensionDependencies is mainly used to define functional dependencies among extensions that prevents uninstalling or disabling an extension dependency without uninstalling or disabling the dependent extension.

An Extension Pack should not have any functional dependencies with its bundled extensions and they should be manageable independent of the pack. Below is an example extensionPack entry which defines an Extension Pack that bundles several debugger extensions.

"extensionPack": [
    "andreweinand.mock-debug",
    "ms-vscode.mono-debug",
    "ms-vscode.cpptools",
    "ms-dotnettools.csharp",
    "vscjava.vscode-java-debug"
]

This will make it much simpler and easier for users to manage an Extension Pack and its bundled extensions. See Extension Pack management.

Better Workspace edit

The WorkspaceEdit and applyEdit APIs have been extended to allow extensions to create, rename, and delete files. Before, only textual edits were possible. The new APIs allow for better refactorings; for example, renaming a file when a class name is changed.

New theme colors

There are new theme colors for the breadcrumbs:

  • breadcrumb.foreground: Color of breadcrumb items.
  • breadcrumb.focusForeground: Color of focused breadcrumb items.
  • breadcrumb.activeSelectionForeground: Color of selected breadcrumb items.
  • breadcrumbPicker.background: Background color of breadcrumb item picker.

The controls of the new Settings editor are now themable:

  • settings.headerForeground: The foreground color for a section header or active title.
  • settings.modifiedItemForeground: The foreground color for the modified setting indicator.
  • settings.inactiveSelectedItemBorder: The color of the selected setting row border, when the settings list does not have focus.
  • settings.dropdownBackground: Dropdown background.
  • settings.dropdownForeground: Dropdown foreground.
  • settings.dropdownBorder: Dropdown border.
  • settings.checkboxBackground: Checkbox background.
  • settings.checkboxForeground: Checkbox foreground.
  • settings.checkboxBorder: Checkbox border.
  • settings.textInputBackground: Text input box background.
  • settings.textInputForeground: Text input box foreground.
  • settings.textInputBorder: Text input box border.
  • settings.numberInputBackground: Number input box background.
  • settings.numberInputForeground: Number input box foreground.
  • settings.numberInputBorder: Number input box border.

The custom menus on Windows and Linux are now themable:

  • menu.background: Background of menus and context menus.
  • menu.foreground: Foreground of menus and context menus.
  • menu.selectionBackground: Background of selected item in menus and context menus.
  • menu.selectionForeground: Foreground of selected item in menus and context menus.
  • menu.selectionBorder: Border of selected item in menus and context menus.
  • menubar.selectionBackground: Background of selected top-level menu in the menubar.
  • menubar.selectionForeground: Foreground of selected top-level menu in the menubar.
  • menubar.selectionBorder: Border of selected top-level menu in the menubar.

Updated default theme colors

As part of our accessibility improvements, we've updated a few default theme colors to ensure they meet the color contrast requirements. The full list of color contrast fixes can be found here.

Definition providers may now return a DefinitionLink object. Definition links provide additional metadata over normal location definitions, including the range of the defining symbol:

import * as vscode from 'vscode';

export function activate(context: vscode.ExtensionContext) {
  vscode.languages.registerDefinitionProvider('markdown', new LineLinkDefinitionProvider());
}

export class LineLinkDefinitionProvider implements vscode.DefinitionProvider {
  async provideDefinition(
    document: vscode.TextDocument,
    position: vscode.Position,
    token: vscode.CancellationToken
  ): Promise<vscode.DefinitionLink[]> {
    const wordRange = document.getWordRangeAtPosition(position, /<\d+>/);
    if (wordRange.isEmpty) {
      return [];
    }

    const targetLine = +document.getText(wordRange).slice(1, -1);
    return [
      {
        // Definition location
        targetRange: new vscode.Range(targetLine - 1, 0, targetLine, 0),
        targetUri: document.uri,

        // Range of the defining symbol
        originSelectionRange: new vscode.Range(
          wordRange.start.translate({ characterDelta: 1 }),
          wordRange.end.translate({ characterDelta: -1 })
        )
      }
    ];
  }
}

Debug extensions

New home for the Debug Adapter Protocol

We've moved the Debug Adapter Protocol from its old location to a new website https://microsoft.github.io/debug-adapter-protocol and a corresponding repository https://github.com/microsoft/debug-adapter-protocol.

A companion blog, New home for the Debug Adapter Protocol, provides background and additional details about the move.

Everyone who is using the DAP JSON-schema programmatically from the old location https://raw.githubusercontent.com/Microsoft/vscode-debugadapter-node/main/debugProtocol.json should update their source code to the new location:

https://microsoft.github.io/debug-adapter-protocol/debugAdapterProtocol.json

For the next two releases (August & September), we will keep the schema at the old location up-to-date, but we are planning to remove it in October.

New terminate request for Debug Adapter Protocol

A new terminate request and a corresponding supportsTerminateRequest capability have been added to the Debug Adapter Protocol in order to support the graceful shutdown of debuggees explained above. If a debug adapter returns true for the supportsTerminateRequest capability, VS Code will first send a terminate request to the debug adapter when it stops a debug session. The implementation of the terminate request in the debug adapter should request the debuggee to terminate itself. On Unix-based operating systems, this could easily be achieved by sending the SIGINT signal to the debuggee.

Webview icons

Webviews may now provide a custom icon that is shown in the tab bar and OPEN EDITORS view:

import * as vscode from 'vscode';
import * as path from 'path';

export function activate(context: vscode.ExtensionContext) {

    context.subscriptions.push(vscode.commands.registerCommand('catCoding.start', () => {
        const panel = vscode.window.createWebviewPanel('catCoding',
            "Coding Cat", vscode.ViewColumn.One, { });

        panel.iconPath = vscode.Uri.file(path.join(context.extensionPath, 'media', 'cat.png'));
    });
}

A webview with a custom icon

Terminal access API

The terminal access APIs are now stable. They allow extensions to access Terminal objects, regardless of whether the extension created them or not.

export namespace window {
  export const terminals: ReadonlyArray<Terminal>;
  export const onDidOpenTerminal: Event<Terminal>;
}

URI handler API

The URI handler API is now stable. It allows extensions to handle system-wide URIs.

export interface UriHandler {
  handleUri(uri: Uri): ProviderResult<void>;
}

export namespace window {
  export function registerUriHandler(handler: UriHandler): Disposable;
}

It comes with a onUri activation event which activates an extension whenever a URI directed towards itself is opened by the operating system.

Refer to the Git extension's GitProtocolHandler for a reference implementation.

Node.js update

The version of Electron that VS Code runs on has been updated which brings with it an update to Node.js that VS Code ships with from 7.9 to 8.9. All extensions will now run on this newer version of Node.js.

There are some changes which could affect extensions:

  • The natives node module no longer works (see #47569).
  • The legacy debug protocol and the --debug flag is no longer supported (see #55907).
  • If language servers written in Node.js using stdio as the transport encounter problems in VS Code 1.26, the fix for extension authors using the LSP client and server libraries is to switch the transport to TransportKind.ipc instead of TransportKind.stdio and republish their extension.

Proposed Extension APIs

Every milestone comes with new proposed APIs and extension authors can try them out. As always we are keen on your feedback. This is what you have to do to try out a proposed API:

  • You must use Insiders because proposed APIs change frequently.
  • You must have this line in the package.json file of your extension: "enableProposedApi": true.
  • Copy the latest version of the vscode.proposed.d.ts file into your project.

Note that you cannot publish an extension that uses a proposed API. We may likely make breaking changes in the next release and we never want to break existing extensions.

TextSearchProvider, FileSearchProvider, FileIndexProvider

We've added a set of APIs that let extensions implement text search and file search in VS Code.

TextSearchProvider is invoked when a user uses the Search view or when an extension uses the new API workspace.findTextInFiles. It returns text matches incrementally through the progress callback.

There are two ways to implement file search covering the two common use-cases, through a FileIndexProvider or a FileSearchProvider. A FileIndexProvider is invoked once when the user opens Quick Open, and must return an array of every file in the workspace. VS Code then searches within this list and applies its own fuzzy-matching logic to return the correct set of results to the user. If your extension is capable of providing a list of every file in the workspace, then implementing a FileIndexProvider is the easier way to support file search.

If instead your extension needs to handle the user's search query and return its own list of filtered results, implement a FileSearchProvider. It's invoked on the user's every keypress in Quick Open, and must return a filtered and sorted set of file matches.

export interface TextSearchProvider {
  provideTextSearchResults(
    query: TextSearchQuery,
    options: TextSearchOptions,
    progress: Progress<TextSearchResult>,
    token: CancellationToken
  ): Thenable<void>;
}

export interface FileIndexProvider {
  provideFileIndex(options: FileIndexOptions, token: CancellationToken): Thenable<Uri[]>;
}

export interface FileSearchProvider {
  provideFileSearchResults(
    query: FileSearchQuery,
    options: FileSearchOptions,
    token: CancellationToken
  ): Thenable<Uri[]>;
}

export namespace workspace {
  export function registerTextSearchProvider(
    scheme: string,
    provider: TextSearchProvider
  ): Disposable;
  export function registerFileIndexProvider(
    scheme: string,
    provider: FileIndexProvider
  ): Disposable;
  export function registerFileSearchProvider(
    scheme: string,
    provider: FileSearchProvider
  ): Disposable;
}

findTextInFiles API

New proposed API has been added to allow extensions to search for text patterns within the workspace:

export namespace workspace {
  export function findTextInFiles(
    query: TextSearchQuery,
    options: FindTextInFilesOptions,
    callback: (result: TextSearchResult) => void,
    token?: CancellationToken
  ): Thenable<void>;
}

This is the counterpart of workspace.findFiles, which searches for files in the workspace.

Miscellaneous

Electron update

In this release, we updated from Electron 1.7.12 to 2.0.5. This brings in a Chromium update from version 58 to 61 and Node.js from 7.9 to 8.9.

New Documentation

Logpoints blog post

You can read Kenneth's recent blog post to learn about Node.js debugging Logpoints and auto-attach. Logpoints let you quickly output logging information without changing source code or interrupting your debugging session.

IntelliCode FAQ

If you are a Python developer, have a look at IntelliCode, a new tool that enhances software development using artificial intelligence (AI). The IntelliCode extension provides a set of AI-assisted capabilities for IntelliSense in Python, such as inferring the most relevant auto-completions based on the current source code context.

IntelliCode extension

Notable Changes

  • 53532: Editor: load changes to file in the background if file already loaded
  • 53586: Node debug: auto attach mode is not remembered
  • 53022: "Read-only" label in the editor tabs for files that are read only
  • 48275: resourceIsFile context key is no longer supported

Thank You

Last but certainly not least, a big Thank You! to the following folks that helped to make VS Code even better:

Contributions to vscode:

Contributions to language-server-protocol:

Contributions to vscode-chrome-debug:

Contributions to vscode-chrome-debug-core:

Contributions to vscode-vsce:

Contributions to vscode-recipes:

Contributions to localization:

There are over 800 members in the Transifex VS Code project team with about 100 active contributors every month. We appreciate your contributions, either by providing new translations, voting on translations, or suggesting process improvements.

Here is a snapshot of contributors for this release. For details about the project including the contributor name list, visit the project site at https://aka.ms/vscodeloc.

  • Chinese (Simplified): Joel Yang, Yusong, pluwen, Liu Dingming 刘丁明, hackereric, Simon Chan, 韦煊 王, gzponline, Ziming Wang.
  • Chinese (Traditional): Duran Hsieh, Will 保哥, Poy Chang, Alan Tsai, Kevin Yang, Winnie Lin, MartinLau, Ben Tsai 蔡和恩, Alan Liu.
  • French: Antoine Griffard, Ludovic P, William Thibodeau, Adrien Clerbois, Alain BUFERNE.
  • German: Carsten Siemens, Carsten Kneip, Markus Hatvan, Väinämö Lumikero, Ettore Atalan, AlCalzone, Levin Rickert.
  • Italian: Alessandro Alpi, Andrea Dottor, Emilie Rollandin, Riccardo Cappello, Aldo Donetti, Massimo.
  • Japanese: Satoshi Kajiura, Yuichi Nukiyama, Shunya Tajima, yoshioms, Nakamura Yuta.
  • Korean: Helloyunho.
  • Russian: Michel Ace.
  • Spanish: Alberto Poblacion, Julián Martínez, Alejandro Medina, José M. Aguilar, Carlos Mendible, Pedro Sanchez, Lio Fleishman.
  • Bosnian: Bahrudin Hrnjica.
  • Bulgarian: Любомир Василев.
  • Czech: Ľuboš Uličný, Ľubomír Kováč, Frantisek Veris.
  • Dutch: Gerald Versluis, RubenJacobse, Armand Duijn, Dirk Doesburg, Maarten van Stam, Dean Wyns.
  • English (United Kingdom): Matthew John Cheetham, Swotboy2000.
  • Finnish: Feetu Nyrhinen, Petri Niinimäki, Make.
  • Greek: Ioannis Paraskevopoulos, Theodore Tsirpanis.
  • Hungarian: Dóczi Dominik.
  • Indonesian: Laurensius Dede Suhardiman, Wildan Mubarok, Riwut Libinuko, Bagus Ilman, Lundy Orlando.
  • Norwegian: andreona, Daniel Bjørnbakk.
  • Polish: Patryk Brejdak, Sebastian Baran, Igor Śpiączka, Lukasz Woznicki.
  • Portuguese (Brazil): Lucas Miranda, Otacilio Saraiva Maia Neto, Roberto Fonseca, Marcelo Camargo, Marcelo Novaes, Victor Hugo Schmidt, Pedro Sereno, Rafael Oliveira, Danilo Dantas, Vitor Dutra Freire, Luan Moreno Medeiros Maciel, Fabio Correia.
  • Portuguese (Portugal): Daniel Correia, Pavlo Zakharuk, António Santos, João Mata, Diogo Barros, Danilo Dantas.
  • Romanian: Schiriac Robert, Cornel Cocioaba, Dan Ichim, Alexandru Spinu, ovisan, Bogdan Mateescu.
  • Tamil: Jeyanthinath Muthuram, Jam Station.
  • Ukrainian: Oleksandr, Fedir Gordiienko, Volodymyr Holovka.