vscode-container-wasm: Containers on VSCode for the Web
VSCode extension for running arbitrary containers on VSCode for the Web, leveraging
This is an experimental software.
This extension runs containers on VSCode for the Web and provides Terminal to interact to it.
The containers run in the WebAssembly VM on browser so you don't need prepare remote containers.
HTTP(S) networking is also available in the container with restrictions by the browser (CORS-restricted and no control over Forbidden headers) (see also "Limitation" section).
github.dev : https://github.dev/ktock/vscode-container-wasm-debian-example?vscode-coi=on (you need
?vscode-coi=on query in the URL)
> Run Container On Browser in the command pallete. Then the container will be launched with the Terminal (can take some time to start the container).
How to use
container.imageLocation string : Specify the URI of the Wasm-formatted container image (or the prefix if the Wasm image is chunked)
container.imageChunks number : Specify non zero value if the image is chunked with suffix (< 99) (default:0)
container.workspaceMountpoint string : Specify path to mount the workspace in container (set "" to disable mount) (default: "/workspace")
container.networkingMode string : Networking mode (enum:
["none", "fetch"]) (default: "fetch")
- This extension relies on SharedArrayBuffer.
?vscode-coi=on query is needed for
github.dev to make this extension work.
- Networking from the container is limited to HTTP(S) and restricted by the browser's security rule (CORS-restricted, no control over Forbidden headers). Please see also the docs in container2wasm.
How it works
- Image format: Container is converted to Wasm image using container2wasm to make it runnable on browser.
- Wasi host:
vscode-wasm is used for the container image. It's patched to support containers and networking.
- Networking: NW stack running on browser and it uses the browser's Fetch API for performing HTTP(S) networking. Please see also the docs in container2wasm.
This extension based on the following projects.
They are included to this project and patched for our usecase (stored at