A JetBrains-style Run widget and Run/Debug Configurations dialog for VS Code. Pick a configuration, then Run, Debug, Stop or Rerun it from the status bar, and edit configurations in forms like those of PyCharm, WebStorm, RustRover, GoLand and IntelliJ IDEA.
Everything is stored in the usual .vscode/launch.json, so VS Code's own Run and Debug view has the same configurations.
On the right of the status bar:
- the selected configuration with the icon of its type. Click it to pick another one: ▷ and 🐞 next to each start it right away, and Edit Configurations… is at the bottom of the list;
- ▷ Run starts the configuration without the debugger. While it runs, it turns into ↻ Rerun;
- 🐞 Debug starts it under the debugger. While debugging, it turns into ↻ Rerun;
- ■ Stop, while the configuration runs.
Run, Debug and Stop are also at the top right of editors (the jbRunWidget.editorTitleButtons setting turns them off).
Starting a configuration that is already running asks to stop and rerun it, unless Allow multiple instances is on for it. Configurations that attach to a running process (Python Remote Debug, Attach to Node.js, Remote JVM Debug) have Debug only, as in JetBrains IDEs.
Run/Debug Configurations
Edit Configurations… opens the dialog above the whole window:
- on the left, the configurations grouped by type. + adds one: type to search the list. − removes the selected configuration, ⧉ copies it;
- on the right, the form of the selected configuration: Name, Allow multiple instances, the fields of its type, and Before launch (a task to run first). Edit as JSON shows the launch.json entry itself, for anything the form doesn't cover;
- Run, Debug, Cancel, Apply and OK at the bottom.
The forms follow the JetBrains IDEs:
| Type |
What it starts |
Debugger extension |
| Python |
a script or a module, with parameters |
Python Debugger |
| FastAPI |
an application with Uvicorn, Hypercorn or fastapi dev. The application name is found in the file |
Python Debugger |
| Django Server |
manage.py runserver with host, port, options, No reload and Run browser |
Python Debugger |
| Flask Server |
flask run for a script, a module or a custom target, with FLASK_DEBUG |
Python Debugger |
| pytest |
the tests in a file, a folder or a module, with keywords (-k) and arguments |
Python Debugger |
| Python Remote Debug |
attaches to a process through debugpy (connect or listen) or to a local process, with path mappings |
Python Debugger |
| Node.js |
a JavaScript file, with Node parameters and application parameters |
built in |
| npm |
a script of a package.json with npm, yarn or pnpm. The scripts of the package.json are listed |
built in |
| JavaScript Debug |
a URL in Chrome or Edge |
built in |
| Attach to Node.js |
a Node.js process started with --inspect |
built in |
| Cargo |
cargo run, cargo test or cargo bench with their options, program arguments after -- |
CodeLLDB |
| Go Build |
a package or a file |
Go |
| Go Test |
the tests of a package, with a pattern |
Go |
| Application |
a Java main class, with VM options and program arguments |
Debugger for Java |
| Remote JVM Debug |
a JVM started with the JDWP agent. The form shows the arguments to start it with |
Debugger for Java |
| Compound |
several configurations at once |
— |
The Python types have an Environment section as in PyCharm: environment variables, env file, Python interpreter (virtual environments of the project are found), interpreter options, working directory, Add content roots to PYTHONPATH, and the console to run in.
Configurations of any other debugger (C/C++, PlatformIO, containers and so on) get a form built from the settings that debugger describes.
When the debugger of a type isn't installed, its form says which extension it needs and has an Install button. The form works as soon as the extension is installed.
Paths are shown in full, as in JetBrains IDEs, and saved relative to ${workspaceFolder}. Saving changes only what you edited: the comments and formatting of launch.json stay, and Undo in the launch.json editor takes the change back. Allow multiple instances is kept by the extension for the workspace, because launch.json has no such setting.
Keyboard
|
macOS |
Windows and Linux |
| Run |
⌃R |
Shift+F10 |
| Debug |
⌃D |
Shift+F9 |
| Pick a configuration and run it |
⌃⌥R |
Alt+Shift+F10 |
| Pick a configuration and debug it |
⌃⌥D |
Alt+Shift+F9 |
| Stop |
⌘F2 |
Ctrl+F2 |
Run, Debug and the picking keys are left to the terminal while it has focus. On macOS, ⌃R and ⌃D take the place of VS Code's Open Recent and Delete, and ⌘F2 is Stop only while something runs.
To start a particular configuration with a key of your own, pass its name:
{ "key": "ctrl+alt+b", "command": "jbRunWidget.run", "args": "Backend" }
jbRunWidget.debug works the same way.
In the dialog: ⌘Enter (Ctrl+Enter) is OK, Esc is Cancel, and in the list of configurations ⌘D (Ctrl+D) copies the selected one and Delete removes it.
Requirements
VS Code 1.90 or newer, and the debugger extensions from the table for the types you use. The dialog opens above the window in VS Code versions with modal editors (the workbench.editor.useModal setting); otherwise it opens as an editor tab.
License
MIT. The licenses of the bundled open-source libraries are in ThirdPartyNotices.txt, which comes with the extension.