Skip to main content

Security and data flow

A programmable workbook has several different data paths. Do not reduce them to one blanket statement such as “all data stays local.” The boundary depends on the capability being used.

Normal workbook calculation

Excel workbook


Boardflare host


Cross-origin notebook iframe


marimo / Pyodide

Workbook values declared through bf.inputs() are materialized into the browser Python runtime so the notebook can calculate.

Notebook iframe isolation

The notebook executes in an iframe served from a distinct origin. Boardflare establishes explicit message capabilities rather than exposing unrestricted parent-window access. The protocol validates expected origins and per-session connection information before transferring the capability channel.

Workbook persistence

Saved notebook source and startup preference travel with the Excel workbook. Because notebook source is executable, a notebook-enabled workbook should be treated as executable content and opened only from a trusted source.

AI authoring requests

AI authoring is a separate data path from normal Python execution. Depending on the action, requests can include the user prompt plus notebook code, outputs, variable previews, selected context, attachments, or context derived from workbook data.

User-authored network requests

Python code can make supported browser network requests. When code sends data to an external API, that data leaves the workbook/browser runtime and is governed by the destination service.

Package downloads

Installing packages can contact package/CDN infrastructure for compatible wheels or metadata.

Excel versus standalone web demo

The standalone demo uses Univer as its spreadsheet host. It shares Boardflare integration concepts where possible, but persistence and custom-function lifecycle differ from Excel. Validate the final application in Excel before distribution.

Threat-model boundary

Cross-origin isolation reduces unintended capability access between the host and notebook; it is not a claim that arbitrary Python code is safe. Security depends on both runtime boundaries and trust in application source.