Skip to main content

Limits

Collected for reference. Each is enforced where noted; several are asserted in more than one place as defence in depth.

Identity and naming​

ThingBound
App id4–30 chars, ^[a-z0-9]+(?:_[a-z0-9]+)*$
App name3–20 chars, letters/digits/spaces
Description1–280 chars
Method name (logical)1–128 ASCII, Motoko identifier
Longest generated public app-method V1 wrapper164 ASCII characters
Raw-call transport method nameup to 192 ASCII bytes
Memory id1–128 chars, ^[A-Za-z_][A-Za-z0-9_]{0,127}$
Dependency alias^[a-z][a-z0-9_]{0,29}$
Tile id1–30 chars, ^[a-z_0-9]+$
Tile title1–40 chars
Asset path1–120 chars, safe relative
Public-ingress protocol / route id1–63 chars, ^[a-z][a-z0-9_]{0,62}$; combined protocol:id ≤ 64
HTTP mount / Certified Assets collection id1–40 chars, ^[a-z][a-z0-9_]{0,39}$

Manifest structure​

ThingBound
Release versionPacked integer, minimum 100; minor and patch 0–99
Functions / arguments256 functions per app; 16 arguments per function
Tiles32 per app
Positional init resources64 (Kernel-only declaration)
Memory roots64 per app
Memory schemas per root64
Migration edges per root128
Migration edges256 per app total
Dependencies32 per app, 64 functions each
Public-ingress routes1–32 per app
HTTPS outcall endpoints1–8 per app
Chain-key signing slots1–4 per app
Stable stores1–8 per app
vetKeys slots1–4 per app
Connection providers1–8 unique providers per app; 0–32 unique scopes per provider
Scheduled tasks2 per app
Preapproved self-call methods32
Agent entrypoints4
Background UI request categories4
Ethereum chains8
Backend-call install reservations64

Compile-time ceilings (across all apps)​

ResourceCeiling
Installed app instances256, including Kernel
Resident backgrounds32
Runtime capability resources8,192
Connection providers256
HTTPS outcall endpoints2,048
Chain-key signing slots2,048
vetKeys slots128
Stable stores2,048
Stable-store entries65,536
Stable-store declared bytes268,435,456
Backend-call install reservations2,048
Scheduled tasks64 per assembled actor
Public-ingress routes2,048
Public-ingress update calls16,384 per hour
POST external calls1,024 per hour
POST replay replies1,024 entries / 64 MiB

The compiler rejects these before activation. Actor configuration also asserts mirrored limits as defence in depth.

Certified Assets uses a physical reservation model rather than one global object count: projected charged bytes plus 72,000,528 allocator-metadata bytes must not exceed 2,890,572,816; projected arena bytes must not exceed 1,879,048,192; and 2 × projected extents + 1 must not exceed 250,000.

Backend calls​

ThingBound
max_concurrency1–20 (also the batch size)
max_cycles_per_call0–100,000,000,000,000
max_cycles_per_day0–1,000,000,000,000,000, not below per-call
Canister cycle reserve250 billion, on top of platform call cost

Stable stores​

ThingBound
Entries1–4,096 per store; 8,192 per app; 65,536 globally
Declared bytes1–16 MiB per store; 32 MiB per app; 256 MiB globally
Key / value1–256 bytes / 1–262,144 bytes
Schema version1–65,535

HTTPS outcalls​

ThingBound
URL prefix4,096 characters
Declared request headers0–16
Request / response1–65,536 bytes / 1–524,288 bytes
Methods per endpoint1–3 from get, head, post

Public ingress​

ThingBound
Request / response bytes1–1,048,576 each
max_calls_per_hour (updates)1–3,600 per route; 3,600 per app total
Optional per-caller update rate1 through the route's max_calls_per_hour
required_cycles (canister updates)Positive, ≤ 100,000,000,000,000
Pending updates1 per route, 2 per app, 8 globally

Query routes declare neither a rate nor a cycle floor.

HTTP POST routes​

ThingBound
POST and derived certified-read mounts16 total per app
Request / reply1–65,536 bytes each
Declared forwarded header names0–8 per mount
Forwarded header value4,096 bytes; each declared header may occur once
External rate1–240 calls/hour per mount; 240 per app
Pending calls1 per mount, 2 per app, 8 globally
Replay capacity240 entries / 8 MiB per app; 1,024 entries / 64 MiB globally
Idempotency-Key16–64 ASCII letters, digits, _, or -
Idempotency replay window1 hour

Certified Assets API 2​

ThingBound
Collections1–16 per app scope
Committed records1–100,000
Committed bytes1–1,073,741,824
Publication objectup to 67,108,864 bytes
Portable immutable/mutable objectup to 1,048,576 bytes
Pending stage1 per scope; 4 active globally
Staged bytes1–67,108,864
Batch1–16 operations; 1–67,108,864 bytes
Idempotency receipts2–4,096

Scheduled tasks​

ThingBound
interval_seconds10 – 2,592,000 (30 days)
max_backend_calls1–100 per active callback

Message bus​

ThingBound
Payload1 MiB
Tool input/output schema32 KiB each
Whole tool descriptor64 KiB
Exposed tools64 per endpoint
In-flight calls per endpoint8 ordinary calls, plus a separate 1-call control lane
Progress event64 KiB
Progress events per request2,000
Clipboard text256 KiB
Self-call metadata64 KiB
Self-call value depth / container size32 levels / 4,096 elements
Binary leaves per self call512 per direction
Self-call aggregate binary1,900,000 bytes per direction
Tool attachment1 per direction, 16 MiB each
Attachment bytes in flight32 MiB per endpoint, 64 MiB per frontend broker realm
Attachment delegation10 seconds; 4 pending per endpoint, 64 per frontend broker realm
Retained state invalidations128 apps, 64 topics per app
Tray badge0–9,999, or null
Audit ring200 entries, in memory

Agent Mode​

ThingBound
Root turn lifetime5 minutes
Invocation depth8
Calls per root64
Parallel children per invocation4
Consent challenges6 per root, 2 per invocation
Root starts per installed app scope6/minute and 20/10 minutes

Workspace​

ThingBound
Workspaces3 by default, up to 20
Split ratio0.15 – 0.85
Workspace gap8px
Tray panelmin(380px, 50dvw − 8px) × min(520px, available height − env(safe-area-inset-bottom))

vetKeys​

ThingBound
Derivation challenge lifetime60 seconds
Transport public key48 bytes

Package decoding​

Limits differ by how a package arrived.

BoundLocal fileRemote URL / repository
Raw archive bytes128 MiB32 MiB
Entry count16,3844,096
UTF-8 path bytes4,096512
One decoded entry64 MiB16 MiB
Total decoded bytes256 MiB64 MiB

Repository imports use the remote per-package set. Across one setup manifest they additionally allow at most 64 packages, 64 MiB raw package bytes, 16,384 archive entries, and 128 MiB decoded bytes.

Provisioning​

ThingBound
Local fleet nodes16
Config format3
Artifact-set format1
Session schema3
Local fleet schema1
Session file modeWritten as 0600; an existing file must be 0600 or stricter

Storage and upload​

ThingValue
Default static-asset chunk size1 MiB
File operations per update callExactly 1
Compressible asset defaultgzip
Image asset defaultidentity
Content-addressed Motoko modules and explicit JSON/text recordsidentity

Cycle accounting bases (13-node estimate)​

Used for the presentation-only Settings estimate, not for billing.

ItemCycles
Per Wasm instruction1
Measured update execution5,000,000
Ingress reception (authorized or direct-authenticated update)1,200,000
Brokered call, or measured timer/handler self-call260,000

Paid canister public updates omit the ingress base — the calling canister owns the inter-canister fee.