System Limits and Constraints

System limits, timeouts, and payload constraints.

This section catalogs the system boundaries, size limits, and concurrency caps enforced across the Boardflare runtime, Office add-in, and workbook serialization layers.

Workbook & Storage Limits

Resource Limit Boundary Description
Cell Character Limit 32,767 UTF-16 code units Excel OOXML Maximum size of an individual notebook cell stored in _BOARDFLARE. Code cells exceeding this must be split.
Notebook Source Size 200,000 bytes Boardflare Storage Maximum total canonical source size of a notebook in a workbook. Uploaded .py scripts must also meet the upload rules; the source must not exceed this limit.
Public Identifier Names 128 ASCII chars Runtime Protocol Maximum length of input, output, and function names.
Reference String Length 512 chars Runtime Protocol Maximum length of an A1 or defined-name reference passed to bf.ref() or bf.inputs().
Safe Integers ±(2^53 − 1) JavaScript / Protocol Range [-9,007,199,254,740,991, 9,007,199,254,740,991]. Larger integer identifiers must be stored as strings.
AI Edit Settle Timeout 120,000 ms (2 min) Add-in Host Maximum time allowed for notebook reload to settle after incrementing the request counter in H1.
AI Response Size 32,000 chars Add-in Host Truncation boundary for the JSON payload written to the response JSON in H2.
Capability Message Size 1 MiB Runtime Protocol Maximum encoded JSON size of a general message between the notebook and the workbook host.
Notebook Startup Timeout 90 s (5 min when worksheet formulas use the notebook) Add-in Host Time the notebook frontend has to report ready before startup fails with “Notebook initialization timed out”.
Capability Connection Timeout 10 s Runtime Protocol Time a displayed bf.inputs or bf.publish widget has to connect to the workbook host.
Source Request Timeout 30 s Runtime Protocol Time allowed for a notebook source save or load request.

Inputs Limits (bf.inputs)

Resource Limit Boundary Description
Max Inputs Widgets 1 Runtime Protocol Maximum number of bf.inputs(...) widget declarations per notebook.
Max Inputs 128 Runtime Protocol Maximum number of named arguments per bf.inputs() declaration.
Max Cells per Reference 100,000 cells Runtime Protocol Maximum number of cells in a single workbook reference range.
Total Input Cells 250,000 cells Runtime Protocol Maximum combined number of cells across all active workbook input references.
Input Snapshot Size 512 KB Runtime Protocol Maximum serialized size of an input snapshot payload.
Input Debounce Window 50 ms Add-in Host Debounce duration applied to workbook changes before bound inputs refresh.

Outputs and Functions Limits (BF.OUTPUT & BF.FUNCTION)

Resource Limit Boundary Description
Max Outputs 128 Runtime Protocol Maximum number of published outputs in bf.publish(outputs={...}).
Max Functions 128 Runtime Protocol Maximum number of published functions in bf.publish(functions={...}).
Max Output Cells 100,000 cells Runtime Protocol Maximum spill matrix size returned by a single published output.
Function Argument Cells 100,000 cells Runtime Protocol Maximum cells passed across arguments into a BF.FUNCTION call.
Function Subscriptions 512 Runtime Protocol Maximum active worksheet cell formulas subscribing to notebook functions.
Function Timeout 60,000 ms (60s) Runtime Protocol Maximum execution time for a single worksheet function invocation before returning #N/A in Excel (website demos show text; see Website Demos).
Active Function Concurrency 8 Runtime Protocol Maximum concurrent function invocations evaluated in parallel.
Queued Function Calls 128 Runtime Protocol Maximum pending function calls queued when all execution slots are busy.
Function Batch Size 64 Runtime Protocol Maximum function calls batched in a single evaluation round-trip.

When bf.publish() registers a new publication, active BF.FUNCTION subscriptions are invoked again against it. When a formula is removed or recalculated, Boardflare sends a best-effort cancellation: an async Python function is cancelled, but a synchronous function that is already running blocks the kernel and cannot be preempted. Use async functions for long-running work.


Selection Limits (bf.selection)

Resource Limit Boundary Description
Selection Debounce Window 150 ms Add-in Host Debounce duration applied to grid selection updates before delivery to Python.