<a id="home"></a>

# **Workshop**

**Workshop** is a tool for creating and managing container-based development
environments. Define the languages, libraries, and tools your project needs
in a workshop definition, then compose the environment from SDKs:
independent units of functionality that connect through interfaces.
Use SDKs published on the SDK Store or define them in your repository.

Workshop helps developers and teams reproduce complex setups across machines,
experiment in a sandbox, and manage environment updates.
It supports projects that span Ubuntu versions, container images, languages,
and frameworks, including AI and machine learning, robotics, IoT,
and education. Reuse a definition to set up an environment
or rebuild it when you need a fresh start.

---

<a id="documentation-directory"></a>

## In this documentation

<a id="home-getting-started"></a>

<a id="start-here"></a>

### Getting started

* **Installation**
  * [Install Workshop](https://ubuntu.com/workshop/docs//tutorial/part-1-get-started.md#tut-install)
* **Tutorial**
  * [Get started with Workshop](https://ubuntu.com/workshop/docs//tutorial/part-1-get-started.md#tut-get-started)
  * [Work with interfaces](https://ubuntu.com/workshop/docs//tutorial/part-2-work-with-interfaces.md#tut-interfaces)
  * [Sketch SDKs](https://ubuntu.com/workshop/docs//tutorial/part-3-sketch-sdks.md#tut-sketch-sdks)
  * [Craft SDKs](https://ubuntu.com/workshop/docs//tutorial/part-4-craft-sdks.md#tut-craft-sdks)

<a id="home-key-concepts-and-architecture"></a>

<a id="know-your-workshop"></a>

<a id="key-concepts-and-architecture"></a>

<a id="key-concepts-and-architecture-heading"></a>

### Concepts and architecture

* **Workshops**
  * [Workshop concepts](https://ubuntu.com/workshop/docs//explanation/workshops/concepts.md#exp-workshop-concepts)
  * [Changes and tasks explained](https://ubuntu.com/workshop/docs//explanation/workshops/changes-tasks.md#exp-changes-tasks)
  * [How workshop actions work](https://ubuntu.com/workshop/docs//explanation/workshops/concepts.md#exp-workshop-definition-actions)
  * [Workshop status meanings](https://ubuntu.com/workshop/docs//explanation/workshops/concepts.md#exp-workshop-status)
  * [Workshop states and transitions](https://ubuntu.com/workshop/docs//explanation/workshops/concepts.md#exp-workshop-lifecycle)
  * [Workshop base](https://ubuntu.com/workshop/docs//explanation/workshops/concepts.md#exp-base)
* **Projects**
  * [Project structure](https://ubuntu.com/workshop/docs//explanation/workshops/projects.md#exp-projects)
  * [Multi-workshop patterns](https://ubuntu.com/workshop/docs//explanation/workshops/multi-workshop-patterns.md#exp-multi-workshop-patterns)
* **SDKs**
  * [SDK concepts](https://ubuntu.com/workshop/docs//explanation/sdks/concepts.md#exp-sdk-concepts)
  * [Build and runtime definitions](https://ubuntu.com/workshop/docs//explanation/sdks/concepts.md#exp-sdk-definition)
  * [SDK parts](https://ubuntu.com/workshop/docs//explanation/sdks/parts.md#exp-sdk-parts)
  * [Runtime hook model](https://ubuntu.com/workshop/docs//explanation/sdks/runtime-hooks.md#exp-sdk-hooks)
  * [SDK development and distribution](https://ubuntu.com/workshop/docs//explanation/sdks/lifecycle.md#exp-sdk-lifecycle)
* **SDK sources**
  * [System SDK](https://ubuntu.com/workshop/docs//explanation/sdks/concepts.md#exp-system-sdk)
  * [SDK Store](https://ubuntu.com/workshop/docs//explanation/sdks/concepts.md#exp-sdk-store)
  * [In-project SDKs](https://ubuntu.com/workshop/docs//explanation/sdks/concepts.md#exp-in-project-sdk)
  * [SDK sketches](https://ubuntu.com/workshop/docs//explanation/sdks/concepts.md#exp-sketch-sdk)
  * [SDK channels](https://ubuntu.com/workshop/docs//reference/sdks.md#ref-sdk-channels)
* **Interfaces**
  * [Interface concepts](https://ubuntu.com/workshop/docs//explanation/interfaces/concepts.md#exp-interface-concepts)
  * [Plugs and slots](https://ubuntu.com/workshop/docs//explanation/interfaces/plugs-and-slots.md#exp-plugs-slots)
  * [Auto-connection](https://ubuntu.com/workshop/docs//explanation/interfaces/plugs-and-slots.md#exp-interface-auto-connection)
  * [Connections](https://ubuntu.com/workshop/docs//explanation/interfaces/concepts.md#exp-interface-connections)
  * [Plug bindings](https://ubuntu.com/workshop/docs//explanation/interfaces/plugs-and-slots.md#exp-plug-bindings)
  * [Validation](https://ubuntu.com/workshop/docs//explanation/interfaces/concepts.md#exp-interfaces-validation)
  * [Connection persistence](https://ubuntu.com/workshop/docs//explanation/workshops/concepts.md#exp-workshop-connection-lifecycle)
* **CLI concepts**
  * [Command-line tool roles](https://ubuntu.com/workshop/docs//explanation/cli.md#exp-cli)
* **Architecture**
  * [System components](https://ubuntu.com/workshop/docs//explanation/architecture/components.md#exp-arch-system-components)
  * [Runtime behavior](https://ubuntu.com/workshop/docs//explanation/architecture/runtime-behavior.md#exp-arch-runtime-behavior)
  * [Daemon](https://ubuntu.com/workshop/docs//explanation/architecture/components.md#exp-arch-daemon)
  * [REST API](https://ubuntu.com/workshop/docs//explanation/architecture/components.md#exp-arch-api)
  * [LXD backend](https://ubuntu.com/workshop/docs//explanation/architecture/components.md#exp-arch-lxd-backend)
  * [Storage backends](https://ubuntu.com/workshop/docs//explanation/architecture/components.md#exp-arch-zfs-storage)
  * [State database](https://ubuntu.com/workshop/docs//explanation/architecture/components.md#exp-arch-state-database)
  * [Images](https://ubuntu.com/workshop/docs//explanation/architecture/components.md#exp-arch-images)
  * [Network](https://ubuntu.com/workshop/docs//explanation/architecture/components.md#exp-arch-network)
  * [Launch process](https://ubuntu.com/workshop/docs//explanation/architecture/runtime-behavior.md#exp-arch-workshop-launch)
  * [Container layout](https://ubuntu.com/workshop/docs//explanation/architecture/runtime-behavior.md#exp-arch-container-layout)
  * [Workshop internals](https://ubuntu.com/workshop/docs//reference/workshops.md#ref-workshop-internals)
  * [SDK internals](https://ubuntu.com/workshop/docs//reference/sdks.md#ref-sdk-internals)

<a id="home-using-workshops"></a>

### Using workshops

* **Inspection**
  * [Workshop transition diagrams](https://ubuntu.com/workshop/docs//reference/workshop-status.md#ref-workshop-status)
  * [workshop info](https://ubuntu.com/workshop/docs//reference/cli/workshop.md#ref-workshop-info)
  * [workshop list](https://ubuntu.com/workshop/docs//reference/cli/workshop.md#ref-workshop-list)
* **Container controls**
  * [workshop launch](https://ubuntu.com/workshop/docs//reference/cli/workshop.md#ref-workshop-launch)
  * [workshop remove](https://ubuntu.com/workshop/docs//reference/cli/workshop.md#ref-workshop-remove)
  * [workshop start](https://ubuntu.com/workshop/docs//reference/cli/workshop.md#ref-workshop-start)
  * [workshop stop](https://ubuntu.com/workshop/docs//reference/cli/workshop.md#ref-workshop-stop)
* **Refresh and restore**
  * [workshop refresh](https://ubuntu.com/workshop/docs//reference/cli/workshop.md#ref-workshop-refresh)
  * [workshop restore](https://ubuntu.com/workshop/docs//reference/cli/workshop.md#ref-workshop-restore)
* **Commands and shells**
  * [workshop exec](https://ubuntu.com/workshop/docs//reference/cli/workshop.md#ref-workshop-exec)
  * [workshop shell](https://ubuntu.com/workshop/docs//reference/cli/workshop.md#ref-workshop-shell)
* **Actions**
  * [Add actions](https://ubuntu.com/workshop/docs//how-to/customize-workshops/add-actions.md#how-add-actions)
  * [workshop actions](https://ubuntu.com/workshop/docs//reference/cli/workshop.md#ref-workshop-actions)
  * [workshop run](https://ubuntu.com/workshop/docs//reference/cli/workshop.md#ref-workshop-run)
* **CLI tools**
  * [workshop CLI reference](https://ubuntu.com/workshop/docs//reference/cli/workshop.md#ref-workshop-cli)
  * [workshopctl CLI reference](https://ubuntu.com/workshop/docs//reference/cli/workshopctl.md#ref-workshopctl-cli)
  * [Shell completion](https://ubuntu.com/workshop/docs//reference/cli/workshop.md#ref-workshop-cli-completion)

<a id="home-workshop-configuration"></a>

<a id="work-in-a-workshop"></a>

### Workshop configuration

* **Definitions**
  * [workshop.yaml configuration reference](https://ubuntu.com/workshop/docs//reference/definition-files/workshop-definition.md#ref-workshop-definition)
  * [workshop init](https://ubuntu.com/workshop/docs//reference/cli/workshop.md#ref-workshop-init)
  * [Example workshop repositories](https://github.com/canonical/reference-workshops)
* **SDK selection**
  * [How SDKs compose a workshop](https://ubuntu.com/workshop/docs//explanation/workshops/concepts.md#exp-workshop-definition-sdks)
  * [sdk CLI reference](https://ubuntu.com/workshop/docs//reference/cli/sdk.md#ref-sdk-cli)
  * [sdk find](https://ubuntu.com/workshop/docs//reference/cli/sdk.md#ref-sdk-find)
  * [sdk info](https://ubuntu.com/workshop/docs//reference/cli/sdk.md#ref-sdk-info)
  * [sdk list](https://ubuntu.com/workshop/docs//reference/cli/sdk.md#ref-sdk-list)
* **SDK sketches**
  * [workshop sketch-sdk](https://ubuntu.com/workshop/docs//reference/cli/workshop.md#ref-workshop-sketch-sdk)
  * [workshop sketches](https://ubuntu.com/workshop/docs//reference/cli/workshop.md#ref-workshop-sketches)
* **Interface connections**
  * [Plugs, slots, and connections](https://ubuntu.com/workshop/docs//explanation/workshops/concepts.md#exp-workshop-definition-connections)
  * [Connect interfaces with the CLI](https://ubuntu.com/workshop/docs//explanation/interfaces/concepts.md#exp-interfaces-cli-operations)
  * [workshop connect](https://ubuntu.com/workshop/docs//reference/cli/workshop.md#ref-workshop-connect)
  * [workshop connections](https://ubuntu.com/workshop/docs//reference/cli/workshop.md#ref-workshop-connections)
  * [workshop disconnect](https://ubuntu.com/workshop/docs//reference/cli/workshop.md#ref-workshop-disconnect)
  * [workshop remount](https://ubuntu.com/workshop/docs//reference/cli/workshop.md#ref-workshop-remount)
* **Project organisation**
  * [Project updates](https://ubuntu.com/workshop/docs//tutorial/part-1-get-started.md#tut-project-updates)
  * [Use multiple workshops](https://ubuntu.com/workshop/docs//how-to/customize-workshops/use-multiple-workshops.md#how-use-multiple-workshops)
  * [Move projects](https://ubuntu.com/workshop/docs//how-to/customize-workshops/move-projects.md#how-move-projects)

<a id="home-sdk-development"></a>

<a id="craft-and-publish-sdks"></a>

### SDK development

* **SDK design**
  * [SDK best practices](https://ubuntu.com/workshop/docs//explanation/sdks/best-practices.md#exp-sdk-best-practices)
  * [SDKs vs Dockerfiles](https://ubuntu.com/workshop/docs//explanation/sdks/sdk-vs-dockerfile.md#exp-dockerfile-vs-sdk)
  * [Example SDK repositories](https://github.com/canonical/reference-sdks)
* **Definition files**
  * [sdkcraft.yaml build definition](https://ubuntu.com/workshop/docs//reference/definition-files/sdkcraft-definition.md#ref-sdkcraft-definition)
  * [sdk.yaml runtime definition](https://ubuntu.com/workshop/docs//reference/definition-files/sdk-definition.md#ref-sdk-definition)
  * [sdkcraft init](https://ubuntu.com/workshop/docs//reference/cli/sdkcraft.md#ref-sdkcraft-init)
* **Packaging**
  * [Build an SDK](https://ubuntu.com/workshop/docs//how-to/develop-sdks/build-an-sdk.md#how-build-sdk)
  * [sdkcraft CLI reference](https://ubuntu.com/workshop/docs//reference/cli/sdkcraft.md#ref-sdkcraft-cli)
  * [sdkcraft pack](https://ubuntu.com/workshop/docs//reference/cli/sdkcraft.md#ref-sdkcraft-pack)
* **Build controls**
  * [sdkcraft build](https://ubuntu.com/workshop/docs//reference/cli/sdkcraft.md#ref-sdkcraft-build)
  * [sdkcraft clean](https://ubuntu.com/workshop/docs//reference/cli/sdkcraft.md#ref-sdkcraft-clean)
  * [sdkcraft prime](https://ubuntu.com/workshop/docs//reference/cli/sdkcraft.md#ref-sdkcraft-prime)
  * [sdkcraft pull](https://ubuntu.com/workshop/docs//reference/cli/sdkcraft.md#ref-sdkcraft-pull)
  * [sdkcraft stage](https://ubuntu.com/workshop/docs//reference/cli/sdkcraft.md#ref-sdkcraft-stage)
* **Runtime hooks**
  * [Runtime hook model](https://ubuntu.com/workshop/docs//explanation/sdks/runtime-hooks.md#exp-sdk-hooks)
  * [Write runtime hooks](https://ubuntu.com/workshop/docs//how-to/develop-sdks/write-runtime-hooks.md#how-write-runtime-hooks)
* **Resource interfaces**
  * [Content sharing](https://ubuntu.com/workshop/docs//explanation/sdks/sdk-vs-dockerfile.md#exp-content-sharing)
  * [Declare plugs and slots](https://ubuntu.com/workshop/docs//how-to/develop-sdks/declare-plugs-slots.md#how-declare-plugs-slots)
  * [Configure a mount](https://ubuntu.com/workshop/docs//how-to/develop-sdks/configure-mount.md#how-configure-mount)
  * [Share content between SDKs](https://ubuntu.com/workshop/docs//how-to/develop-sdks/share-content-between-sdks.md#how-share-content-between-sdks)
* **Testing and health**
  * [SDK testing options](https://ubuntu.com/workshop/docs//explanation/sdks/concepts.md#exp-test-try-sdk)
  * [Health reporting](https://ubuntu.com/workshop/docs//explanation/sdks/runtime-hooks.md#exp-workshopctl-health)
  * [Try an SDK in a workshop](https://ubuntu.com/workshop/docs//how-to/develop-sdks/build-an-sdk.md#how-build-sdk-try)
  * [sdkcraft test](https://ubuntu.com/workshop/docs//reference/cli/sdkcraft.md#ref-sdkcraft-test)
  * [sdkcraft try](https://ubuntu.com/workshop/docs//reference/cli/sdkcraft.md#ref-sdkcraft-try)
* **Publishing**
  * [Publish an SDK](https://ubuntu.com/workshop/docs//how-to/develop-sdks/publish-an-sdk.md#how-publish-sdk)
  * [Automate SDK uploads from CI](https://ubuntu.com/workshop/docs//how-to/develop-sdks/publish-an-sdk.md#how-publish-sdk-ci)
  * [sdkcraft release](https://ubuntu.com/workshop/docs//reference/cli/sdkcraft.md#ref-sdkcraft-release)
  * [sdkcraft upload](https://ubuntu.com/workshop/docs//reference/cli/sdkcraft.md#ref-sdkcraft-upload)
* **Store administration**
  * [sdkcraft create-track](https://ubuntu.com/workshop/docs//reference/cli/sdkcraft.md#ref-sdkcraft-create-track)
  * [sdkcraft login](https://ubuntu.com/workshop/docs//reference/cli/sdkcraft.md#ref-sdkcraft-login)
  * [sdkcraft register](https://ubuntu.com/workshop/docs//reference/cli/sdkcraft.md#ref-sdkcraft-register)
  * [sdkcraft revisions](https://ubuntu.com/workshop/docs//reference/cli/sdkcraft.md#ref-sdkcraft-revisions)

<a id="home-shared-resources"></a>

<a id="connect-tools-and-resources"></a>

### Shared resources

* **Files and storage**
  * [Mount interface](https://ubuntu.com/workshop/docs//explanation/interfaces/mount-interface.md#exp-mount-interface)
  * [Mount interface reference](https://ubuntu.com/workshop/docs//reference/sdks.md#ref-mount-interface)
  * [Add mounts](https://ubuntu.com/workshop/docs//how-to/customize-workshops/add-mounts.md#how-add-mounts)
  * [Reset a remount](https://ubuntu.com/workshop/docs//how-to/customize-workshops/add-mounts.md#how-reset-remount)
  * [Storage pools](https://ubuntu.com/workshop/docs//reference/workshops.md#ref-workshop-storage-pools)
* **Hardware**
  * [GPU interface](https://ubuntu.com/workshop/docs//explanation/interfaces/gpu-interface.md#exp-gpu-interface)
  * [GPU interface reference](https://ubuntu.com/workshop/docs//reference/sdks.md#ref-gpu-interface)
  * [Camera interface](https://ubuntu.com/workshop/docs//explanation/interfaces/camera-interface.md#exp-camera-interface)
  * [Camera interface reference](https://ubuntu.com/workshop/docs//reference/sdks.md#ref-camera-interface)
  * [Custom device interface](https://ubuntu.com/workshop/docs//explanation/interfaces/custom-device-interface.md#exp-custom-device-interface)
  * [Custom device interface reference](https://ubuntu.com/workshop/docs//reference/sdks.md#ref-custom-device-interface)
  * [Use host devices](https://ubuntu.com/workshop/docs//how-to/customize-workshops/use-host-devices.md#how-use-host-devices)
* **Display**
  * [Desktop interface](https://ubuntu.com/workshop/docs//explanation/interfaces/desktop-interface.md#exp-desktop-interface)
  * [Desktop interface reference](https://ubuntu.com/workshop/docs//reference/sdks.md#ref-desktop-interface)
* **Networking**
  * [Tunnel interface](https://ubuntu.com/workshop/docs//explanation/interfaces/tunnel-interface.md#exp-tunnel-interface)
  * [Tunnel interface reference](https://ubuntu.com/workshop/docs//reference/sdks.md#ref-tunnel-interface)
  * [Tunnel auto-connection rules](https://ubuntu.com/workshop/docs//explanation/interfaces/tunnel-interface.md#exp-tunnel-connection)
  * [Workshop hostnames](https://ubuntu.com/workshop/docs//explanation/workshops/concepts.md#exp-workshop-hostname)
  * [Forward ports](https://ubuntu.com/workshop/docs//how-to/customize-workshops/forward-ports.md#how-forward-ports)
  * [Cross-workshop networking](https://ubuntu.com/workshop/docs//how-to/customize-workshops/use-multiple-workshops.md#how-use-multiple-workshops-networking)
* **SSH agent**
  * [SSH agent interface](https://ubuntu.com/workshop/docs//explanation/interfaces/ssh-interface.md#exp-ssh-interface)
  * [SSH agent interface reference](https://ubuntu.com/workshop/docs//reference/sdks.md#ref-ssh-interface)

<a id="home-tool-integrations"></a>

### Tool integrations

* **Editors and IDEs**
  * [Develop in VS Code](https://ubuntu.com/workshop/docs//how-to/develop-with-workshops/connect-vscode.md#how-vscode-connect-remote)
  * [Connect JetBrains Gateway](https://ubuntu.com/workshop/docs//how-to/develop-with-workshops/run-jetbrains-gateway.md#how-jetbrains-gateway)
  * [Run JupyterLab in a browser](https://ubuntu.com/workshop/docs//how-to/develop-with-workshops/run-jupyterlab-in-browser.md#how-jupyterlab-run-in-browser)
* **Python environments**
  * [Manage Python environments](https://ubuntu.com/workshop/docs//how-to/develop-with-workshops/manage-python-environments.md#how-manage-python-environments)
* **Version control**
  * [Use with Git](https://ubuntu.com/workshop/docs//how-to/develop-with-workshops/use-git.md#how-git-workshops)
* **Continuous integration**
  * [Run GitHub Actions locally](https://ubuntu.com/workshop/docs//how-to/develop-with-workshops/run-github-actions-locally.md#how-run-github-actions-locally)
  * [Run workshops in GitHub Actions](https://ubuntu.com/workshop/docs//how-to/develop-with-workshops/run-workshops-in-github-actions.md#how-run-workshops-in-github-actions)
* **AI agents**
  * [Use with AI agents](https://ubuntu.com/workshop/docs//how-to/develop-with-workshops/use-workshops-with-ai-agents.md#how-use-workshops-with-ai-agents)
  * [AI agent reference](https://ubuntu.com/workshop/docs//reference/ai-agents.md#ref-ai-agents)
  * [use-workshop skill](https://ubuntu.com/workshop/docs//reference/ai-agents.md#ref-ai-use-workshop-skill)
  * [onboard-workshop skill](https://ubuntu.com/workshop/docs//reference/ai-agents.md#ref-ai-onboard-workshop-skill)
  * [design-sdk skill](https://ubuntu.com/workshop/docs//reference/ai-agents.md#ref-ai-design-sdk-skill)
  * [LLM-readable docs](https://ubuntu.com/workshop/docs//reference/ai-agents.md#ref-ai-discovery)
  * [Context7](https://ubuntu.com/workshop/docs//reference/ai-agents.md#ref-ai-context7)

<a id="home-maintenance"></a>

<a id="maintain-and-secure"></a>

### Maintenance

* **Releases and compatibility**
  * [Release policy and LTS](https://ubuntu.com/workshop/docs//release-notes/index.md#release-policy)
  * [Backward compatibility](https://ubuntu.com/workshop/docs//explanation/workshops/concepts.md#exp-workshop-backward-compat)
  * [Forward compatibility](https://ubuntu.com/workshop/docs//reference/workshops.md#ref-workshop-forward-compat)
  * [Upgrade Workshop](https://ubuntu.com/workshop/docs//release-notes/index.md#release-upgrade)
* **Diagnostics**
  * [Debug issues](https://ubuntu.com/workshop/docs//how-to/fix-workshops/debug-issues.md#how-debug-issues-workshops)
  * [Track workshop changes](https://ubuntu.com/workshop/docs//tutorial/part-1-get-started.md#tut-changes-tasks)
  * [workshop changes](https://ubuntu.com/workshop/docs//reference/cli/workshop.md#ref-workshop-changes)
  * [workshop okay](https://ubuntu.com/workshop/docs//reference/cli/workshop.md#ref-workshop-okay)
  * [workshop tasks](https://ubuntu.com/workshop/docs//reference/cli/workshop.md#ref-workshop-tasks)
  * [workshop warnings](https://ubuntu.com/workshop/docs//reference/cli/workshop.md#ref-workshop-warnings)
* **Recovery**
  * [Resolve plug conflicts](https://ubuntu.com/workshop/docs//how-to/fix-workshops/resolve-plug-conflicts.md#how-resolve-plug-conflicts)
  * [Fix the installation](https://ubuntu.com/workshop/docs//how-to/fix-workshops/fix-installation.md#how-troubleshoot)
  * [Purge workshops](https://ubuntu.com/workshop/docs//how-to/fix-workshops/purge.md#how-purge)

<a id="home-security"></a>

### Security

* **Permissions and isolation**
  * [Privileges](https://ubuntu.com/workshop/docs//security.md#security-privileges)
  * [Isolation](https://ubuntu.com/workshop/docs//security.md#security-isolation)
* **Data and SDK trust**
  * [Sensitive data and SDK trust](https://ubuntu.com/workshop/docs//security.md#security-risks)
* **CI runners**
  * [Local runner security](https://ubuntu.com/workshop/docs//how-to/develop-with-workshops/run-github-actions-locally.md#how-run-github-actions-locally-security)
  * [GitHub Action security](https://ubuntu.com/workshop/docs//how-to/develop-with-workshops/run-workshops-in-github-actions.md#how-run-workshops-in-github-actions-security)

<a id="home-use-cases"></a>

<a id="home-development-scenarios"></a>

<a id="development-scenarios"></a>

### Use cases

* **AI agents**
  * [Use with AI agents](https://ubuntu.com/workshop/docs//how-to/develop-with-workshops/use-workshops-with-ai-agents.md#how-use-workshops-with-ai-agents)
  * [Parallel agent runs](https://ubuntu.com/workshop/docs//how-to/develop-with-workshops/use-workshops-with-ai-agents.md#how-ai-agents-parallel-runs)
  * [Role-based coding](https://ubuntu.com/workshop/docs//how-to/develop-with-workshops/use-workshops-with-ai-agents.md#how-ai-agents-role-based)
* **AI/ML and data science**
  * [GPU interface](https://ubuntu.com/workshop/docs//explanation/interfaces/gpu-interface.md#exp-gpu-interface)
  * [Jupyter with a uv environment](https://ubuntu.com/workshop/docs//tutorial/part-2-work-with-interfaces.md#tut-jupyter-uv-venv)
  * [Manage Python environments](https://ubuntu.com/workshop/docs//how-to/develop-with-workshops/manage-python-environments.md#how-manage-python-environments)
* **Robotics and embedded**
  * [ROS 2 case study](https://ubuntu.com/workshop/docs//explanation/sdks/sdk-vs-dockerfile.md#exp-ros2-case-study)
  * [Camera interface](https://ubuntu.com/workshop/docs//explanation/interfaces/camera-interface.md#exp-camera-interface)
  * [Use host devices](https://ubuntu.com/workshop/docs//how-to/customize-workshops/use-host-devices.md#how-use-host-devices)
* **CI/CD**
  * [Run GitHub Actions locally](https://ubuntu.com/workshop/docs//how-to/develop-with-workshops/run-github-actions-locally.md#how-run-github-actions-locally)
  * [Run workshops in GitHub Actions](https://ubuntu.com/workshop/docs//how-to/develop-with-workshops/run-workshops-in-github-actions.md#how-run-workshops-in-github-actions)
  * [Automate SDK uploads from CI](https://ubuntu.com/workshop/docs//how-to/develop-sdks/publish-an-sdk.md#how-publish-sdk-ci)
* **Multiple workshops**
  * [Multi-workshop patterns](https://ubuntu.com/workshop/docs//explanation/workshops/multi-workshop-patterns.md#exp-multi-workshop-patterns)
  * [Use multiple workshops](https://ubuntu.com/workshop/docs//how-to/customize-workshops/use-multiple-workshops.md#how-use-multiple-workshops)
  * [Cross-workshop networking](https://ubuntu.com/workshop/docs//how-to/customize-workshops/use-multiple-workshops.md#how-use-multiple-workshops-networking)

## How this documentation is organized

This documentation follows the [Diátaxis documentation framework](https://diataxis.fr/),
organizing content by the type of information users need.
The four sections serve different purposes:

[Tutorial](https://ubuntu.com/workshop/docs//tutorial/index.md): Hands-on learning path for new **Workshop** users,
progressing from basic operations through interface usage to SDK development.

[How-to guides](https://ubuntu.com/workshop/docs//how-to/index.md): Step-by-step instructions for specific tasks
like connecting IDEs, managing projects, and troubleshooting issues.

[Reference](https://ubuntu.com/workshop/docs//reference/index.md): Technical specifications for CLI commands,
definition file formats, and internal behavior.

[Explanation](https://ubuntu.com/workshop/docs//explanation/index.md): In-depth discussion of **Workshop** architecture,
concepts, and design principles.

---

<a id="project-community"></a>

## Project and community

**Workshop** is an emergent project
within the DevEx department here at Canonical;
**SDKcraft** is its sibling project,
aimed at publishers who create and distribute SDKs for **Workshop**.

At its core, **Workshop** builds upon Canonical’s mature tech.
It uses [LXD](https://canonical.com/lxd/docs/latest/) as the underlying container technology;
it also follows the tooling paradigm exemplified by
[Snap](https://snapcraft.io/docs/),
and implemented with
[Craft CLI](https://craft-cli.readthedocs.io/en/latest/).

### Get involved

- [Contribution overview](https://ubuntu.com/workshop/docs//contributing.md#contributing)
- [Contribute to development](https://ubuntu.com/workshop/docs//contributing/development.md#contributing-development)
- [Contribute to documentation](https://ubuntu.com/workshop/docs//contributing/documentation.md#contributing-documentation)

### Releases

- [Release notes](https://ubuntu.com/workshop/docs//release-notes/index.md#release-notes)

### Governance and policies

- [Code of conduct](https://ubuntu.com/community/docs/ethos/code-of-conduct)
- [Security policy](https://ubuntu.com/workshop/docs//security.md)
- [License](https://github.com/canonical/workshop/blob/main/LICENSE)

### Feedback and support

- [Product and documentation feedback](https://github.com/canonical/workshop/issues)
- [Report a vulnerability](https://ubuntu.com/workshop/docs//security.md#security-reporting)
