Skip to content

Releases: praxis-live/praxis-live

PraxisLIVE v6.6.0

08 Apr 09:11

Choose a tag to compare

This is the seventh release of PraxisLIVE and PraxisCORE v6.x. It brings a few new features, includes third-party updates, and fixes some issues.

The cross-platform zip is downloadable below. Installers built from this zip are now distributed at https://github.com/codelerity/praxislive-installers/releases

Changes

PraxisCORE runtime

  • Added ValueMapper for record types. Any record made of mappable types (including other records) can be used as property values and function arguments. Records are mapped to PMap, which now supports a limited schema in argument info.
  • Added validating mappers, and enhanced functions to support use of @Type.* annotations on parameters.
  • Improved threading control when using @Driver to control custom roots. This includes ability to disable background polling or provide custom on-receipt handling (eg. map to EventQueue). Added markForStop to shut down the root, handling all clean-up before handing control back to the calling library.
  • Added Async.MapQueue for handling Async completion where a reference to another object, including another Async, is necessary.
  • Fixed issue with Data.Sink packets not being correctly disposed, and added manual control to flush all caches.
  • The default task service now uses virtual threads.
  • Allow @ command to continue when component exists when running under --trap-errors. The component type is checked for a match. This will allow for future reapplication of scripts, better undo functionality, etc.
  • Added support for libraries.map files for embedding libraries inside projects while keeping a record of their dependencies. Pcl commands and UI support for this will come in a later release.
  • Added Hub::eval method to run scripts in a hub from outside.
  • Added version output support (--version) and brandable messages in Launcher.
  • Updated LWJGL, JLine, Netty, MIMA, Picocli and various build plugins.

PraxisLIVE IDE

  • Updated to Apache NetBeans 29 platform and various other dependency updates.

PraxisLIVE v6.5.0

03 Feb 16:21

Choose a tag to compare

This is the sixth release of PraxisLIVE and PraxisCORE v6.x. It enhances a few features, includes third-party updates, and fixes some issues.

The cross-platform zip is downloadable below. Installers built from this zip are now distributed at https://github.com/codelerity/praxislive-installers/releases

Changes

PraxisCORE runtime

  • Add optional support for reordering children in a container. ContainerProtocol adds optional children-order control. Code containers and roots can added the @Reorderable annotation to opt in.
  • Add pretty-printing support to Value to format values in a more human-friendly way, while remaining parsable. Also added Pcl command - eg. print [/root/component.info].
  • Add methods to control property syncing in Property.Sync, including poll(boolean ..) and pollNow() trigger. Added plain values() method to Property returning Linkable<Value>.
  • Fix issues with running projects using embedded runtime, including disabling autorun for children and IDE usage.
  • Fix @OnChange and @OnError annotations not working within shared code bases.
  • Fix issue with closed always-on-top video windows interfering with IDE usage on macOS.
  • Update Netty, Ion, MIMA and build plugins.

PraxisLIVE IDE

  • Various improvements to table editor, including basic support for reordering components via popup menu action on containers.
  • Update libraries editor in project properties to use a text area for easier editing, and fix issue with
    relative paths.
  • Update project launcher to use embedded runtime if available. Can be disabled in project properties. Also set working directory, and output path and launcher information on execution.
  • Updated to Apache NetBeans 28 platform and various other dependency updates.

PraxisLIVE v6.4.0

10 Oct 14:39

Choose a tag to compare

This is the fifth release of PraxisLIVE and PraxisCORE v6.x. It adds various useful new APIs, third-party updates, as well as improved support for and bundling Java 25.

Changes

PraxisLIVE IDE

  • Updated to Apache NetBeans 27 platform and Java 25.
  • Fix issue with bundling CORE in projects.
  • Fix issue with mode detection during editor opening.

PraxisCORE runtime

  • Add Property.Sync API for binding property values to another property.
  • Add Trigger.Timer API for triggering a timer with one-shot or periodic timers. Also updates Trigger to support @Inject.
  • Add childrenChanged() hook in codeable roots and containers to track changes.
  • Add eval() for executing Pcl scripts from components.
  • Various other minor updates.
  • Update Netty, JNA, MIMA, and various build tools.

Known Issues

  • An issue with OpenGL windows on latest macOS Tahoe makes some IDE dialogs unfocusable after running video projects. Save the project and force quit the Java process in the dock to return control to the IDE. Or click on the main window bar, then tab / space in the dialog. The issue is being investigated.

PraxisLIVE v6.3.0

18 Jun 13:26

Choose a tag to compare

This is the fourth release of PraxisLIVE and PraxisCORE v6.x. It mainly addresses bug fixes and third-party updates, as well as improved support for and bundling Java 24.

Changes

PraxisLIVE IDE

  • Updated to Apache NetBeans 26 platform and Java 24.
  • Fix issue with occasional orphaned processes left after application exit.

PraxisCORE runtime

  • Update to libP5X v4.43.0.2 - fix support for fullscreen video windows in some setups, and add back support for undecorated windows.
  • Allow video output windows to be resized (scaled down), and improve mapping of mouse position for scaled and rotated outputs.
    • A known issue in GLFW on macOS might lead to a crash if resizing.
  • Fix support for @Proxy and @Driver to reference types in added libraries.
  • Update Netty and JLine.
  • Fix MIMA integration to ignore optional dependencies.
  • Add a JVM args file to CORE runtime, and suppress warnings about native library usage on JDK 24.

PraxisLIVE v6.2.0

28 Mar 17:14

Choose a tag to compare

This is the third release of PraxisLIVE and PraxisCORE v6.x. Watch function displays now support SVG; the Data pipes API has seen enhancement; component and root template support has been improved; and various third-party dependencies have been updated.

SVG_Watch

Changes

PraxisLIVE IDE

  • Added support for SVG displays in exposed watches in graph editor.
  • Added support for container watches and properties to be exposed on graph.
  • Updated standard colours, and added different colours for custom components registered outside core: (magenta), as well as colours for Data (magenta) and Ref (cyan) ports.
  • Improved template export for root and components. Both support inclusion of project libraries. Component templates can also include shared code. Import of shared code does not override existing shared types.
  • Updated to Apache NetBeans 25 platform.
  • Various bug fixes.

PraxisCORE runtime

  • Enhanced Data Pipes API.
    • Added Data::combine and Data::combineWith for easier creation of pipes that combine sources via custom function.
    • Added Data::identity to create a placeholder.
    • Added Data.Pipe::withSources and Data.Pipe::linkTo for more fluent graph definitions.
    • Fixed various issues with processing and caching. NB. pipes are now called with an always increasing pass index and not the time.
  • Updates to support shared code in custom component import and export.
    • Added shared code protocol, and support for merge and add (merge if empty) controls.
    • Added try/catch and shared code commands to Pcl.
  • Add ability to provide a template when registering custom container types via @CustomType annotation.
  • Updates to third-party libraries, including JNA, MIMA, LWJGL, Ion and Netty.

PraxisLIVE v6.1.0

12 Feb 12:20

Choose a tag to compare

This is the second release of PraxisLIVE and PraxisCORE v6.x. The concept of watch functions has been added to PraxisCORE, and initial support added to a few built-in components - eg. for displaying the inputs of a video mixer. The graph editor of the IDE has been improved, and the overall UI enhanced, including support for light themes.

PraxisLIVE-v6 1-watches

Changes

PraxisLIVE IDE

  • Enhanced graph editor
    • New UI for showing exposed controls and watches underneath components. Which features are exposed can be controlled by the Expose option in the popup menu. The default exposed features is controlled by @Config.Expose in component code.
    • Updated minimize function to keep visible only connected ports. The minimize toggle now controls all selected components.
    • Added Select All and Select None actions with keyboard control.
    • Improved zoom function to snap to 100%, and added keyboard control (CTRL-PLUS and CTRL-MINUS or equivalents)
    • Removed legacy exposed properties support.
    • Various other graph enhancements and performance improvements.
  • Added tab grouping to keep code editors and root editors in separate tab groups where appropriate. Added support for opening a new tab group automatically when the first code editor tab is opened. Behaviour can be controlled via Tools / Options / Editors.
  • Added support for changing to other FlatLaf look and feels, including light (as seen below), as well as customizing and accent colours. Support for light look and feels is mostly there but there are still a few issues to address.
  • Improved consistency of various icons and displays.
  • Updated to Apache NetBeans 24 platform.
  • Various bug fixes.

PraxisCORE runtime

  • Added support for watch functions. A watch function is a function control for accessing data about a component. They are somewhat similar to read-only properties, but for data that should only be calculated on demand, and perhaps asynchronously. Watch functions have a mime type and other metadata, and may support an optional query map as input to control the returned data. They are defined in code using the @FN.Watch annotation.
  • Added support for defining image watches in video components, and added watch implementations to video:composite, video:still and video:xfader.
  • Enhanced Async API and allowed it as a return for standard functions (@FN), as well as for watch functions. Async should be used where the response relies on a call to another component, relies on data that has not yet been received by the component, or data needs to be calculated using an Async.Task.
  • Added @Config.Expose to control the default list of controls, watches and other features to expose in any UI. Replaces deprecated @Config.Preferred.
  • Various bug fixes to Ref, Async handling, root lifecycles and component state changes.

Running PraxisLIVE with light theme and orange accent colour.

PraxisLIVE-v6 1-light

PraxisLIVE v6.0.0

15 Nov 13:20

Choose a tag to compare

This is the first release of PraxisCORE and PraxisLIVE v6.

PraxisLIVEv6

Version 6 is a substantial rewrite of some key aspects of how PraxisCORE works. Expect some rough edges! Many deprecated and legacy features have been removed. The IDE and core now require minimum Java 21. Networked hubs now use Netty and Ion to provide a more robust and structured communication protocol than was possible with OSC. Key libraries have been updated, including libP5X now based on Processing 4. Runtime dependency management is now based on MiMa rather than Ivy. Much of the project saving and execution has been moved directly into PraxisCORE.

There are a bunch of other useful changes - custom roots can now specify use of table editing rather than the graph editor; containers can filter allowed child types and even specify custom types; annotations no longer require a weight / index parameter - eg. @P int x,y,z; is now legal syntax! Examples and custom components are being updated and added showing the new features.

The most obvious change is the new vector logo, window background actions, and revamped dashboard.

The IDE build system has been moved to Maven, and various IDE modules are also published, allowing use of PraxisCORE and PraxisLIVE as a platform for other projects. More news on that soon!

Breaking changes

  • Built in non-recodeable roots for MIDI, OSC and TinkerForge have been removed. These can now be replicated using custom roots. Basic implementations will be added as custom root templates when installing custom components. A migration path might be looked at for a later (post 6.0) release of the IDE.
  • Most deprecated functions and types have been removed. eg. lower case casting functions like d(..) must use D(..); Property values() linking must now use doubles(); PVector is only available from video:gl:p2d and video:gl:p3d components, etc. Make sure to migrate all deprecated functionality from inside the latest PraxisLIVE v5 before attempting to migrate a project to PraxisLIVE v6.

Known issues

  • Reset code to last saved isn't available, and component code that fails to compile (eg. removed deprecated features) will not show in editor. These two issues have the same cause, and a fix is being worked on.
  • Minor display glitch due to graph position not being available on first sync.

PraxisLIVE v6.0.0-beta2

07 Oct 17:03

Choose a tag to compare

Pre-release

The second beta release of PraxisLIVE v6 brings a few updates and bug fixes as we proceed towards a final release.

PraxisLIVE IDE changes

  • Extend property wrappers to support all function controls eg. this function on a component can be called, and the result (or error) displayed, using the property tab or the component editor dialog -
      @FN String upper(String in) {
          return in.toUpperCase(Locale.ROOT);
      }
  • Add a stop / clean button to the output tab for each project.
  • Update NetBeans platform to v23
    • Support Java 23.
    • Switch to upstream Project dashboard widget with history display.
  • Update bundled JDK in installers to JDK 23, and add macOS aarch64 installer.
  • Fix exception shown when displaying scene comments.
  • Various tweaks to allow branding of CORE location and graph colours.

PraxisCORE changes

  • Add LWJGL natives for running on Apple Silicon, and also suppress warning caused by resigning of binaries on both macOS architectures.
  • Update to libP5X 4.430.1 - fix display issues on Linux Wayland by reverting to use GLFW X11 backend (via XWayland) by default.
  • Allow access to all JDK modules in user code (eg. HTTPClient) by using --add-modules=ALL-DEFAULT in launcher and child launcher.
  • Update the default network timeout for hub messages to 60s, and make configurable by system property praxis.hub.network.timeout. In particular works around initial startup timeouts on slower systems.
  • Increased the maximum message size supported via network hub.

PraxisLIVE v6.0.0-beta1

29 Aug 14:17

Choose a tag to compare

Pre-release

This is the first beta release of PraxisCORE and PraxisLIVE v6.

Screenshot from 2024-08-29 17-35-34

Version 6 is a substantial rewrite of some key aspects of how PraxisCORE works. Expect some rough edges! Many deprecated and legacy features have been removed. The IDE and core now require minimum Java 21. Networked hubs now use Netty and Ion to provide a more robust and structured communication protocol than was possible with OSC. Key libraries have been updated, including libP5X now based on Processing 4. Runtime dependency management is now based on MiMa rather than Ivy. Much of the project saving and execution has been moved directly into PraxisCORE.

There are a bunch of other useful changes - custom roots can now specify use of table editing rather than the graph editor; containers can filter allowed child types and even specify custom types; annotations no longer require a weight / index parameter - eg. @P int x,y,z; is now legal syntax! Examples and custom components are being updated and added to showing the new features.

The most obvious change is the new vector logo, window background actions, and revamped dashboard.

The IDE build system has been moved to Maven, and various IDE modules are also published, allowing use of PraxisCORE and PraxisLIVE as a platform for other projects.

Breaking changes

  • Built in non-recodeable roots for MIDI, OSC and TinkerForge have been removed. These can now be replicated using custom roots. Examples showing this will follow. A migration path might be looked at for a later (post 6.0) release of the IDE.
  • Most deprecated functions and types have been removed. eg. lower case casting functions like d(..) must use D(..); Property values() linking must now use doubles(); PVector is only available from video:gl:p2d and video:gl:p3d components, etc. Make sure to migrate all deprecated functionality from inside the latest PraxisLIVE v5 before attempting to migrate a project to PraxisLIVE v6.

Known issues

  • OpenGL output windows on Linux with Wayland are wrongly sized. A late update to LWJGL changed the default behaviour. Use an X11 session until beta 2. Possibly related LWJGL/lwjgl3#998
  • macOS incorrectly reports incorrect OpenGL binaries. This is due to them being re-signed in packaging. Will be fixed in beta 2.
  • Some settings windows (eg. GStreamer) are currently inactive.
  • Minor display glitch due to graph position not being available on first sync.

PraxisLIVE v5.7.0

04 Aug 14:51

Choose a tag to compare

This is the last scheduled release in the v5 series of PraxisCORE and PraxisLIVE as we concentrate on v6 for release later this year. There are some major updates to Ref types and handling, an Async.Queue for handling async calls, and various deprecations for things that will no longer be supported in v6.

PraxisCORE

  • Major updates to Ref, including reference ports and a publish / subscribe mechanism for sharing references from containers to child components.
    • Added Ref::set, Ref::setAsync, Ref::orElse and Ref::onChange methods. The existing async support in Ref is deprecated and rewritten to use the new method.
    • Added @Ref.Publish and @Ref.Subscribe to be used on injected Ref fields in parent and children respectively. References are automatically updated, and changes can be listened to using Ref::onChange.
    • Added support for reference ports - @In(1) Ref.In<T> in and @Out(1) Ref<T> out. The input type allows to access the list of connected values, and automatically updates on connections or changes to the output reference.
    • Updated semantics for Ref::bind which can now be configured prior to initialization, and will update on reference changes.
  • Added an injectable queue for Async values - @Inject Async.Queue<T> queue. Supports binding actions to happen on completion and limiting the queue size. For use with async returns from ask() and async().
  • Improvements to library support with a PackageURL parsing utility and better support for transient dependencies provided by the runtime itself.
  • Added a .supported-types property to containers. This has minimal use in v5, but is important in development if some features in v6.
  • Various deprecations, including serializable properties, Property::values and Input::values methods, and PVector (from core types, but some supported will remain in video types).

PraxisLIVE

  • No changes in the IDE in this release.