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.