# SDKs

<!-- @artefact SDK -->

SDKs are the pre-built, reusable blocks of functionality
involved in the definition, design, distribution,
and day-to-day operation of a workshop.

## Understanding SDKs

At their core, SDKs are bundles of software dependencies
distributed through the SDK Store or defined locally;
they can pre-package libraries, tools, and configurations
or install them directly into a workshop.

* [SDK concepts](https://ubuntu.com/workshop/docs//explanation/sdks/concepts.md)
* [Parts](https://ubuntu.com/workshop/docs//explanation/sdks/parts.md)

## SDK design

When you are creating SDKs, it helps to understand
how they compare to traditional container approaches
and what design patterns lead to maintainable, reusable packages:

* [Design best practices](https://ubuntu.com/workshop/docs//explanation/sdks/best-practices.md)
* [SDKs versus Dockerfiles](https://ubuntu.com/workshop/docs//explanation/sdks/sdk-vs-dockerfile.md)

## Operations and tooling

**Workshop** exposes available SDKs through the **sdk** CLI,
lets SDK authors build and publish them with the **sdkcraft** CLI,
and ships the in-workshop **workshopctl** helper
for SDK hooks to talk back to the daemon:

* [sdk (CLI)](https://ubuntu.com/workshop/docs//explanation/sdks/sdk-cli.md)
* [sdkcraft (CLI)](https://ubuntu.com/workshop/docs//explanation/sdks/sdkcraft-cli.md)
* [workshopctl (CLI)](https://ubuntu.com/workshop/docs//explanation/sdks/workshopctl-cli.md)
