Powered by Peppy Open Source Robotics Framework

The robotics framework for simplified robot development.

Peppy is a robotics framework that takes you from development to production at scale, letting you focus on building intelligent robots while we handle the complexity.

Build and deploy robot software with ease. Peppy streamlines your entire robot stack including sensors, actuators, AI, and controllers to make robotics development accessible even if you've never worked with robots before.

15 minutes to get productive · Fully free · Python & Rust

launcher: generic robot

Input · launcher/v1

// This is an example launcher for a generic robot
{
  peppy_schema: "launcher/v1",
  deployments: [
    {
      source: {
        name: "vla_brain:v1",
      },
      instances: [
        {
          instance_id: "ai_brain",
          bindings: {
            torso_camera: "torso_camera",
            left_wrist_camera: "left_wrist_camera",
            right_wrist_camera: "right_wrist_camera",
            robot_controller: "the_controller"
          }
        }
      ],
    },
    {
      source: {
        name: "robot_backbone",
        tag: "v1"
      },
      instances: [
        {
          instance_id: "the_controller",
          bindings: {
            left_robot_arm: "the_left_arm",
            right_robot_arm: "the_right_arm"
          }
        }
      ]
    },
    {
      source: {
        name: "robot_arm:v1",
      },
      instances: [
        {
          instance_id: "the_right_arm",
        },
        {
          instance_id: "the_left_arm",
        }
      ]
    },
    {
      source: {
        name: "depth_camera:v1",
      },
      instances: [
        {
          instance_id: "torso_camera",
          arguments: {
            device_path: "/dev/video0",
            depth: {
              frame_rate: 30,
              resolution: {
                width: 1280,
                height: 720,
              },
              depth_format: "z16",
              depth_units_m: 0.001,
            },
          }
        }
      ]
    },
    {
      source: {
        name: "uvc_camera:v1",
      },
      instances: [
        {
          instance_id: "left_wrist_camera",
          arguments: {
            device_path: "/dev/video1",
            video: {
              frame_rate: 30,
              resolution: {
                width: 1280,
                height: 720,
              },
              camera_encoding: "mjpeg",
              topic_encoding: "rgb8",
            },
          }
        },
        {
          instance_id: "right_wrist_camera",
          arguments: {
            device_path: "/dev/video2",
            video: {
              frame_rate: 30,
              resolution: {
                width: 1280,
                height: 720,
              },
              camera_encoding: "mjpeg",
              topic_encoding: "rgb8",
            },
          }
        }
      ]
    }
  ]
}
// This is an example launcher for a generic robot
{
  peppy_schema: "launcher/v1",
  deployments: [
    {
      source: {
        name: "vla_brain:v1",
      },
      instances: [
        {
          instance_id: "ai_brain",
          bindings: {
            torso_camera: "torso_camera",
            left_wrist_camera: "left_wrist_camera",
            right_wrist_camera: "right_wrist_camera",
            robot_controller: "the_controller"
          }
        }
      ],
    },
    {
      source: {
        name: "robot_backbone",
        tag: "v1"
      },
      instances: [
        {
          instance_id: "the_controller",
          bindings: {
            left_robot_arm: "the_left_arm",
            right_robot_arm: "the_right_arm"
          }
        }
      ]
    },
    {
      source: {
        name: "robot_arm:v1",
      },
      instances: [
        {
          instance_id: "the_right_arm",
        },
        {
          instance_id: "the_left_arm",
        }
      ]
    },
    {
      source: {
        name: "depth_camera:v1",
      },
      instances: [
        {
          instance_id: "torso_camera",
          arguments: {
            device_path: "/dev/video0",
            depth: {
              frame_rate: 30,
              resolution: {
                width: 1280,
                height: 720,
              },
              depth_format: "z16",
              depth_units_m: 0.001,
            },
          }
        }
      ]
    },
    {
      source: {
        name: "uvc_camera:v1",
      },
      instances: [
        {
          instance_id: "left_wrist_camera",
          arguments: {
            device_path: "/dev/video1",
            video: {
              frame_rate: 30,
              resolution: {
                width: 1280,
                height: 720,
              },
              camera_encoding: "mjpeg",
              topic_encoding: "rgb8",
            },
          }
        },
        {
          instance_id: "right_wrist_camera",
          arguments: {
            device_path: "/dev/video2",
            video: {
              frame_rate: 30,
              resolution: {
                width: 1280,
                height: 720,
              },
              camera_encoding: "mjpeg",
              topic_encoding: "rgb8",
            },
          }
        }
      ]
    }
  ]
}

Output nodes · your robot stack

torso_camera left_wrist_camera right_wrist_camera ai_brain the_controller the_left_arm the_right_arm
1config file
7nodes
6links

Why robotics teams choose Peppy

Node-Based Robot Architecture

Every sensor, actuator, controller and model is its own node, so each piece can be reasoned about, replaced and tested on its own.

From Prototype to Production

The same stack that runs in simulation runs on hardware, so moving from a bench experiment to a deployed robot is a config change.

Multi-Language Support

Write nodes in Python when you want to move fast and in Rust when you need the performance, and mix both in one stack.

Built for Performance

Message passing between nodes is designed for the rates real control loops need, not just for demos.