Viam in 3 minutes

Viam is a complete software platform that supports every step of your smart machine development lifecycle.

Plan your machine

When using Viam, this is what you’ll need to know to plan your machine:

A diagram of machine parts and software

  • Hardware: Many components are natively supported by the Viam platform. You will not need to write a single line of code to integrate them, and swapping out component models will not require code changes.
  • Functionality: You can make use of computer vision, motion planning, Simultaneous Localization And Mapping (SLAM), data management, machine learning, and more by configuring Viam’s built-in services.
  • Architecture: You can build simple machines or multi-part machines that use secure communication channels across local networks and the cloud, all of which can be managed with a uniform API.
  • Extensibility: If you need additional functionality, you can leverage modular resources from the Viam registry to extend support in Viam to new hardware components and software services.

Join the Viam community to collaborate during planning and beyond.

Get started

A smart machine in Viam consists of at least one computer, typically a single-board computer, running viam-server and communicating with any hardware connected to it by signaling through digital data pins. Viam supports devices running any 64-bit Linux OS or macOS.

A diagram of a single-board computer running viam-server.

The Viam platform provides a user interface for connecting to and managing machines, the Viam app.

To use the Viam platform with your machine, log in to the app, create a new machine, and install the viam-server binary which:

  • Creates, configures, and maintains the machine.
  • Securely handles all communications.
  • Runs drivers, custom code, and any other software.
  • Accepts API requests.
  • Runs services like computer vision, data synchronization, and motion planning.

Configure your machine

Machines can be small and simple or very complex. A machine can be a single-board computer with a single sensor or LED wired to it, or a machine can consist of multiple computers with many physical components connected, acting as one unit.

The term component describes a piece of hardware that a computer controls, like an arm or a motor.

For each component that makes up your machine:

Multiple components being tested in the Viam app.

  1. Add it to your machine by choosing the component type (example: camera) and model (example: webcam).
  2. Test it with the visual control tab.
  3. See any problems with in-app logs, review or roll back configuration history.

After configuring your machine’s hardware, you can configure high level functionality the same way:

  • Data Management enables you to capture and sync data from one or more machines, and use that data for machine learning and beyond.
  • Fleet management enables you to configure, control, debug, and manage entire fleets of machines.
  • Motion planning enables your machine to plan and move itself.
  • Vision enables your machine to intelligently see and interpret the world around it.
  • Simultaneous Localization And Mapping (SLAM) enables your machine to map its surroundings and find its position on a map.
Machine components

Control your machine

A diagram illustrating secure machine control.

The Viam platform provides a consistent programming interface for all machines, allowing you to control your machines with code in the language of your choice. Viam currently has SDKs for Go, Python, and TypeScript. Additional SDKs are coming soon, including Rust, Java, C++, and Flutter.

TLS certificates provided by app.viam.com ensure that all communication is authenticated and encrypted. Viam uses WebRTC to create secure peer-to-peer paths between machines and clients for fast, low-latency communication. The Viam cloud does not receive any command or control information regarding your machines, ensuring low latency, robustness, and privacy. With WebRTC established, Viam uses gRPC so you can program your machines in many common programming languages.

This provides flexibility and security whether you are building tight control loops for autonomous mobile machines, event-based triggers for IoT devices, or custom web-based machine management interfaces.

There are four categories of APIs:

You can see the Viam API specification on GitHub.

Network flexibility

Your machine does not need to be connected to the cloud.

The viam-server software resides on your machine alongside your configurations, your code, and appropriate services. In scenarios without cloud connectivity, you can still connect your machine to a local area network (LAN), or to any relevant devices (such as a gamepad). It all depends on your use case and configuration.

  • All APIs work locally or in the cloud
  • Data is cached locally and synced when possible
  • Configuration is cached

When your machine is connected (to either LAN or WAN), viam-server can act as both a client and a server. In other words, each instance can request resources, as well as provide them. This allows for tremendous flexibility in terms of your architecture design.

Scale

Viam provides fleet management capabilities to help you scale your machines in production. With it you can:

  • Manage permissions within your organization and locations.
  • Manage software across your fleet, including deployment of code and machine learning models.
  • Keep your machine configuration and capabilities up-to-date.

Extensibility

You can also extend Viam to support additional hardware components or software services by deploying a module from the Viam registry to your machine.

The Viam registry allows hardware and software engineers to collaborate on their machine projects by writing and sharing custom modules with each other. You can add a module from the Viam registry directly from your machine’s Configuration tab in the Viam app, using the + Create component button. You can also upload your own module to the Viam registry.

See Modular resources for more information.

Next steps

Start by borrowing one of our rovers. Use Try Viam.

If you already have your own machine, set up viam-server and learn how Viam helps you prototype and scale.

For more inspiration, check out our tutorials or visit our community on Discord to get help or workshop ideas with others!