> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.nvidia.com/holoscan/sdk-user-guide/5-0-latest/getting-started/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.nvidia.com/holoscan/sdk-user-guide/_mcp/server.
Welcome to Holoscan SDK 5.0. This Getting Started track takes you from an
empty project to a running multi-rate sensor-fusion pipeline: a 60 Hz camera
and a high-rate IMU feeding a fusion operator that drives a control output.
Each chapter adds exactly one capability, and every chapter's code builds on
the previous one, so by the end you have written — not just read about — a
complete application that composes, compiles, and runs.
Application graphs can be authored in C++ or Python. This track's operator
implementation and deep reference chapters are C++ topics; Python applications
compose registered C++ operators through discoverable proxies and can define
their own operators, as the [Python guide](/holoscan/sdk-user-guide/python)
describes. The lifecycle and graph chapters show both spellings where the
supported surfaces are equivalent.
> **You will learn**
>
> * How the compose → compile → run model applies in both C++ and Python
> * Which chapters define C++ operators and which also apply to Python applications
> * Where to find runnable examples and language-specific guidance
Running example: camera and IMU sources fused into a control output, driven by one clock
Camera
source · 60 Hz
IMU
source · high-rate
Fusion
multi-rate contract
Control
output
tutorial path
clock drives the graph
The full track introduces checked errors and time before the sensor-fusion
example. C++ `compute()` returns `holoscan::expected`; composition
mistakes may throw and compilation returns an inspectable plan. Operator timing
comes from temporal contracts, including the supported input-driven default
when `contract()` is omitted.
## Prerequisites
#### C++
* **Linux** (x86_64 or aarch64).
* A **C++20 toolchain** and CMake 4.0 or newer.
* A **CUDA-capable NVIDIA GPU** — optional until the final chapter
(Tensors 101); everything before it runs on the CPU.
* The SDK installed — follow
[SDK installation](/holoscan/sdk-user-guide/setup/sdk-installation) first
if you have not.
#### Python
* **Linux** (x86_64 or aarch64) and Python 3.12 or newer.
* An SDK build or installation that includes the `holoscan` Python package.
See [Python installation](/holoscan/sdk-user-guide/python/installation).
* A **CUDA-capable NVIDIA GPU** only when the application uses GPU-backed
operators or tensors; the minimal graph-authoring example runs on the CPU.
## The chapter sequence
Work through the chapters in order; each assumes the ones before it.
1. [Core concepts](/holoscan/sdk-user-guide/getting-started/core-concepts) —
the three-phase model (compose → compile → run) and the vocabulary the
whole guide uses.
2. [Errors as values](/holoscan/sdk-user-guide/getting-started/errors-as-values) —
`holoscan::expected`, branching on `ErrorCode`, and the
`HOLOSCAN_TRY` macro that keeps error-handling readable.
3. [Time and clocks](/holoscan/sdk-user-guide/getting-started/time-and-clocks) —
how the runtime models time, and why every sample carries a timestamp.
4. [Your first operator](/holoscan/sdk-user-guide/getting-started/first-operator) —
an operator as three declarations: `setup()` for structure, `contract()`
for time, `compute()` for work.
5. [Typed parameters](/holoscan/sdk-user-guide/getting-started/typed-parameters) —
declaring configuration with schemas so bad config fails before run.
6. [Composing a graph](/holoscan/sdk-user-guide/getting-started/composing-a-graph) —
wiring operators together through typed ports with `add_flow()`.
7. [Compile and check](/holoscan/sdk-user-guide/getting-started/compile-and-check) —
`compile()` turns your composed graph into an execution plan, or returns a
rejected plan that tells you exactly why.
8. [Running and stopping](/holoscan/sdk-user-guide/getting-started/running-and-stopping) —
starting the plan, observing it, and shutting down cleanly.
9. [Your first pipeline](/holoscan/sdk-user-guide/getting-started/first-pipeline) —
assembling the camera + IMU fusion pipeline end to end, with its
multi-rate temporal contract.
10. [Tensors 101](/holoscan/sdk-user-guide/getting-started/tensors-101) —
GPU payloads: borrowing tensors from preallocated pools with
`allocate_tensor()`, and why you never synchronize on the hot path.
> **Note**
>
> **Why errors and time come first.** In Holoscan 5.0, failure handling and
> temporal behavior are not advanced topics — they are the calling convention.
> APIs return `expected` values you must branch on, and `compute()` never
> reasons about time because `contract()` already did. Chapters 2 and 3 give
> you those two lenses; every chapter after them assumes you have both.
## Where to go afterward
When the track is complete, the fusion pipeline you built continues as the
running example in
[Building operators](/holoscan/sdk-user-guide/building-operators/operator-anatomy)
and the full worked applications in
[Holoscan by example](/holoscan/sdk-user-guide/examples/holoscan-by-example),
including the `camera_imu_control` and `slow_fast_fusion` example
apps that ship with the SDK.
## Start with the minimal application
The shipped [`first_pipeline` C++ example](https://github.com/nvidia-holoscan/holoscan-sdk/tree/v5.0.0/examples/first_pipeline/cpp)
demonstrates the complete lifecycle. Build and run it from its `cpp/` directory:
```bash
cmake -B build -S .
cmake --build build
./build/first_pipeline
```
For the corresponding Python authoring shape, start with the
[Python overview](/holoscan/sdk-user-guide/python). Its snippets use an
explicitly installed Operator provider; this source tree does not yet ship a
standalone Python sibling for `first_pipeline`.
## Recap
* C++ and Python applications use the same compose → compile → run lifecycle.
* C++ and Python both define operators; Python also composes registered C++
operators through discoverable proxies.
* Start with the language tabs on the graph, compile, and run chapters, then use
the Python section for installation and language-specific behavior.
## Docs
- [Core Concepts](https://docs.nvidia.com/holoscan/sdk-user-guide/5-0-latest/getting-started/core-concepts.md)
- [Errors as Values](https://docs.nvidia.com/holoscan/sdk-user-guide/5-0-latest/getting-started/errors-as-values.md)
- [Time and Clocks](https://docs.nvidia.com/holoscan/sdk-user-guide/5-0-latest/getting-started/time-and-clocks.md)
- [Writing Your First Operator](https://docs.nvidia.com/holoscan/sdk-user-guide/5-0-latest/getting-started/first-operator.md)
- [Typed Parameters](https://docs.nvidia.com/holoscan/sdk-user-guide/5-0-latest/getting-started/typed-parameters.md)
- [Composing a Graph](https://docs.nvidia.com/holoscan/sdk-user-guide/5-0-latest/getting-started/composing-a-graph.md)
- [Compiling a Plan](https://docs.nvidia.com/holoscan/sdk-user-guide/5-0-latest/getting-started/compile-and-check.md)
- [Running and Stopping](https://docs.nvidia.com/holoscan/sdk-user-guide/5-0-latest/getting-started/running-and-stopping.md)
- [Tutorial: Your First Pipeline](https://docs.nvidia.com/holoscan/sdk-user-guide/5-0-latest/getting-started/first-pipeline.md)
- [Tensors 101](https://docs.nvidia.com/holoscan/sdk-user-guide/5-0-latest/getting-started/tensors-101.md)