Skip to main content


BOS allows you to create a decentralized frontend by writing and composing small applications known as Components.

Components are stored in the NEAR blockchain, and execute locally in a custom Virtual Machine, thus ensuring the component can not access local storage or cookies.


Components use the BOS API to process data, fetch data from other websites, and interact with blockchains.

Creating a Component

To create a component you simply need to implement a return statement, returning some HTML code.


VM context

You can access the context object to get specific information about the VM instance.


You can detect the current network (mainnet or testnet) using context.networkId. For example:

const childSrc =
context.networkId === "mainnet"
? "near/src/Foobar"
: "preview.testnet/src/Foobar";

return (
<p>A child dependency:</p>
<Widget src={childSrc} />


You can get the current signed-in user account (e.g., user.near) using context.accountId. For example:

let user_account = context.accountId;

return (
<div class="container border border-info p-3 text-center min-vw-100">
<p> {user_account} </p>

Props: Receiving Input

Components can take arbitrary input, which will be reflected in the props variable. In the example below, we are passing as input name="Anna".


State: Storing Information

Components have an internal state were they can store information.


Composing Components

To compose components you will use the Predefined Widget component. For this, you will only need the NEAR username of who created the component, and the component's name.