Visual Studio Code is a source-code editor that groups files into workspaces and connects editing with terminals, Git, tasks, debuggers and installable language support. It edits text directly on disk; it does not create the project model used by the full Visual Studio IDE. Compilers, runtimes, Git and many debuggers remain separate programs that Visual Studio Code invokes through configuration or extensions.
Folders become workspaces
Opening a folder gives Visual Studio Code a project boundary. The editor remembers open files and layout for that folder, stores project settings, and can keep task or debugger definitions beside the source. Opening one loose file still permits editing, but project-aware behavior has less context.
A multi-root workspace collects folders that do not need a common parent directory. Its workspace file records the folder list and shared settings. Folder-level settings can then override those shared values, which means two roots in one window may use different formatter or language choices.
Settings have precedence
User settings apply broadly, while workspace settings belong to the open project. Visual Studio Code gives the workspace value precedence when both scopes define the same option. Language-specific and remote settings add further layers.
This explains why changing a global preference sometimes appears to do nothing. A committed workspace setting may override it every time the repository opens. Inspecting the setting’s scope is more useful than repeatedly editing the user value. Workspace configuration also travels with a shared repository, so executable paths deserve review.
Trust limits execution
Workspace Trust separates reading unfamiliar source from running it. Restricted Mode keeps basic text editing available but disables or limits terminals, tasks, debugging, agents, workspace settings and extensions that can execute project-controlled code. Trust can be granted later after the folder is inspected.
Trusting a parent directory trusts all its subfolders. That shortcut is convenient for a controlled projects directory and unsafe for a general downloads folder. Visual Studio Code also warns that Workspace Trust cannot stop a malicious extension that ignores the boundary, so extension publisher trust remains a separate decision.
Extensions carry authority
Extensions add language servers, formatters, debuggers and source-control integrations. Visual Studio Code checks marketplace signatures and asks about third-party publishers, but an installed extension can read and write files, start processes and make network requests with the editor’s permissions.
A long extension list increases the number of components that can change editor behavior. When completion, formatting or startup breaks, an Empty Profile disables custom extensions and modified settings for comparison. That test separates an editor fault from a profile-specific conflict without deleting the normal setup.
Git uses real state
The Source Control view reads the repository through the machine’s Git installation. Staging a file, creating a commit or changing a branch in Visual Studio Code changes the same working tree and index that command-line Git sees. The graphical view does not create a separate copy of the repository.
Stage All can include generated files or unrelated edits if the list is not reviewed. Line-level staging narrows a commit, while the diff editor exposes the exact changes. During a conflict, accepting both sides can duplicate logic; the merged result still needs compilation or tests before it is staged.
Debuggers need recipes
A launch configuration tells a debugger how to start a program, while an attach configuration connects to an already running process. The required fields depend on the debugger extension and runtime. A setting valid for one language may have no meaning in another.
Visual Studio Code can suggest configuration fields and flag invalid entries, but it cannot supply a missing compiler, runtime or executable. Restricted Mode also blocks debugging until the workspace is trusted. Reading source and executing source are deliberately different operations.
Profiles isolate setups
Profiles collect settings, extensions, snippets, tasks and interface layout for different kinds of work. A folder can remember its associated profile, and Settings Sync can carry selected profiles to another local installation.
Remote windows have an important boundary: profile synchronization does not copy extensions into or out of SSH, container or WSL sessions. Those environments keep their own extension side. A profile may therefore look synchronized while a remote language service remains absent and needs installation in that remote context.






