Sandboxed HTML mini-apps that render live on Infa documents and canvases — install them from the community, configure them with props, and connect them to your board's integrations.
App Blocks are small, self-contained HTML mini-apps that render live inside your papers — both documents and canvases. A block can be as simple as a metric counter or as rich as a pull-request board fed by your GitHub connection. You can use the system blocks that ship with Infa, install blocks published by the community, or build your own with an AI agent.
Copy link
What an App Block Is
Each App Block is a single HTML document (inline CSS and JavaScript, no external scripts or stylesheets) rendered in a sandboxed iframe. The sandbox allows scripts only — a block runs with an opaque origin and no direct network access, so it cannot read your session or call external services on its own. Everything a block knows arrives through a small postMessage protocol from the host page, and any live integration data flows through Infa's server-side proxy.
Blocks come from three places:
System blocks — built into every board (for example, Connected Data and Paper Embed).
Community blocks — published by other Infa users, discoverable and installable from the picker.
Your own blocks — registered on a board by an AI agent over MCP. See Building App Blocks.
Copy link
Adding a Block to a Paper
Open the insert menu in a document (type / and choose App Block) or use the canvas insert menu. The picker has two tabs:
On this board — system blocks plus everything installed on the board. Blocks you authored carry a Draft or Published status tag and an overflow menu for publishing or removing them.
Community — published blocks from all Infa users, searchable and ordered by install count. Blocks already on your board insert on click; others show an Install button that installs and inserts in one step.
Rows with a Uses connections badge pull live data through one of your board's integration connections — after inserting one, bind a connection in its props (see below).
Copy link
Configuring a Block
Select a block and choose Edit props (in the block's toolbar on documents, or the canvas toolbar). Infa renders a form from the prop schema the block declares — text fields, numbers, toggles, dropdowns.
If a block needs live integration data, one of its props is a connection picker: a dropdown listing the board's connections for the provider the block uses. Pick one and the block starts receiving data through Infa's server proxy — the block itself never sees your token.
Copy link
Publishing and Managing Your Blocks
A block you author starts out visible only on the board it was registered on. When it is ready to share, publish it to the community — from the block's overflow menu in the picker, from your profile, or by asking your agent to call infa_publishAppBlock.
Manage everything you have authored at infa.ai/profile?tab=blocks. Each block shows one of three statuses:
Draft — only you can see and insert it.
On board — members of the board it was registered on can insert it (the default after registering).
Published — every Infa user can discover it in the Community tab and install it on their own boards.
No version pinning
Updating a block's source updates every existing install immediately — including installs on other users' boards if the block is published. Preview changes before updating a widely-installed block.
Never publish a block containing hardcoded credentials, connector IDs, or board-specific data. Published source is visible to everyone; installers bind their own connections through props.
Copy link
How Blocks Reach Integration Data
Blocks cannot fetch from the network directly. A block that needs provider data asks the host page, and Infa's server proxies the request to the provider's official API using the viewing user's session and the board connection bound in the block's props. Tokens never reach the block.
Supported provider APIs:
Provider
Allowed requests
GitHub
GET
Figma
GET
Slack
GET
Notion
GET and POST
Linear
POST /graphql (GraphQL)
Requests outside a provider's official API are rejected. Connections themselves are managed per board — see the Integrations overview and the External API for programmatic access to your design system data.
App Blocks
App Blocks are small, self-contained HTML mini-apps that render live inside your papers — both documents and canvases. A block can be as simple as a metric counter or as rich as a pull-request board fed by your GitHub connection. You can use the system blocks that ship with Infa, install blocks published by the community, or build your own with an AI agent.
Each App Block is a single HTML document (inline CSS and JavaScript, no external scripts or stylesheets) rendered in a sandboxed iframe. The sandbox allows scripts only — a block runs with an opaque origin and no direct network access, so it cannot read your session or call external services on its own. Everything a block knows arrives through a small postMessage protocol from the host page, and any live integration data flows through Infa's server-side proxy.
Blocks come from three places:
Open the insert menu in a document (type
/and choose App Block) or use the canvas insert menu. The picker has two tabs:Rows with a Uses connections badge pull live data through one of your board's integration connections — after inserting one, bind a connection in its props (see below).
Select a block and choose Edit props (in the block's toolbar on documents, or the canvas toolbar). Infa renders a form from the prop schema the block declares — text fields, numbers, toggles, dropdowns.
If a block needs live integration data, one of its props is a connection picker: a dropdown listing the board's connections for the provider the block uses. Pick one and the block starts receiving data through Infa's server proxy — the block itself never sees your token.
A block you author starts out visible only on the board it was registered on. When it is ready to share, publish it to the community — from the block's overflow menu in the picker, from your profile, or by asking your agent to call
infa_publishAppBlock.Manage everything you have authored at infa.ai/profile?tab=blocks. Each block shows one of three statuses:
Never publish a block containing hardcoded credentials, connector IDs, or board-specific data. Published source is visible to everyone; installers bind their own connections through props.
Blocks cannot fetch from the network directly. A block that needs provider data asks the host page, and Infa's server proxies the request to the provider's official API using the viewing user's session and the board connection bound in the block's props. Tokens never reach the block.
Supported provider APIs:
/graphql(GraphQL)Requests outside a provider's official API are rejected. Connections themselves are managed per board — see the Integrations overview and the External API for programmatic access to your design system data.
Building App Blocks
MCP Server