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
| 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. |
Outputs and Functions Limits (BF.OUTPUT & BF.FUNCTION)
| 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)
| Selection Debounce Window |
150 ms |
Add-in Host |
Debounce duration applied to grid selection updates before delivery to Python. |