Powerful source code editor developed by Microsoft for Windows

Visual Studio Code

Join our mailing list

Stay up to date with latest software releases, news, software discounts, deals and more.

Download Visual Studio Code 1.28.2

Visual Studio Code

 -  100% Safe  -  Freeware

What's new in this version:

Visual Studio Code 1.28.2

Fixed issues:
- September 2018 Recovery 2 Endgame
- Keep spawning powershell.exe and conhost.exe
- VSCode frequently crashes when ctrl+P searching after 1.28
- debug: on restart, make sure to first disconnect and only then run the prelaunch tasks
- “Remove from recent opened” takes no effect
- Restarting the debug process fails
- Apply selection even when the items don't change
- Auto import not being placed correctly
- Code completion for import suggestion stopped working
- Intellisense - Import suggestions show up but are not inserted/loaded

Visual Studio Code 1.28.1

Release highlights:
- VS Code file icons reflect file type in your OS explorer
- Tune your snippet collection per workspace
- Use Tab to easily cycle through IntelliSense suggestions
- New command to go to the location of your last edit
- Save a file without changing the existing formatting
- Better delete conflict handling, new rebase on sync option
- Rename a JS/TS file through its import path
- Quickly update a function to use async and await
- Collapse code blocks, multi-line lists, and embedded HTML
- We decided to revisit the behavior of our commands for toggling panels (Terminal, Output, Problems, Debug Console). You can follow issue 19400 for the background on the change

The old behavior was:
- Panel shows if not visible
- Panel hides if visible

The new behavior is:
- Panel shows if not visible
- Panel hides if having keyboard focus
- Panel gets focused when visible but not focused

Visual Studio Code 1.28.0

- After formatting you need to scroll left
- Must tab through deleted tab stops in snippets
- Debug toolbar buttons disabled
- "Clear Recently Opened" should also clear editor quick pick history
- Reveal untitled file when saving
- Preserve quick open input on Escape
- UriDisplayService is missing remote share path name
- Mechanism to abort the debug launch without showing launch.json
- Debug Hover Widget - Enable the widget resizing for long items whose overflow is hidden
- Conditional breakpoint prompt should offer to enable breakpoints if breakpoint is already disabled
- Extensions: allow to right click to bring up gear menu
- Use --force arg to prevent prompts while installing extensions from CLI

Visual Studio Code 1.27.2

- August Recovery Endgame
- Regex search and group replace
- TreeItem.iconPath with non-file Uri can be encoded incorrectly
- Breadcrumb selection is broken
- removeFromRecentlyOpened Command Broken
- [html] jquery completions no longer work
- Cannot click relative paths in terminal
- August Recovery Endgame
- VS Code doesn't work after update
- Incorrect new settings (UI) behavior after nothing was found

Visual Studio Code 1.27.1
- Change log not available for this version

Visual Studio Code 1.27
- New Settings editor UI to discover, search, and modify VS Code settings
- Fully themable title and menu bars on Windows and Linux
- Symbols highlighted when navigating with breadcrumbs
- Combined menu for creating terminals and managing tasks
- Share the same keybindings.json file across different OSs
- Import path suggestions while you type in CSS, SCSS, and Less
- Support for 'if', 'then', and 'else' schema keywords
- Loaded Scripts Explorer now available for debug extensions

Visual Studio Code 1.26.1
- Addresses these issues
- Extension host terminated unexpectedly after 1.26.0 update
- Problem entries loops
- Problem Tab is all corrupted with Typescript Problems
- RG 700% CPU usage
- Opened files are not searched until file tab is clicked
- Built-in git extension disabled
- VS Code Hangs When Opening Specific PowerShell File
- VSCode hangs when opening python file
- File paths in Open Recent Menu starts with / and lower case drive letter
- Editor layout is called on every config change

Visual Studio Code 1.26.0
- Change log not available for this version

Visual Studio Code 1.25.1

Fixed issues:
- June Recovery Endgame
- Recommended Extensions shows already installed extensions
- executeTask Cannot read property _key of undefined
- Allow task without task definitions. Treat all properties as mandantory
- Error while invoking command `Developer: Reinstall Extension`
- Unverified breakpoint error with build 1.25
- Portable Mode creates cache files in %APPDATA%

Visual Studio Code 1.25.0
- Change log not available for this version

Visual Studio Code 1.24.1
- Change log not available for this version

Visual Studio Code 1.24.0

Some of the key highlights include:
- Unused variable detection - Unused variables are greyed-out in your JavaScript/TypeScript files
- Move to new file refactoring - Easily pull classes and functions into their own files
- Update imports on move/rename - Automatically update import paths in JavaScript/TypeScript
- Duplicate workspace in new window - Great for expanding over multi-mon setups
- IntelliSense for predefined variables - Variable suggestions in debug and task configuration files
- Preview: Outline view - Symbol tree outline and navigation for your projects
- Preview: Settings Editor - New GUI to discover and modify VS Code settings
- Preview: Debug toolbar location - Float, dock or hide the debug toolbar
- Preview: Grid editor layout - Custom vertical/horizontal layout, coming soon to Insiders
- Working with Docker and MongoDB - Learn about Docker and MongoDB integration in VS Code

Here are some further updates:
- Editor - Zoom font size independent of your workbench, syntax highlighting for deleted lines
- Integrated Terminal - Smart fallback to DOM renderer, italic and line spacing support
- Debugging - Switch to debug view on break, Go to Next/Previous Breakpoint
- Languages - JavaScript/TypeScript getter/setter refactoring, SCSS @-keyword completions
- Extension Authoring - Expanded custom views API, Task API to stable, new theme colors

Visual Studio Code 1.23.1
- April Recovery Endgame endgame-plan
- Extension update events are not being reported using telemetry bug extensions verified
- instanceof doesn't work for FileSystemError api bug candidate remote verified
- Enable cascade to overwrite language features api bug debt verified
- Add undefined check to Quick Input command code path bug candidate verified
- Clear Terminal stops working after upgrading to v1.23.0 bug candidate integrated-terminal verified
- Windows key omitted from menu shortcut hint bug candidate verified

Visual Studio Code 1.23.0
- Highlighted indent guides: Helps visualize source code indenting
- Run Code Actions on save: Run actions like Organize Imports when you save
- NPM script explorer: Quickly find, run, and debug NPM scripts in your project
- Problems view filtering: Choose which files will display errors and warnings
- Middle mouse button column selection: Middle mouse button with drag for fast column selection
- CSS region folding: Create regions in your CSS/SCSS/Less code for helpful code folding
- Improved CSS new property support: Smart suggestions for CSS experimental properties
- Markdown header search: Search for Markdown headers across your entire workspace
- Custom Activity Bar views: Extension authors can create their own Activity Bar items
- New deploy website tutorial: Learn how to deploy a static website to Azure Storage
- Editor: Better Unicode file support, more stable editor positioning
- Workbench: Copy search results, better Git clone workflow, VS Code process explorer
- Debugging: Logpoint expressions support smart completions and displaying structured objects
- Languages: JavaScript/TypeScript Organize Imports action, persistent Markdown previews
- Extension Authoring: New webview and FileSystem Provider APIs, 'Source' file level actions

Visual Studio Code 1.22.2
- Syntax aware code folding: Adds improved folding for CSS, HTML, JSON, and Markdown files
- Cross file error, warning and reference navigation: Move quickly around your workspace
- New Hint suggestions: Makes it easy to spot suggested fixes or refactorings in the editor
- Convert to ES6 refactoring: New Code Actions to convert to ES6 classes and modules
- Auto attach to process: Automatically attach the debugger to running Node.js processes
- Logpoints: Inject logging without changing source code or restarting your debug session
- Better large file support: Faster syntax highlighting and easily increase memory for very large files
- Multi-line links in the terminal: Paths and URLs can span lines in the Integrated Terminal
- Emmet wrap preview: Live preview for Emmet's wrap with abbreviation functionality
- Improved updates on Windows: Automatically updates in the background for less downtime
- Preview: Organize JS/TS imports: Remove unused and sort remaining imports

Visual Studio Code 1.22.1
- Change log not available for this version

Visual Studio Code 1.21.1

The update addresses these issues:
- [Language Pack] tr is not supported to load "Turkish Language Pack"
- Dirty Code prompt deletes changes regardless of what you choose
- IntelliSense gets out of it's position when list gets shorter at the end of the file with docs not expanded
- Hit breakpoint does not turn yellow
- Markdown extension resources not loading on windows
- Markdown relative image in preview not shown on windows

Visual Studio Code 1.21.0
- New Notifications UI: Easily manage and review VS Code notifications
- Integrated Terminal splitting: Work with multiple open terminals at once
- Markdown preview scrolling: Markdown preview now supports bidirectional scrolling
- Improved large file support: Text buffer optimizations for large files
- Centered editor layout: Maximize your code viewing screen real estate
- Drag & drop, copy & paste across windows: Move files across open VS Code windows
- HTML path completion: IntelliSense for file paths in common HTML elements
- Language Packs in the Marketplace: Install new display languages from the Marketplace
- Deploy Azure Functions tutorial: Learn how to create and deploy serverless Azure Functions
- PREVIEW: Horizontal search results: You can now view search results in a horizontal panel

Visual Studio Code 1.20.1
- Change log not available for this version

Visual Studio Code 1.20.0
- Change log not available for this version

Visual Studio Code 1.19.3
- Change log not available for this version

Visual Studio Code 1.19.2
The update addresses these issues:
- Cannot compare changes for git conflicts after upgrade to 1.19
- Missing icons in activity bar
- Workbench doesn't finish loading when Extensions viewlet is first to load

Visual Studio Code 1.19.1
Update addresses these issues:
- code --status doesn't work if your shell is PowerShell
- Every time i lunch code it starts with code-stdin-randomchars.txt file
- Task ${relativeFile} slash style
- Git diff not working for UNC paths
- what is "Would you like to enable auto fetching of Git repositories?" bug
- Type error: cannot read property comments of null
- Git doesn't pick up user installation directories

Visual Studio Code 1.19.0
- Faster startup and other performance improvements

- New VS Code diagnostics, logging, and extension monitoring

Smarter IntelliSense:
- IntelliSense remembers your previous suggestion choices

Better Tab layout:
- Tabbed headers can scale to fit the available space

Git side-by-side image diff:
- Git source control provider can display image changes side by side

Pipe output into VS Code:
- Easily view terminal output in a VS Code editor

New debugging recipes:
- Learn how to debug Next.js, Meteor projects and applications using the nodemon utility

Visual Studio Code 1.18.1
- gitDecoration.ignoredResourceForeground Theme Bug
- 'The preLaunchTask 'xxxx' cannot be tracked.' exception after installing the October 1.18 release
- Workspace recommendations that are file based recommendations as well, repeat in the split view
- Git: checkIgnore nested Promise/resolve bug (with PR)
- Shell task doesn't finish
- Alt+F S no longer a single action
- Report "spawn UNKNOWN" when global searching
- Zombie breakpoints when editing lines around a breakpoint
- Welcome page needs to update Python extension id
- multi-root folders: excluding dot files from a folder makes it invisible in file explorer candidate

Visual Studio Code 1.18.0
- Multi-root workspaces released to Stable - Group a logical set of folders into a single workspace
- Vertical panels - Dock panels (Terminal, Output, or Debug Console) to the right of your editor
- Git indicators in the Explorer - See pending file changes in the File Explorer
- Inline pending change review - View pending changes and perform partial commits in the editor
- Several performance improvements - Faster Windows start-up and editor performance tuning
- Auto imports for JS/TS - Relevant imports are added as you call local symbols
- Extract local variable for JS/TS - Refactor a new local variable based on your selection
- Install @types for TypeScript - A new Quick Fix adds missing @types files to your project
- Improved extension recommendations - Recommendations are highlighted in extension searches

Visual Studio Code 1.17.0
New Visual Studio Code logo:
- We've updated the VS Code logo and colors, orange for the stable release and green for Insiders

Better --wait support:
- VS Code can be started with the --wait argument from the command line to wait until the instance that opens is closed. In this milestone, we made this feature more powerful by also terminating the calling process when all of the editors are closed that got opened. As a consequence, you can now use --wait with instances that are already opened, making this a much faster experience

New features around file encoding:
- It is now possible to configure the files.encoding as well as files.autoGuessEncoding setting per language. VS Code also now supports CP 850 and CP 865 encoding

New setting to control editor labels:
- A new setting, workbench.editor.labelFormat, adjusts the default label for editors. Possible values are short, medium, long and default. By default, editors will only show information about the file path when multiple editors with the same name are opened. If any of the other options is used, the editor label will always show path information

${workspaceFolder} in launch.json and tasks.json:
- We have introduced a new substitution variable ${workspaceFolder}. This variable will get substituted to the absolute path of the workspace folder containing the appropriate launch.json or tasks.json. This has the same effect as the previous ${workspaceRoot}, however we felt like the old name was not specific enough for the upcoming multi-root workspace scenarios. We are deprecating ${workspaceRoot}, though we will still support substituting it for backwards compatibility. More about variable substitution can be found here

QuickOpen uses ripgrep:
- QuickOpen (Ctrl+P) now uses ripgrep to retrieve the full list of file names before applying the user's input filter. Windows users should see improved performance on large folders getting them on par with Linux and macOS which were previously using find to boost listing file names

Folding regions:
Folding now supports region markers. Markers are defined by the language in the language configuration. The following languages currently have markers defined:
- TypeScript/JavaScript: //#region and //#endregion and //region and //endregion
- C#: #region and #endregion
- C/C++: #pragma region and #pragma endregion
- F#: //#region and //#endregion
- Powershell: #region and #endregion
- VB: #Region and #End Region
- Each language also has snippets available for the markers. Type '#' and invoke code completion to see them
- To have region markers configured for your language, contact the language extension provider

Folding in off-side languages:
- In languages that follow the off-side rule for code blocks, empty lines belong to the next folding region

The setting is configured in the language configuration and is enabled for the following languages:
- Python, Yaml, Pug, Markdown, Clojure, CoffeScript, FSharp

Snippet selector:
- The snippet picker drop-down shown by the Insert Snippet command now displays snippets in two groups, User Snippets and Extension Snippets. User-defined snippets are listed on top to give you quick access to your favorite snippets
Snippet transforms:
The VS Code snippet engine now supports variable transformations. Transformations can change the value of a variable before inserting it. The format is var_name/regular_expression/format_string/options. The sample below is a snippet that creates a public Java class whose name is derived from the filename.
Lightbulb improvements:
- The new editor.lightbulb.enabled setting enables or disables the Code Action light bulb in the editor. The default value is true
- The Code Action menu now selects the first entry by default making it easier to run

Improved history navigation:
VS Code has commands to navigate within the editor history (workbench.action.navigateBack, workbench.action.navigateForward), either across or within files. During this milestone, we tweaked the experience to produce less unwanted stops in history:
- We now require a minimum distance of 10 lines from one selection to another to add a new entry to history (previously we required a distance of 5 lines)
- Navigating less than 10 lines replaces the last history stop within the file with that location and thus avoids introducing unwanted stops
- In addition, we no longer center the selection vertically when navigating unless the selection is outside of the view. This makes it easier to stay in context while navigating around

Coloring of warning squigglies:
- You can now use a different color for warning squigglies to differentiate them from information

Emmet preferences:
We're continuing to add support for more Emmet Preferences in Emmet 2.0. In addition to the preferences we added in the last release, we now have:
- bem.elementSeparator
- bem.modifierSeparator
- filter.commentBefore
- filter.commentTrigger
- filter.commentAfter
- The format for the filter.commentAfter preference is different and simpler in Emmet 2.0.

New rendering engine:
- The integrated terminal is now using a new canvas-based rendering engine which renders approximately 5 to 45 times faster, depending on the situation. This change reduces the input latency, power usage, and increases the frame rate of the terminal significantly

Debug Console messages show source location:
- Output messages in the Debug Console now optionally show the originating source location on the right hand side. Clicking on this origin opens the source file in the editor.

First steps towards WSL support:
- Thanks to a feature contributed by Bartosz Sosnowski (@bzoz), the Node.js debugger (for this milestone "legacy" protocol only), supports launching and debugging Node.js applications in the Windows Subsystem for Linux (WSL).
- With this feature, you can add a useWSL flag to a debug configuration to make it run in the Linux subsystem on Windows. The flag configures the debugger not only to launch the Node.js runtime in WSL but it also maps paths correctly between WSL and Windows.

Viewing output from direct stdout/stderr writes:
- There are a number of Node.js logging libraries that write directly to the stdout stream, with process.stdout.write, rather than console.log. This is faster, but it isn't sent through Node's debug socket, so these messages were previously not shown in the Debug Console when debugging with the new 'inspector' protocol
- A PR #138 from Vakhurin Sergey (@igelbox) adds a new launch config option, "outputCapture": "std" which will tell the debug adapter to show stdout/stderr output in the Debug Console

- We added multi folder support to tasks. If you have created a workspace with multiple folders, tasks from all workspace folders using task version "2.0.0" are collected and presented in the corresponding Run commands. Launch configuration can also reference tasks as preLaunch tasks from the same workspace folder. Tasks auto detection for Gulp, Grunt, Jake and npm now also support multi-root workspaces. In addition, the task contribution API was enhanced to support contributing tasks for different workspace folders. Please note that multi folder support still requires the Insiders build

TypeScript 2.5.3:
- VS Code now includes TypeScript 2.5.3. This updates brings a few important fixes and improvements, with a focus on the extract method refactoring

Import path quick suggestions in JavaScript and TypeScript:
- JavaScript and TypeScript have provided IntelliSense for import paths ever since VS Code 1.9. However, you may not have known about this feature because it required manually triggering IntelliSense while typing the import. With VS Code 1.17, we now automatically show module and path suggestions as soon as you start typing an import or require path

Improved colorization in Dark+ and Light+ themes:
- VS Code's built-in Dark+ and Light+ themes now highlight regular expression components so that they can be more easily identified.Colorization of format strings and string interpolation has also been improved for a few languages

Extract method now triggers rename:
- The extract method and extract function refactoring for JavaScript and TypeScript will now automatically trigger a rename on the extracted method or function

Auto detection of TypeScript watch build tasks:
- TypeScript now automatically creates watch tasks for tsconfig.json files in a project, along with the normal build tasks

JavaScript and TypeScript IntelliSense now supports Markdown:
- Suggestions and parameter hints for JavaScript and TypeScript can now render Markdown content

Improvements to JSX language scoping:
- JavaScript expressions inside of JSX tags now are correctly marked as being of the JavaScript language. This fixes a number of bugs around basic language features such as bracket matching and code commenting

Language support in Markdown code blocks:
- Fenced code blocks in Markdown files now set the language mode for their contents. This means that basic language features such as bracket matching and code commenting now use the settings for the fenced code block's language rather than the generic Markdown language settings

Detection of Markdown reference links:
- Reference links and reference link definitions are now detected as links in the editor. Clicking on link definition will jump to [link definition]:. /path/to/link is now also detected as a link

CSS language improvements:
The built-in CSS/LESS/SCSS language server was updated and now supports the following features:
- Validation and completion for the @supports rule
- Support for @import with queries
- Support for contain and various flex properties

Improved multiple SCM support:
- Continuous iteration on the multiple source control provider support UX has led us to a master-detail implementation. There is a new SOURCE CONTROL PROVIDERS section which gives you an overview when you have multiple active repositories. These can be contributed by several SCM providers; for example, you can have Git repositories side-by-side with TFS workspaces. As you select repositories in this view, they get highlighted underneath. You can use ctrl+click or shift+click to select multiple repositories. They will appear as split views underneath

Increased Performance:
- We did quite a bit of performance work around the Source Control extension API and UI. Overall, the experience should be much smoother especially in repositories with a large number of objects

Git stash commands:
- You might have missed this in the last release, but thanks to a PR from Krzysztof Cieślak (@Krzysztof-Cieslak), VS Code has Git stash commands in the Source Control view More (...) dropdown

Java language support:
- A new Java language topic describes how to install and use the Java Extension Pack for great Java code intelligence and debugging support in VS Code

Tips and Tricks:
- We've added a Tips and Tricks topic to help you quickly become productive with VS Code. It includes the VS Code team's favorite features and keyboard shortcuts which they use on a daily basis

Debugging Recipes:
- We've been working on recipes for various debugging scenarios and added a new topic outlining these guides and providing links to helpful blog posts. See Debugging Recipes for help on debugging frameworks such as React and Angular and runtimes like Electron and Docker

Updated keyboard shortcut cheat sheets:
- We refreshed the keyboard shortcut PDFs and added the keybindings for useful commands such as Open User Settings (Ctrl+,) and Open Keyboard Shortcuts (Ctrl+K Ctrl+S)

Multi root guide for extension authors:
- We are very close to shipping multi-root support for all users. All of the VS Code core features [SCM, Settings, Debug, Tasks, ...] and extensions [HTML, JS/TS, ESLint, Docker, ...] now support multi-root concepts
- We've created a guide for how to make your extension ready for multi-root workspaces. See the Adopting Multi Root Workspace APIs guide for more information. All the APIs discussed are considered stable and currently available. Note however that multi-root workspaces are only enabled in VS Code Insiders release

File Save & File Open dialogs:
- The extension API has two new functions that allow extensions to show dialogs for saving and opening files or folders. The snippet below will show an open dialog to select image files

Styled completions and signature help:
- We have extended the API for CompletionItems and SignatureHelp such that documentation can be provided as MarkdownString. This allows for fancy rendering, embedded code snippets, and links to further documentation. Our own TypeScript and JavaScript extension is already using MarkdownString

- CompletionItemProvider.provideCompletionItems now is provided with a new CompletionContext parameter. This context contains information about how the completion provider was triggered
- Refer to the 'active' view column
- The editor layout works with columns 1, 2, and 3 and when using the showTextDocument function, you can set a column. However, often you simply want to refer to the currently active column. To make that easy, we have added a new symbolic column: ViewColumn.Active. It will always show a document in the currently active column and saves you from figuring out what column that is

MarkedString vs MarkdownString:
- Note that with this release, you cannot use command links in MarkedStrings anymore. If this affects your extension, we have likely already contacted you. In short, use the new MarkdownString and make sure to mark it as trusted. All the details and background can be found here

New Source Control menu:
- You can now use the scm/sourceControl menu id to contribute commands to the inline source control provider rows in the new SOURCE CONTROL PROVIDERS section of the Source Control view. Only context menu commands are supported for now

Tasks contribution API:
- The tasks API was enhanced to support contributing tasks for different workspace folders. The constructor to create tasks in an extension has an additional argument to specific whether the task is global, user local, or belongs to a workspace folder

Debug API updates:
- Command vscode.startDebug is deprecated
- Command vscode.workbench.customDebugRequest is deprecated
- Debug contributions in package.json
- New Activation event onDebug
- Activation event onDebug:type is deprecated
- Using debuggers.startSessionCommand in package.json is deprecated
- Using command with debuggers.initialConfigurations in package.json is deprecated

Debug Adapter Protocol:
- BreakpointEvent now supports a removed reason
- Locale can be passed to debug adapter
- Preview: Multi Root Workspaces

- We continued working on support for opening multiple folders in a single VS Code window (instance) (issue #396). There was a preview of this feature in our last releases (see 1.14.0 release notes, 1.15.0 release notes and 1.16.0 release notes). During this milestone, we focused on making the transition into a workspace work without a window reload and introduced more APIs for extensions to better support multi-root workspaces

Enter a workspace without window reload:
- Previously we required a full window reload when creating or saving workspaces or when adding folders to a workspace. We no longer require this window reload making the multi-root experience a lot smoother.

Extension recommendations:
- We extended the support of extension recommendations to multi-root workspaces. Extension recommendations from all root folders are consolidated and shown. You can also configure recommendations for the multi-root workspace itself using the command Extensions: Configure Recommended Extensions (Workspace). This will open the workspace configuration file and you can enter the recommendations under a extensions/recommendations section

Enter a workspace without window reload:
- Previously we required a full window reload when creating or saving workspaces or when adding folders to a workspace. We no longer require this window reload making the multi-root experience a lot smoother

Extension recommendations:
- We extended the support of extension recommendations to multi-root workspaces. Extension recommendations from all root folders are consolidated and shown. You can also configure recommendations for the multi-root workspace itself using the command Extensions: Configure Recommended Extensions (Workspace). This will open the workspace configuration file and you can enter the recommendations under a extensions/recommendations section

New API: Workspace Folder Picker:
- With the advent of multi-root support in VS Code, we noticed that often an extension wants to ask the user for a specific WorkspaceFolder. The new proposed API method showWorkspaceFolderPick opens a picker and returns the result

New API: RelativePattern:
To make it easier to filter file paths to a specific WorkspaceFolder, we added a new type RelativePattern and support it in the following places:
- workspace.createFileSystemWatcher
- workspace.findFiles(include, exclude)
- DocumentFilter#pattern

Smarter workspace file format saving:
- When saving the workspace file back to disk upon changes, we will now prefer to use forward slashes for paths on Windows in case the file is already using slashes. This should make it easier to share workspace files between Windows and other platforms
- In addition, we now preserve any comments within the workspace file. Even though JSON does not allow for comments inside the file, we now use the same JSON parser that we use for VS Code settings which allows for comments and is also more error tolerant. For example, trailing commas will not render the workspace file as invalid anymore

Workspace folder name:
- You can now assign a name property to each of the folders within the configuration file. The name will be picked up in the Explorer and can be used to distinguish multiple workspace folders that have the same basename

Issue management automation:
- We have extended the use of our Probot instance beyond our main repository and now use it for automatic issue assignment and closing of stale "needs more info" issues in our extension and other repositories

Notable Changes:
- Cannot open a folder under my OneDrive folder
- VS Code flickers when running on a high DPI external monitor
- VS Code opens off-screen
- Cmd-A doesn't select all text in the save dialog save-as field

Visual Studio Code 1.16.1
- Performance regression due to exe-based extension recommendations
- Problem with syntax highlighting (HTML/PHP)
- vscode-node-debug extension w/security vulnerability included in latest release
- Git stage ranges fail to update file
- Hang then crash by typing in integrated terminal

Visual Studio Code 1.16.0
There are a number of significant updates in this version that we hope you will like, some of the key highlights include:
- JavaScript/TypeScript refactoring - Easily extract source code into methods and functions
- HTML tag auto close - Improved editor productivity with automatic close tags
- Color picker in HTML - You can now use the VS Code color picker in HTML files
- Integrated Terminal quick open - Create or jump to terminals from VS Code Quick Open
- Drag and drop from search - Quickly open files from Search and also the Problems panel
- New online documentation - New Emmet topic and updates to the Node.js Deployment tutorial
- VS Code "recipes" repository - Examples using React, Angular and Docker in VS Code
- Preview: Multi-root workspaces - Smoother UI when adding folders and creating a Workspace (Insiders build)
- Preview: Multiple SCM providers - With multiple folders, you can have multiple source control providers (Insiders build)
- Multi-root tips for extension authors - Update your extension to work seamlessly with multi-root workspaces

The release notes are arranged in the following sections related to VS Code focus areas. Here are some further updates:
- Workbench - Improved Extension sandboxing, more theme colors
- Editor - Undo stack detects file changes, smooth scrolling, Braille support
- Integrated Terminal - Better text selection on Linux and Windows, search history support
- Languages - TypeScript 2.5, JSDoc type assertions, Markdown Preview refresh command
- Extension Authoring - API updates and guidelines to support multi-root workspaces


Drag and drop from Search results and Problems panel:
- You can now drag files from the Search results and Problems panel over the editor area to control where these should open. The File Explorer always supported this and we have now expanded that feature to other regions of the UI.

Drag and drop in search results:

Open a folder via drag and drop:
- VS Code has always supported dragging a folder from outside VS Code into it to open the folder. VS Code stills support this, but the visual feedback is changed a little bit. Previously you could drop the folder anywhere in VS Code to open it. With this release, you need to drop the folder over the editor area to open it. This change is due to both a technical reason (an Electron update) as well as an explicit decision to make the multi-root experience better. If you are using VS Code Insiders with multi-root support, you will be happy to hear that you can now drop a folder into the File Explorer to add it to the workspace.

Open folder via drag and drop:

Extension Host:
- VS Code uses a multi-process architecture, where extensions are executed in a separate extension host process. The workbench can now recover gracefully from an unexpected termination of the extension host process. All UI elements and state driven from extensions will be removed (for example, squiggles and Status Bar items), and, if the extension host is restarted, everything will return to normal.

In the following short video, the extension host process is terminated. When the extension host terminates, basic editing still works, word completions are presented, and once the extension host is restarted, real TypeScript powered completions return:
Extension Host Restart:

Theming improvements:

Several new theming color keys were introduced. These colors can be set by themes or directly by the user with the workbench.colorCustomizations setting:
- tab.activeBorder: A border drawn to the bottom of the active tab
- tab.unfocusedActiveBorder: A border drawn to the bottom of the active tab in an editor group that is not focused
- editorOverviewRuler.border: Color of the overview ruler border
- editorOverviewRuler.findMatchForeground: Overview ruler marker color for find matches
- editorOverviewRuler.rangeHighlightForeground: Overview ruler marker color for range highlights
- editorOverviewRuler.selectionHighlightForeground: Overview ruler marker color for selection highlights
- editorOverviewRuler.wordHighlightForeground: Overview ruler marker color for symbol highlights
- editorOverviewRuler.wordHighlightStrongForeground: Overview ruler marker color for write-access symbol highlights
- editorOverviewRuler.modifiedForeground: Overview ruler marker color for modified content
- editorOverviewRuler.addedForeground: Overview ruler marker color for added content
- editorOverviewRuler.deletedForeground: Overview ruler marker color for deleted content
- editorOverviewRuler.errorForeground: Overview ruler marker color for errors
- editorOverviewRuler.warningForeground: Overview ruler marker color for warnings
- editorOverviewRuler.infoForeground: Overview ruler marker color for information messages

Undo stack preserved when file changes on disk:
- Thanks to the work of Ryan Stringham in PR #29655, VS Code will now preserve the undo stack associated with a open file when it is reloaded due to a change on disk.
- Smooth scrolling
- Thanks to the work of @JD342 in PR #25286, the editor now has a new option, editor.smoothScrolling, that will make the editor scroll with an animation. Once enabled, scrolling between different locations when using Page Up or Page Down, when cycling through find matches, when jumping to a definition in the same file, and when using the mouse wheel will be animated.
- Note: Our platform currently does not support differentiating between scrolling initiated by a touchpad or a physical mouse wheel, and we currently use a heuristic to determine if smooth scrolling should be applied.

Smooth Scrolling:
Emmet suggestions as snippets:
Emmet in suggestions/auto-completion list is most helpful when it is in the top few choices. There are two scenarios where Emmet suggestions can get pushed down the list:
- You have set editor.snippetSuggestions to top and so default/user/extension snippets are on top of your suggestion list
- When working on stylesheets, Emmet suggestions get sorted alphabetically among other CSS suggestions
- To ensure Emmet suggestions stay on top of the suggestion list, set the new emmet.showSuggestionsAsSnippets to true and editor.snippetSuggestions to top
- Emmet preferences
- The setting emmet.preferences as documented in Emmet Preferences was discontinued in the last release as the new modular approach in Emmet 2.0 did not support them

We are bringing back support for a few of these preferences via the setting emmet.preferences:
- css.propertyEnd
- css.valueSeparator
- sass.propertyEnd
- sass.valueSeparator
- stylus.propertyEnd
- stylus.valueSeparator
- css.unitAliases
- css.intUnit
- css.floatUnit
- If you want support for any of the other preferences, please log a feature request for the same

- There is a new snippet variable: $TM_FILENAME_BASE. It resolves to the filename without extension, so from /my/super/file.ts it resolves to file

Braille support:
- It is now possible to change the cursor position in VS Code using Braille routing keys on a connected Braille display when using NVDA on Windows. Many thanks to James Teh, who helped emulate the behavior of a Braille display in issue #27216.
- Integrated Terminal

Terminal quick open improvements:
- The Integrated Terminal can now be launched via the Terminal: Switch Active Terminal command or by typing "term " (with a trailing space) in Quick Open. When using the Integrated Terminal Quick Open drop-down, you can also create new terminals or delete existing terminals.

Terminal quick open improvements:
Force selection using Shift on Linux and Windows:
- Running programs in mouse mode within the terminal (like tmux) will intercept the mouse and therefore not allow you to make a selection. You can now hold the Shift key to force the mouse event to perform a selection rather than be sent to the terminal. This functionality was added for Alt on macOS in 1.15.
- Terminal Find widget improvements
- The terminal Find widget now supports find history. You can use Alt+Down and Alt+Up to show the next or previous find term in the Find widget. Many thanks to Christopher Leidigh, who has helped with both code refactoring and feature implementation in PR #32113.
- Terminal Find Widget improvements
- Languages
- HTML close tags

Tag elements are now automatically closed when > of the opening tag is typed:
Auto close on:
The matching closing tag is inserted when / of the closing tag is entered:
Auto close on:
- The new behavior is enabled by default and can be turned off with the setting html.autoClosingTags
- Thanks to Jun Han for leading the way with his Auto Close Tag. Note that the Auto Close Tag extension has more features, in particular, it can be enabled for languages other than HTML as well.

Color picker in HTML:
- The new VS Code color picker UI is now available in HTML style sections

TypeScript 2.5:
- VS Code now includes TypeScript 2.5.2, which brings some exciting new editor features and fixes a number of bugs. You can read more about TypeScript 2.5 here. Below are details about several of the new features.
- JavaScript and TypeScript refactorings

The new Extract method and Extract function code actions allow you to quickly refactor complex JavaScript or TypeScript code into new methods or functions:
- Simply select some code, then click on the lightbulb in the gutter or press (Ctrl+.) to see available refactorings. Source code fragments can be extracted into a new method, or into a new function at various different scopes.
- JSDoc type assertions

You can now use write JSDocs type assertions in JavaScript files:
- // @ts-check
- const img = /** @type {HTMLImageElement} */ (document.getElementById('#cat'))
- img.src = './cat.gif'
- This is particularly useful when using @ts-check to enable type checking in your JavaScript code.

Better loose JavaScript/TypeScript file isolation:
- Loose JavaScript and TypeScript files that are not part of a jsconfig.json or tsconfig.json project are now split into an implicit project per root folder. Previously, loose files across all root folders in the workspace were grouped into the same implicit project. The change means that you should no longer see suggestions from files in one JavaScript folder showing up in JavaScript files in a different folder.
- Markdown preview refresh command
- The new Markdown: Refresh Preview command allows you to manually refresh the contents of a Markdown preview.
- This can be used to reload images that have been modified on the file system.
- CSS/JSON color preview
- We moved the inline color preview rendering from the CSS/JSON extensions to the VS Code core and in the process deprecated four configuration settings: css.colorDecorators.enable, sass.colorDecorators.enable, scss.colorDecorators.enable and json.colorDecorators.enable. There is a new general setting editor.colorDecorators to control if the inline color box should be rendered.

New Documentation:
Updated Node.js Deployment tutorial:
- We continue to refine the Node.js Deployment to Azure tutorial so you can get your application running quickly in the Cloud.

New Emmet topic:
- We added a new Emmet topic describing VS Code's Emmet support. Learn about using Emmet abbreviations during your editing sessions, how to customize your Emmet experience, and even create custom Emmet snippets.

VS Code recipes:
- In May, we've started to collect recipes for some non-standard or complex debugging setups in a VS Code Recipe repository. This repository has now moved to the new location https://github.com/Microsoft/vscode-recipes. Here you can find working examples using React, Angular and Docker in VS Code.

Extension Authoring:
Upgraded Electron only supports "inspector" protocol:
- With the upgrade to Electron 1.7, the built-in Node.js version only supports the "inspector" protocol (instead of "legacy"). This change has benefits for both extension debugging and profiling as described below.

Extension debugging:
Extension Host debugging (implemented by VS Code's built-in Node Debugger) has been switched to always use the "inspector" protocol which results in the following behavioral difference:
- With the "inspector" protocol, the Node.js debugger does not mark breakpoints as "verified" until they are bound to a real script location loaded by the runtime. This means that if your extension is not yet activated, breakpoints will appear gray (unverified). But don't worry, they will turn red (verified) as soon as the extension is activated.

Profile your extension:
Since the upgraded version of Electron supports the more powerful "inspector" protocol, you can now profile extensions using Chrome DevTools. Do the following:
- Start VS Code from the command line the with --inspect-extensions=-flag, for example code --inspect-extensions=9333
- In VS Code, from the Command Palette (F1), select Developer: Toggle Developer Tools, hit Enter
- Select the Console tab and find a message that starts with "Debugger listening on port 9333" and that ends with a chrome-devtools-link
- Open that link in Chrome for dedicated DevTools for the extension host
- Use the CPU and Memory profiler to understand how memory and compute is being used

Handling uncaught errors:
- The extension host process is now looking at the stack-traces of uncaught errors to know what extension is throwing them. For now, we only prefix those errors with the respective extension ids. In the future we have more plans, for example an extension runtime view or the ability to create an issue against extensions.
- Themable colors in extensions

Extension can now contribute new themable colors. These colors can be used in decorators and in the Status Bar:
- "colors": [{
- "id": "superstatus.error",
- "description": "Color for error message in the status bar.",
- "defaults": {
- "dark": "errorForeground",
- "light": "errorForeground",
- "highContrast": "errorForeground"
- Once defined, user can customize the color in the workspace.colorCustomization setting. User themes can set the color value.

Source control API updates:
- The way of accessing the Source Control view's input box via scm.inputBox is now deprecated in favor of using SourceControl.inputBox. This is related to the multi-root feature, in which each source control provider can have its own input box
- The global scmProvider context key is now never set, since many source control providers can be active simultaneously
- You can now have tooltips on source control resource decorations

Debug API updates:
DebugConfigurationProvider replaces initialConfigurations and startSession commands:
- Currently a debugger extension can contribute the "hook"-like commands initialConfigurations and startSession to participate in the generation of an initial launch configuration and the start of a debug session. In this milestone, we are proposing a "real" API that will replace the more-or-less untyped command based mechanism with a typed solution. At the same time we are deprecating the initialConfigurations and startSession commands (and we will remove them in the October release).
- The new API centers around a DebugConfigurationProvider which is registered for a specifc debug type (which itself is contributed via a debuggers contribution as before). Whenever VS Code needs the initial debug configurations for a newly created launch.json it calls provideDebugConfigurations on the registered DebugConfigurationProviders. A method resolveDebugConfiguration is called by VS Code when a new debug session is started. The implementation of resolveDebugConfiguration can "massage" the passed debug configuration by filling in missing values or by adding/changing/removing attributes.
- Note: Currently this API is proposed, so in order to use it you must opt into it by adding a "enableProposedApi": true to package.json and you'll have to copy the vscode.proposed.d.ts into your extension project. Also be aware that you cannot publish an extension to the Marketplace that uses the enableProposedApi attribute.

Command vscode.startDebug is deprecated:
- With the introduction of a proper vscode.debug.startDebugging(...) API in the July release, it is no longer necessary to use the vscode.startDebug command to start a debug session. Therefore we are deprecating the vscode.startDebug command in the August release and plan to drop it in October. If it is difficult for you to move off this feature, please speak up by commenting here.

Command vscode.workbench.customDebugRequest is deprecated:
- With the introduction of a proper DebugSession.customRequest(...) API in the July release, it is no longer necessary to use the vscode.workbench.customDebugRequest command to send a custom request to the debug adapter. Therefore we are deprecating the vscode.workbench.customDebugRequest command in the August release and plan to drop it in October. If it is difficult for you to move off this feature, please speak up by commenting here.

Debug contributions in package.json:
Variable substitution in program and runtime attributes in package.json is no longer supported:
- In the July milestone, we had deprecated variable substitution in the program and runtime attributes of the debuggers contribution in package.json. In August, we have removed this functionality.

Using debuggers.startSessionCommand in package.json is deprecated:
- With the introduction of the resolveDebugConfiguration method on type DebugConfigurationProvider, it is no longer necessary to contribute a startSessionCommand on the debuggers contribution point. Therefore we are deprecating the startSessionCommand in this milestone and plan to drop it in October. If it is difficult for you to move off this feature, please speak up by commenting here.

Using command with debuggers.initialConfigurations in package.json is deprecated:
- With the introduction of the provideDebugConfigurations method on type DebugConfigurationProvider, it is no longer necessary to contribute a command for the debuggers.initialConfigurations contribution point. Therefore we are deprecating the ability to specify a command ID in this milestone and plan to drop it in October (but we will continue the support for contributing a JSON object literal). If it is difficult for you to move off this feature, please speak up by commenting here.

Debug Adapter Protocol:
Source link attributes added to output event:
- We've added a source, line, and column attribute to the Output event type . With this a frontend can show a link to the source where the output was generated. Please note: VS Code does not yet support this feature in the UI.

Loaded scripts support:
- We've added support for retrieving loaded scripts (LoadedSourcesRequest) and receiving loaded script events (LoadedSourceEvent). Please note: VS Code does not yet support this feature in the UI. The newly introduced Loaded Scripts Explorer for JavaScript debugging does not yet use this protocol but we are planning to migrate it to the new protocol.

Display hints for variables and evaluation results:
- We've added display hints for variables and evaluation results (type VariablePresentationHint). A frontend can use these hints when rendering variables or evaluation results, for example for selecting specific icons that reflect their visibility. Please note: VS Code does not yet make use of these hints in the UI.
- Updated Marketplace extension README rendering
- The Visual Studio Marketplace is now using the markdown-it library to render the extension README. This is the same Markdown library used by VS Code's Extensions view README rendering and it is unlikely to affect your extension README online display.
- Multi Root Workspace tips for extension authors
- We've created a guide for how to make your extension ready for multi-root workspaces. See the Adopting Multi Root Workspace APIs guide for more information. All the APIs discussed are considered stable and currently available. Note however that multi-root workspaces are only enabled in VS Code Insiders release.

The extension authors guide covers:
- Basic APIs
- Settings
- Impact on extensions that have a language client/server model
- In addition to the guide, there are new samples on our samples repository that exercise the new APIs. Look for samples with 'multi' in their folder name (for example, basic-multi-root-sample.
- Preview: Multi Root Workspaces
- Note: Multi-root functionality is only available in the Insiders build until we are confident enough that we can make it available in Stable. To try it out, grab our Insiders build from https://code.visualstudio.com/insiders.
- We continued working on support for opening multiple folders in a single VS Code window (instance) (issue #396). There was a preview of this feature in our last releases (see 1.14.0 release notes and 1.15.0 release notes).
- During this milestone, we focused on updating extensions to be ready for multi-root workspaces and adding source control support. We also revisited the workspace file format and made the UI transition into multi-root workspaces more pleasant.
- Smooth transition into multi-root workspaces
- There are several ways to turn an empty workspace or single-folder workspace into a multi-root workspace. The transition used to be a bit rough, for example, it was not possible transition with unsaved files. In addition, all the UI state was lost when you created a multi-root workspace. In this milestone, we made the behavior a lot smoother. We still require a window reload, but we have plans to get rid of that step to make the transition fast.

In the animation below you can see how a single-folder window turns into a multi-root workspace. A couple of things happen:
- All UI state is migrated into the workspace and restored (vertical editor layout and opened editors).
- All dirty (unsaved) files are properly restored and you are not prompted to save.
- Workspace settings are copied over into the multi-root workspace (hidden Status Bar, hidden Activity Bar)

Multi root transition:
Creating a multi-root workspace:
- We expanded the ways to create a multi-root workspace in VS Code

Command line:
- There is a new command line argument --add. Use it to add folders on the command line to the currently active window. The new folder argument should be provided as a path. This works for an empty workspace, a single-folder workspace, as well as an existing multi-root workspace
- If you provide multiple folders to open from the command line, we used to open each folder in a separate window. Now, we automatically create a workspace for you and open all folders into a single window.

Drag and drop:
- If you drop folders into VS Code, we used to open each folder into a separate window. With multi-root support, we now open all folders into one window by creating a workspace for you automatically. In addition, you can now drop folders into the File Explorer to add them to the workspace.

Multi root drag and drop:
Native platform File dialogs:
- Finally, when you pick multiple folders from the native file dialog (via File > Open), we will open all folders at once into a workspace. The same is true when you drop multiple folders onto the application icon in the dock on macOS.

New workspace file format:
- The contents of the workspace file (*.code-workspace) was changed during this sprint. You do not have to worry about existing workspace files, they will be migrated to the new format automatically!

A new workspace file now looks like this:
- "folders": [
- "path": "monaco"
- "path": "Projects/vscode-distro"
- "path": "vscode-docs"
- "path": "/Users/bpasero/Development/Microsoft/vscode-extension-sdk"

As you can see, the id property is no longer part of the file. Instead, the location of the workspace file on disk is used to derive an identifier for the workspace. We use this identifier to associate various items with the workspace:
- All UI state (for example, opened editors)
- Dirty (unsaved) files (for Hot Exit)
- Extension storage
- One advantage of this change is that you can now simply copy the workspace file on disk to open the same workspace into multiple windows.
- Another change was done on the folders property: each entry is now an object which gives us the possibility of adding additional me

Join our mailing list

Stay up to date with latest software releases, news, software discounts, deals and more.