Source of truth: exhaustive for what it covers. Generated from Velt variable metadata.
- If a name isnβt on this page, it doesnβt exist: a
{token}not listed for its component resolves toundefined. - Never invent or guess a name; use only identifiers that appear verbatim here or that you verified against ground truth and added here.
- Scope: exhaustive per component for comments + notifications + core; out-of-scope component areas (video-editor, single-editor-mode, media-source-settings, audio-waveform, user-avatar) are not catalogued, and a few non-comment/-notification components (Recorder, Huddle, Presence, View) are listed for completeness but only spot-corrected, not re-enumerated.
{β¦} token you can read inside a wireframe, organized by component, with an example usage for each. For the token syntax (operators, nesting) see Wireframe tokens.
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): short names work (
{annotation},{darkMode}); full paths ({appState.user},{featureState.enableResolve},{uiState.β¦}) also valid. - Flat-config features (Text Comment, Autocomplete, Sidebar, Reactions, Cursor, Presence, Huddle, Recorder, Transcription, View, Area, Arrow, Selection, Rewriter): read as
{componentConfig.<x>}; for name collisions (disabled,darkMode,variant,user,annotation) use the full path.
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.
React vs. Other Frameworks: every example below works in both; only the spelling differs. The example column uses whichever form is shortest.
Full syntax with tabbed examples:
Wireframe tokens.
Generated from the SDK and exhaustive per component. If a name isnβt listed for a component, it isnβt available there. For the nested-access root list and operators, see
Wireframe tokens.Inject your own data: setUiState()
Beyond the built-in variables below, you can inject your own app data and read it in any wireframe, velt-if, or velt-data:
- React / Next.js
- Other Frameworks
{uiState.projectName}, or gate with velt-if="{uiState.customFlag}". For per-annotation app data, use Context instead; setUiState is app-global.
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.

