Huddle

Add Slack-style huddles to your product.

Spontaneous audio and video inside the document, no link, no invite.

No more sending your users to Zoom to finish what started in your product.

Free tier. No credit card. First comment in 5 minutes.

HDcontract.md / Clause 7 · vendor rate
live

7.2 The vendor rate shall not exceed 12% of base contract value per annum.

Mic
Cam
Share

one click: no link, no invite, no calendar

Build this

Huddles running inside products at

Migrating from an in-house build or another SDK?Compare·Migration guide

What it is

When the thread can’t resolve it.

Velt Huddle adds Slack-style live audio, video, and screen sharing inside your product, scoped to the document your users are working on. A huddle starts with one click: no link, no invite, no calendar. It exists for the moment reviewers genuinely disagree: when two reviewers are three replies deep and still apart, the conversation attached to the work resolves what the thread cannot. Agents appear in the same presence row and their findings sit in the thread under discussion; the humans take the call and the consent step closes it. Agents do not join the audio or video.

MASRJDCCAI
CCAI

Clause 7: vendor rate is 12% over the contracted schedule

ApproveReject
agent
LIVE
MASR
screen on clause 7

agent flags · humans huddle and talk it out · Approve closes it (agents never join the call)

How it works

Three steps to the first huddle.

Wrap your app, add VeltHuddle at the root, and drop VeltHuddleTool where the start button belongs. Clicking the tool starts a huddle on the current document; teammates already there join in place.

01Install
terminal
npm install @veltdev/react
02Wrap
_app.tsx
<VeltProvider
  apiKey={VELT_API_KEY}>
  <YourApp />
</VeltProvider>
03Mount
Toolbar.tsx
<VeltHuddle />
// place the start button anywhere:
<VeltHuddleTool />
With Velt

The mechanics

The VeltHuddleTool button starts a huddle on the current document; teammates in the same document join from where they already are. The type config sets what a huddle carries: audio, video, screen, or all (default all). An ephemeral chat is on by default and toggles by prop or API. Calls run peer-to-peer and fall back to a server-side connection automatically (serverFallback, default on). Clicking a participant’s avatar can start Follow Me mode (flockModeOnAvatarClick, default off). Every huddle created or joined fires a webhook with the acting user, document ID, and page metadata.

// VeltHuddleTool starts a huddle on the current document

Build it yourself

What an in-house version requires

  • WebRTC signaling and session management
  • STUN and TURN infrastructure
  • device permission UX for camera, mic, and screen capture
  • peer-to-peer transport with server fallback
  • join and leave state synced to presence
  • in-call chat
  • reconnection handling
  • cross-browser quirks
  • call quality monitoring

Teams that build live audio and video budget a quarter for the first version and keep paying for the transport long tail. The 3 steps above replace that quarter.

MCP: the faster path.

Skip the steps. Have your agent set it up.

npx -y @velt-js/mcp-installer

Launch huddles this week.

No credit card. Works with React, Next.js, Vue, Angular, and HTML.

Get Free API Key

Capabilities

Stuck reviews, settled live.

Each card is the live SDK. Toggle to Code for the exact snippet that renders it.

01audio
Voice huddlelive · audio
Maya
Sarahlistening
Notetakercapturing

one click opens a live voice channel on the document

// audio
<VeltHuddleTool type="audio" />

Audio huddles

One click in your toolbar opens a live voice channel on the document under review. The pricing dispute gets talked through next to the pricing table, not in another app.

02video
Video huddle2 on
Maya
Sarah

faces on, still inside the document

// video
<VeltHuddleTool type="video" />

Video huddles

Faces on, still inside the document. When the negotiation needs more than text, the client conversation happens where the deck is, not in a separate meeting tool.

03screen
Screen sharelive
contract.mdSHARING

7.2 The vendor rate shall not exceed 12% of base contract value.

Sarah is sharing
// screen
<VeltHuddleTool type="screen" />

Screen share in the huddle

Any participant shares their screen inside the huddle. Walk the reviewer through the clause, the cell, or the field record while everyone watches live.

04start
No link, no inviteone click
Start huddleeveryone in the doc is in
meeting linkcalendar invitejoin URL
// start
<VeltHuddleTool />

No-link, no-invite start

Clicking the huddle tool starts the call on the spot. Teammates already in the document join from where they are: no URL, no invite, no calendar.

05scoped
Scoped to the docevery event
notificationSourcehuddle
documentIdcontract-114
pageInfo.pageclause-7
participants2
// scoped
// every event carries documentId
// and page metadata

Huddles scoped to the document

A huddle belongs to the document it started on; every event carries the document ID and page metadata. The conversation about the filing stays attached to the filing.

06presence
In the room3 here
Mayaspeaking
Sarahspeaking
Jordanlistening
// presence
<VeltHuddle /> // renders huddle users in your app

Presence integration

Huddle users render through the same presence layer as the rest of your app. Reviewers see who is already talking about the contract before they join.

07chat
Huddle chatephemeral
Mayanow

Corrected rate: 9% - see footnote 4

Sarahnow

Dropping the doc link without talking over you

clears when the huddle ends · toggle by prop or API

// chat
velt.enableChat();
velt.disableChat();

Built-in chat

Every huddle carries an ephemeral chat, on by default, toggleable through the API. Drop the corrected number or the doc link without talking over whoever has the floor.

08webhooks
POST /your-endpoint
{ "actionType": "joined",
  "notificationSource": "huddle",
  "actionUser": { "email": "maya@acme.com" },
  "metadata": { "documentId": "contract-114" } }

fires on huddle created and joined

// webhooks
// huddle.created · huddle.joined
{ "actionType": "joined",
  "notificationSource": "huddle",
  "actionUser": { "name": "maya" },
  "metadata": { "documentId": "contract-114" } }

Webhooks on create and join

Every huddle created or joined fires a webhook with the user, document, and page metadata. Pipe live-conversation activity into your analytics or your audit pipeline.

The deck review used to stall, then move to a scheduled call the next day. Now the huddle starts on the slide and the claim is settled before anyone leaves the document.

Head of Product · sales enablement platform

Little big details

The long tail, already built.

Shipped functionality only. The confirmed set leads; draft items render after engineering sign-off. This wall stays short on purpose and indexes shipped truth only.

Huddle type config: audio, video, screen, or all (default all)Built-in ephemeral chat, default on, with enableChat and disableChat APIsFollow Me mode on avatar click (flockModeOnAvatarClick, default off)Peer-to-peer transport with automatic server-side fallback (serverFallback, default on)Webhooks on huddle created and joined: actionUser, document ID, locations, page infoVeltHuddleTool placeable anywhere in your UIWeb components (velt-huddle, velt-huddle-tool) for non-React frameworksUI customization via huddle wireframe parts, slots, and template variablesGlobal styles and dark modeParticipant limits per huddleComing soonMute and device-switching controlsComing soonMobile and WebView behavior for live callsComing soonHuddle behavior across page navigation within a documentComing soonLocalization coverage for huddle UI stringsComing soon

Make it yours

Your huddle UI, your call rules.

Wireframe parts, slots, and template variables for the in-call bar and chat, plus type config, chat toggles, follow mode, and webhooks underneath.

Look

Huddle wireframe customization via Parts, Slots, and Template Variables, plus global styles and dark mode. The in-call bar and chat can look nothing like Velt’s defaults.

Maya
Sarahmuted
Notetakeragent
Live

Behavior

Type config per tool instance (an audio-only button next to a full one), chat toggle by prop or API, Follow Me mode on avatar click, server fallback control, and webhooks into your pipeline.

type
joinRulerequest to join
scopedocumentId
serverFallbackon
webhookshuddle.created · huddle.joined → your pipeline
We restyled the in-call bar to match our editor in a day. The transport, the reconnects, the screen-capture permissions: all of that was already handled.

Staff engineer · collaborative editor

In production

Huddles, in products like yours.

Tabbed by vertical, with verified customer screenshots.

SummaryNext StepsDemoCustomer Stories

Hey Conductor!

This Digital Sales Room gives you everything you need to move forward — from proposal to plan.

Our Mutual Action Plan
Training2 / 5
Creating a new Room1
Build a working demo room
Contract sign-off
Maya2m

@Fin We need to make a working demo for Rene and his team

The deck review stalls on the claims slide, and the huddle starts right there. Brand, legal, and the writer settle it in one conversation on the asset itself.For sales enablement

See it running in products like yours.

30 minutes, with an engineer, not a sales deck.

Book Demo
SOC 2 Type IIHIPAAEU data residencySelf-host identity

User identity behind every participant can stay on your infrastructure via the user's data provider, with Velt storing only user IDs. Huddle runs on the same SOC 2 controls and isolation guarantees as the rest of the SDK. See self-hosting and governance.

Book Demo

Proof

The conversation that stayed in the product.

Users stopped leaving to finish the conversation somewhere else.

0 Zoom links

Our users used to bail to Zoom to finish a review. Now the huddle starts on the document and the conversation never leaves the product.
Head of Product, sales enablement platform

1 week

Live audio and video was a quarter of work we did not have. We dropped in VeltHuddle and shipped it in a week.
Founding engineer, collaborative editor

5 min

The pricing dispute that took a day of async replies now gets settled in a five-minute huddle next to the model.
Controller, FP&A platform

FAQ

Questions about Huddle.

Zoom is a meeting product: scheduled, link-based, with its own app and account model, and it is very good at that. A Velt huddle is a feature of your product: it starts with one click on the document, with no link and no calendar; participants are your existing signed-in users; and it is scoped to the work being discussed. It is also part of the same SDK as comments, presence, and recording, so there is no second vendor and no second user system.

Install @veltdev/react, wrap your app in VeltProvider with your API key, add VeltHuddle at the root, and place VeltHuddleTool where you want the start button. Clicking the tool starts a huddle. The huddle setup guide walks through it.

Yes. The type config accepts audio, video, screen, or all; the default is all. An audio-only huddle button is one prop.

From the document itself: users signed into the same document see the active huddle and join in place, without a link or an invite.

Yes. Every huddle has built-in ephemeral chat, on by default, and you can disable it by prop or through the API.

Huddles run peer-to-peer and automatically fall back to a server-side connection. The fallback is on by default and configurable.

Yes. Velt fires a webhook when a huddle is created or joined, with the acting user, document ID, and page metadata in the payload. Pipe it into analytics or your audit pipeline.

Velt is priced on usage, not seats: you pay for documents with review activity in a month, and there is a free tier for development and early production. Huddle is part of the SDK, not a separately priced add-on.

Add Slack-style huddles to your product.

Free tier. No credit card. First comment in 5 minutes.

30 minutes, with an engineer, not a sales deck.