Scaffold a new Ryzer Docker package with all required files.
new-ryzer <category> <package_name>
category— one of the existing directories underpackages/(e.g.llm,vlm,vla,robotics,vision,npu,ros,graphics,ide,adaptive-socs), or a new category name if none fits.package_name— lowercase, no spaces or hyphens (e.g.ollama,genesis,mobilesam).
A Ryzer is a self-contained, composable Docker package for running AI/ML/robotics workloads on AMD Ryzen AI hardware. Ryzers are layered — each one builds on top of a base image, and multiple ryzers can be chained together in a single build.
Users build and run ryzers with:
ryzers build <package_name> # build a single package
ryzers build pkg1 pkg2 pkg3 # chain multiple packages (each layers on the previous)
ryzers run # run the most recently built image
ryzers run bash # override CMD to get a shellEvery ryzer package lives at packages/<category>/<package_name>/ and must contain exactly these 4 files:
packages/<category>/<package_name>/
├── Dockerfile
├── config.yaml
├── test.sh (or test.py)
└── README.md
Optional extras: demo.sh, demo.py, LICENSE, additional test files.
Rules:
- MUST start with
ARG BASE_IMAGEandFROM ${BASE_IMAGE}— this enables layered composition. - MUST include the copyright header.
- Set
WORKDIR /ryzersbefore copying test/demo scripts. - Copy test scripts into
/ryzers/test_<package_name>.<ext>andchmod +xthem. - End with
CMD /ryzers/test_<package_name>.<ext>so the default action validates the install. - Use
EXPOSEfor any ports the package serves on. - Keep installs minimal — only what this package needs.
Template:
# Copyright(C) 2026 Advanced Micro Devices, Inc. All rights reserved.
# SPDX-License-Identifier: MIT
ARG BASE_IMAGE
FROM ${BASE_IMAGE}
ENV DEBIAN_FRONTEND=noninteractive
# Install dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
<system-packages> \
&& rm -rf /var/lib/apt/lists/*
# Install Python packages
RUN pip3 install --no-cache-dir --break-system-packages \
"<package1>==<version>" \
"<package2>==<version>"
# Copy test script
WORKDIR /ryzers
COPY test.sh /ryzers/test_<package_name>.sh
RUN chmod +x /ryzers/test_<package_name>.sh
# EXPOSE <port> # if applicable
CMD /ryzers/test_<package_name>.shNotes:
- Use
--no-install-recommendsand clean up apt lists to keep image size down. - Use
--no-cache-dirand--break-system-packageswith pip3. - Pin versions where possible for reproducibility.
- If the package needs build args, declare them with
ARGand document in config.yaml.
This file configures Docker build and run flags. All fields are optional — include only what the package needs. An empty/commented config.yaml is valid.
Template:
# Copyright(C) 2026 Advanced Micro Devices, Inc. All rights reserved.
# SPDX-License-Identifier: MIT
### ryzers build options
# gpu_support: false # add GPU support, default is true
# x11_display: false # add X11 support, default is true
# init_image: "image_name" # The first docker image to use as a base
# default is ryzers.RYZERS_DEFAULT_INIT_IMAGE
# build_arguments: # List of ARGs to pass to the `docker build` call
# - "ARG=VALUE" # E.g. - "PYTHON_VERSION=3.12"
### ryzers run options
# environment_variables: # List of environment variables to set in the container
# - "ENV_VARIABLE=VALUE" # E.g. "PYTHONPATH=/path/to/python"
# port_mappings:
# - "host_portnum:container_portnum" # List of port mappings to expose from the docker
# E.g. "8888:8888" for JupyterLab
# volume_mappings:
# - "host_path:container_path" # List of volume mappings to mount from the host
# E.g. "/path/to/host:/path/to/container"
# docker_extra_run_flags: "run flags" # Additional flags to pass to the `docker run` commandCommon patterns — uncomment/add as needed:
| Scenario | What to add |
|---|---|
| Package serves a web UI or API | port_mappings: ["8080:8080"] |
| Package downloads large models | volume_mappings: ["$PWD/workspace/.cache/huggingface:/root/.cache/huggingface"] |
| Package needs extra shared memory | docker_extra_run_flags: "--shm-size=2g" |
| Package needs a build-time variable | build_arguments: ["MY_VERSION=1.0"] |
| Package needs specific env vars at runtime | environment_variables: ["HSA_OVERRIDE_GFX_VERSION=11.0.0"] |
| Package does NOT need GPU | gpu_support: false |
| Package does NOT need X11 | x11_display: false |
A quick smoke test that validates the package installed correctly. Should exit 0 on success, non-zero on failure.
Bash template (test.sh):
#!/bin/bash
# Copyright (C) 2026 Advanced Micro Devices, Inc. All rights reserved.
# SPDX-License-Identifier: MIT
echo "Running tests for <package_name>..."
<command_to_test_installation>
if [ $? -eq 0 ]; then
echo "Tests passed!"
else
echo "Tests failed!"
exit 1
fiPython template (test.py):
#!/usr/bin/env python3
# Copyright(C) 2026 Advanced Micro Devices, Inc. All rights reserved.
# SPDX-License-Identifier: MIT
import <package>
print(f"<package> version: {<package>.__version__}")
# Add a minimal functional check hereGuidelines:
- Keep it fast — just verify the install, don't run full test suites.
- Import the main module, print its version, maybe run one trivial operation.
- For services (like ollama), start the server, wait briefly, then test the endpoint.
Template:
# <Package Name> Docker Setup
Brief description of what this package provides and what it's useful for.
## Build & Run
```sh
ryzers build <package_name>
ryzers runCopyright(C) 2026 Advanced Micro Devices, Inc. All rights reserved.
---
## After Creating the Package
1. **Update the main `README.md`** — add a link to the new package in the "Supported Packages" table under the appropriate category row.
2. **Test locally** (if possible):
```bash
ryzers build <package_name>
ryzers run
| Category | Directory | What goes here |
|---|---|---|
| LLM | packages/llm/ |
Large language models (ollama, llamacpp, etc.) |
| VLM | packages/vlm/ |
Vision-language models (gemma3, phi4, etc.) |
| VLA | packages/vla/ |
Vision-language-action models (openvla, gr00t, etc.) |
| Robotics | packages/robotics/ |
Robotics frameworks (lerobot, act, genesis, etc.) |
| ROS | packages/ros/ |
ROS 2 and related tools (ros, gazebo) |
| Vision | packages/vision/ |
Computer vision (opencv, sam, ultralytics, etc.) |
| NPU | packages/npu/ |
Ryzen AI NPU tools (xdna, iron, etc.) |
| Graphics | packages/graphics/ |
3D/graphics engines (o3de) |
| IDE | packages/ide/ |
Development environments (jupyterlab) |
| Adaptive SoCs | packages/adaptive-socs/ |
Adaptive SoC tools (pynq-remote) |
| Workshops | packages/workshops/ |
Workshop demos |
Create a new category directory if the package doesn't fit any of these.
Study these existing packages for patterns:
- Minimal package:
packages/init/ryzer_blank/— bare minimum Dockerfile - Typical package:
packages/robotics/genesis/— good all-around reference - Service with ports:
packages/llm/ollama/— port mappings, volume mounts, server test - Package with build args:
packages/vision/opencv/— usesARG OPENCV_VERSIONfrom config.yaml - Web UI package:
packages/ide/jupyterlab/— port mapping, environment variables