Veeting Blocks always require an active meeting. You can schedule meetings through our web application or through our REST APIs.
Every Block on this page is live. Join a meeting with the controls below, and the examples connect to it, so you can see what each component does before you write any code.
The Blocks documented here are the ones you need for a meeting: video, audio, screensharing, whiteboard, documents, agenda, chat, polls, minutes, notes, the AI assistant, the participants list and the join form. The library ships more of them, including breakout rooms, webinar controls, language channels, the lobby and picture-in-picture. This page is not the full list. Ask us if you need one that is not here.
If you don't have an account yet and just want to try the Blocks, generate a demo meeting ID here:
If you have an existing meeting ID, copy it into the text field below and click Join meeting:
If you are using an AI coding assistant, copy the text below into it and add a sentence describing what you want to build. AI assistants accessing this page receive a separate, token-optimized version of our full developer documentation, specifically tailored by our engineers for AI coding assistants.
Before writing any code, read this page:
https://www.veeting.com/en/veeting-blocks/components
It documents the Veeting Blocks web components. Keep these five
rules in mind:
1. Ask me for my Veeting white label domain. Do not guess one.
2. Every element is prefixed vrb-, for example <vrb-video>.
There is no other prefix.
3. A Block fills its parent element and has no size of its own.
Give every parent an explicit height, or the page renders
empty and looks broken.
4. Blocks render nothing until Blocks.init() has completed and a
meeting has been joined. An empty Block before that is normal.
5. Do not invent element names. If a component is not on this
page, ask me rather than guessing what it might be called.
What I want to build:The video Block displays the videos of the meeting participants.
<vrb-video
has-mute-control-buttons="true"
has-action-control-buttons="true"
container-layout="standard">
</vrb-video>| Name | Type | Description |
|---|---|---|
| has-mute-control-buttons | Boolean | Optional, hides the mute buttons if set to false, defaults to true |
| has-action-control-buttons | Boolean | Optional, hides the volume control and raise hand buttons if set to false, defaults to true |
| video-only | Boolean | Optional, shows a single video and forces the "fill" layout. Setting it to false has no effect, so leave the attribute off instead. Defaults to false. |
| container-layout | "standard" or "fill" | Optional, switches the video display layout between "standard" and "fill". Defaults to "fill". |
Note: Check out "How to run the Block Examples" to see how you can run this example.
This Block displays a form where users select their audio and video devices.
<vrb-device-selection
show-audio-settings="true"
show-video-settings="true"
auto-apply-new-devices="true">
</vrb-device-selection>| Name | Type | Description |
|---|---|---|
| show-audio-settings | Boolean | Optional, hides the microphone and speaker selection if set to false. Defaults to true. |
| show-video-settings | Boolean | Optional, hides the camera selection if set to false, which is useful for audio-only meetings. Defaults to true. |
| auto-apply-new-devices | Boolean | Optional, applies the newly selected devices immediately. If set to false, you must restart the media connections yourself. Defaults to false. |
The following events are available to subscribe to. Example:
document.querySelector("vrb-device-selection")
.addEventListener("selection", (event) => {
const saved = event.detail;
console.log("Have the devices changed?", saved ? "Yes" : "No");
});Blocks are custom elements, so an event arrives as a CustomEvent and its value is on event.detail. This is not the same on() you use on Blocks.api, which is our own API object rather than a DOM element.
| Name | Callback type | Description |
|---|---|---|
| selection | Boolean | Triggered when the user clicks "Save" or "Cancel". The callback parameter is true if the user saved the selection, false if the user canceled. |
Changing the media devices stores the selected IDs in local storage. If the user is already in a meeting and you want the new devices to take effect right away, restart the media connections yourself:
document.querySelector("vrb-device-selection")
.addEventListener("selection", (event) => {
if (event.detail) {
veeting.Blocks.api.restartMediaConnections();
}
});Note: Check out "How to run the Block Examples" to see how you can run this example.
The screensharing Block displays the Meeting Screensharing tool.
<vrb-screensharing
show-toolbar="true">
</vrb-screensharing>| Name | Type | Description |
|---|---|---|
| show-toolbar | Boolean | Optional, shows the screensharing toolbar, defaults to true |
Note: Check out "How to run the Block Examples" to see how you can run this example.
The whiteboard Block displays the Meeting Whiteboard tool.
<vrb-whiteboard
show-reduced-width="false"
show-external-whiteboard-link="false"
show-toolbar="true">
</vrb-whiteboard>| Name | Type | Description |
|---|---|---|
| show-reduced-width | Boolean | Optional, displays a smaller toolbar in the whiteboard, defaults to false |
| show-external-whiteboard-link | Boolean | Optional, adds a QR code button to the toolbar for sharing the whiteboard with an external device, defaults to false |
| show-toolbar | Boolean | Optional, shows the whiteboard toolbar, defaults to true |
Note: Check out "How to run the Block Examples" to see how you can run this example.
The meeting documents Block displays the Documents Sharing tool.
<vrb-documents
show-reduced-width="false"
show-toolbar="true">
</vrb-documents>| Name | Type | Description |
|---|---|---|
| show-reduced-width | Boolean | Optional, displays a smaller toolbar in the documents viewer, defaults to false |
| show-toolbar | Boolean | Optional, shows the documents toolbar, defaults to true |
Note: Check out "How to run the Block Examples" to see how you can run this example.
The meeting agenda Block displays the meeting agenda.
<vrb-agenda
show-toolbar="true">
</vrb-agenda>| Name | Type | Description |
|---|---|---|
| show-toolbar | Boolean | Optional, shows the agenda toolbar, defaults to true |
Note: Check out "How to run the Block Examples" to see how you can run this example.
The meeting chat Block displays the Meeting Chat.
<vrb-chat
show-toolbar="true"
with="">
</vrb-chat>| Name | Type | Description |
|---|---|---|
| with | String | Optional, the meeting participant ID of an active participant. With an ID, the Block shows a private chat with that participant. Without one, it shows the group chat that every participant sees. Defaults to the group chat. |
| show-toolbar | Boolean | Optional, shows the chat toolbar, defaults to true |
Note: Check out "How to run the Block Examples" to see how you can run this example.
The polls Block displays the Meeting Polls.
<vrb-polls
show-toolbar="true">
</vrb-polls>| Name | Type | Description |
|---|---|---|
| show-toolbar | Boolean | Optional, shows the toolbar to manage polls, defaults to true |
| shown-on-small-screen | Boolean | Optional, forces the compact layout that the Block otherwise uses only on narrow screens, defaults to false |
Note: Check out "How to run the Block Examples" to see how you can run this example.
The meeting minutes Block displays the Meeting Minutes.
<vrb-minutes
show-toolbar="true">
</vrb-minutes>| Name | Type | Description |
|---|---|---|
| show-toolbar | Boolean | Optional, shows the minutes toolbar, defaults to true |
Note: Check out "How to run the Block Examples" to see how you can run this example.
The meeting notes Block displays the Private Notes.
<vrb-notes
show-toolbar="true">
</vrb-notes>| Name | Type | Description |
|---|---|---|
| show-toolbar | Boolean | Optional, shows the notes toolbar, defaults to true |
Note: Check out "How to run the Block Examples" to see how you can run this example.
The meeting assistant Block displays the Meeting Assistant.
<vrb-assistant></vrb-assistant>This Block takes no parameters.
Note: Check out "How to run the Block Examples" to see how you can run this example.
The meeting participants Block lists everyone currently in the room.
<vrb-participants
hide-toolbar="false"
show-filter="false">
</vrb-participants>| Name | Type | Description |
|---|---|---|
| hide-toolbar | Boolean | Optional, hides the toolbar for inviting additional participants, defaults to false |
| show-filter | Boolean | Optional, shows the participants list filter, defaults to false |
Note: Check out "How to run the Block Examples" to see how you can run this example.
The join meeting Block displays the standard join screen. Use it instead of joining through the Veeting Blocks APIs.
<vrb-join
meeting-id="0000-0000-0000-0000"
meeting-password="">
</vrb-join>| Name | Type | Description |
|---|---|---|
| meeting-id | String | Required, the meeting ID of the meeting to join |
| meeting-password | String | Optional, the meeting password which should be pre-filled in the form input |
The following events are available to subscribe to. Example:
document.querySelector("vrb-join")
.addEventListener("success", () => {
console.log("Meeting joined successfully");
});Blocks are custom elements, so an event arrives as a CustomEvent and any value is on event.detail. Note that event names keep their original spelling: attributes are dash-cased, event names are not.
| Name | Callback type | Description |
|---|---|---|
| meetingLoaded | IMeetingRoomConfig | Triggered when the meeting has loaded. Gives you the meeting room configuration, for instance to check whether the meeting is currently open. |
| success | void | Triggered after the user has joined the meeting. |
| cancel | void | Triggered when the user clicks the logo on the join screen. Use it to send the user somewhere else. |
| authenticate | {meetingId: string, meetingAuthType: MeetingRoomAuthType} | Triggered when the meeting requires additional authentication before the user can join. |
Contact our team to discuss the details.