Releases: canonical/workshop
v0.9.0
See release notes.
v0.1.30
See release notes.
Workshop v0.1.29 release notes
19 December 2025
These release notes cover new features and changes in Workshop v0.1.29.
Requirements and compatibility
Workshop relies on Snap and LXD:
- See the Tutorial for setup instructions.
- Refer to the Contribution Guide for development prerequisites.
What's new in Workshop v0.1.29
This release introduces internal improvements to SDK management,
test infrastructure enhancements, and better error handling across the board.
SDK storage refactoring
SDK installations are now stored in LXD devices rather than instance
configuration, simplifying the backend architecture. SDK snapshots have been
decoupled from configuration and devices, and snapshot creation now happens in
separate tasks for better control and observability. The terminology has also
been updated: "layers" are now consistently referred to as "snapshots"
throughout the codebase.
Workshop exec and run improvements
The workshop exec and workshop run commands now handle ambiguous arguments
more intelligently, supporting optional -- separators only before the command
to align with common command-line conventions and simplify interactive use.
Enhanced test infrastructure
The spread test binary is built once and cached across test runs,
significantly improving CI performance. Network resilience in tests has been
improved with better retry logic around apt operations and Go proxy
workarounds. A new workflow now checks for LXD candidate channel updates to
catch breaking changes early.
Better timezone handling
Workshops now automatically inherit the host's timezone on launch and refresh,
making time-sensitive operations more intuitive.
Documentation improvements
A documentation style guide and a Copilot review framework was added; the
additions include foundational instructions and workflows for automated code and
documentation review and JSON schema updates. The in-project starter pack SDK
was decommissioned from the dev workshop in favor of a simpler approach that
now includes a dedicated GitHub action. Auto-generated CLI reference
documentation for sdkcraft was added. Navigation structure on landing pages
was simplifed.
Full Changelog:
v0.1.28...v0.1.29
v0.1.28
What's Changed
- Doc: Added 'Components', 'Runtime' arch sections by @akcano in #477
- Doc: Update documentation tests by @akcano in #494
- Cache base image metadata to speed up GetBase by @jonathan-conder in #521
- Doc: Add v0.1.27 info, prune doc tests by @akcano in #523
- Fix linter issues by @dmitry-lyfar in #528
- Fix README example by @dmitry-lyfar in #532
- Use UID instead of username for systemctl machine by @jonathan-conder in #531
Full Changelog: v0.1.27...v0.1.28
v0.1.27
What's Changed
- Add Go automatic vulnerability scanning by @dmitry-lyfar in #512
- Add cryptographic documentation by @dmitry-lyfar in #513
- Use --machine option for systemctl instead of sudo by @dmitry-lyfar in #515
- Doc: Fix 0.1.26 info, update starter pack by @akcano in #514
- Fix abortion for injected tasks by @dmitry-lyfar in #516
- Fix sdk info by @jonathan-conder in #517
- Hash Store, in-project and sketch SDKs by @jonathan-conder in #511
- Workaround issue starting 22.04 containers on recent kernels by @jonathan-conder in #519
Full Changelog: v0.1.26...v0.1.27
v0.1.26
17 October 2025
These release notes cover new features and changes in Workshop v0.1.26.
Requirements and compatibility
Workshop relies on Snap and LXD:
- See the Tutorial for setup instructions.
- Refer to the Contribution Guide for development prerequisites.
What's new in Workshop v0.1.26
This release improves stash efficiency for large workshops, introduces a new SDK
browsing utility aptly named sdk, and enhances workshop metadata preservation
during refresh operations.
Improved stash efficiency with instance cloning
Workshop now uses cloned instances in addition to snapshots for stashing and
unstashing operations. This enables instance-only copies, significantly
speeding up refresh operations for large workshops.
To maintain DHCP stability, stashed instances are assigned different MAC
addresses from the main instances. Most volatile.* configuration options are
no longer copied to or from the stash for consistency.
Also, Workshop now preserves workshop state when refresh operations fail.
Note: Workshop and SDK names are limited to 40 characters with this update,
following the SDKcraft naming convention.
New sdk browsing utility with sdk info and sdk list
The new sdk info command provides detailed information about installed SDK
volumes:
$ sdk info openvino
name: openvino
summary: Intel OpenVINO development environment
description: |
Longer description, can be multi-line.
installed:
~/work/nav2: ci latest/stable 2024-11-25 (85) 109MB
~/work/lerobot: dev latest/edge 2024-11-20 (82) 102MBThe sdk list command enumerates all local SDK volumes, displaying the SDK
revisions currently stored on the system. Only volumes are reported, not the
workshops that use them.
Full Changelog:
v0.1.25...v0.1.26
v0.1.25
Workshop v0.1.25 release notes
03 October 2025
These release notes cover new features and changes in Workshop v0.1.25.
Requirements and compatibility
Workshop relies on Snap and LXD:
- See the Tutorial for setup instructions.
- Refer to the Contribution Guide for development prerequisites.
What's new in Workshop v0.1.25
This release enhances the refresh workflow by incorporating base image updates
and automatically rebuilding workshops when the base image is outdated.
Incorporate base image in refresh plan
The workshop refresh command now queries the image server at the same time as
the Store. If the base image is outdated, the workshop is rebuilt from scratch
based on the new image. This is the same behaviour as switching to a different
base. If the current base is up to date, the workshop will likely be restored
from a snapshot.
There's no cleanup logic for images at present. They will start to pile up over
time, but the snap's remove hook should keep this under control for now.
Changelog
- Remove support for scripts by @jonathan-conder in #484
- Prevent concurrent TICS server jobs by @jonathan-conder in #485
- Change scripts to actions in dev.yaml by @akcano in #486
- Stop creating ~/bin in workshops by @jonathan-conder in #487
- Wait for systemd to be ready before waiting for systemd-networkd by @jonathan-conder in #488
- Update
project-toolsto install tools insetup-baseby @dmitry-lyfar in #490 - Fix a few issues in LXD backend by @jonathan-conder in #492
- Doc: Add 'SDK best practices' by @akcano in #483
- Update base image before launching or rebuilding a workshop by @jonathan-conder in #491
- Doc: Add JetBrains gateway how-to by @akcano in #496
- Incorporate base image in refresh plan by @jonathan-conder in #493
- Doc: Restructure how-tos, explanation by @akcano in #489
- Update CLI reference docs by @github-actions[bot] in #497
- Update doc coverage map by @github-actions[bot] in #498
- Doc: Add v0.1.25 info, reconcile release notes by @akcano in #499
Full Changelog: v0.1.24...v0.1.25
v0.1.24
Workshop v0.1.24 release notes
12 September 2025
These release notes cover new features and changes in Workshop v0.1.24.
Requirements and compatibility
Workshop relies on Snap and LXD:
- See the Tutorial for setup instructions.
- Refer to the Contribution Guide for development prerequisites.
What's new in Workshop v0.1.24
This release improves error reporting consistency, adds compatibility checks for
LXD, and introduces a shift from "scripts" to "actions" in Workshop definitions.
Unified error reporting for launch, refresh, and sketch-sdk
Error handling is now consistent across commands when changes are aborted.
Previously, if a change became Undone after a Ctrl+C, the result could
either appear as an aborted change or silently finish. This discrepancy has been
reconciled. In addition, error reporting has been fixed for the sketch-sdk
command when a sketch refresh is interrupted.
LXD version check before use
Workshop now verifies the LXD version before using it as a backend, preventing
compatibility issues with unsupported versions.
Scripts renamed to actions
Workshop scripts are now referred to as actions. Existing workshop
definitions that use scripts: remain supported for now, but the internal
representation has changed, and old clients may not be fully compatible with new
daemons.
In the new model, each action is defined with a script field:
$ workshop actions dev
all:
script: npm run all -- "$@"
format:
script: npm run format:write -- "$@"
inspect:
script: npm run inspect -- "$@"
install:
script: npm ci -- "$@"
lint:
script: npm run lint -- "$@"
test:
script: npm run test -- "$@"Currently, script is the only available field, but additional fields (such as
uid and gid) may be added later. The migration also completes a switch to
the standard library maps and slices, resolving related issues.
Changelog
- Unify error reporting for launch, refresh and sketch changes by @dmitry-lyfar in #466
- Rename scripts to actions by @jonathan-conder in #463
- Doc: Reinstate starter pack; improve examples, tutorial by @akcano in #471
- Check LXD version before using it as a backend by @dmitry-lyfar in #473
- Doc: Improve tutorial wording, structure by @akcano in #474
- Expand $SDK variable in mount plug targets by @jonathan-conder in #479
- Doc: Improve installation instructions by @akcano in #476
- Update doc coverage map by @github-actions[bot] in #481
- Doc: Add v0.1.24 info, reconcile release notes by @akcano in #480
Full Changelog:
v0.1.23...v0.1.24
v0.1.23
Workshop v0.1.23 release notes
29 August 2025
These release notes cover new features and changes in Workshop v0.1.23.
Requirements and compatibility
Workshop relies on Snap and LXD:
- See the Tutorial for setup instructions.
- Refer to the Contribution Guide for development prerequisites.
What’s new in Workshop v0.1.23
This release introduces smarter handling of SDK volumes, new options for mount
interfaces, a significantly expanded tutorial, and improvements to workshop refresh.
Automatic cleanup of unused SDK volumes
Workshopd now automatically tracks and removes unused SDK volumes. A cleanup
handler runs after install-sdk or unregister-sdk tasks to detect when a
volume is no longer needed (for example, after a workshop is removed, a refresh
detaches an SDK, or a launch fails).
Volumes are only deleted if they remain unused for more than one hour, reducing
the chance of removing volumes that might be immediately reused.
Mount interface plugs with uid, gid, and mode options
Mount interface plugs now support specifying uid, gid, and mode options,
allowing finer control over mounted resources.
Smarter workshop refresh and new restore option
The workshop refresh command will now skip execution if no changes to SDKs,
interfaces, or the base are detected.
A new --restore flag restores a workshop from the most recent snapshot taken
after the last successful setup-base run, simplifying recovery workflows.
Docs and coverage
The Tutorial has been restructured into a four-part series. Instead of simpler hello-world examples,
it now uses more practical configurations based on the Ollama and Jupyter SDKs that we provide.
The guide also covers interfaces, sketching, and in-project SDKs in more detail, forming a complete end-to-end scenario.
Changelog
- Complete script names if no workshop names match partial argument by @jonathan-conder in #453
- Remove redundant LXD config update on startWorkshop cleanup by @dmitry-lyfar in #455
- Doc: fix typo in VSCode remote SDK name by @dmitry-lyfar in #456
- Support trying out packed SDKs by @jonathan-conder in #448
- Improve test coverage for base-agnostic SDKs by @jonathan-conder in #458
- Add workflow to prevent accidentally merging fixup commits by @jonathan-conder in #459
- Make TICS Action aware of branches by @jonathan-conder in #460
- Doc: Add github-runner SDK how-to by @akcano in #450
- Remove unused SDK volumes by @dmitry-lyfar in #457
- Doc: Brush up 'Initial installation' by @akcano in #424
- Make verbose mode off for sketch-sdk by default by @dmitry-lyfar in #462
- Doc: Extend workshop description, add review config by @akcano in #447
- Add mode, uid, and gid options for mount plugs by @jonathan-conder in #461
- Doc: Update tutorial to use ollama SDK by @akcano in #449
- Extend refresh with new options by @dmitry-lyfar in #464
- Fix parsing mount plug attributes from the state by @jonathan-conder in #465
- Update CLI reference docs by @github-actions[bot] in #468
- Update doc coverage map by @github-actions[bot] in #470
- Doc: Add v0.1.23 info by @akcano in #469
- Add pack to bare snapcraft and sdkcraft commands by @jonathan-conder in #467
Full Changelog: v0.1.22...v0.1.23
v0.1.22
15 August 2025
These release notes cover new features and changes in Workshop v0.1.22.
Requirements and compatibility
Workshop relies on Snap and LXD:
See the Tutorial for setup instructions.
Refer to the Contribution Guide for development prerequisites.
What’s new in Workshop v0.1.22
Support sdkcraft try
After running sdkcraft try in an SDKcraft project, the local user can use the SDK(s) it built by adding - name: try- to a workshop definition.
Changelog
- Complete script names if no workshop names match partial argument by @jonathan-conder in #453
- Remove redundant LXD config update on startWorkshop cleanup by @dmitry-lyfar in #455
- Doc: fix typo in VSCode remote SDK name by @dmitry-lyfar in #456
- Support trying out packed SDKs by @jonathan-conder in #448
- Improve test coverage for base-agnostic SDKs by @jonathan-conder in #458
Full Changelog: v0.1.21...v0.1.22