Limits and compatibility
PocketPi uses explicit bounds because the reference target is a constrained device. Some values are public App contracts; others describe the current implementation and may move with measured hardware evidence.
Public App/package contract
| Limit | Current value | Behavior |
|---|---|---|
| Package format | 1 | Other formats rejected |
| Framework API | 1 | Must equal installed System Framework |
.pocketapp size | 2 MiB | Rejected at ingress/staging when exceeded |
| One JSON resource | 256 KiB | Rejected before candidate evaluation |
| All JSON resources | 512 KiB | Sum of declared files |
| Asset archive path | 100 bytes maximum | Safe assets/ components only |
| Credential count | 16 maximum | First-install transport file only |
| One credential value | 4096 bytes maximum; non-empty | Stored natively after validation |
| Schema version | 1 to signed 32-bit maximum | Forward-only updates |
| Supported capability names | 3 | data.fs, data.sqlite, net.http |
Current runtime bounds
| Bound | Current value | Design consequence |
|---|---|---|
| Ordinary View Guest cache | 3-entry LRU | View heap is evictable |
| Ordinary Action Guest cache | 3-entry LRU | Action initialization must be repeatable |
| Resident System Guests | 1 | Pi Agent stays outside ordinary LRUs |
| Maximum simultaneous Guests | 7 | 1 + 3 View + 3 Action |
| Ordinary Action execution | one at a time | No assumed App concurrency |
| Action admission queue | 8 | Do not use Actions as an unbounded job system |
| Tool Action deadline | 80 seconds absolute | Queueing, JS and native transport share it |
| App-local View FS mount quota | 2 MiB | Prefer SQLite for structured durable state |
| Logical viewport | 720×1280 | All View coordinates and layout use this space |
HTTP body bounds
App fetch() defaults to a 30-second request timeout and 128 KiBmaxBytes, but the request is also capped by the remaining App Action deadline. Set both values explicitly for the operation. The ESP32 MCP host currently bounds one response at 160 KiB; that is a host implementation limit rather than a generic App HTTP promise.
Source compatibility
- One classic-script
actions.jsand oneview.js; no imports. - No TypeScript/TSX/JSX transform in ordinary App packaging or on device.
- JSON resources only; no arbitrary binary resource contract.
- No dependency solver, package graph or App plugin loader.
- System App/Harness and System Framework update with firmware today.
Treat public format/API/size validation as compatibility constraints. Treat cache counts, queues and worker sizes as current implementation bounds that should change only with profiling and physical-target evidence.