Learn about Viam
Machines are everywhere, from small machines like IoT sensors, to home automation systems, robotic systems, cars and boats, and even more complex enterprise systems. All these machines start by combining hardware and software.
Viam is a software platform that makes it easy to combine and integrate hardware and software to build machines, connect them with the cloud, and make them smarter with machine learning.

viam-server
At the core of Viam is the open-source viam-server
executable which runs on a computer and provides drivers for hardware and manages software and data for a machine.
If you are working with microcontrollers, viam-micro-server
is a lightweight version of viam-server
which can run on resource-limited embedded systems that cannot run the fully-featured viam-server
.
To use Viam with a machine, you create a configuration specifying which hardware and software the machine consists of.
Viam has many built-in components and services that run within viam-server
.
The components and services are configurable building blocks you can put together to make your machine.
viam-server
then manages and runs the drivers for the configured hardware components and software services.
For example, if you are building a pet-feeding machine you might install viam-micro-server
on a microcontroller and create a machine configuration with a camera and a servo for the hardware you are using.
Standard APIs
Each category of resource has a standardized API that you can access with an SDK (software development kit) in your preferred programming language.
For example, you can send the same SetPower
command to any kind of motor, using any of the available SDKs:
my_motor = Motor.from_robot(robot=robot, name="my_motor")
# Set the power to 40% forwards.
await my_motor.set_power(power=0.4)
myMotorComponent, err := motor.FromRobot(machine, "my_motor")
// Set the motor power to 40% forwards.
myMotorComponent.SetPower(context.Background(), 0.4, nil)
final base = Motor.fromRobot(client, "my_motor");
// Set the power to 40% forwards.
await myMotor.setPower(0.4);
const myMotor = new VIAM.MotorClient(client, "my_motor");
// Set the power to 40% forwards.
await myMotor.setPower(0.4);
std::shared_ptr<Motor> motor = robot->resource_by_name<Motor>("my_motor");
// Set the power to 40% forwards.
motor->set_power(0.4);
The standardized nature of Viam’s resource APIs means that when you build machines, you can swap out components such as one motor for another motor of a different brand without changing any code. The only change needed is to your machine configuration.
However, if you need more custom behaviour, you can extend these APIs to suit your own needs.
Connect from anywhere
Viam uses WebRTC and gRPC for secure peer-to-peer communications across network boundaries.
In factory settings or remote environments, you can operate and monitor your machines over a local area network (LAN).
Any monitoring or control applications can connect directly to viam-server
without internet connection or run on the machines themselves.
If your machines are connected to the internet, you can operate and monitor them from anywhere in the world.
You can use the Viam app and the Viam mobile app, to control and monitor your machines securely. Or you can use Viam’s SDKs to build your own apps.
Support
The viam-server
executable runs on any computer that runs on 64-bit Linux OS, macOS, or Windows Subsystem for Linux.
Viam also supports microcontrollers with viam-micro-server
.
Here are some of the boards Viam supports:
Raspberry Pi 5
Raspberry Pi 4
NVIDIA Jetson Orin Nano
Intel UP4000
Mediatek Genio 500 Pumpkin
Espressif ESP32
Orange Pi Zero2
Texas Instruments TDA4VM
NVIDIA Jetson Nano
NVIDIA Jetson AGX Orin
NVIDIA Jetson Xavier NX
Raspberry Pi 3
Raspberry Pi Zero 2 W
BeagleBone AI-64
Odroid C4
Orange Pi 3 LTS
Numato GPIO Modules
PCA9686 I2C Interface
Orange Pi Zero 2W
Viam Cloud
The Viam app is the ecosystem for configuring and managing machines which provides:
- the user interface for configuring machines
- a community registry of resources for machines
- capabilities to make your machines better and smarter
Configuration
As you configure your machine, you can test each resource to confirm it is working as expected in the same UI you use for configuration.
Extensibility
For everything that is not built-in, you can deploy modules from the Viam Registry.
Modules provide custom components or services as modular resources which are run and managed by viam-server
as processes.
When configuring your machine, you can choose and configure built-in components and services, as well as any available from the Viam Registry.
You can also create your own resources for any hardware or software and add them to the Viam Registry.
Better and smarter machines
The Viam app provides several higher-level functionalities to make your machines smarter and better, such as:
- Data Management: You can collect data from any machine and automagically sync it to the cloud. Intermittent connectivity is not a problem, data syncs when possible. From there you can query it using SQL, MQL, or with code.
- Machine Learning: You can use collected data to train machine learning models within the platform. Once trained, you can deploy ML models to all your machines to enable them to intelligently see and interpret the world around them. The models run locally and do not require internet access at scoring time.
- Simultaneous Localization And Mapping (SLAM): You can use machines to map their surroundings and to find their own positions on a map.
Example Applications
Capture sensor data on 100s of boats and sync it to the cloud when machines have internet connectivity.
Use Machine Learning to detect wildlife and when detected start data capture and send alerts.
Allow delivery robots to use their location and SLAM to navigate intelligently between GPS coordinates.
Managing many machines
Viam allows you to manage not just individual machines but entire fleets of thousands of machines. The Viam app’s fleet management capabilities enable you to:
- Manage software across your fleet, including deployment of code and machine learning models.
- Update software, Configure, control, debug, and manage groups of machines in one go.
- Manage permissions within your organization and locations.
You can collaborate on your machines and manage permissions for your fleet using Role-Based Access Control (RBAC). Users can have access to different fleet management capabilities depending on whether they are an owner or an operator of a given organization, location, or machine.
Next steps
In the next few pages we will guide you through the platform. You don’t need to buy or own any hardware to follow along.
Continue to the Drive a rover quickstart:
Was this page helpful?
Glad to hear it! If you have any other feedback please let us know:
We're sorry about that. To help us improve, please tell us what we can do better:
Thank you!