Releases: N9RecordsTechnologiesIL/VSReacT
Release list
VSReacT v0.0.17
The scaffolder. JS-only; native module unchanged from 0.0.9.
New package: create-vsreact 0.1.0
bun create vsreact my-plugin/npm create vsreact@latest my-plugin— one command scaffolds a complete plugin project:
CMake (auto-fetches JUCE and the VSReacT native module, or points at
local checkouts), a gain/pan processor, and a themed React UI that
hot-reloads in your DAW.- Interactive prompts (or
--yes) for product name, company, and the
4-char JUCE codes;--posthogwires@vsreact/posthogend-to-end
with a placeholder API key and instructions to bring your own. - Zero dependencies; the generated
ui/installs@vsreact/corefrom
npm like any real project.
Housekeeping
- Core 0.0.17: the npm README now leads with the scaffolder. The
example plugins carry a placeholder PostHog key (never a real one),
and StashTrack's key moved out of source into build-time injection.
Install
bun add @vsreact/core # or npm install / yarn add / pnpm addFetch the native JUCE module with CMake:
include(FetchContent)
FetchContent_Declare(vsreact
GIT_REPOSITORY https://github.com/N9RecordsTechnologiesIL/VSReacT.git
GIT_TAG v0.0.17
SOURCE_SUBDIR vsreact)
FetchContent_MakeAvailable(vsreact)VSReacT v0.0.16
The release-polish tier. JS-only; native module unchanged from 0.0.9.
Polish
- npm READMEs for both packages —
@vsreact/coreand
@vsreact/posthogfinally have real registry pages: quick-starts,
the full component index, the architecture picture, and the C++
wiring for analytics. VERSIONexported from@vsreact/core— stamp support dumps
and analytics with the SDK version.
@vsreact/posthog 0.0.6
registerOnce(props)— super properties that never clobber
existing values (safe defaults).
Examples
- Three new example plugins under
vsreact/examples/, each a
complete CMake + React project: synth (PianoKeyboard,
ParamADSREnvelope, wheels, full PostHog integration), drums
(StepSequencer patterns driving a native step clock, RingMeter —
no analytics), and channel (EQCurve bound to APVTS bands,
gain-reduction Meter, Disclosure) — alongside the original gain
quick-start. - StashTrack ships
@vsreact/posthog— editor sessions, parameter
analytics, and error tracking wired end-to-end.
Install
bun add @vsreact/core # or npm install / yarn add / pnpm addFetch the native JUCE module with CMake:
include(FetchContent)
FetchContent_Declare(vsreact
GIT_REPOSITORY https://github.com/N9RecordsTechnologiesIL/VSReacT.git
GIT_TAG v0.0.16
SOURCE_SUBDIR vsreact)
FetchContent_MakeAvailable(vsreact)VSReacT v0.0.15
The DSP-display tier — the EQ curve and the ring meter. JS-only;
native module unchanged from 0.0.9.
New components
<EQCurve>— the display every EQ plugin wants: the real summed
biquad response (RBJ cookbook — peak, shelves, passes, notch,
bandpass) drawn as a center-anchored fill, with one draggable node
per band (x = frequency on a 20 Hz–20 kHz log scale, y = gain) and
the wheel adjusting Q inside a begin/end gesture. The pure math is
exported:biquadMagnitudeDb,eqResponseDb,eqXToHz/eqHzToX.<RingMeter>— a circular level meter on the native arc keys:
hot zone abovehotFrom, optional center readout viaformat—
channel-strip rings, macro amounts, gain-reduction dials.
@vsreact/posthog 0.0.5
screen(name)/useScreen(name)— PostHog screen analytics
for plugin panels:$screen { $screen_name }on mount.shutdown()— editor teardown: flush everything, then go
silent; captures after shutdown are dropped.init({ propertyDenylist })— a mechanical strip-list for
sensitive keys (paths, emails), applied beforebeforeSend.
Site
- Gallery: EQCurve and RingMeter families in all eight worlds.
Install
bun add @vsreact/core # or npm install / yarn add / pnpm addFetch the native JUCE module with CMake:
include(FetchContent)
FetchContent_Declare(vsreact
GIT_REPOSITORY https://github.com/N9RecordsTechnologiesIL/VSReacT.git
GIT_TAG v0.0.15
SOURCE_SUBDIR vsreact)
FetchContent_MakeAvailable(vsreact)VSReacT v0.0.14
The workspace tier — structure for multi-page plugin UIs. JS-only;
native module unchanged from 0.0.9.
New components
<Tabs>— the page switcher (MAIN / FX / SETTINGS): a themed
tab bar with an underline indicator that renders the active panel.
Controlled or uncontrolled.<Disclosure>— the collapsible settings row ("ADVANCED"):
click the header to fold content in and out.
Hooks & control upgrades
useNativeValue(name, initial)— the one-liner for native → UI
data feeds: holds the latest payload of a C++ event as state.Meter—reversefills from the top (vertical) or right
(horizontal): gain-reduction meters for compressors.
@vsreact/posthog 0.0.4
time(name)/timeEnd(name, props?)— stopwatch captures:
preset_load { duration_ms }for load times, render passes,
analysis sweeps.init({ sampleRate })— whole-session sampling: keep a fraction
of clients, and kept events carry$sample_rateso PostHog can
weight the counts.init({ maxQueueSize })— a queue cap (drop-oldest, default
1000) so a misbehaving bridge can't grow memory.
Site
- Gallery: Tabs and Disclosure families in all eight worlds.
Install
bun add @vsreact/core # or npm install / yarn add / pnpm addFetch the native JUCE module with CMake:
include(FetchContent)
FetchContent_Declare(vsreact
GIT_REPOSITORY https://github.com/N9RecordsTechnologiesIL/VSReacT.git
GIT_TAG v0.0.14
SOURCE_SUBDIR vsreact)
FetchContent_MakeAvailable(vsreact)VSReacT v0.0.13
The synth tier — the envelope editor and the wheels. JS-only; native
module unchanged from 0.0.9.
New components
<ADSREnvelope>/<ParamADSREnvelope>— the classic
four-corner envelope editor: a filled curve with draggable handles
for the attack peak, the decay/sustain corner (both axes at once),
and the release corner. The Param twin drives four host parameters
with per-handle gestures. The pureadsrLevelAtsampler is exported.<PitchBend>/<ParamPitchBend>— the pitch wheel: drag from
center, springs back to rest on release; the Param twin writes
0.5 ± bend/2 and closes the gesture at dead center.<ModWheel>/<ParamModWheel>— the mod wheel: a vertical
strip that stays where you leave it.
Pitch math
midiNoteToHz/hzToMidiNote— equal-temperament conversion
(69 ↔ 440); feed an oscillator straight fromPianoKeyboard.
@vsreact/posthog 0.0.3
group(type, key, props?)— group analytics:$groupidentify
plus$groupsstamped on every later event (cleared byreset()).alias(id)andsetOnce(props)— link a licence key or old
install id; write person properties only if unset.init({ beforeSend })— scrub or veto events before they queue:
return the edited event, or null to drop it.debug(true)— log every capture and flush to the console.
Site
- Gallery: ADSREnvelope and PitchBend/ModWheel families, interactive
in all eight worlds.
Install
bun add @vsreact/core # or npm install / yarn add / pnpm addFetch the native JUCE module with CMake:
include(FetchContent)
FetchContent_Declare(vsreact
GIT_REPOSITORY https://github.com/N9RecordsTechnologiesIL/VSReacT.git
GIT_TAG v0.0.13
SOURCE_SUBDIR vsreact)
FetchContent_MakeAvailable(vsreact)VSReacT v0.0.12
The perform tier — play your plugin, not just tweak it. JS-only;
native module unchanged from 0.0.9.
New components
<PianoKeyboard>— the playable keyboard: press for note-on,
release for note-off, drag across keys for glissando (black keys
correctly steal the top zone).heldNotespaints host MIDI in,
octave labels on the Cs, any range viastartNote/octaves.<StepSequencer>— the pattern grid: rows × steps of clickable
cells, downbeat tinting every 4, a playhead column the host drives,
optional row labels. Fully controlled — patterns live in your state.
Value formatting
formatDb/formatHz/formatMs/formatPercent/
formatSemitones/midiNoteName/mapRange— the readout
strings DAW users expect ("+6.0 dB", "1.2 kHz", "350 ms", "C#4"),
ready forNumberBox'sformatprop or any label.
Control upgrades
ProgressBar—indeterminatesweeps a segment across the track
for unknown-duration work.- Styling fix: arbitrary text sizes (
text-[13]) now actually resolve
to font sizes — they were silently ignored, so labels using them
rendered at the default size.
@vsreact/posthog 0.0.2
posthog.captureException(error, props?)— report errors to
PostHog error tracking as properly-shaped$exceptionevents
(name, message, QuickJS stack).<PostHogErrorBoundary>— wrap your app: render crashes are
captured (and flushed immediately) while a fallback keeps the
editor window alive.optOut()/optIn()/optedOut— a user privacy switch:
opting out drops new events and discards the unsent queue;
init({ optOut })starts disabled.useEditorSession()— brackets the editor lifetime:
editor_session_starton mount,editor_session_end { duration_ms }on unmount, self-flushing on close.useCaptureOnUnmount(event)— the closing bookend to
useCaptureOnMount, stamped with the mounted duration.unregister(key)removes one super property;getSessionId()
exposes the session id for cross-referencing native logs.
Site
- Gallery: PianoKeyboard and StepSequencer families, playable in all
eight worlds.
Install
bun add @vsreact/core # or npm install / yarn add / pnpm addFetch the native JUCE module with CMake:
include(FetchContent)
FetchContent_Declare(vsreact
GIT_REPOSITORY https://github.com/N9RecordsTechnologiesIL/VSReacT.git
GIT_TAG v0.0.12
SOURCE_SUBDIR vsreact)
FetchContent_MakeAvailable(vsreact)VSReacT v0.0.11
The flagship-visual tier — Output-style centerpieces and hardware feel.
JS-only; native module unchanged from 0.0.9.
New components
<MacroPad>/<ParamMacroPad>— the centerpiece macro control:
a circular 2D pad whose concentric rings breathe with the values
(x spreads them, y drives intensity), axis labels, drag anywhere,
double-click recenters. The Param twin drives two host parameters
from one drag with both gestures opened together.<HardwareKnob>/<ParamHardwareKnob>— the skeuomorphic cap
with a glowing pointer notch riding the rim (a short value arc) and a
faint tick track; drag/wheel/double-click like Knob.<Crossfader>/<ParamCrossfader>— the DRY/WET strip: wide
track, grippy rectangular handle, end labels, double-click recenters.<PulseOrb>— a value-reactive orb: glowing core with echo rings
that emit faster and brighter as the level rises.
Control upgrades
Toggle—offLabel/onLabelside captions (hardware OFF/ON
style), the active side highlighted.Slider—barThumbrenders the flat hardware-style bar thumb in
both orientations.
Site
- Gallery: MacroPad showpiece card (wide), HardwareKnob, Crossfader,
and PulseOrb cards — all interactive.
Install
bun add @vsreact/core # or npm install / yarn add / pnpm addFetch the native JUCE module with CMake:
include(FetchContent)
FetchContent_Declare(vsreact
GIT_REPOSITORY https://github.com/N9RecordsTechnologiesIL/VSReacT.git
GIT_TAG v0.0.11
SOURCE_SUBDIR vsreact)
FetchContent_MakeAvailable(vsreact)VSReacT v0.0.10
Fields & feedback — the settings-panel tier, and value labels on the
one-line editor. JS-only; native module unchanged from 0.0.9.
New components
<NumberBox>/<ParamNumberBox>— the draggable number (BPM,
ms, semitones): drag vertically, wheel to step, double-click to
reset, snap-to-step without float dust (snapToStepexported). The
Param twin shows the host's formatted text.<Checkbox>/<ParamCheckbox>— settings-panel rows; checked =
value ≥ 0.5, gestures automation-safe.<RadioGroup>/<ParamRadioGroup>— vertical exclusive options
with dots; value ↔ index mapping like Segmented.<ProgressBar>— determinate progress with optional percent.<Spinner>— indeterminate loading, a 100° arc chasing its tail
on the native arc keys.
GenericEditor
- Every knob now shows a live value label (the host's formatted
text) plus the parameter name beneath it.
Site
- /components gallery: six new cards (NumberBox, Checkbox, RadioGroup,
ProgressBar, Spinner, Button sizes & states) and live value labels on
the GenericEditor card.
Install
bun add @vsreact/core # or npm install / yarn add / pnpm addFetch the native JUCE module with CMake:
include(FetchContent)
FetchContent_Declare(vsreact
GIT_REPOSITORY https://github.com/N9RecordsTechnologiesIL/VSReacT.git
GIT_TAG v0.0.10
SOURCE_SUBDIR vsreact)
FetchContent_MakeAvailable(vsreact)VSReacT v0.0.9
PostHog analytics inside your plugin.
New package: @vsreact/posthog 0.0.1
posthogclient — posthog-js-shaped API (init,capture,
identify,register,set,reset,flush) that batches in JS
(flush at 10 events / 10s) and delivers through the native bridge.
Every event carriesdistinct_id,$session_id, and lib metadata.usePostHogParameters()— the one-liner for plugin usage
analytics: every host parameter change becomes one debounced
parameter_changed {parameter_id, value, text}event per parameter.useCaptureOnMount(event)for panel/screen views,usePostHog().
Core 0.0.9 — native side
vsreact::PostHogBridge— chain it inonNativeCalllike the
ParameterBridge. Answersposthog:config(persistent anonymous
distinct id via an optionalstateFile, host) andposthog:send
(queues batches, posts{api_key, batch}to{host}/batch/on a
background thread viajuce::URL). The API key stays in C++. Test
transport + synchronous-flush hooks included; covered by C++ tests.- Release workflow now builds and publishes both packages; CI tests both.
- No other core changes — JS core API identical to 0.0.8.
Install
bun add @vsreact/core # or npm install / yarn add / pnpm addFetch the native JUCE module with CMake:
include(FetchContent)
FetchContent_Declare(vsreact
GIT_REPOSITORY https://github.com/N9RecordsTechnologiesIL/VSReacT.git
GIT_TAG v0.0.9
SOURCE_SUBDIR vsreact)
FetchContent_MakeAvailable(vsreact)VSReacT v0.0.8
@vsreact/core/componentssubpath export — the whole component
kit importable on its own (import { Knob, Select, Meter } from "@vsreact/core/components"). Same exports as the root; exists for
readability and as the boundary line if the kit ever becomes its own
package. Everything still ships in the one@vsreact/coreinstall.
Install
bun add @vsreact/core # or npm install / yarn add / pnpm addFetch the native JUCE module with CMake:
include(FetchContent)
FetchContent_Declare(vsreact
GIT_REPOSITORY https://github.com/N9RecordsTechnologiesIL/VSReacT.git
GIT_TAG v0.0.8
SOURCE_SUBDIR vsreact)
FetchContent_MakeAvailable(vsreact)