Shell on a declared container or VM. Native PowerShell on Windows VMs — no Guacamole needed.
cmd:, the shell opens as root. Use cmd: su - <user> to drop into a non-root account, or cmd: screen -xRR to auto-attach to a multi-pane session.
HTTP server on a declared host port. Routes through Instruqt's proxy.
fetch() calls must use relative paths only. The browser cannot resolve internal Docker hostnames. For iframe-blocking apps: use custom_response_headers: to strip X-Frame-Options and Content-Security-Policy.
File or directory editor on a declared host. Path can be a single file or a folder tree.
code tab pointing at a completed reference as a built-in hint. path: as a directory renders a folder-tree explorer.
Cloud console browser tied to a virtualbrowsers block.
virtualbrowsers entry in config.yml. Use this for provisioned cloud consoles, not arbitrary URLs.
Embedded URL frame — an external site rendered inside the lab UI.
External URL tab. Supports ${_SANDBOX_ID} interpolation in the URL.
http:// URL causes instruqt track push to fail validation. Pair with new_window: true to pop a non-iframable site into its own window.
new_window: true to any tab to open it in a separate browser window instead of the lab's tab strip — useful for cramped service tabs the learner wants to expand.tabs: is the display order. Index references in assignment markdown ([button](tab-0)) are zero-based. Reserved tab IDs "assignment" and "feedback" are built-in; reference them in custom_layout without declaring.workdir: on terminal and code tabs sets the open directory per-tab — cleaner than per-challenge set-workdir when different challenges need different directories.code-server) are unaffected.service versus website: prefer service for in-sandbox apps when you want CSP-header stripping; use website for sandbox-public URLs, external SaaS forms, and anything needing new_window: true.