Skip to main content
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.
Template variables allow you to:
  • Display dynamic data within Velt components.
  • Use the dynamic data to apply conditional templates or conditional CSS classes.
There are two main ways to use them:
  1. Using built-in Velt data
  2. Injecting your own application data
The complete per-component catalog of every available variable is at the end of this page.

1. Using Built-in Velt Data

Velt provides access to various data objects that you can display in your components using the VeltData component.

Basic Usage

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:
In components such as Inline Comments Section, field="context.someProperty" resolves from the component’s local UI state (parentLocalUIState.context), not from the annotation’s context. To access context stored on the annotation, use field="annotation.context.someProperty" instead.

Example: Building a Custom User Card

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

Using Custom Data in Components

Read injected values like any other variable: {uiState.projectName}, or gate with velt-if="{uiState.customFlag}":
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.
For per-annotation app data, use Context instead; setUiState is app-global.

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 in velt-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 to undefined. 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 (veltIf prop vs velt-if attribute, <VeltData/> vs <velt-data>). Full directive syntax: Conditional Templates.

Comment Dialog

Comment Bubble

Access model: structured; some need full globalConfigSignal.* / 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 full componentConfigSignal. 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.*. 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} (aliases commentIndex) 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.log it from a hook (e.g. useCommentAnnotations()) to see the exact shape.