Describes the .vl XML file format used by vvvv gamma — document structure, element hierarchy, ID system (base62 GUIDs), NodeReference/Choice patterns, Pins, Pads (IOBoxes), Links, ProcessDefinition/Fragment lifecycle, regions (If/ForEach/Cache), type definitions, TypeAnnotations, and property serialization. Use when generating, parsing, or modifying .vl files programmatically, or when understanding the structure of vvvv patches at the XML level."
A .vl file is an XML document encoding a visual dataflow program for vvvv gamma. Key elements:
- Document — root element, contains dependencies and one top-level Patch
Patch — container for visual elements (Nodes, Pads, Links, Canvases)
Node — operation calls, type definitions, or regions
Pin — input/output on a Node (defined at definition site)
Pad — visual data element (IOBox) for displaying/editing values
Link — connects two endpoints by referencing their IDs
Canvas — visual grouping container (no logical scope)
ProcessDefinition — lifecycle definition (Create, Update) via Fragments
Slot — state field within a type definition
XML Root and Namespaces
CODEBLOCK0
Prefix
URI
Purpose
INLINECODE1
INLINECODE2
Required. Complex properties as child elements (<p:NodeReference>)
INLINECODE4
reflection | Optional. Only when using r:IsNull="true" for explicit null values |
Root attributes: Id (base62 GUID), LanguageVersion (e.g. "2024.6.0"), Version (always "0.128").
ID System
Every element has a unique Id — a 22-character base62-encoded GUID using [0-9A-Za-z]. All IDs must be unique within the document. Generate via GUIDEncoders.GuidTobase62(Guid.NewGuid()).
Link Ids attribute: comma-separated "sourceId,sinkId" (output first, input second).
Element Hierarchy
CODEBLOCK1
Critical: Dependencies are direct children of Document, NOT inside Patch.
Dependencies
CODEBLOCK2
Almost every document needs VL.CoreLib. Use IsForward="true" to re-export types to consumers.
NodeReference System (Choices)
The <p:NodeReference> property defines what a Node IS. It contains <Choice> elements that identify the target symbol.
Operation Call
CODEBLOCK3
- First Choice: Kind="NodeFlag" with Fixed="true" (shape indicator)
Second Choice: ProcessAppFlag (stateful) or OperationCallFlag (stateless)
Type Definitions
CODEBLOCK4
Regions
CODEBLOCK5
Regions use StatefulRegion as the FIRST Choice (not NodeFlag). Use ApplicationStatefulRegion for If/ForEach or ProcessStatefulRegion for Cache.
Node Element
CODEBLOCK6
Key attributes: Id, Name, Bounds ("X,Y" or "X,Y,W,H"), Summary, Tags.
Putting dependencies inside Patch instead of INLINECODE87
Reversed Link direction (first ID must be source/output)
Missing ProcessDefinition for process/class type definitions
Wrong Bounds format (use commas, no spaces: "100,200,65,19")
Using IsIOBox instead of INLINECODE90
For the complete element reference with all attributes, Choice kinds, and serialization details, see format-reference.md.
For layout conventions, spacing, positioning, and visual organization best practices, see best-practices.md.
Initial public release of the vvvv-fileformat skill.
- Provides a technical description of the .vl XML file format used by vvvv gamma
- Documents element hierarchy, ID system (base62 GUIDs), NodeReference/Choice patterns, Pins, Pads (IOBoxes), Links, and ProcessDefinition/Fragment lifecycle
- Explains regions (If/ForEach/Cache), type definitions, TypeAnnotations, and property serialization
- Includes examples and key conventions for generating, parsing, or modifying .vl files programmatically
- Useful for understanding the XML structure of vvvv patches or developing compatible tools