This catalog is generated from the Velt SDK. If a
{token} isnβt listed for its component, it isnβt available there and resolves to undefined; donβt guess names. Coverage is complete for comments, notifications, and core; for other components (Recorder, Huddle, Presence, video editor, β¦) see that componentβs own page under Components in the sidebar.- Display dynamic data within Velt components.
- Use the dynamic data to apply conditional templates or conditional CSS classes.
- Using built-in Velt data
- Injecting your own application data
1. Using Built-in Velt Data
Velt provides access to various data objects that you can display in your components using theVeltData component.
Basic Usage
- React / Next.js
- Other Frameworks
Available Data Objects
Global Variables
These are available across all Velt components:Context-Specific Variables
These are only available within relevant components they are used in:context Variable Resolution
The context variable resolves differently depending on the component it is used in:
Example: Building a Custom User Card
- React / Next.js
- Other Frameworks
2. Injecting Your Own Data
- You can inject custom data from your application to use within Velt components with
setUiState(). - This data is available in all Velt Wireframes, Velt If and Velt Data components.
Setting Custom Data
- React / Next.js
- Other Frameworks
Using Custom Data in Components
Read injected values like any other variable:{uiState.projectName}, or gate with velt-if="{uiState.customFlag}":
- React / Next.js
- Other Frameworks
Older examples read injected values with a bare field name (
field="projectName"). In structured components the short name also resolves (see the access models in the catalog below); if a bare name shows nothing, use the full uiState. path.Context instead; setUiState is app-global.
Variable mechanics
Mapped vs. flat-config features (which name form to use)
Two access conventions exist, as a rule of thumb:- Mapped: use short aliases like
{annotation.from.name}: Comment Dialog, Comments Sidebar, Comment Bubble, Inline Comments Section, Multi-Thread Comment Dialog, Text Comment, Notifications Panel, Notifications Tool, Activity Log. - Flat-config: use the explicit
{componentConfig.<name>}form: Cursor, Presence, Huddle, Recording, Transcription, View Analytics, Area, Arrow, Tag, Reactions, Selection, Rewriter, Comments Tool, Sidebar Button, Autocomplete.
undefined in a flat-config feature, fall back to {componentConfig.<name>}. Mapped features accept the explicit form too; itβs just not required.
Variables that support nested access
Only these root names allow{root.nested.field}; any other variable resolves to its root only.
Debugging a variable that shows nothing
If a variable renders blank orundefined, check in order:
- Spelling: exact name from the catalog below (case-sensitive).
- Nested access: is the root in the list above? If not, you can only read its root.
- Scope: are you inside a slot that receives that variable? (
{comment}/{commentIndex}exist only inside thread-card descendants;{notification}only in the notifications panel.) - Mapped vs flat: for flat-config features use
{componentConfig.<name>}.
3. Complete Variable Catalog (Per Component)
Every{β¦} token you can read inside a wireframe, organized by component, with an example usage for each.
How to read the tables:
- Buckets:
app(per-user) Β·data(per-annotation) Β·ui(per-instance) Β·feature(SDK-config flags) Β·iteration(loop-scoped). π = boolean/state flag most useful invelt-if/velt-class. - Two access models: structured features (Comment Dialog, Comment Bubble, Inline Comments Section, Multi-Thread Dialog, Activity Log, Comments Tool, Sidebar Button, Notifications) accept short names (
{annotation},{darkMode}) as well as full paths. Flat-config features (Text Comment, Autocomplete, Sidebar, Reactions, Cursor, Presence, Huddle, Recorder, Transcription, View, Area, Arrow, Selection, Rewriter) read as{componentConfig.<x>}; use the full path for name collisions (disabled,darkMode,variant,user,annotation). - Resolution rule: a name not in the map falls through to
componentConfig.<name>; an unknown name resolves toundefined. If a token shows nothing, check (a) spelling, (b) youβre in a slot that receives it, (c) flat vs structured path. - Every example works in React and Other Frameworks; only the spelling differs (
veltIfprop vsvelt-ifattribute,<VeltData/>vs<velt-data>). Full directive syntax:Conditional Templates.
Comment Dialog
Comment Bubble
Access model: structured; some need fullglobalConfigSignal.* / parentLocalUIState.*.
Comment Pin
Text Comment
Access model: flat-config:{componentConfig.<x>}.
Inline Comments Section
Access model: structured.Multi-Thread Comment Dialog
Access model: structured, per-instance.Autocomplete (@mentions)
Access model: flat-config.Comments Sidebar
Access model: flat-config:{componentConfig.<x>}.
Notifications Panel & Tool
Access model: structured; short names.Reactions
Access model: flat-config.Presence
Access model: flat-config.Cursor
Access model: flat-config.Huddle
Access model: flat-config.Recorder
Access model: flat-config: use fullcomponentConfigSignal. for collisions.
Transcription
Access model: flat-config.Activity Log
Access model: structured.View Analytics
Access model: flat-config.Comments Tool
Access model: structured;componentConfig.data.* / .uiState.*.
Sidebar Button
Access model: structured.Area Β· Arrow Β· Selection Β· Rewriter
Access model: flat-config.Tags
No wireframe variables / slots. Customize via the[template] input on velt-tag-pin / velt-tag-dialog, CSS, or the headless useTagAnnotations / useTagUtils hooks. See Annotations, tags, arrows, and areas.
Notes
- Iteration
{i}(aliasescommentIndex) is available inside list/Threads slots, 0-based. Loop slots also inject objects (option,filter,emoji,activity,dateGroup,chip,view,file, β¦) + per-item booleans (isSelected,isActive,isExpanded,isAscending). - Function-typed variables (
onClickβ¦,initRecording,toggleSidebar,handleEmojiSelected, β¦) are call-handlers you bind to events, not display values. - For deep fields of a compound object not listed,
console.logit from a hook (e.g.useCommentAnnotations()) to see the exact shape.

