Browse documentation

Start here

OverviewGetting startedThe mental model

Use the runtime

Run the simulatorPi Agent and workspaceInstall and manage AppsESP32-P4 reference targetESP32-S3 supported target

Build Apps

App developer guideBuild your first AppApp source and packageData and migrationsActions and ToolsView and interactionNetworking and native servicesApp resourcesSchedulesPackage and updateTesting and debugging

Understand the runtime

Runtime flowGuests and lifecycleLayers and ownershipHarness boundary

Security

Trust and capabilitiesData isolationLifecycle and recovery

Reference

App manifestPocketPi APIView APICLI referenceLimits and compatibility

Examples

Exa App walkthroughRobinhood App walkthrough

Project

Current boundariesValidation status

ESP32-S3 supported target

The Waveshare ESP32-S3-Touch-LCD-4.3 is PocketPi's second supported physical target. It runs the same resident Pi Agent, ordinary App packages, AppSupervisor, Actions and View source as the ESP32-P4 reference target through a shared ESP-IDF host layer.

Exact board composition

AreaCurrent PocketPi target
BoardWaveshare ESP32-S3-Touch-LCD-4.3
ModuleESP32-S3-WROOM-1-N16R8
Processordual-core Xtensa LX7 up to 240 MHz, 512 KB SRAM and 384 KB ROM
Memory configuration16 MB DIO Flash, 8 MB octal PSRAM at 80 MHz
Display4.3-inch 800×480 IPS RGB panel, RGB565, two PSRAM framebuffers
TouchGT911 capacitive 5-point touch over I2C
Wirelessintegrated 2.4 GHz 802.11 b/g/n Wi-Fi and BLE 5

Board-level parameters are also documented in the official Waveshare ESP32-S3-Touch-LCD-4.3 guide. PocketPi-specific flash mode, PSRAM speed, framebuffer and viewport values come from the checked-in S3 firmware host.

One physical panel, one rotated logical viewport

The RGB panel scans out at 800×480. PocketPi rotates rendered regions into that framebuffer and maps touch through the inverse transform, then reports Viewport(480, 800) to AppSupervisor. Every View therefore sees one consistent logical coordinate system.

View.viewport
// {
//   width: 480,
//   height: 800,
//   orientation: "portrait",
//   scale: 0.625,
//   layoutWidth: 768,
//   layoutHeight: 1280
// }

The shared View SDK scales numeric geometry once, preserves fixed physical font slots and enforces at least 40×40 physical pixels for Pressable hit targets. Apps may branch onorientation and reduce repeated content when scale is below one; they do not receive a board name and must not contain S3-only layout code.

Install host tools and find the serial port

Install Rust with rustup, the ESP Rust toolchain andespflash. The repository invokes the S3 firmware through its declared esp toolchain. The current Python UART helpers use POSIX serial APIs; macOS is the documented host path.

espflash list-ports
export DEVICE_PORT=/dev/cu.usbmodem...
espflash board-info --port "$DEVICE_PORT"

Build the release firmware

cargo xtask build esp32-s3

This builds the S3 release firmware with the committed generated Pi Agent and View SDK assets. Regenerate those assets separately only when changing their sources.

Flash without erasing persistent state

espflash flash --baud 921600 --port "$DEVICE_PORT" \
  --partition-table firmware/esp32-s3/partitions.csv \
  firmware/esp32-s3/target/xtensa-esp32s3-espidf/release/pocket-pi-s3

Keep the explicit partition table. A normal flash preserves Wi-Fi/model NVS and the LittleFS workspace. Do not erase the board unless the validation plan explicitly requires destructive reprovisioning.

Provision and install

python3 tools/uart-provision.py "$DEVICE_PORT" \
  --provider deepseek --provision-wifi

cargo xtask package app exa path/to/exa-credentials.json
python3 tools/uart-install.py "$DEVICE_PORT" \
  target/pocketapps/exa.pocketapp

Provisioning, HTTP/UART ingress, product review and activation use the same contracts as P4. The board-specific host owns integrated Wi-Fi, RGB scanout, rotation and GT911 touch only.

Recorded physical evidence

The 2026-08-24 repository record covers boot, 480×800 logical scanout, GT911 touch, integrated Wi-Fi, workspace Tool Calls, ordinary App installation and an Exa request on the physical S3. Long-running latency, display stability and memory-pressure acceptance remain separate work and are not implied by one successful interaction.

A simulator run or successful S3 release build is below physical-board acceptance. Record boot, scanout, touch, network, Tool and App results separately.

Shared port contract and S3 details: docs/esp32-p4-port.md.