Table of Contents

vvvv gamma 7.1

TBA

vvvv itself - HDE & Runtime

New

  • Your apps can now host plugins, see blog post
  • Adds new command to reorder grouped pins based on their connected position - forum

Changes

  • Only run empty entry point from root documents. This was especially concerning when project uses IStartup with non-lazy service registration. In that case depending on how often that startup was referenced those services started multiple times - for each empty entry point. By running only those from root documents - that are those which have been opened explicitly either via -o, open, drag drop or F1 we should be on the safe side.
  • Allows to reference AspNetCore from within patch
  • Removes the option to run vvvv from within installer as it doesn't work reliably
  • Pack command (Ctrl+G) remaps control points which refer to the same input. For example when we have a pin "Context" appearing multiple times in the patch, and we group downstream connected elements, we will now only see one new "Context" pin and not multiple.
  • System rewrites package versions in referenced C# projects to those used by the system. This should help with method not found / type load exceptions (due to the project being built against wrong VL.Core version) or (even worse) wrong VL.Core versions in export.
  • Use vvvv.exe folder for package-cache instead of temp folder.

Fixes

  • Fixes issue with Midi nodes failing after Windows-Midi update (known issue: Midi Bindings still broken as of this writing)
  • Fixes crash when referencing VL.Devices.SpaceMouse
  • Fixes encoding of mutability flag in pre-compiled packages - forum
  • Fixes type ref parser not accepting hyphens in an identifier - forum
  • Double click in type editor selects word - allows for quick selection of type argument
  • Fixes --export-package-sources not working in vvvvc - was throwing invalid argument exception
  • Fixes patches getting corrupt after undoing a pack command (Ctrl + G)
  • Fixes generated target code when connecting byte value directly to output of Cache region - forum
  • Fixes operations feeling sticky when moving around - forum
  • Fixes runtime continuously trying to start entry point even though we know the constructor crashes
  • Fixes package compilation falling apart when having a package having reference to obsolete VL.Video.MediaFoundation
  • Package compiler will no longer try to compile already failed packages again - forum
  • Fixes generated target code for unconnected/faulty foreach loop
  • Some optimizations to Solution Explorer - forum
  • Fixes ImportType not working for types from referenced assemblies
  • Fixes complete crash if importing extension method using a type parameter for first input - forum
  • Fixes regions not updating their size after renaming a node - forum
  • Fixes stack overflow in adaptive node lookup at runtime - forum
  • Fixes timings on node no longer shown after moving it around in patch structure
  • Fixes issue with pressing Ctrl+X in spreaded IObox - forum
  • Fixes issues with Documentation window flickering and failing to save docs - forum and forum

Regressions

  • Fixes links between mutable values not drawn in dash style
  • Various newly introduced glitches with text fields
  • Fixes pin editors in inspector no longer working on Channel inputs (was working in 6.7)
  • Fixes string pin editors allowing wordwrap again - forum

Standard Libraries

New

  • Adds PatchPath node similar to existing ApplicationPath - see it's summary for details
  • Adds optional pin to render windows which allows to define custom interaction area when extending into title bar - forum
  • FileDownloader has new input pin "Retry Count" and a 10s timeout when reading fails

Fixes

  • Fixes memory leak in RefCount operator. Was causing video playback to stutter at some point (depending on how many videos where played at the same time, for a single video it properly took something like 14h).
  • Fixes InsertSlice not handling case index == count correctly.
  • Fixes issue with ImagePlayers (timebased) jumping back to first frame, when reaching end (and not looping)
  • Fixes experimental HTTPPost (Multipart) node

Stride

  • Stride 4.2.1.2487, Windows Forms based render window, HDR support, ARM64 support
  • Adds experimental ModelReader for to load models directly from disk without going through asset database
  • Adds Reload pin to TextureReader -- forum
  • Fixes network paths ("\SHARE\foo\bar") not working for various File* nodes
  • Fixes couple of help patches on AMD GPUs
  • Render nodes will no longer store full screen bounds, only windowed bounds. This prevents windows from opening in a different state after patch restart.
  • TextureReader (Async) improvements
    • Limits the amount of concurrent load tasks to ensure CPU has still breathing room for rendering on main thread
    • Allows for cancellation of load operation - helps tremendously when switching input often
    • Makes use of async FileStream options -> I/O threads for disk read
    • When disposing a load task we will no longer block. In combination with cancellation and load limiting this should not lead to OOM scenarios.
  • Adds View Format pin to RenderTexture to be able to make use of typeless textures
  • Adds device reference count to perfmeter as a quick way to debug resource leaks
  • Fixes TextureFX nodes not cleaning up their effect instance (thanks to new refcnt)
  • Fixes a memory leak in LightStreak
  • SkiaTexture improvements
    • Internally collects and renders all textures in one batch. Leads to far better performance than previous node.
    • Changes default of texture format to BGRA_Srgb which finally brings correct rendering results (using Typeless as the resource format).

Redis

  • Updates StackExchange.Redis to 2.8.31
  • When setting init mode of a binding to Redis, we want the key to get created if it doesn't exist yet. Otherwise take the value from redis.
  • Returned RedisClient object refers to the node of the same name and is always assigned. Should make working with it much easier - no more null checks and re-passing it around.
  • Writes key into error message when serialization fails

TPL

  • Propagate completion from source to connected target block
  • Ensures state gets disposed on provided scheduler (if any)

Skia

  • Transport monitor scaling in CallerInfo - opens door to better support multi monitor DPI awareness
  • Adds help text to TextureToSkImage with hint about tooltip not updating
  • Adds logging about device creation

Video

  • Increases sleep time in case no frame was pushed - seems one ms was not enough, the used method returned immediately ending up in a busy loop - forum
  • fixes "Playing" output to update correctly - forum

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
  • Helpbrowser
    • fixes not showing content when trying to access github via a throttled connection, much faster content indexing
    • packs marked as favorite won't get removed from the All section
    • order of the topics is preserved while searching
  • 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
  • Adds WASD Camera (thanks @motzi)

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