# What are Perception Apps?

> **Deprecation Notice**
> This page describes features that have been removed or replaced in Luxonis Hub. Functionality may be limited and only available
to Hub Original customers. Please refer to the up-to-date guides to provision devices, manage fleets, and deploy applications.

Perception Apps are a cornerstone of the Luxonis Hub ecosystem, enabling developers to deploy and manage sophisticated perception
and AI applications across a fleet of devices. These applications, specifically designed to run on the Luxonis Hub Agent, leverage
the power of OAK cameras to provide advanced perception capabilities. Written primarily in Python and utilizing the robothub
library in conjunction with depthai, Perception Apps offer a streamlined path from development to deployment, emphasizing ease of
use, scalability, and reliability.

## How Perception Apps Work

Perception Apps integrate seamlessly into the Luxonis Hub platform, following a lifecycle that transitions from development to
deployment and operation. Here's how it works:

### Development

Developers write Perception Apps using Python, taking advantage of the robothub library to interact with the cloud and depthai for
camera operations. These apps are containerized, ensuring a consistent execution environment across all devices. This
containerization is crucial for maintaining app stability and compatibility, regardless of the deployment scale.

### cloud.perception-apps.development.toml

```toml
[config]
height = 500

[[nodes]]
id = "developer"
type = "text"
position.x = -300
position.y = 10
style.width = 200
style.fontSize = '1.3rem'
data.text = "Developer"

[[nodes]]
id = "developer_web_browser"
type = "input"
sourcePosition = "right"
position.x = -300
position.y = 180
style.width = 200
data.label = "Web Browser"
data.badge = "IDE"

[[nodes]]
id = "robot"
type = "standalone"
position.x = 0
position.y = 50
style.width = 350
style.height = 450

[[nodes]]
id = "app"
type = "standalone"
position.x = 25
position.y = 100
style.width = 300
style.height = 280
style.border = "none"
style.backgroundColor = "var(--colors-brand-50)"

[[nodes]]
id = "robothub_studio"
type = "output"
targetPosition = "left"
position.x = 50
position.y = 190
style.width = 250
data.label = "Luxonis Hub Studio"

[[nodes]]
id = "container_text"
type = "text"
position.x = 50
position.y = 115
style.width = 250
data.text = "Container"
data.badge = "Runtime"

[[nodes]]
id = "python_app"
type = "custom_handles"
position.x = 50
position.y = 270
style.width = 250
data.label = "Python Code"
data.badge = "Your business logic"

[[nodes.handles]]
type = "source"
position = "right"
id = "python_app_right"

[[nodes.handles]]
type = "source"
position = "bottom"
id = "python_app_bottom"

[[nodes]]
id = "agent"
type = "output"
position.x = 50
position.y = 410
style.width = 250
data.label = "Luxonis Hub Agent"

[[nodes]]
id = "robot_text"
type = "text"
position.x = 0
position.y = 10
style.width = 350
style.fontSize = '1.3rem'
data.text = "Robot"

[[nodes]]
id = "oak"
type = "output"
targetPosition = "left"
position.x = 400
position.y = 260
style.width = 100
data.imageSrc = "hardware/oak-d-pro.webp"

[[nodes]]
id = "oak_text"
type = "text"
position.x = 400
position.y = 10
style.width = 100
style.fontSize = '1.3rem'
data.text = "OAK"

[[edges]]
id = "developer_web_browser__robothub_studio"
source = "developer_web_browser"
target = "robothub_studio"
zIndex = 100

[[edges]]
id = "python_app__agent"
source = "python_app"
sourceHandle = "python_app_bottom"
target = "agent"
zIndex = 100

[[edges]]
id = "python_app__oak"
source = "python_app"
sourceHandle = "python_app_right"
target = "oak"
zIndex = 100
```

### Deployment

Once a Perception App is developed, the developer uploads it to Luxonis Hub. This process includes creating a new app entry in the
platform and uploading the containerized app package. Luxonis Hub maintains a list/history of versions for each app, allowing for
easy management and version control.
