ZephUI layout
Safe areas, the built-in layouts, and the scroll rule that catches everyone.
Every board hands your app a safe area — the region between the status band at the top and the close bar at the bottom. Lay your screen out inside it, and read it off the board at launch: it is a different shape on every device.
The safe area, on every board
- Status band — the clock, battery, connection.
- Your content — the safe area you lay out in.
- Close bar — the system exit, always yours to keep.
Screen 368×448·Safe area 332×362
Pick a layout
A screen does not place things by pixel. It picks one of four built-in layouts, and the layout owns the safe area and where the regions sit — you just fill them.
The built-in screen layouts
Start from Foundation and reach for another when the screen calls for it. Inside any of them you compose: a row puts children side by side, a list stacks rows, a section groups them under a heading. Build the screen up from these pieces rather than hand-placing it — that is what lets the same screen sit correctly on a tall panel and a round one alike.
The scroll rule: a screen root scrolls, so content past the fold stays reachable. A box or list root does not — anything past the fold is unreachable, and a screenshot will never reveal it. Budget eight to ten children.
Compose with columns
Two containers arrange children in two dimensions, so a screen reads like a small dashboard instead of one long column.
box— a flex line. Setaxistoroworcol, agapbetween children, and how they distribute (packfrom the start, orsbfor space-between).grid— a wrapping grid of equal columns.colsis 1–4. A child spans columns withspan(aspan: 2cell is two columns wide — a hero over a pair of tiles), andfill: 1stretches the grid to the remaining height with its cells — and their buttons — filling to match, instead of sitting content-height at the top.
{ "k": "grid", "cols": 2, "fill": 1, "c": [
{ "k": "btn", "t": "Now Playing", "span": 2 },
{ "k": "btn", "t": "Volume" },
{ "k": "btn", "t": "Skip" }
] }Every surface speaks the same words. What you write here as a device app is the same box/grid an agent pushes over MCP and the same shapes the glance templates (Grid, Hero, Dashboard, Corner) are built from — one layout language, three ways in.
Every board's numbers
Usable width and usable height are different numbers on every board — read the axis, not the larger number.
Waveshare
AMOLED 1.8"
ESP32-S3-Touch-AMOLED-1.8
Panel
- Shape
- rect
- Resolutionpx
- 368 x 448
- Physical sizemm
- 28.7 x 34.94
- Corner radius
- 59 px / 4.6 mm
Safe area
- Insetstop / right / bottom / left, px
- 52 / 18 / 34 / 18
- Usable WIDTHhorizontal axis
- 332 px
- Usable HEIGHTvertical axis
- 362 px
Hardware
- Touch
- Yes
- Buttons
- main: tap, double, holdaux: tap, double
- Microphone
- single
- Speaker
- Yes
- IMU
- Yes
- Real-time clock
- Yes
- SD card
- Yes
- Haptics
- No
- Battery
- Yes
- FlashMB
- 16
- Firmware board
- zeph/zeph_v0_amoled_eval
AMOLED 1.75" round
ESP32-S3-Touch-AMOLED-1.75C
Panel
- Shape
- round
- Resolutionpx
- 466 x 466
- Physical sizemm
- 44.45 x 44.45
- Corner radius
- 233 px / 22.2 mm
Safe area
- Insetstop / right / bottom / left, px
- 50 / 64 / 50 / 64
- Usable WIDTHhorizontal axis
- 338 px
- Usable HEIGHTvertical axis
- 366 px
Hardware
- Touch
- Yes
- Buttons
- main: tap, double, holdaux: tap, double, hold
- Microphone
- dual
- Speaker
- Yes
- IMU
- Yes
- Real-time clock
- No
- SD card
- No
- Haptics
- No
- Battery
- Yes
- FlashMB
- 32
- Firmware board
- zeph/zeph_v1_amoled_175c
AMOLED 2.06"
ESP32-S3-Touch-AMOLED-2.06
Panel
- Shape
- rect
- Resolutionpx
- 410 x 502
- Physical sizemm
- 33.09 x 41.51
- Corner radius
- 111 px / 9.2 mm
Safe area
- Insetstop / right / bottom / left, px
- 64 / 36 / 48 / 36
- Usable WIDTHhorizontal axis
- 338 px
- Usable HEIGHTvertical axis
- 390 px
Hardware
- Touch
- Yes
- Buttons
- main: tap, double, holdaux: tap, double
- Microphone
- dual
- Speaker
- Yes
- IMU
- Yes
- Real-time clock
- Yes
- SD card
- No
- Haptics
- No
- Battery
- Yes
- FlashMB
- 32
- Firmware board
- zeph/zeph_v1_amoled_206
AMOLED 2.16"
ESP32-S3-Touch-AMOLED-2.16
Panel
- Shape
- rect
- Resolutionpx
- 480 x 480
- Physical sizemm
- 43.3 x 43.3
- Corner radius
- 72 px / 5.8 mm
Safe area
- Insetstop / right / bottom / left, px
- 56 / 40 / 56 / 40
- Usable WIDTHhorizontal axis
- 400 px
- Usable HEIGHTvertical axis
- 368 px
Hardware
- Touch
- Yes
- Buttons
- main: tap, double, holdaux: tap, double, holdpower: tap, double
- Microphone
- dual
- Speaker
- Yes
- IMU
- Yes
- Real-time clock
- Yes
- SD card
- Yes
- Haptics
- No
- Battery
- Yes
- FlashMB
- 16
- Firmware board
- zeph/zeph_v1_amoled_216