Skip to content

Extensions

An extension is a small piece of code that can be added to the Web UI to add new functionality. It can be used to add new tabs and new panels in WebUI. Extensions are dynamic, modular components that enhance the functionality of our main application. They are designed to be flexible and easily integrated, allowing for customization and expansion of features without modifying the core application. Key characteristics of extensions include:

  • Isolated Execution: Extensions run within their own iframe, ensuring a level of separation from the main application.
  • Dynamic Loading: They can be loaded on-demand, improving the application’s overall performance and flexibility.
  • Consistent Styling: Extensions adopt styles from the main application, maintaining a cohesive look and feel.
  • Diverse Functionality: Extensions can serve various purposes, from adding new features to integrating external services.
  • Managed Lifecycle: The system handles the loading, display, and unloading of extensions, simplifying their management.

By leveraging extensions, our application becomes more adaptable and can cater to a wide range of user needs while maintaining a stable core structure.

Starting with WebUI 3.1, every extension must include a manifest declaring its compatibility and metadata. Extensions without a valid manifest are shown as Unsupported and will not load.

Embed the manifest directly in the HTML as a <script> block:

<script type="application/json" id="esp3dext-manifest">
{
"name": "My Extension",
"target": "panel",
"supportedVersion": "3.*",
"targetSystem": "*"
}
</script>

Place a JSON file alongside the HTML with the same base name:

LayoutHTML fileManifest file
Flatesp3dext-myplugin.htmlesp3dext-myplugin.json
Flat compressedesp3dext-myplugin.html.gzesp3dext-myplugin.json
Subdirectoryesp3dext-myplugin/esp3dext-myplugin.htmlesp3dext-myplugin/esp3dext-myplugin.json
FieldRequiredDescription
nameyesDisplay name shown in the extensions list
targetyesPlacement: panel, page, or content
supportedVersionyesWebUI version pattern, e.g. 3.*, 3.1.*
targetSystemyesTarget filter — see below
ownernoAuthor name
versionnoExtension version (semver)
githubnoRepository or homepage URL
descriptionnoShort description
iconnoFeather icon name (e.g. Tool, Terminal, Camera)
refreshtimenoAuto-refresh interval in ms (0 = disabled)
ValueEffect
panelAdded as a collapsible panel in the main area
pageAdded as a full-page tab
contentEmbedded as extra content
PatternMatches
*Any version
3.*Any 3.x version
3.1.*Any 3.1.x version
ValueTarget
*All targets
3d printerAll 3D printer firmwares
cncAll CNC firmwares
sand tableSand table
marlinMarlin specifically
grblGRBL specifically
grblhalgrblHAL specifically

Multiple values: "3d printer, cnc".

esp3dext-<name>.html plain HTML
esp3dext-<name>.html.gz gzip-compressed

The file must start with esp3dext-. Upload it to the extensions/ subdirectory of the device filesystem, or to the root as a fallback.

When an extension needs additional files (images, CSS, scripts), use a subdirectory:

extensions/
esp3dext-<name>/
esp3dext-<name>.html main HTML file
esp3dext-<name>.json sidecar manifest (optional)
assets/ any extra files referenced by the HTML

The directory must start with esp3dext-. The main HTML inside the directory must share the exact same base name as the directory.

Starting with WebUI 3.1, you can use the Scan for extensions feature in Settings → Interface → Extra content.

The WebUI scans /extensions (or root / as fallback) for files and directories starting with esp3dext-. It reads the embedded manifest from each file, filters by WebUI version (supportedVersion) and target (targetSystem), and displays the result with three possible statuses:

  • Available — the extension is compatible and not yet installed
  • Installed — the extension is already added to extra content
  • Unsupported — the extension has no valid manifest or does not match the current version/target

You can select multiple extensions and add them in one click with Add selected. Checkboxes are checked by default for a quicker import.

image

Add extra panel or page using this extension

Section titled “Add extra panel or page using this extension”

image

It will be displayed according your settings image

Extensions communicate with the WebUI via postMessage. The WebUI injects its CSS and active theme into every extension iframe automatically.

For the full API documentation, see Extensions API.