Skip to content

IPC Channels

Bridge: window.lightbridge (see preload.ts for full typed API).

menu: prefix, sent from application menu to renderer via webContents.send().

Show: menu:new-show, menu:open-show, menu:save-show, menu:save-show-as

Edit: menu:undo, menu:redo

Audio: menu:audio-source, menu:audio-refresh-devices

MIDI: menu:midi-pick-device, menu:midi-toggle-clock-in, menu:midi-toggle-clock-out, menu:midi-set-clock-out-device, menu:midi-toggle-pickup, menu:midi-refresh, menu:midi-panic, menu:midi-test

View: menu:toggle-stats, menu:toggle-panel

Layout: menu:save-layout, menu:load-layout, menu:reset-layout

Defaults: menu:save-custom-default, menu:reset-custom-default, menu:reset-all-custom-defaults, menu:export-custom-defaults

Renderer → Main (invoke, promise-based)

Show files: show:save, show:load, show:ensure-sessions-dir, show:list-sessions, show:delete-session, show:request-save-dialog

Presets: presets:load, presets:save, modPresets:load, modPresets:save

Custom defaults: customDefaults:load, customDefaults:save

Source folders: sourceFolders:load, sourceFolders:save

Thumbnails: thumbnails:save, thumbnails:load, thumbnails:list, thumbnails:bake

Media: media:pick-image, media:pick-video

Preferences: prefs:get-audio-source, prefs:get-panel-sizes, prefs:set-panel-sizes, prefs:get-panel-layout, prefs:set-panel-layout

Layout: layout:save, layout:load, layout:list, layout:delete

Panels: panel:create, panel:get-drag-data

Window: window:get-bounds

Renderer → Main (one-way send): link:enable, link:disable, link:set-bpm, link:resync

Renderer → Main (invoke): link:available

Main → Renderer (one-way send): link:state (bpm, beat, phase, numPeers at ~60Hz), link:peers (numPeers on change)

Renderer → Main (one-way send)

open-output-window, close-output-window, audio-devices-list, audio-inputs-list, midi-menu-state, set-window-title, add-recent-file, show:save-sync

Panels: panel:close, panel:ready, panel:state-sync, panel:states-update, panel:dispatch

Main → Renderer (one-way send, panel system)

panel:dock-zone, panel:dock, panel:request-sync, panel:drag-active, panel:drag-end, panel:dispatch

Main → Renderer (one-way send, render quality)

  • oxide:governor-state — payload { governorLevel, userSupersample, effectiveSupersample, effectivePreviewSupersample }. Pushed when the adaptive supersample governor’s state changes (tier switch or governor step; delta-gated in main, so it is near-silent in steady state). Drives the quality dropdown’s “reduced” badge. Replaces the dead output:perf-data consumer (its sender was removed with the Three.js output server).

Renderer incident recorder (dev-only)

Diagnostic recorder for renderer crashes / hangs / black-frame incidents. All three channels are registered only when is.dev is true; production builds never wire them up.

Renderer → Main (invoke):

  • renderer-incident:save — payload metadata?: unknown (any JSON-serializable value attached to the snapshot). Captures a status sample and writes a JSON snapshot under userData/renderer-incidents/. Resolves to the absolute snapshot path.
  • renderer-incident:event — payload { source?: string; type?: string; level?: 'info' | 'warn' | 'error'; detail?: unknown }. Records an event from the renderer (e.g., WebGL context lost, unhandled rejection) without mirroring back over renderer-health:event. No return value.

Main → Renderer (one-way send):

  • renderer-health:event — payload { source, type, level, detail? }. Pushes recorder events to the renderer UI for live display in the dev health panel.
  • Output Visuals — how the main window feeds the output window at 60 Hz.