Table of Contents

vvvv gamma 7.0

released on 25 08 2025
Installer win-x64 | Offline Installer win-x64
Installer win-arm64 | Offline Installer win-arm64

vvvv itself - HDE & Runtime

New

  • Windowing: Multiple windows, custom tab layouts, auto-restore of last session
  • The Quad menu now shows a list of recently opened .vl documents
  • Patch Editor now comes with snapping. Makes it easier to make patch readable.
  • [Public Channels]
  • [Presets & Transitions]
  • [Bindings]
  • Adds a commandline compiler for .vl documents
  • vvvv is now available for arm CPUs
  • Emoji support in patch comments🍿!
  • Ctrl+G is back! Combine with Shift to pack into current canvas and/or Alt to pack into operation
  • F2 on node to renames its definition
  • Ctrl+Shift+X on node to cuts its definition
  • New GoTo menu entry to navigate to a node's definition without opening it
  • New way to patch & code regions, see https://github.com/vvvv/VL-Language/issues/70 https://github.com/vvvv/VL-Language/issues/53 and https://github.com/vvvv/The-Gray-Book/pull/59 - former API still funtional; IsSplicer got added to BorderControlPointDescription
  • When using process nodes that stem from classes or records: you now can make the State Output visible even when not enabled by the node designer.

Changes

  • Dropped support for args.txt
  • The popup that shows when trying to edit a string that is too long has more options
  • SolutionExplorer and DependencyExplorer now have distinct shortcuts
  • The entries in the Quad menu have seen a cleanup
  • Removed the Hamburger menu and made About and Settings ordinary HDE windows
  • Backup folder is now accessible via Recent menu
  • In dependencies menu, help patches are now one level down in an extra help foldout
  • Cleanup of tooltip when hovering pins
  • improved tooltips for several type: Rectangle, Channel, Stride types and more
  • Inspector has special editors for files and directories
  • Inspector: now shows State Output pin (wasn't shown as not part of a fragment)
  • Inspector can now work with named properties:
    • Type can be changed with autocomplete
    • Default for UIs to offer a reset to default functionality,
    • Don't Serialize to make sure to only save relevant info
    • Refinements on Min and Max for UIs to restrict value range of sliders even of Vector types
    • Added Description, Tags and Custom metadata attribute sections, some of the attributes are related to Public Channels and Bindings (?)
  • Inspector shows IOBox values
  • No longer add dependencies on paste inside of packages
  • Adds options to ignore compile and runtime errors to exporter
    • New option to ignore errors at compile time. Defaults to false (was true when exported via UI). Set to true to allow export of patches containing errors.
    • New option to ignore unhandled exeptions at runtime. Defaults to false. Set to true if exceptions should only get logged.
    • Makes Platform setting advanced -> it was a bit confusing and is only needed in rare cases.
  • Replaces Target OS with Runtime Identifier in exporter. Maps directly to RuntimeIdentifier of generated C# project. Defaults to current OS and CPU architecture.
  • Log warning if package doesn't contain native assets for current runtime
  • More fine grained control over C# direct import feature (import namespace, type, mix with existing forwarding mechanism ...)
  • Adds PinGroupEditModes for better control how pin groups can be edited. Allows for example to disable the Ctrl++ shortcut on a pin group.
  • Closing the splash screen (via task bar, or Alt+F4) will also quit vvvv
  • Loop regions have better memory management when used in mutable patches
  • Code generator adds aggressive inlining attribute to small methods
  • Adds logs for auto-backup and reload
  • Pins created via Ctrl-click will take new name in case existing pin doesn't connect - forum
  • Closing last tab of a document which is also no longer referenced by anyone else will close the document as well - forum
  • Adds support for C# record structs - they are now flagged as immutable and record serializer picks them up as well
  • Compiler warns of Potentially Uninitialized Pads, which can be helpful to track down problems. Often can be ignored though.
  • Adds Ctrl-1 as an alternative shortcut in Renderers (Skia and Stride) to navigate into patch.

Fixes

  • Finders are now DPI aware
  • Patch Editor: Connection handler: panning with Left-button & Space only when setting enabled
  • Patch Editor: In- and Outboxes pick a better default size
  • Fixes Export button not visible in higher DPI scalings
  • Editing any text in the patch canvas is now handled natively by the UI
  • Fixes crash in help browser in case package url / license url / repo url couldn't be parsed as an Url - forum
  • Trigger a regular build for referenced C# projects to get xml doc file generated
  • Pins created by property accessor action (Ctrl+Shift+K) will keep name of pad (white spaces get preserved, same as in Ctrl+K)
  • Fixes ObsoleteAttribute not working on process nodes written in C#
  • Fixes x64 installer crashing on arm64
  • Enum editors respect the Browseable(false) to hide certain entries in UI
  • Modifications made to the model at runtime via the public ISolution API get recorded and applied later on the main thread at a moment when the UI is idle - forum
  • App Health no longer shows messages which can't be associated with any document. Gets rid of those empty entries, which when clicked upon did either nothing or navigated to unrelated definition canvases.
  • No longer import compiler generated <Clone>$ methods
  • When selecting a different node definition, existing pins which would lead to a different resolve result will get deleted
  • Fixes stateful region choice not available on factory generated nodes
  • Fixes hang in case path to C# project contains commas - forum
  • Removes unconnected patch pins after drag operation - forum
  • Use base64 encoding in case strings contain invalid XML chars - 1 2
  • App exporter UI now in sync with app.props file. Changing anything in the UI will write the file and changing the file will update the UI.
  • Fixes connectable node query when inserting into existing link - forum
  • Code documentation related fixes
  • Going from named to unnamed pads (and the other way round) keeps the type annotation
  • Logs exceptions during patch startup to the system log
  • Fixes Helpbrowser not showing content when trying to access github via a throttled connection, much faster content indexing
  • Fixes Debug Window > Log that was removing empty lines from messages - forum, and message counter was missing the first repetition - forum.
  • Select (ByPath) now works with globally available anonymous channels, which guarantees that everthing feels like one. No hidden syncs needed between several Select (ByPath) nodes as they share the sub-channels.
  • mainwindow: improves responsiveness when resizing window

Standard Libraries

New Nodes

  • ApplicationVersion
  • FPS
  • OSC, OSCQuery, MIDI, Redis binding nodes...
  • Log (Channel) node: reports value changes and author to the Log
  • DeNiro as known from vvvv beta + BezierFilter as known from the new transitions
  • Adds a slim CastAs (that will never try to create a nice default value. on fail will give you the .Net default, which often is NULL or 0)
  • adds NULL (OrDefault), which doesn't throw exceptions when T is a value type. handy if you want to avoid object creation, you can feed this into TryGetValue and other operations that let you specify a fallback default value

Changes

  • Executor has new option: Run as Admin
  • Format [String] uses pin group and throws error (turns pink) in case the format string is invalid
  • Path.Exists/FileExists/DirectoryExists no longer return stale result
    • Removes all state except for the FileInfo as other logic relies on its existence and didn't want to introduce new bugs.
    • Patches should no longer use this node inside a loop / on main loop.
  • IVLPropertyInfo.GetValue/WithValue now takes any object - IVLTypeInfo.Properties works correctly for non-VL types - ObjectEditor works on any object, CreateInstance takes arguments
  • Example patch showing how to retrieve all classes implementing a certain interface and subsequently instantiate it dynamically
  • Adds pin To Definition to ShowPatchOfNode
  • One Direct3D11 device per app, graphics resources can therefor be shared nicely between Skia and Stride. While it was possible to render Skia inside of Stride, one would hit a road block when that Skia graph was accessing GPU backed resources. For example https://forum.vvvv.org/t/skia-resize-prevents-layer-to-be-rendered-in-stride/20202. In this approach we register Stride as the primary device provider. Skia will test for that, and if present, use the existing device instead of creating its own (which was happing until now).
  • Serialization.Raw: Adds support for ReadOnlyMemory<T> and ArraySegment<T>
  • Try Region has a Warn input. Let''s you easily create runtime warnings. So we have an easy workflow of turning exceptions into warnings

Fixes

  • Range and Seed inputs of Random node are now optional
  • Deleting a large number of UDPServers no longer takes ages
  • Skia and Stride PerfMeters now uses same damping of fps value so the numbers are the same
  • Fixes path not serializable for message pack
  • Fixes a resource leak in VideoPlayer node
  • Fixes memory leak in VideoPlayer when switching videos of different size
  • VideoSourceTo* nodes use a dedicated background thread to ensure the amount of render contexts created per thread is kept to a minimum
  • Fixes ApplicationPath when running on Linux/OSX with dotnet ...
  • fixes BezierSegmentLength. thanks TremensS!
  • fixed Tangent in ResampleBSpline (Tangent). Thanks Natan
  • VL Type Reflection: "Indexer Properties" don't show up as Properties
  • Fixes Send (Local) issue: when anonymously sending a NULL this gets ignored
  • ObjectEditor (list, monadic) forwards components (e.g. attributes) to on-the-fly channels for inner editors.
  • fix for WithValueByPath. Wasn't able to set a property that was NULL before

Skia

  • Adds FromSharedHandle for Skia which in turn is getting used by texture/mesh viewers
  • Rendering should react to graphics device lost events (famous red cross on white background)
  • Fixes GetFillPath node naming
  • Removes experimental ParseSvgPathData and ToSvgPathData (FromSVGPathData and ToSVGPathData should be used)

Stride

  • Breaking change: Collada files may not load correctly. This issue is tracked here.
  • Fixes crash when resizing Stride window and at the same time having a background thread creating device resources (like a camera). It resulted in "Device creation not yet supported for GameWindowRenderer".
  • Fixes GraphicsData node not working correctly with mutable collections - forum
  • Adds missing InputKey* implementations
  • Fixes TryDisposeSequence not returning true if all elements where disposed. Fixes TextureQueue not removing all slices on clear.
  • Fixes invalid usage of GPU command list in VideoSourceToTexture
  • Fixes vvvv not loading patches with broken/missing shaders
  • Adds TextureToSkImage node to turn a texture into a Skia image without blocking the GPU / without allocating every frame
  • Fixes race condition when loading shaders leading to completely broken vvvv. This regression was introduced with 6.5: https://discourse.vvvv.org/t/shader-compiler-throws-error-when-referencing-file-via-include/22652/4
  • Adds Location aka Gizmo for manipulating entities and controlling values, to be used in Edit Mode (F4). EditMode comes with Undo for those Gizmo changes and nice Size management of Gizmos. Those are always rendered on top and can get resized via Shift-Scroll

ImGui

  • Adds new ImGuiInputTextFlags.ItemDeactivationReturnsTrue for Input widgets
    • When set on input widgets they will bang when modified and deactivated.
    • Added same behavior to Drag widgets when tabbing into them. For Slider widgets this was already the default behavior. Basically this fixes an inconsistency in ImGui itself.
    • The ObjectEditor will use that behavior as default when spawing input widgets.
  • ObjectEditor can deal with byte, sbyte, short, ushort, uint ...
  • Fixes ObjectEditor not showing label of property of type Optional<T>
  • Adds Input (String Callback) region
  • Adds dockable windows to Stride backend (thanks @kopffarben)
  • fixes ImGui based windows not reacting on first click
  • Adds Custom Glyph Range pin to the FontConfig, allows using icon-fonts and any glyph ranges.
  • Adds ImGuiSliderFlags - forum, IsWindowDocked - forum
  • Adds Input (Path), and advanced Input (TimeSpan) and Drag (TimeSpan)
  • FIxes SetIndentStyle was not converting to hecto

Redis

  • If not configured otherwise the client will try to reconnect indefinitely
  • Adds SyncAsync and marks Scan as obsolete
  • Fixes system not restoring client side tracking in multi-server setup
  • Adds advanced Get, GetAsync, Set, SetAsync nodes to RedisClient
  • Adds new pin When to Binding node allowing to control the condition under which the value is written to Redis