What is Viam?

Viam is a software platform for building, deploying, and managing robotics applications.

You tell Viam what hardware and software capabilities your machine needs, and Viam handles the drivers, networking, and infrastructure so you can focus on what your machine actually does.

It is the development workflow you already know, applied to physical devices: version control, remote monitoring and diagnostics, staged rollouts, and a registry of modules and models you can build on.

How a Viam machine fits together: your code runs on any computer and reaches the machine over WebRTC and gRPC. app.viam.com holds the module registry, data and ML, and fleet management, and sends configuration, modules, and ML models down to the machine, which sends data, logs, and status back up. On the machine's compute (the part), viam-agent supervises viam-server, which exposes resources: components for physical hardware and services for software capabilities. Components connect to cameras, motors, arms, sensors, boards, grippers, and other hardware over USB, GPIO, Ethernet, serial, or CAN.

Platform mental model

This section covers the building blocks you’ll see throughout Viam: what a machine is, how you describe its hardware, and where the software that controls it comes from.

Machines and parts

On the Viam platform, a machine is the combination of your compute resources and hardware that you want to control using Viam. A machine might be a robot arm with a gripper and a camera, a Raspberry Pi wired to some sensors, or a laptop collecting data through a webcam.

Every machine has at least one part: the computer that runs Viam’s software and is connected to one or more physical devices.

A part can be almost any computer, including your own Mac or PC. Installing Viam on a part sets up two programs:

  • viam-agent installs viam-server, supervises it, and keeps it up to date.
  • viam-server is the core runtime. It pulls your machine’s configuration from Viam’s cloud, downloads the software that configuration needs, and keeps everything running.

Configuration, resources, and models

Every part has a JSON configuration describing what hardware is connected to the part and what that hardware can do. You edit it on app.viam.com or the CLI, and the machine picks up your changes automatically.

Everything in the configuration is a resource. Resources come in two kinds:

  • Components represent physical hardware: a camera, a motor, a sensor, an arm, a gripper, or a board. Each one wraps a piece of hardware and exposes a standard API for it (for example, an arm API with move commands or a camera API that returns images).
  • Services are software capabilities running on the machine, such as computer vision, motion planning, data management, and any other code that controls the machine.

Every resource has an API, and a model is a specific implementation of that API. For example, an SO-101 arm and a uFactory xArm6 arm are both models of the arm component API: they expose the same methods (MoveToPosition, GetEndPosition, and so on) even though the underlying hardware and protocols differ. The same applies to services: the ML model service API has models for TFLite, ONNX, and other inference runtimes, each implementing the same Infer method.

When you configure a resource, you choose both the API (what kind of resource it is) and the model (which implementation to use).

Built-in resources and modules

Some resources are built-in, meaning viam-server ships with them by default. These include services like motion planning and computer vision, as well as basic hardware drivers like arms and cameras.

See built-in components and services for the full list.

Beyond builtins, the Viam registry has modules for thousands of hardware drivers and software capabilities, maintained by Viam and the community. Before building something yourself, check the registry and the built-in services to see if your use case already exists.

If nothing in the registry fits, you can write and publish your own module.

What you can do with Viam

To do thisGo here
Get a camera, motor, arm, or sensor runningConfigure hardware
Capture data on the machine and sync it to the cloudManage data
Train machine learning models on what you capturedTrain ML models
Detect and classify objects in a camera feedComputer vision
Plan and execute motion for arms and mobile robotsMotion planning
Write code that controls a machine over the networkViam SDKs
Control a machine from an AI agent or LLMUse Viam from an AI agent
Package your own logic and deploy it to machinesBuild and deploy modules
Build a web or mobile app for your customersBuild apps
Monitor machine status and receive alerts, stream data, and teleoperateMonitor and operate
Configure and update many machines at onceFleet deployment
Configure and reuse a configuration across machinesReuse configuration with fragments
Organize machines and control who can reach themAdmin and access

Next steps