Architecture Overview
Every line of NovyWave’s application logic is written in Rust — compiled to WebAssembly for the browser and native code for the desktop. This means the same codebase powers both environments with identical behavior.
Major Components
Section titled “Major Components”| Component | Purpose |
|---|---|
frontend/ | Rust and WASM UI, waveform rendering, interaction logic |
backend/ | MoonZoon backend used for browser mode |
shared/ | shared data types and protocol definitions |
src-tauri/ | desktop wrapper and packaging |
novyui/ | reusable UI building blocks |
src-chrome/ | Chrome Desktop Launcher — opens the UI in Chrome/Chromium --app mode |
plugins/ | Built-in WebAssembly plugins (hello_world, reload_watcher, files_discovery) |
novywave-mcp/ | Model Context Protocol integration |
Runtime Modes
Section titled “Runtime Modes”Browser Mode
Section titled “Browser Mode”The WASM frontend talks to the Moon backend for file access and waveform operations.
Desktop Mode
Section titled “Desktop Mode”The same frontend runs inside Tauri, where desktop commands handle local file operations and packaging concerns.
Chrome Desktop Mode
Section titled “Chrome Desktop Mode”The Chrome Desktop Launcher (novywave-chrome) starts the same MoonZoon backend and opens Chrome, Chromium, or Microsoft Edge in --app mode. This provides an alternative rendering path without WebKitGTK on Linux.
Key Domains
Section titled “Key Domains”Three domains show up repeatedly in the codebase and documentation:
- Tracked files for loaded waveform inputs and parsing state
- Selected variables for signal selection and display format
- Waveform timeline for zoom, pan, cursor, and rendering state
Rendering Pipeline
Section titled “Rendering Pipeline”At a high level:
- parse waveform data,
- request only the relevant signal range,
- process visible transitions,
- render the visible region into the timeline canvas.
The project is designed to keep navigation responsive even when waveforms are large.
Plugin Architecture
Section titled “Plugin Architecture”NovyWave supports WebAssembly plugins through a WIT (WebAssembly Interface Type) component model. Three plugin worlds are available:
- basic — logging only, with init and shutdown lifecycle hooks
- watcher — file monitoring with change notifications
- files-discovery — directory watching with glob pattern matching
Plugins communicate with the host through defined capabilities: logging, file queries, watcher registration, and waveform reload triggers.