## 2.1.0 - 2026-06-09
### Major Architecture Change
- **Eliminated static metadata bundling**: The plugin no longer ships
with bundled static help files, tool taxonomy files, or parameter
definitions. All tool discovery, help text, and parameter metadata is
now queried dynamically from the backend at runtime via the catalog
and schema APIs. This simplifies plugin maintenance, enables real-time
tool updates without plugin redeployment, and ensures UI and backend
metadata stay perfectly in sync.
### Fixed
- Fixed LiDAR tool outputs not appearing in the QGIS Layers panel
after the algorithm completes. `QgsProcessingParameterFileDestination`
(used for `.las`/`.laz` outputs) does not trigger auto-loading in
QGIS. The plugin now explicitly calls
`context.addLayerToLoadOnCompletion()` after each LiDAR tool run so
the output point cloud is loaded into the Layers panel automatically —
both for user-specified paths and `TEMPORARY_OUTPUT` — matching the
behaviour users expect from raster and vector tools.
- Fixed `output_id_mode` parameter in `individual_tree_segmentation`
not appearing as a dropdown in the QGIS tool dialog. The backend
describes enum options using curly-brace format `{a|b|c}` without a
preceding colon. The enum-option extractor now recognises this
pattern, including options that contain `+` for combination modes
(e.g., `rgb+user_data`, `rgb+point_source_id`). Users now see a
dropdown with all five modes instead of a plain text box with no
guidance.
- Removed `*.zlidar` from the LiDAR output file-format filter. The
wblidar backend does not support the zlidar format; its presence in
the save-dialog filter was misleading.
- Fixed `individual_tree_segmentation` tool GUI failure where the
`output_id_mode` enum parameter was incorrectly being treated as a
file destination, causing QGIS to pass a temp file path instead of the
mode string (`rgb`, `user_data`, `point_source_id`, or combinations).
Updated the plugin parameter type-inference logic to exclude semantic
parameter names ending in `_mode`, `_type`, `_encoding`, `_format`,
`_units`, `_method`, `_style`, `_scheme`, `_class`, and `_kind` from
the `output_` file-destination rule.
- Fixed backend installation failure on Windows when QGIS is installed
via the OSGeo4W installer. The OSGeo4W bundled Python does not include
`pip` by default. The plugin now detects when pip is missing and
displays a **persistent, user-friendly dialog** with step-by-step
remediation instructions specific to OSGeo4W, rather than a generic
error message. The remediation guidance includes commands for
bootstrapping pip via `ensurepip` or the direct pip bootstrap script,
eliminating the need for users to search documentation when they
encounter this issue.
- Fixed "No Python interpreter is available" error when using Check
Backend Updates or Runtime Diagnostics on macOS (and some Linux
builds). In these environments `sys.executable` inside QGIS is the
QGIS binary, not a Python executable. The interpreter discovery logic
now also searches for Python inside the macOS QGIS `.app` bundle
(alongside the binary and inside
`Contents/Frameworks/Python.framework/`). As a further fallback, when
`whitebox_workflows` is importable in-process the in-process path is
used for version queries (which never spawns a subprocess), preventing
the error entirely in the common case.
- Fixed Runtime Diagnostics panel rendering blank / appearing to hang
on macOS. The panel was using `QMessageBox.information` which renders
a blank white window on some macOS Qt builds when the message text is
large. Replaced with a proper scrollable `QDialog` containing a
`QPlainTextEdit` with a monospace font, matching the style of other
plugin dialogs.
- Fixed "License transfer failed: No external Python interpreter was
found for license operations" error when activating, deactivating, or
transferring a Pro license in the standard QGIS-mode installation.
License operations previously required an external subprocess Python,
which does not exist in the standard pip-installed QGIS environment.
License functions (`activate_license`, `deactivate_license`,
`transfer_license`) are now called in-process via the already-loaded
`whitebox_workflows` module when no external interpreter is
configured.
- Added comprehensive flake8 validation pass to ensure compliance with
QGIS plugin repository validator rules (W293, W503, W504, F841, F401,
E303, E305). Fixed trailing whitespace on blank lines and removed
unused variable assignments.
- Fixed `deploy_wbw_to_qgis.sh` development script emitting "Target
directory already exists" warnings on repeated installs. The script
now pre-removes the existing `whitebox_workflows/` package directory
and `.dist-info` folder before installing, so pip always sees a clean
target. Removed `--force-reinstall` flag (redundant after the
pre-clean).
yes
jlindsay
2026-06-09T18:20:33.363441+00:00
3.28.0
4.99.0
None
no
Plugin Tags