Discover and deploy containerised software to Arm hardware over SSH.
Point Topo at any Arm-based Linux device to discover software templates which showcase its capabilities. Pick one and Topo helps you configure it for your use case, then deploys it in minutes. The result? A standard Docker Compose project to learn from, modify, or use as a starting point for your own work.
Already have a Compose project? Topo gives you a fast, incremental build-deploy loop over SSH.
You just got a board and want to see what it can do. Topo scans your target and finds Topo Templates that showcase its capabilities, from running an LLM to comparing SIMD performance. Each one deploys in minutes and is a real Compose project you can learn from or build on.
You want a faster edit-build-deploy loop. Build on your laptop and deploy to a Pi or Jetson over SSH. Rebuilds are incremental, so after the first deploy you're often iterating in seconds.
You have a heterogeneous device and want to use all of it. Your board has coprocessors like a Cortex-M that normally need separate toolchains and manual firmware loading. Topo and remoteproc-runtime let you orchestrate the whole device as one Docker Compose project.
# Check your target is ready
topo health --target pi@raspberrypi
# See which templates match your hardware
topo templates --target pi@raspberrypi
# Clone one and configure it for your target
topo clone https://github.com/Arm-Examples/topo-welcome.git
cd topo-welcome/
topo deploy --target pi@raspberrypi- Fast, incremental deploys over SSH, with layer caching to keep rebuilds quick
- Hardware-aware template discovery that matches your target's actual capabilities
- Standard tooling throughout: Docker Compose, container images, and OCI registries
- Whole-device orchestration of Linux services and coprocessor firmware in a single Compose project
Host machine (where you run topo):
Target machine (the remote Arm system):
- Reachable with SSH
- Linux on ARM64
- Docker
The host and target can be the same system. If you're working directly on an Arm Linux system, use --target localhost.
curl -fsSL https://raw.githubusercontent.com/arm/topo/refs/heads/main/scripts/install.sh | shirm https://raw.githubusercontent.com/arm/topo/refs/heads/main/scripts/install.ps1 | iexAlternatively, manually add the appropriate binary from GitHub Releases to your PATH.
topo health --target [user@]hosttopo templates --target [user@]hostChoose a template you wish to try, then clone it:
topo clone https://github.com/Arm-Examples/topo-welcome.gitIf the template requires build arguments, Topo will prompt you for them.
cd topo-welcome/
topo deploy --target [user@]hostTopo builds the container images on your host, transfers them to the target over SSH, and starts the services.
Your project is now running on your target. See the template README for details.
When you're done, stop the running services:
topo stop --target [user@]hostRun topo <command> --help for full usage details.