-
bug fixes
- app address / qr code not updating when network changes
- issue after theme auto reload (broken grid, colors not updated)
-
widgets
- pads: expose css variable
--point-size
- pads: expose css variable
-
custom module
- provide error backtraces in module.exports functions
- add
reload()
callback to provide finer control over the module's lifecycle
-
remote control
- add /SESSION/CREATE command
-
bug fixes
- user resources not loading when using an external browser
- advanced syntaxes resolution order issue
-
advanced syntaxes
- display an error in the console in some unsupported advanced syntaxes use cases
- bug fixes
- mac: unable to show launcher windows when starting minimized
-
bug fixes
- scripting:
getProp()
now correctly returns a copy of the property if it is an object - prevent infinite loop when loading widgets with complex inter-dependencies
- modal: layout issue on iOS 15+
- scripting:
-
widgets
- dropdown: allow resubmitting the same value
- switch: allow resubmitting the same value
- plot: missing
logScaleX
andlogScaleY
properties - xy/multixy: add
axisLock
property; allow locking one the axis by holdingShift
while dragging ifaxisLock
is not set, bypasses it otherwise. - knob/fader/range: add
colorKnob
property
-
launcher
- on Mac, start hidden if
Start minimized
is set - allow dropping files into file fields
- on Mac, start hidden if
-
custom module
- expose
tcpServer
to allow monitoring the state of tcp connections
- expose
-
bug fixes
- rare issue that made the last widget(s) in a container disappear when other widgets in the same container had a specific property dependency pattern
-
remote control
/EDIT*
commands sent by a custom module are not affected by the server'sread-only
option anymore
-
widgets
- input: allow using a number in
numeric
to specify stepping value for mousewheel interaction - root: add
onPreload
scripting property
- input: allow using a number in
-
bug fixes
- sliders: error when
steps
is an array
- sliders: error when
-
scripting
stateSet
: add optional{send: false}
flag
- bug fixes
- code editor: issue when middle clicking in the editor on linux
- code editor: modern js operators such as
**
not recognized - sliders: prevent error when
steps
is not a number, addauto
mode for using ranges values as steps (it did not work before) - pads, range: value not initialized as an array, causing errors in some cases
- modal: popup not closing when
doubleTap
is true
-
bug fixes
- custom module:
receive()
not passing boolean arguments properly - fix
--authentication
on iOS clients
- custom module:
-
editor
- display current widget value in the
value
property's help modal
- display current widget value in the
- bug fixes
- input: rendering issues with big font sizes
- panel: tab rendering issue when initialized with a non-numeric value
- panel: minor style issue in tab navigation bar
- scripting: scripting functions not working inside
browseFile()
callback - scripting: using
external: true
inset()
should prevent affected widget from sending any message - button: inconsistent value in
push
mode withdecoupled
enabled when setting value from script
- bug fixes
- textarea: escape key not restoring previous value
- scripting:
setFocus(id)
not affecting textarea widgets - led, text, variable: value not synchronized between different clients
- error when running from sources on Mac
- bug fixes
- regression in inter-widget sync mechanism
- regression breaking
set()
function in scripts - textarea: display nothing instead of "null" when receing no value, null or an empty string
-
bug fixes
- multixy: doubleTap not working on touch devices
- button:
x
andy
variables not passed toonValue
whendoubleTap
is true on touch devices - advanced syntax: update issue with clones using their own value in their properties
- client: minor keyboard shortcut issues
- panel: mitigate client synchronization issue with scrollbars
-
widgets
- menu: add a background to menu items to help distinguish them
- menu: merge different interaction modes into a single
mode
property - menu: add
swipe
mode
-
remote control
/STATE/SET
: add optional argument to prevent widgets from sending their value
- bug fixes
- editor: regression breaking widget context menu actions under "Position" submenu
- touch devices: touchend event not fired on elements removed/detached during touchstart/touchmove callbacks (caused issues when switching tabs using a button inside a tab)
-
bug fixes
- launcher:
Ctrl+M
keyboard shortcut not working - widgets: regression incurring a small delay before resolving a property that depends on a widget's own value
- server:
--client-size
and--client-position
options not parsed correctly
- launcher:
-
advanced syntaxes
- support
@{}
insideIMPORT{}
- support
-
bug fixes
- widgets: circular value feedback issues
- editor:
ctrl + e
not working when hit multiple times without releasingctrl
- mobile: "prevent sleep" feature not working
-
widgets
- patchbay: add
in
,out
andboth
modes toexclusive
property - panel: replace
verticalTabs
property withtabsPosition
(supports 4 directions)
- patchbay: add
-
custom module
- add optional
errorCallback
argument toloadJSON
andsaveJSON
- add optional
-
server
- print multiple qrcodes if multiple network interfaces are available and prevent printing a qrcode for the localhost address
-
misc
- add linux rpm packages
-
bug fixes
- linkId not working between two encoder widgets
- fader:
gradient
breakpoints not positioned correctly - canvas:
onDraw()
called twice when callingupdateCanvas()
-
midi
- optional rpn/nrpn parsing as single messages
-
widgets
- keyboard: incoming values different than the
off
property are now interpreted ason
- keyboard: incoming values different than the
-
editor
- when focusing the label property with
F2
, select all text in the text area - preserve scroll position in code editor when validating
- display the id of selected widget in the inspector's header
- when focusing the label property with
-
scripting
- expose file browser (from the file widget) as a scripting function
-
custom module
- don't restrict file extension in
loadJSON()
andsaveJSON
functions
- don't restrict file extension in
-
misc
- add polish locales (@ Manz4rk)
- add css classes to some notification popups to allow targetting them with css themes
-
bug fixes
- keyboard widget:
linkId
not working (unable to link 2 keyboard widgets) - slides: issues with ranges containing decimal keys
- keyboard widget:
-
launcher
- add menu options to show the qr code again
- mac: change "List MIDI devices" keyboard shortcut to
Ctrl+m
-
widgets
- image: add support for special value "qrcode"
-
misc
- add german locales (@ Magnus Reichel)
- package file names changed to follow debian's convention
- add a cli option to disable the qr code (
--no-qrcode
)
-
bug fixes
- custom module: fix autoreload on nested submodules
-
launcher
- print a qrcode when the server starts to help connecting mobile devices
-
editor
- horizontal scrolling issues with maximized code editor
-
widgets
- switch/menu/dropdown: add a syntax that supports duplicate labels in
values
property
- switch/menu/dropdown: add a syntax that supports duplicate labels in
-
custom module
- expose
global
object that persists accross module reloads.
- expose
-
scripting
- onCreate: expose
value
- onCreate: expose
-
bug fixes
- scripting: prevent some functions to be marked as undefined
- advanced syntaxes: ignores quotes around file path in
IMPORT{}
-
launcher
- add
Start minimized
menu option
- add
-
misc
- change noFocus client option behavior: the default client window now doesn't take the focus at all, even when a text input is clicked.
- colorize debug messages for sent and received osc/midi messages
-
scripting
- add
setFocusable()
function to change the focusability of the window on the fly (allows reenabling focus temporarily to interact with a text widget using a dedicated toggle button for example) - add
reload()
function - expose Navigator object with
getNavigator()
- add
-
widgets
- fragment: add
fallback
property
- fragment: add
- bug fixes
- regression breaking touch move events on desktop touchscreens
- bug fixes
- editor zoom: adjust root widget size when zooming out
-
editor
- add keyboard shortcut "h" to hide selection and widget drag / resize handles while pressed
- inspector: add some shortcut buttons in the header
-
widgets
- add folder widget (flat container that doesn't affect layout)
- input: add
maxLength
property - multixy: allow setting its own value from onValue script while touched
-
ui
- add a virtual onscreen keyboard for desktop clients (can be enabled from the clients main menu)
- change local zoom (alt+scroll) behavior so that it only affect widgets and add scrollbars to navigate while zooming instead of following the mouse
-
server
- client-options: add
virtualKeyboard
option to enable virtual keyboard by default (desktop clients only)
- client-options: add
- bug fixes
- button: regression in push mode (
on
value not passed toonValue
script when triggered from another widget) - button: decoupled push mode returning wrong value when activated from a widget script
- button: regression in push mode (
- bug fixes
- canvas:
onTouch
not triggered on iOS when whenevent.force
,event.altitudeAngle
orevent.azimuthAngle
changes - switch: interaction issue when value labels contain icons
- ios: attempt to fix rendering glitch when waking up after sleep
- canvas:
- widgets
- button: add
decoupled
property, compatible with all button modes - button: remove
decoupled
mode
- button: add
-
bug fixes
- client script source map not loading (helps providing useful error messages)
-
widgets
- button: add
decoupled
mode (toggle mode that only updates its state when it receives a value from osc/midi messages) - button: add client option
altTraversing
to allow one-way response to traversing gestures for toggle buttons - canvas: iOS: trigger
onTouch
whenevent.force
,event.altitudeAngle
orevent.azimuthAngle
updates - knob: add
snap-alt
mode (snap mode that allows jumping between range.min and range.max) - all: add
borderRadius
property
- button: add
-
scripting
- add
updateCanvas()
function (forces a canvas widget to redraw)
- add
-
remote control
/NOTIFY
: if multiple arguments are provided, interpret the first one as the icon's name for the client notification
-
midi
- on Mac, name virtual ports after the device name to avoid confusion
-
server
- client-options: add
clientSync
option to allow disabling client synchronization - client-options: add
altTraversing
option
- client-options: add
-
editor
- add
F2
keyboard shortcut to bring label property input into view if selected widget has one
- add
-
bug fixes
- editor: error when ctrl+clicking on a root's child
- range: multitouch interaction issue
-
widget
- knob / encoder:
sensitivity
and ctrl+drag gesture preservecircular
mode behavior - knob / encoder:
snap
mode now works likecircular
mode except for the touch start event (value can't jump from start to end anymore) - patchbay: add
exclusive
option
- knob / encoder:
-
editor
- allow interacting with a widget without selecting it by using the middle mouse button or by holding shift+win (shift+cmd on mac).
- bug fixes
- visibility property update issues
-
bug fixes
- modal: display issue when a modal receives the same value multiple times
- patchbay:
outputs
property not handling object value properly - server: resolution conflict between app files and user files
-
widgets
- patchbay: trigger
onValue
script when a connection changes
- patchbay: trigger
-
misc
- windows: allow accessing other drives than the default one (list drives when the file browser reaches the filesystem's root)
-
bug fixes
- custom module: submodules not loading their own submodules with relative paths properly
- custom module: issue with circular submodule requires
- server: harmless error message when importing css files from the main theme file
- server: allow using folder names "client" and "assets" for user files (eg for images used in a session)
-
widgets
- canvas: add
onResize
script property - scripting: expose javascript's
Image
constructor
- canvas: add
-
bug fixes
- widget visibility not updated properly when set as a non-boolean value
-
widgets
- tabs: detach hidden tabs from the DOM (reduces lag caused by heavy tabs)
- bug fixes
- eq widgets not properly converted when importing v0 sessions
- image paths with url queries not loaded properly
- @{} syntax not returning truncated value according to the widget's precision property (fixed for primitive values only, object values are still returned as is)
- advanced syntaxes
@{}
andVAR{}
that return objects / arrays do not return a copy of their value anymore as it may introduce a significant overhead when used extensively. Mutating these objects in#{}
andJS{}
scripts will now affect the actual values and should be avoided at all cost.
- widgets
comments
property flagged as dynamic- multixy: add
doubleTap
property
- bug fixes
- range: value update issue (internal touch state not updated properly)
- scripting: send(): ignore
ignoreDefaults
property - script: onKeyboard script not cleaned upon edition / removal
- editor: some variables not appearing as defined in
onKeyboard
-
bug fixes
- matrix: property resolution issue with object/array items in
props
- bypass client option
nofocus=1
when the editor is enabled - menu/dropdown: display label when value is undefined
- matrix: property resolution issue with object/array items in
-
misc
- updated midi bridge: provide more information when loading fails; may fix some compatibility issue on windows
- bug fixes
- ios: prevent server error related to the use of cookies
- scripting:
getVar()
now returns a copy of the variable to prevent mutations on saved object
-
bug fixes
- matrix: advanced property issue in
props
property (bis)
- matrix: advanced property issue in
-
editor
- inspector: add solo mode with
alt+click
for category panels
- inspector: add solo mode with
- bug fixes
- matrix: advanced property issue in
props
property
- matrix: advanced property issue in
- bug fixes
- interaction issue ("deadzone") on touch screens
- main menu not hidden when
read-only
is set - osc messages containing unicode characters not encoded correctly
- bug fixes
- modal: scroll state not restored when the modal container is recreated
- server: allow spaces and accentuated characters in client id
-
bug fixes
- prevent flickering on canvas based widgets when they are recreated
-
editor
- added code editor for
html
andcss
properties
- added code editor for
-
remote control
- add
/RELOAD
command
- add
-
bug fixes
- editor: prevent accessing non-editable widgets with right arrow
- multixy: regression causing interaction issue
-
widgets
- add
lock
property to all widgets
- add
-
launcher
- add
Autostart
menu option
- add
-
misc
- update FontAwesome icon font to version 6
- bug fixes
- inspector: script editor: cursor alignment issue in indented lines
- clone: prevent freeze and print an error when attempting to create a circular clone
- modal: regression on android that prevents focusing input widgets in modals
- bug fixes
- session loading error with some malformed property cases
-
bug fixes
- broken console interpreter since v1.14.0
-
widgets
- button: add
momentary
mode for sending messages with no value; prevent button from getting stuck whenon
andoff
are equal inmomentary
andtap
modes
- button: add
-
inspector
- color picker: inline picker widget (no longer in a modal); show color changes on the fly
- code editor: validate input with
cmd+enter
instead ofctrl+enter
on Mac
-
scripting
screen.height
andscreen.width
always returns the current screen dimensions- added
screen.orientation
global variable
-
misc
- some performance improvements
-
bug fixes
- osc receivers (
OSC{}
syntax) now apply the same rule as widgets regarding midi messages (only receive if the message's origin matches one of the host widget's midi targets) - modal: rendering issue on iOS
- button:
locals.touchCoords
not updated since v1.14.0
- osc receivers (
-
widgets
- clone/fragment: remove scripting properties as they are supposed to be overridden in
props
- clone/fragment: remove scripting properties as they are supposed to be overridden in
- bug fixes
- context-menu: double click issue in submenus on small touch screens
- clone/fragment: broken onDraw / onTouch scripts if cloned widget is a canvas
-
bug fixes
- misc: sending typed arguments (
{type, value}
objects) should override the widget'stypeTags
definition - multixy: errors when
ephemeral
istrue
- scripting:
setVar
not affecting all widgets when multiple widgets match provided id
- misc: sending typed arguments (
-
widgets
- renamed
script
property toonValue
,draw
toonDraw
,touch
toonTouch
- added
onCreate
script property to all widgets - added
onTouch
script to widgets that supported the touch state variable in scripts (now deprecated) - script: added
onKeyboard
property, removedevent
property - canvas: expose additional touch event informations (
radiusX
,radiusY
,rotationAngle
and iOS-onlyaltitudeAngle
,azimuthAngle
andtouchType
)
- renamed
-
scripting
- special keyword
this
now returns the string"this"
- special keyword
-
advanced syntaxes
- added
IMPORT{file}
syntax to allow loading external files in properties
- added
-
editor
- add fullscreen mode for properties with code editor enabled
-
bug fixes
- editor: keep relative sizes and positions when resizing multiple widgets at a time
-
widgets
- canvas: expose touch pressure (as
event.force
) in thetouch
script. - canvas: expose touch events for extra elements added with the
html
property
- canvas: expose touch pressure (as
- bug fixes
- editor: data loss when leaving the editor's focus with no modifications
-
bug fixes
- scripting:
storage.getItem()
not returning anything
- scripting:
-
editor
- new code editor for
script
,touch
,draw
andprops
properties with syntax highlighting, line numbers, etc
- new code editor for
-
scripting
set()
: add an option to prevent target widget's script
-
widgets
- root: add
hideMenu
property
- root: add
-
misc
- minor cosmetic changes
- widgets
- new canvas widget (under
pads
): allows creating custom widgets - button: expose normalized touch coordinates in scripts as
locals.touchCoords
- print a warning in the console when using advanced syntaxes in the script property
- new canvas widget (under
- bug fixes
- client options specified in server config not working unless lowercased
- make disconnection detection less aggressive (don't display notification if reconnection succeeds quickly)
- panel: initial scroll state issue
-
bug fixes
- menu: interaction issue on iOS
- script: prevent script functions from being called in the wrong scope (ie when leaked using the
globals
object) and print an explicit error - containers: prevent errors with some color formats in colorWidget
- theme: relative url not resolved correctly
-
widgets
- when a panel contains widgets and has
scroll
set totrue
, its value will be used to represent the scroll position for x-axis and y-axis between 0 and 1.
- when a panel contains widgets and has
-
bug fixes
- config not persistent on windows
-
misc
- read-only mode now hides and disables the main menu
- bug fixes
- certificate expiration issue
- regression breaking colors in canvas-based widgets
-
bug fixes
- sliders: ignore key order in
range
- sliders: handle mousewheel increment when starting from a value between two steps with
steps
property defined - inspector: allow scrolling in the help modal
- console: fix command history behavior and increase history size
- sliders: ignore key order in
-
widgets
- encoder: expose angle in script (as
locals.angle
) - new textarea widget (multi line input)
- expose the computed dimensions of canvas-based widgets in
css
(as--widget-width
and--widget-height
) andscript
(aslocals.width
andlocals.height
)
- encoder: expose angle in script (as
-
client
- add
Save backup
menu action (saves a backup copy of current session with an incremented suffix appended to the file name)
- add
- bug fixes
- modal: remove
html
property - matrix: nested property inheritance (eg.
@{id_@{id_x}}
) not working inprops
- modal: remove
- bug fixes
- nested property inheritance (eg.
@{id_@{id_x}}
) not updating properly - canvas based widgets not updating when hidden
- nested property inheritance (eg.
- bug fixes
- client options: options ignored if not lowercased
- sliders: prevent errors for some edge-case
range
values
-
bug fixes
- range: value not properly updated with set()
-
misc
- (built-in client only) add
nofocus
client option to prevent the client window from taking focus unless a text input or a dropdown is clicked.
- (built-in client only) add
## 1.9.10
-
bug fixes
- matrix: regression from 1.9.8 (broken nested @{} syntax in props property)
-
misc
- midi: detect missing binary (eg when deleted by antivirus) and print a message
- bug fixes
- matrix: regression from 1.9.8
-
bug fixes
- matrix: update children when
props
is modified even when the result for$ = 0
doesn't change - fragments: fragment widgets empty when reloading
- panel: scrollbar issue on iOS 13+
- matrix: update children when
-
scripting
- expose
console.clear()
- expose
-
bug fixes
- issue when resizing widget using keyboard shortcuts
- advanced syntaxes (VAR{}): avoid storing default value as string if it can be parsed as a javascript primitive (boolean, number, etc)
- advanced syntaxes (VAR{}): ignore quotes around variable name
-
editor
- change keyboard shortcuts for moving widgets (now
mod + arrows
) and navigating in widgets (nowarrows
) to feel more natural with the project tree view.
- change keyboard shortcuts for moving widgets (now
-
widgets
- script: bypass keyboard shortcuts already used by the editor if it is enabled
- matrix: removed ambiguous
start
property - matrix: advanced syntax blocks can be passed to children without being resolved at the matrix' scope by adding an underscore before the opening bracket
- text: add
soft
mode for thewrap
property - input: improve
numeric
mode on iOS
-
bug fixes
- advanced syntaxes:
VAR{}
not updating when the default value is edited - editor: fix "Bring to front" and "Send to back" context menu actions
- advanced syntaxes:
-
ui
- add keyboard shortcuts
mod + "+"
andmod + "-"
to control zoom level
- add keyboard shortcuts
-
widgets
- input: add
numeric
property (allows numeric values only and displays numeric keyboard on mobile devices) - button: add
soft
mode for thewrap
property - switch: add
wrap
property
- input: add
-
editor
- display dropdown and checkbox for boolean properties with extra choices
-
bug fixes
- advanced syntaxes: various issues and regressions
- editor: preserve advanced syntaxes in
left
andtop
when pasting a widget
-
editor
- tree: update widget visibility when it changes dynamically
-
bug fixes
- prevent error with empty
OSC{}
blocks - regression breaking advanced syntax blocks containing nested brackets
- prevent error with empty
-
advanced syntaxes
- new syntax for creating and using custom variables in properties:
VAR{name, default}
JS{}
blocks don't require 2 brackets anymore (JS{{}}
still works)
- new syntax for creating and using custom variables in properties:
-
scripting
- add
getVar()
andsetVar()
for reading and modifying custom variables. This allows modifying properties directly from scripts (if they containVAR{}
blocks). - expose session path as
globals.session
- add
-
editor
- make tree item blink when hitting "Show in tree"
-
remote control
- add
/SCRIPT
command to run scripts remotely
- add
-
bug fixes
- scripting: set() not working from a slider to a pad
- tabs not sending messages / triggering scripts when clicked in editing mode
- prevent hang with some syntax errors in advanced syntaxes
- don't show project tree if minimized when creating a new widget (1.9.2 regression)
- fix "ID + 1" paste for widgets with numeric ids
- dropdown: reset the underlying dropdown when the widget's value is undefined
-
editor
- tree: allow specifying multiple type filters
- tree: add "Show in session" context menu action
-
bug fixes
- visualizer: remove
bars
anddots
option - plot: fix
bars
option - project tree: clear filter input when loading a session
- server: fix serving files from paths containing accents
- editor: keep editor open when loading a session
- menu: prevent clipping in container on iOS
- visualizer: remove
-
widgets
- image: add pre defined values for
size
,position
andrepeat
properties - text: add vertical alignment choices to
align
- image: add pre defined values for
-
editor
- tree: add icons before widget ids depending on the category
- tree: activate tab when selecting it in the project tree
- tree: allow dragging widgets from a container to another
- tree: expand container when a new widget is created inside it
- tree: add support for filtering widgets by type (by typing
type:fader
for example) - smarter shift+drag selection: allow selecting widgets in the area when the event started on the parent container
- select newly created widgets/tab except when copy-pasting
-
remote control
- add
/STATE/SEND
command
- add
-
bug fixes
- button: allow writing strings like
"1.0"
inlabel
without removing the decimals - editor: use css variable
--grid-width
at startup and after disabling & enabling the grid - launcher: regression preventing server halt when built-in client is closed manually beforehand
- scripting: prevent crash (built-in client only) when using the variable
navigator
- button: allow writing strings like
-
widgets
- menu/switch/dropdown: reset value to
undefined
when receiving a value that's not defined invalues
- menu/switch/dropdown: reset value to
-
scripting
- expose instance of navigator Clipboard as
globals.clipboard
- expose instance of navigator Clipboard as
-
midi
- allow sending note off with velocity
- add option for receiving note off with velocity
-
misc
- v0->v1 session conversion: remove
JS{{}}
in script property
- v0->v1 session conversion: remove
Warning Sessions saved with this version will not open in older versions (sessions saved with older version will open in this version).
-
bug fixes
- remote-root option not applied on resources loaded by the client app (css images, etc)
- input: display issue when resizing the window
- launcher: cancel stopping the server when there are unsaved changes in the built-in client
-
editor
- context menu: add
export
action to export a widget as a fragment file - show project tree if minimized when clicking on "Show in tree"
- context menu: add
-
widget
- new
fragment
widgets (undercontainers
): embedded session or fragment file with overridable properties. - add
comments
property to all widgets
- new
-
launcher
- add
Always on top
menu toggle
- add
-
bug fixes
- editor: error when duplicating widget while if the clipboard is empty
- ui: local zoom move issue when not in fullscreen
- custom module:
clearInterval()
not working - regression breaking style attribute in html property
-
misc
- faster local zoom
-
bug fixes
alt+shift+c
not working when pressed before dragging- incremental pasting issue with address property
- generate scrollbars for panels on iOS 13+
- fix scrolling on chrome for iOS 13+
-
editor
- add
mod+d
andmod+shift+d
for duplicating widgets - use a temporary clipboard when duplicating widgets
- add
-
misc
- inspector: move
script
property toscripting
category - ui: minor style tweaks
- inspector: move
-
widgets
- file: show save icon when mode is set to save
- file: center icon when hidePath is set to true
- sliders/pads: apply
spring
property dynamically
-
ui
- add
alt
+wheel
for local zoom centered on cursor
- add
-
editor
- add
alt+c+drag
andalt+shift+c+drag
for duplicating dragged widgets
- add
-
bug fixes:
- project tree: filter input position issue when scrolling
- sliders/pads: apply
spring
property dynamically
-
project tree
- select range of contiguous widgets with shift + click
-
misc
- plot: remove unused
filters
property; fix description forrangeX
andrangeY
- console: focus input when the console opens
- plot: remove unused
-
bug fixes
- switch: widget not reacting at first touch when traversing is enabled on parent
- sliders: disable mousewheel when
spring
is enabled
-
widgets
- script: add
once
event mode - encoder: remove
spring
property
- script: add
-
custom module
- expose
process
global
- expose
-
scripting
- add
openUrl
function
- add
-
bug fixes
- modal: issues with children's visibility
- console: allow multiple arguments in console.log()
-
ui
- launcher: add many keyboard shortcuts
- client: add keyboard shortcuts for clearing the console
-
scripting
- add
setFocus
function to focus an input widget programmatically
- add
-
misc
- add
usePercents
client option
- add
- bug fixes
- script: issue when using the
options
argument inset()
(options leaked to subsequent set() calls in the script) - multixy:
decimals
property not applied - multixy: spring behavior not working until all points are released
- custom module: prevent require() from reading submodules files each time and instead return the object in memory
- script: issue when using the
-
launcher
- add file browser button for the
theme
option and fix parsing path containing spaces if only one theme is set
- add file browser button for the
-
windows
- remove
ctrl+w
shortcut for closing a window (usealt+f4
instead)
- remove
-
midi
- add active sensing messages support (received as sysex)
-
remote control
- restore
/TABS
command (for opening tabs by ids)
- restore
-
widgets
- encoder: expose rotation speed in script (as
locals.speed
)
- encoder: expose rotation speed in script (as
- bug fixes
- range: per-fader touch event not emitted properly
- rgb: fix
spring
property - rgb: touch event not emitted
- bug fixes
- midi: debug messages displayed as errors
- launcher: broken context menu
-
bug fixes
- input: prevent focus when selecting the widget for edition
- input: submit content when leaving focus, not only when hitting
enter
ortab
(esc
still cancels) - midi: prevent midi bridge from stopping when an error occurs; provide meaningful errors when connection fails
-
editor
- inspector: hitting ctrl+s while editing a property will submit the change before saving
-
ui
- hide the console toggle button when the bottom panel is minimized and the editor is disabled
-
widgets
- file: add
mode
property, for choosing betweenopen
andsave
modes - switch: add
flip
mode
- file: add
-
bug fixes
- keyboard: allow note numbers up to 127
- server: return http 404 error when a user-requested resource is not found instead of keeping a pending request
- modal:
visible
property not applied correctly
-
project tree
- add an input for filtering displayed widget by id
-
bug fixes
- menu: allow manual line breaks ("
\n
") in labels / values - custom module: parsing issue when sending widget data using
receive()
(type
attribute erroneously parsed as an osc typetag)
- menu: allow manual line breaks ("
-
widgets
- html property: allow "href" attribute on "a" elements
- bug fixes
- script: stops triggering osc messages under some circumstances
-
bug fixes
- project tree: layout issue with deeply nested widgets
- ios 10.3 regression
- file browser: layout issue with long paths
-
custom module
- add
nativeRequire
function (allows loading native node modules or locally installed modules)
- add
-
bug fixes
- canvas-based widgets not drawn when placed in a modal while having a conditional visibility set
- text: missing
decimals
property - clone: fix usage of osc listener syntax (acts as if clone has an
address
property set toauto
)
-
widgets
- clone: make
props
property dynamic (avoid full widget rebuild when possible)
- clone: make
-
misc
- increase client console history size and allow changing it with client url options
- bug fixes
- startup regression
-
bug fixes
- (harmless) error raised when starting the server from the launcher with
debug
set totrue
- (harmless) error raised when starting the server from the launcher with
-
editor
- display/save color picked values with css rgba notation instead of hexadecimal
-
widgets
- modal: add
ignoreTabs
option (allows overflowing tab ancestors) - menu: add
ignoreTabs
option
- modal: add
- bug fixes
- ios: cloned menu not displayed correctly
- engine: downgrade to fix startup issue on windows
- bug fixes
- editor: cloned
dropdown
andinput
widgets not opening when selected - widgets: prevent value-stateless widgets (tap buttons, clone, scripts, html and svg) from sending a value for cross-client synchronization (leads to unexpected script execution) and exclude them from state saves
- input: apply
decimals
number before checking the value against thevalidation
expression - range:
steps
anddashed
property not working; removeorigin
property - config conflicts between launcher and server (affecting at least session history)
- editor: cloned
-
bug fixes
- custom module / theme: prevent reloading the module while the file is being written to
- server: if a theme is used, attempt to resolve image urls against the theme file's location
- modal/button: prevent error when
label
is updated
-
widgets
- encoder: add
ticks
property back
- encoder: add
- bug fixes
- midi: mtc parsing error
- custom module: hot reload cache issue on windows
- bug fixes
- regression causing server errors
Important change
Prebuilt binaries are now supplied only for 64bit Linux/MacOs/Windows. Other platforms should use the node
package or build it from sources.
MIDI support
As of this version, packages except the node
package are bundled with a midi binary that will be used whenever midi's path
option is not set. It is no longer necessary to install python
and python-rtmidi
.
Changelog
-
bug fixes
- editor: missing context menu (copy, paste) in inspector inputs
- widgets: osc listeners not resolving "auto" address
- cli:
ELECTRON_RUN_AS_NODE
headless mode not working without--no-gui
option - ios: clone widget not laid out properly in horizontal panels
- ui: missing vertical scrollbar when root's height overflows the workspace
- server: provide readable error when a file requested by the client file is not found
- tab: content not drawn when changing visible property
- matrix: addresses not generated property when matrix' address is
auto
-
ui
- add console bottom panel with a simple script interpreter
-
widgets
- keyboard: add
velocity
property (allows mapping the touch coordinates betweenoff
(top) andon
(bottom)) - input: add
validation
property (allows defining a regular expression that the value must match) - modal: add
relative
position property
- keyboard: add
-
midi
- accept sending sysex strings without spaces between the bytes
- load prebuilt midi binary on 64bit linux/windows/osx
- add support for midi time code messages
-
misc
- sessions converted from v0 will use the widget's html property to display the former label property
- bug fixes
- matrix: issues when changing non-dynamic properties (content not properly removed)
- input: apply default value when receiving an empty value or no value at all
-
bug fixes
- keyboard: prevent
script
property from being copied to each key
- keyboard: prevent
-
widgets
- keyboard: make
on
andoff
properties dynamic - script: add
getIndex
function - matrix/keyboard:
id
variable in script is now theid
of the child widget that triggered the event
- keyboard: make
-
bug fixes
- range: error when setting
default
property - range: fix
doubleTap
property
- range: error when setting
-
widgets
- all: add
html
property to allow inserting custom content in widgets (label, value, etc) and style it with thecss
property.
- all: add
-
scripting:
send()
: ignore the widget'sbypass
property (allows bypassing default messages and define custom ones)set()
: add supports for wildcards in the id parameterset()
: add a 3rd optional parameter for preventing further script executions and/or osc messages from being sent
-
custom module
- automatically reload custom module when the file is modified
- add support for loading submodules with
require()
-
theme
- automatically reload theme when the file is modified
-
bug fixes
- ssl: generate unique certificates (with random serial numbers) to avoid reuse errors. Certificates generated with older versions of o-s-c will be updated automatically.
~/
path prefix not recognized when using remote control commands like/SESSION/SAVE
~/
path prefix not recognized inremote-root
option- editor: paste ID+1: midi-related addresses should not be incremented
-
remote control
- add
/STATE/OPEN
and/STATE/SAVE
commands - ignore unsaved changes when loading a session with
/SESSION/OPEN
- resolve relative file paths against
remote-root
setting
- add
- bug fixes
- editor: error when
preArgs
andaddress
are modified at the same time (affects/EDIT
command and matrix/clone widgets)
- editor: error when
-
bug fixes
- launcher: midi device names containing multiple spaces not parsed correctly
- fullscreen: lack of support not detected on some ios devices
- multixy: labels not hidden when
ephemeral
istrue
-
remote control
- add
/SESSION/OPEN
and/SESSION/SAVE
commands
- add
-
bug fixes
- widgets: touch state scripts not triggering some synchronization mechanism
-
widgets
- encoder: remove
steps
,ticks
andorigin
properties - encoder: make
sensitivity
work with values below 1
- encoder: remove
-
bug fixes
- image: broken value validation
- menu/dropdown: use correct z-index
- dropdown: prevent dropdown from opening when selecting the widget for edition
-
editor
- holding
alt
extends the north-west handle to the widget's size to ease dragging - widget properties reordered (e.g. style-related properties, even widget-specific, are now under the "style" category)
- holding
-
widgets
- remove
colorBg
for all widgets except containers - widgets background color is now transparent by default (can be overridden with css)
- keyboard: added
colorBlack
andcolorWhite
properties to customize key colors - dropdown/menu: add
label
property (with support easy key/value display) - dropdown/menu: add
icon
toggle property - modal: add
popupPadding
property to control the button's and the container's padding independently
- remove
- bug fixes
- multixy/range: prevent some extra touch state events;`
## 1.4.0
-
bug fixes
- project tree: error when dropping a widget at its initial position
-
editor
- validate property change when clicking on a widget
- cancel property change when hitting escape
- add menu and keyboard shortcuts to reorder widgets
- add keyboard shortcut to show widget in project tree
- selected widget is not showed on top of the others anymore
-
widgets
- expose widgets unique identifiers with property name "uuid"
- xy/multixy: add
ephemeral
property - fader/knob/xy/range/multixy: remove
touchAddress
property - fader/knob/xy/range/multixy: expose touch state in
script
property (touchAddress
usages will be converted automatically)
-
bug fixes
- editor: hide impossible actions from context-menu (eg adding widgets in tab containers)
- editor: error when selecting a tab/root widget while a property field contains unsubmitted changes
- panel: layout issue with tabs & lineWidth property
- input: extend focusable area
-
midi
- remove variable args in sysex messages (dynamic properties and scripting can be used to this effect)
- add support for sending sysex bytes as integers
- allow sending any system message (eg MIDI time code)
- add support for receiving MIDI time code messages (as raw sysex) (requires adding the
mtc
flag to the midi configuration)
-
scripting
- expose toolbar menu actions
-
remote control
- optimise small changes made with /EDIT
-
widgets
- button: add
wrap
andvertical
properties - root: add
width
andheight
properties (helps building mobile layouts)
- button: add
-
bug fixes
- editor: id not incremented when pasting multiple widgets with id+1
-
main
- remove support for extra args in the
custom-module
option (fixes some path issues)
- remove support for extra args in the
-
widgets
- all: add
lineWidth
style property - knob: add
solid
&line
designs - fader: add
knobSize
property
- all: add
-
editor
- preserve percentages in position/size
- add 'Relative units (%)' option to use percents automatically on new widgets
-
bug fixes
- iOS 14+ scrolling issue
-
midi
- add support for channel pressure and key pressure messages
-
widgets
- svg: remove support for non-standard
%x
and%y
units; fixed layout update when resized; - knob: add support for custom dash/gap size in
dashed
property
- svg: remove support for non-standard
- bug fixes
- script: broken
storage.getItem
andstorage.removeItem
- regression breaking
remote-root
option when starting with the launcher
- script: broken
-
bug fixes
- modal: layout issue on iOS
-
widgets
- panels: added
contain
property to allow scrolling in vertical/horizontal layouts
- panels: added
-
midi
- add support for named ports in midi configuration
- bug fixes
- broken scrolling on iPhone iOS 13
- window geometry issue
- UI
- windows' dimensions and position are now saved upon closing and restored at startup
This list is not exhaustive
-
compatibility
- dropped support for iOS 9
- firefox (75+) support
-
UI
- overhaul design reworked
- foldable sidepanels
- removed lobby
- added toolbar menu
- display loading (spinner) in a notification instead of a modal
- mod + w to close window
- context-menu now use click event to trigger actions, not mousedown/touchstart
- no more uppercase text by default
-
themes
- built-in themes removed except
orange
- built-in themes removed except
-
translations
- incomplete russian translation removed
-
editor
- project tree
- dropdown for properties with multiple choices
- color picker
- preview numeric values for style-related properties set to auto
- context menu: added "show in tree" action
- context menu: removed "edit parent" action
- allow copying tabs (to tab containers only)
- shared clipboard across all clients
- prevent interaction with widgets when
shift
orctrl
is held - ensure @{} bindings are always updated upon edition
-
widget changes
- all: removed
label
option except for buttons, tabs and modals (one should usetext
widgets if needed) - all: removed support for
null
and"self"
targets - all: added
ignoreDefaults
property (allows ignoring the server's default targets) - all:
precision
property todecimals
, don't set osc integer typetag when 0 - all: added
typeTags
property - all: multiple style properties to control visibility, colors, alphas and padding
- all: added
interaction
(=> csspointer-events: none;
) - all: added
expand
(=> cssflex: 1;
) - all: prevent html tags in label
- pads: removed
split
property -> use custom-module or script instead - root: can contain widgets or tabs
- panels: added
layout
,justify
andgridTemplate
to help managing layouts (especially responsive ones) - panels: added
verticalTabs
property - panels: added
traversing
property, allow restrictingtraversing
to a specific widget type - fader: removed
input
- fader: removed
meter
- fader: added
gradient
- fader: added
round
design style - fader: support setting dash size and gap size in
dashed
property - switch: added
layout
(including grid) - switch: added
click
mode - plot/eq: removed
smooth
- plots/sliders/pads: reversed
logScale
behavior to match standard implementations; can be eitherfalse
(disabled),true
(logarithmic scale) ornumber
(manual log scale, negative for exponential scale) - visualizer: added
framerate
property - visualizer: added
freeze
property - menu: always centered menu
- modal: modals can't overflow parent tab boundaries
- input: removed
vertical
- pads, range: when
touchAddress
is set, one message per touched point is sent, in addition to the former touch state message - eq: removed
logScaleX
property, always draw logarithmic frequency response - eq: logarithmic x-axis scale fixed
- eq: filters are now defined with the
filters
property, leaving thevalue
to its default purpose - eq: added
rangeX
- html: allow
class
,title
andstyle
attributes - dropdown: close menu when receiving a value
- dropdown: removed empty 1st option
- switch: removed
showValues
(inconsistent with menu/dropdown, feature covered byvalues
property) - frame: allow loading non local urls
- all: removed
-
widget removals
push
,toggle
: merged intobutton
strip
: features now covered bypanel
meter
: duplicate offader
withdesign
tocompact
andinteraction
tofalse
switcher
,state
,crossfader
: removed => state management functions added to thescript
widgetkeys
: merged withscript
gyroscope
: not compatible since chrome 74 unless o-s-c goes HTTPS
-
remote control
- removed /TABS
- added /NOTIFY
-
scripting (general)
- removed MathJS language
- reuse #{} syntax as as shorthand for JS{{}} (one liner, implicit return)
- added
locals
variable, a variable store scoped to the widget - renamed
global
toglobals
- expose environment variables in
globals
:url
,env
(query parameters),platform
,screen
(width/height)
-
script widget
- always hidden except in project tree
script
property must not be wrapped in a JS{{}} block anymore- added
stateGet
andstateSet
functions - added
storage
object, proxy to the document's localStorage object (allows storing data that persist after refresh/close (cleared with the browser's cache) - added
setTimeout
,clearTimeout
,setInterval
,clearInterval
function proxies with an extraid
argument (they clear automatically when called multiple times and upon widget removal.id
is scoped to the widget)
-
state
- quickstate (store/recall from menu) is now stored in the clients cache and persists after refresh/close (cleared with the browser's cache)
-
custom module
settings.read(name)
:name
is now the long name of command-line options (not a camelCased one)receive()
: optional last argument to pass extra options such asclientId
- client id persist upon page refresh and can be set manually with the client url option
id
-
launcher
- config save/load
- allow starting/stopping server without rebooting
- syntax check on
--midi
option
-
server
- renamed
--url-options
to--client-options
and make them apply even in remote browsers (can be overridden with url queries) - removed
--blank
,--gui-only
,--examples
- hide
--disable-gpu
(cli-only) - added cli-only
--cache-dir
and--config-file
- added
--authentication
option - added
--use-ssl
option
- renamed
-
misc
- canvas: better visibility checks to avoid unnecessary draw calls
- visualizer: perf improvement (avoid data processing when not visible), all visualizers hook on the same loop to avoid concurrent timeouts
- button: in 'tap' mode (formerly push with
noRelease
), never send/syncoff
value, automatically reset tooff
when receivingon
- more detached DOM for lighter nested canvas widgets (ie multixy)
- unified (kind of) dom html structure for widgets, known css tricks will require adjustments.
- cache and config files are now stored in a folder named
open-stage-control
(located in the system's default location for config file). The.open-stage-control
is no longer used. - added support for icons rotate/flip transform suffixes (example:
^cog.spin
,^play.rotate-horizontal
)