aagentah/nw_wrldPublic

nw_wrld is an event-driven sequencer for triggering visuals using web technologies. It enables users to scale up audiovisual compositions for prototyping, demos, exhibitions, and live performances. Users code their own visual modules, then orchestrate them using the project's native UI composer.

AI summary: An event-driven sequencer for triggering web-based visuals during live performances and exhibitions.

Stars
2K
+2 today
Forks
188
Watchers
33
Open issues
2
Open PRs
19
Contributors
~9
Commits
232
Branches
21

TypeScriptGPL-3.0Created Dec 31, 2025Last push 27d agoLatest release v0.6.0-beta+4 stars this week+3 this month

Star history

since Dec 28, 2025
01K2KDec 2025Mar 2026May 2026Aug 2026
2K stars as of Aug 7, 2026, tracked back to Dec 28, 2025. Historical curve reconstructed from public GitHub event archives, calibrated to the current total.

Contribution activity

commits per day, last 52 weeks
AugSepOctNovDecJanFebMarAprMayJunJulMonWedFri2025-08-02: 0 commits2025-08-03: 0 commits2025-08-04: 0 commits2025-08-05: 0 commits2025-08-06: 0 commits2025-08-07: 0 commits2025-08-08: 0 commits2025-08-09: 0 commits2025-08-10: 0 commits2025-08-11: 0 commits2025-08-12: 0 commits2025-08-13: 0 commits2025-08-14: 0 commits2025-08-15: 0 commits2025-08-16: 0 commits2025-08-17: 0 commits2025-08-18: 0 commits2025-08-19: 0 commits2025-08-20: 0 commits2025-08-21: 0 commits2025-08-22: 0 commits2025-08-23: 0 commits2025-08-24: 0 commits2025-08-25: 0 commits2025-08-26: 0 commits2025-08-27: 0 commits2025-08-28: 0 commits2025-08-29: 0 commits2025-08-30: 0 commits2025-08-31: 0 commits2025-09-01: 0 commits2025-09-02: 0 commits2025-09-03: 0 commits2025-09-04: 0 commits2025-09-05: 0 commits2025-09-06: 0 commits2025-09-07: 0 commits2025-09-08: 0 commits2025-09-09: 0 commits2025-09-10: 0 commits2025-09-11: 0 commits2025-09-12: 0 commits2025-09-13: 0 commits2025-09-14: 0 commits2025-09-15: 0 commits2025-09-16: 0 commits2025-09-17: 0 commits2025-09-18: 0 commits2025-09-19: 0 commits2025-09-20: 0 commits2025-09-21: 0 commits2025-09-22: 0 commits2025-09-23: 0 commits2025-09-24: 0 commits2025-09-25: 0 commits2025-09-26: 0 commits2025-09-27: 0 commits2025-09-28: 0 commits2025-09-29: 0 commits2025-09-30: 0 commits2025-10-01: 0 commits2025-10-02: 0 commits2025-10-03: 0 commits2025-10-04: 0 commits2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 0 commits2025-10-09: 0 commits2025-10-10: 0 commits2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 0 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 0 commits2025-10-18: 0 commits2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 1 commit2026-01-01: 0 commits2026-01-02: 2 commits2026-01-03: 15 commits2026-01-04: 2 commits2026-01-05: 6 commits2026-01-06: 17 commits2026-01-07: 10 commits2026-01-08: 4 commits2026-01-09: 8 commits2026-01-10: 7 commits2026-01-11: 5 commits2026-01-12: 2 commits2026-01-13: 13 commits2026-01-14: 14 commits2026-01-15: 12 commits2026-01-16: 5 commits2026-01-17: 10 commits2026-01-18: 4 commits2026-01-19: 3 commits2026-01-20: 3 commits2026-01-21: 5 commits2026-01-22: 3 commits2026-01-23: 1 commit2026-01-24: 1 commit2026-01-25: 1 commit2026-01-26: 0 commits2026-01-27: 0 commits2026-01-28: 1 commit2026-01-29: 0 commits2026-01-30: 3 commits2026-01-31: 13 commits2026-02-01: 8 commits2026-02-02: 0 commits2026-02-03: 0 commits2026-02-04: 1 commit2026-02-05: 2 commits2026-02-06: 0 commits2026-02-07: 0 commits2026-02-08: 2 commits2026-02-09: 4 commits2026-02-10: 1 commit2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 0 commits2026-02-14: 0 commits2026-02-15: 0 commits2026-02-16: 0 commits2026-02-17: 3 commits2026-02-18: 0 commits2026-02-19: 0 commits2026-02-20: 0 commits2026-02-21: 0 commits2026-02-22: 0 commits2026-02-23: 0 commits2026-02-24: 0 commits2026-02-25: 0 commits2026-02-26: 0 commits2026-02-27: 0 commits2026-02-28: 0 commits2026-03-01: 0 commits2026-03-02: 0 commits2026-03-03: 0 commits2026-03-04: 0 commits2026-03-05: 0 commits2026-03-06: 0 commits2026-03-07: 0 commits2026-03-08: 0 commits2026-03-09: 0 commits2026-03-10: 0 commits2026-03-11: 0 commits2026-03-12: 0 commits2026-03-13: 0 commits2026-03-14: 0 commits2026-03-15: 0 commits2026-03-16: 0 commits2026-03-17: 0 commits2026-03-18: 0 commits2026-03-19: 0 commits2026-03-20: 0 commits2026-03-21: 0 commits2026-03-22: 0 commits2026-03-23: 0 commits2026-03-24: 0 commits2026-03-25: 0 commits2026-03-26: 0 commits2026-03-27: 0 commits2026-03-28: 0 commits2026-03-29: 0 commits2026-03-30: 0 commits2026-03-31: 0 commits2026-04-01: 0 commits2026-04-02: 5 commits2026-04-03: 0 commits2026-04-04: 0 commits2026-04-05: 0 commits2026-04-06: 0 commits2026-04-07: 0 commits2026-04-08: 0 commits2026-04-09: 0 commits2026-04-10: 0 commits2026-04-11: 0 commits2026-04-12: 0 commits2026-04-13: 0 commits2026-04-14: 0 commits2026-04-15: 0 commits2026-04-16: 0 commits2026-04-17: 0 commits2026-04-18: 0 commits2026-04-19: 0 commits2026-04-20: 0 commits2026-04-21: 0 commits2026-04-22: 0 commits2026-04-23: 0 commits2026-04-24: 0 commits2026-04-25: 0 commits2026-04-26: 0 commits2026-04-27: 0 commits2026-04-28: 0 commits2026-04-29: 0 commits2026-04-30: 0 commits2026-05-01: 0 commits2026-05-02: 0 commits2026-05-03: 0 commits2026-05-04: 0 commits2026-05-05: 0 commits2026-05-06: 0 commits2026-05-07: 0 commits2026-05-08: 0 commits2026-05-09: 0 commits2026-05-10: 0 commits2026-05-11: 0 commits2026-05-12: 0 commits2026-05-13: 0 commits2026-05-14: 0 commits2026-05-15: 0 commits2026-05-16: 0 commits2026-05-17: 0 commits2026-05-18: 0 commits2026-05-19: 0 commits2026-05-20: 0 commits2026-05-21: 0 commits2026-05-22: 0 commits2026-05-23: 0 commits2026-05-24: 0 commits2026-05-25: 0 commits2026-05-26: 0 commits2026-05-27: 0 commits2026-05-28: 0 commits2026-05-29: 0 commits2026-05-30: 0 commits2026-05-31: 0 commits2026-06-01: 0 commits2026-06-02: 0 commits2026-06-03: 0 commits2026-06-04: 0 commits2026-06-05: 0 commits2026-06-06: 0 commits2026-06-07: 0 commits2026-06-08: 0 commits2026-06-09: 0 commits2026-06-10: 0 commits2026-06-11: 0 commits2026-06-12: 0 commits2026-06-13: 0 commits2026-06-14: 0 commits2026-06-15: 0 commits2026-06-16: 0 commits2026-06-17: 0 commits2026-06-18: 0 commits2026-06-19: 0 commits2026-06-20: 0 commits2026-06-21: 0 commits2026-06-22: 0 commits2026-06-23: 0 commits2026-06-24: 0 commits2026-06-25: 0 commits2026-06-26: 0 commits2026-06-27: 0 commits2026-06-28: 0 commits2026-06-29: 0 commits2026-06-30: 0 commits2026-07-01: 0 commits2026-07-02: 0 commits2026-07-03: 0 commits2026-07-04: 0 commits2026-07-05: 0 commits2026-07-06: 0 commits2026-07-07: 0 commits2026-07-08: 0 commits2026-07-09: 0 commits2026-07-10: 0 commits2026-07-11: 0 commits2026-07-12: 0 commits2026-07-13: 0 commits2026-07-14: 0 commits2026-07-15: 0 commits2026-07-16: 0 commits2026-07-17: 0 commits2026-07-18: 0 commits2026-07-19: 0 commits2026-07-20: 0 commits2026-07-21: 0 commits2026-07-22: 0 commits2026-07-23: 0 commits2026-07-24: 0 commits2026-07-25: 0 commits2026-07-26: 0 commits2026-07-27: 0 commits2026-07-28: 0 commits2026-07-29: 0 commits2026-07-30: 0 commits2026-07-31: 0 commits2026-08-01: 0 commits
197 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Continuous integration

    Automated checks passing

What nw_wrld does

nw_wrld is a specialized sequencing tool built with TypeScript that allows visual artists and developers to orchestrate audiovisual compositions using web technologies. Instead of relying on traditional VJ software, users can code their own custom visual modules using standard web APIs (like WebGL, Canvas, or CSS). They then use nw_wrld's native UI composer to arrange, sequence, and trigger these modules in real-time, making it an ideal platform for live performances, interactive exhibitions, and rapid prototyping of visual art.

Creative coders, VJs, visual artists, and web developers who want to use standard web technologies to create and perform live audiovisual compositions.

  • Event-driven sequencing: Precisely triggers visual changes and animations based on timed events or external inputs.
  • Web technology stack: Leverages the power and flexibility of modern web standards (HTML, CSS, WebGL) for visual rendering.
  • Custom visual modules: Allows artists to write their own visual logic in code and seamlessly integrate it into the sequencer.
  • Native UI composer: Provides a graphical interface for arranging and orchestrating the coded visual modules.
  • Scalable architecture: Designed to handle everything from small prototypes to large-scale, live exhibition environments.

Where teams use it

Live VJ performances

Visual artists use the sequencer during live music events to trigger pre-coded WebGL shaders and animations in sync with the audio.

Interactive gallery exhibitions

Creative coders deploy the system in a museum setting, allowing external sensors (like motion detectors) to trigger specific visual events on large displays.

Prototyping motion graphics

Designers use the UI composer to quickly arrange and test different web-based visual modules before committing to a final render or application build.

Getting started: Check the repository documentation for setup instructions and how to create your first visual module.

README

main branch

nw_wrld

nw_wrld is an event-driven sequencer for triggering visuals using web technologies. It enables users to scale up audiovisual compositions for prototyping, demos, exhibitions, and live performances. Users code their own visual modules, then orchestrate them using the project's native UI composer.

Visuals can be triggered via the built-in 16-step sequencer or by configuring external MIDI, OSC, audio capture, or file-upload inputs.

Node Version Electron

Screenshot 2026-01-09 at 14 17 49

Beta Notice

This project is currently in beta. Downloadable installers are provided via GitHub Releases for macOS, Windows, and Linux, and nw_wrld can also be run from source using this repository. Please note that whilst the project is in beta, there may be frequent breaking changes between releases.

Roadmap

  • Isolated sandbox and module-workspace bundling
  • Docblock-declared module dependencies with automated runtime injection
  • TypeScript migration
  • Unit tests, E2E Playwright tests, runtime validations
  • Use-case specific User Guides (Ableton, strudel, TouchDesigner, etc.)
  • Signed and notarized macOS app builds
  • Signed Windows app builds
  • Robust Linux & WSL support
  • Userdata, Module, and JSON versioning (+ migration scripts)
  • Multi-band audio threshold analysis (local processing) for channel triggers
  • Advanced default sequencer (Working sampler with audio FX)
  • Remote API input source with HTTP/WebSocket client for cloud-based services (audio analysis APIs, ML models, etc.)
  • Serial port input support for hardware sensor integration

Features

  • Built-in 16-step pattern sequencer - Create rhythmic audiovisual compositions without external hardware
  • External MIDI/OSC/audio/file support - Use MIDI, OSC, microphone/loopback audio capture, or uploaded audio files as trigger sources
  • Visual module system - Build custom visuals with p5.js, Three.js, D3.js, or vanilla JavaScript
  • Hot module reloading - Edit modules and see changes instantly
  • Project folder workflow - Self-contained, portable projects with modules, assets, and data
  • Flexible method mapping - Trigger any visual method with sequencer patterns or external signals
  • Per-track signal settings - Configure per-track thresholds and trigger cooldown for audio and file modes
  • Module enable/disable toggle - Disable modules per track without removing configuration

Installation

For Developers

Build from source to contribute or customize:

Prerequisites: Node.js v20+ and basic terminal knowledge

# 1. Clone the repository
git clone https://github.com/aagentah/nw_wrld.git
cd nw_wrld

# 2. Install dependencies
npm install

# 3. Start the app
npm start

Two windows will open:

  • Dashboard: Control center for creating tracks, programming patterns, and configuring visuals
  • Projector: Visual output window

E2E Testing (Playwright)

npm run test:e2e
  • E2E tests launch the real Electron app and control the windows via Playwright.
  • Test artifacts (screenshots/traces on failure) are written to test-results/ (gitignored).
  • Tests can boot into an isolated project folder by setting NW_WRLD_TEST_PROJECT_DIR.

Project Folders

nw_wrld uses a project folder model. Each project is a self-contained folder containing your modules, assets, and data.

Note: Workspace modules are JavaScript code executed by nw_wrld. Only open project folders you trust.

What's Inside a Project Folder

MyProject/
├── modules/           # Visual modules (hot-reloadable JavaScript files)
│   ├── Text.js
│   ├── GridOverlay.js
│   ├── SpinningCube.js
│   └── ...16 starter modules
├── assets/            # Images, JSON, and other resources
│   ├── images/
│   │   └── blueprint.png
│   └── json/
│       └── meteor.json
└── nw_wrld_data/      # Tracks, settings, and recordings
    └── json/

First Launch Experience

When you first launch nw_wrld, you'll be prompted to select or create a project folder. The app automatically scaffolds a working project with:

  • 16 starter modules - Ready-to-use examples (2D, 3D, text, data visualization)
  • Sample assets - Images and JSON data files
  • Data storage - Configuration, tracks, and recordings

Portability

Projects are completely portable - copy the folder to share with others, work across machines, or back up your work. Everything needed to run your audiovisual compositions is contained in one folder.

Lost Project?

If your project folder is deleted, moved, or disconnected, nw_wrld will prompt you to reselect it (see Getting Started).


Quick Start

60-Second Test

  1. Click [CREATE TRACK] → Name it → Create
  2. Click [+ MODULE] → Select Text or Corners
  3. Click [+ CHANNEL] to add a sequencer row
  4. Click some cells in the 16-step grid (they turn red)
  5. Assign a method to the channel (e.g., color or rotate)
  6. Click [PLAY] in the footer

You'll see the playhead move across the grid and trigger your visuals. No external setup required!


How It Works: The Big Picture

Signal Sources:
┌──────────────┐
│  Sequencer   │──┐
│  (Built-in)  │  │
└──────────────┘  │
                  ├──▶ Dashboard ──▶ Projector
┌──────────────┐  │    (Control)     (Visuals)
│ External     │──┘
│ MIDI/OSC/    │
│ Audio/File   │
└──────────────┘

Dashboard is where you compose and map triggers; Projector is where visuals render and respond.


Your First Workflow (Sequencer Mode)

Follow the Getting Started Guide for detailed step-by-step instructions.

The built-in sequencer is perfect for testing modules and creating standalone audiovisual pieces without external hardware.


Advanced: External Input Control

For live performance and reactive workflows, you can use MIDI controllers/DAWs, OSC senders, audio input devices, or uploaded audio files.

To set up input routing and switch modes, see Getting Started.

DAW Quickstart (Ableton / FL Studio / Logic / etc.)

Most DAW setups send notes on MIDI Channel 1 unless you explicitly route or change it. nw_wrld supports both single-channel and split-channel workflows:

  • Option A (simplest): Single MIDI channel

    • In nw_wrld → Settings → External (MIDI/OSC) → MIDI:
      • Method Triggers MIDI Channel: 1
      • Track Select MIDI Channel: 1
    • Use Settings → Configure Mappings to choose either:
      • MIDI (Pitch Class): octave-agnostic mapping using C..B (avoids DAW octave-name differences)
      • MIDI (Exact Note): octave-specific mapping using full MIDI note numbers (0–127)
    • Then map which triggers activate track selection vs method triggers.
  • Option B (clean separation): Split MIDI channels

    • In your DAW, route method trigger notes to Channel 1 and track-selection notes to Channel 2 (commonly done with separate MIDI routing tracks/devices).
    • In nw_wrld → Settings:
      • Method Triggers MIDI Channel: 1
      • Track Select MIDI Channel: 2

Creating Visual Modules

Modules are JavaScript files in your project's modules/ folder. Edit them with any text editor and nw_wrld hot-reloads automatically.

Quick Module Creation

Create or edit a .js file in your project’s modules/ folder and save — nw_wrld hot-reloads it automatically.

Module File Contract (Docblock + Default Export)

Workspace modules are loaded from your project folder and must follow a strict contract:

  • Filename is identity: modules/MyModule.js → module id MyModule (must be alphanumeric and start with a letter)
  • Docblock metadata is required: @nwWrld name, @nwWrld category, @nwWrld imports
  • Imports are declarative: list what you need; nw_wrld injects safe bindings for you
  • Default export is required: export default MyModule

Allowed @nwWrld imports:

  • SDK: ModuleBase, BaseThreeJsModule, assetUrl, readText, loadJson
  • Global libs: THREE, p5, d3
/*
@nwWrld name: My Module (Display Name)
@nwWrld category: 2D
@nwWrld imports: ModuleBase, assetUrl, loadJson
*/

class MyModule extends ModuleBase {
  async init() {
    const imgUrl = assetUrl("images/blueprint.png");
    const data = await loadJson("json/meteor.json");
  }
}

export default MyModule;

See the Module Development Guide for complete documentation including:

  • Full module structure and lifecycle
  • Method definitions and option types
  • SDK API reference and asset loading
  • Library usage (p5.js, Three.js, D3.js)
  • Advanced patterns and best practices

Built-in ModuleBase Methods

When you extend ModuleBase, you inherit powerful methods for free: show, hide, offset, scale, opacity, rotate, randomZoom, and matrix.

These methods can be triggered via the sequencer or external signal sources (MIDI/OSC/audio/file), giving you instant control over positioning, visibility, transformations, and effects.

See the Module Development Guide for complete documentation of all built-in methods and their parameters.


Two Modes: Sequencer vs External

Switch between modes in Settings → Signal Source.

Sequencer Mode (Default) - Program patterns with a 16-step grid per channel. Perfect for getting started, testing modules, and creating standalone pieces without external hardware. Adjustable BPM (60-130), patterns loop continuously and save with your tracks.

External Modes (Advanced) - Use one of the following sources:

  • MIDI (Pitch Class): map C..B (octave-agnostic). This avoids “G7 vs G8” naming differences across DAWs because matching is based on pitch class.
  • MIDI (Exact Note): map full MIDI note numbers (0–127) for octave-specific triggers.
  • OSC: map OSC addresses.
  • External Audio: capture live audio from a selected input device and trigger channels from Low/Medium/High bands.
  • File Upload: upload an MP3/WAV per track and trigger channels from Low/Medium/High bands during playback.

Configure global mappings in Settings for consistent control across all tracks.

Switch modes anytime - your tracks, modules, and methods remain the same. Only the trigger source changes.


Starter Modules

Every new project includes 16 starter modules in your modules/ folder:

2D & UI:

  • Text - Configurable text display and manipulation
  • Corners - DOM-based corner UI elements
  • GridOverlay - Canvas-based grid overlay
  • GridDots - Animated dot grid patterns
  • Frame - Border frame overlay
  • Image - Load images from workspace assets
  • CodeColumns - Animated code/text columns

3D Graphics:

  • SpinningCube - Basic Three.js example
  • CubeCube - Nested cube visualization
  • OrbitalPlane - Orbital mechanics simulation
  • LowEarthPoint - Low earth orbit visualization

Data Visualization:

  • AsteroidGraph - p5.js with workspace JSON data
  • MathOrbitalMap - Mathematical orbit mapping
  • CloudPointIceberg - 3D point cloud
  • ZKProofVisualizer - Zero-knowledge proof visualization

Getting Started:

  • HelloWorld - Minimal working example

Study these modules to learn patterns for 2D, 3D, text, and data visualization. All are fully editable in your project's modules/ folder.


Project Structure

Your Project Folder (Where You Work)

MyProject/
├── modules/                    # ← YOUR MODULES GO HERE
│   ├── Text.js
│   ├── GridOverlay.js
│   ├── SpinningCube.js
│   ├── YourCustomModule.js    # Create your own modules here
│   └── ...16 starter modules
│
├── assets/                     # ← YOUR ASSETS GO HERE
│   ├── images/
│   │   ├── blueprint.png      # Included starter asset
│   │   └── your-image.png     # Add your own images
│   └── json/
│       ├── meteor.json         # Included starter dataset
│       └── your-data.json      # Add your own data
│
└── nw_wrld_data/               # App data (auto-managed)
    └── json/
        ├── userData.json       # Tracks, settings, mappings
        ├── appState.json       # Current app state
        ├── config.json         # App configuration
        └── recordingData.json  # Recording data

Application Source (For Developers)

nw_wrld/
├── src/
│   ├── dashboard/              # React UI for control
│   │   ├── Dashboard.js        # Main dashboard logic
│   │   ├── modals/             # UI modals
│   │   ├── components/         # Reusable components
│   │   └── styles/             # Dashboard styles
│   │
│   ├── projector/              # Visual output window
│   │   ├── Projector.js        # Main projector logic
│   │   ├── helpers/
│   │   │   ├── moduleBase.ts   # Base class (the foundation)
│   │   │   └── threeBase.ts    # Three.js base class
│   │   └── templates/
│   │       └── ThreeTemplate.ts # 3D module template
│   │
│   ├── main/                   # Electron main process
│   │   ├── InputManager.js     # MIDI/OSC input handling
│   │   ├── starter_modules/    # Starter modules (seeded into projects)
│   │   └── workspaceStarterModules.js
│   │
│   ├── shared/
│   │   ├── json/               # JSON file management
│   │   ├── config/             # Default configuration
│   │   ├── sequencer/          # Sequencer playback engine
│   │   ├── midi/               # MIDI utilities
│   │   └── audio/              # Audio feedback
│   │
│   └── renderer.ts             # SDK initialization
│
├── package.json
└── README.md

Configuration

Configuration files are stored in your project's nw_wrld_data/json/ directory:

  • userData.json - Tracks, mappings, and settings (automatically managed)
  • appState.json - Current app state and workspace path (automatically managed)
  • config.json - App configuration, aspect ratios, background colors (automatically managed)
  • recordingData.json - Recording data (automatically managed)

These files are managed by the Dashboard and typically don't require manual editing.


Troubleshooting

Issue Solution
Project folder missing App will prompt to reselect - choose or create a new project
Module doesn't appear Verify filename is MyModule.js (letters/numbers only), and docblock includes @nwWrld name/category/imports
Module won't load Open Projector devtools; check for syntax errors, missing imports, or unknown imports
Module hidden Trigger show() method or set executeOnLoad: true
Asset won't load Verify path is relative to assets/ folder
Pattern not playing Check that methods are assigned to channels
No MIDI detected Enable IAC Driver/loopMIDI and verify DAW MIDI output
MIDI works once, then stops (Windows) Ensure nw_wrld fully closed (no background process). If using a virtual port, restart the port app or reboot.
Method not triggering Verify mapping, check method name match, check console
Hot reload not working Check file is saved in project's modules/ folder
App won't start (dev mode) Close other dev servers (port 9000), run npm install

Performance

  • Limit particle/object counts
  • Use requestAnimationFrame for animations
  • Clean up properly in destroy()
  • Test on target hardware

Building for Distribution

Build the Renderer (Production Bundle)

npm run build

Build macOS DMG

npm run dist:mac

This creates a distributable DMG in the release/ directory.

Build macOS DMGs (Split by Architecture - Recommended)

Universal mac builds bundle both Intel (x64) and Apple Silicon (arm64) into a single app, which significantly increases the download size.

To build two smaller DMGs (one per architecture):

npm run dist:mac:split

Or build a specific architecture:

npm run dist:mac:arm64
npm run dist:mac:x64

Build Windows (portable .exe)

npm run dist:win

This creates a portable Windows .exe in the release/ directory.

Build Linux (AppImage + .deb)

npm run dist:linux

This creates Linux artifacts (typically .AppImage and .deb) in the release/ directory.

Automated Releases

The project uses GitHub Actions to automatically build and attach release artifacts (macOS DMGs for arm64 + x64, Windows portable .exe, and Linux .AppImage + .deb). A SHA256SUMS file is also attached for verifying downloads:

  1. Tag a new version: git tag v1.0.0
  2. Push the tag: git push origin v1.0.0
  3. GitHub Actions builds the artifacts and creates a release automatically

See .github/workflows/release.yml for the CI configuration.


Contributing

  • Report bugs via issues
  • Submit pull requests for improvements
  • Share modules via discussions

License

This project is licensed under the GPL-3.0 License - see the LICENSE file for details.


Documentation


Technologies

Electron, React, Three.js, p5.js, D3.js, WebMIDI

Support

View on GitHub

Recent activity

commits and pull requests

Discussions

all 6

Releases and announcements

6 total
  1. v0.6.0-betav0.6.0-betaApr 2, 202692 downloads

    ## Changelog - **Dashboard: audio thresholds & track signal UI** — Reworked edit-track flow (`EditTrackModal`), settings, and **per-track signal threshold meters** (`SignalThresholdMeter`) so meters/settings align with the active track; related dashboard wiring updates. - **Starter module “rewrite” flow** — Ability to **rewrite/replace** starter modules from the UI (`AddModuleModal`, `useWorkspaceModules`, `AssetOptionInput`, confirmation modals), with **main-process / IPC / workspace** support (`registerWorkspaceBridge`, `windows`, `workspace`, `workspaceStarterModules`) and **projector + track lifecycle** updates (`Projector`, `previewController`, `trackLifecycle`) so previews and loads stay consistent. - **New starter module: CubeGrowth** — 3D cube growth visualization (`CubeGrowth.js` + registration). - **Corners module** — **Corner visibility** options and behavior updates. - **Docs** — README updates for input options and installers. - **Tests & CI ergonomics** — New/expanded **unit tests** (projector lifecycle, workspace starter runtime, corners, asset option input, user data bridge, etc.) and **E2E** (empty track recovery, play loading→ready, projector close recover

  2. v0.5.0-betav0.5.0-betaFeb 17, 2026105 downloads

    ## Changelog nw_wrld now ships native applications for macOS, Windows, and Linux. Download the `.dmg`, `.exe`, `.AppImage`, or `.deb` from the GitHub release page — each artifact includes a SHA256 checksum for verification. This release also introduces two new signal sources (audio capture and file upload), a module disable toggle, 3D displacement effects, and a number of reliability and security improvements across the board. - **Audio Input Support** — Added real-time audio capture as a new signal source. Select a microphone or loopback device in Settings and nw\_wrld analyses the incoming signal into three frequency bands (Low, Medium, High) that trigger mapped channels — no MIDI or OSC hardware required. - **File Upload Playback** — Added file-based audio as a signal source. Upload an `.mp3` or `.wav` to a track, press play (or spacebar), and nw\_wrld performs live FFT analysis on the audio, firing Low/Medium/High band triggers in time with the music. - **Per-Track Audio & File Settings** — Each track now carries its own signal configuration — threshold sensitivity per band, minimum trigger interval, and (for file mode) the assigned audio asset. Settings are indepen

  3. v0.4.0-betav0.4.0-betaJan 19, 2026pre-release

    # Release Notes - v0.4.0-beta **Release Date:** January 19, 2026 ## Major Changes ### TypeScript Migration - **Complete TypeScript migration** of the entire codebase for improved type safety and developer experience - Migrated 273 files from JavaScript to TypeScript (.js → .ts, .jsx → .tsx) - Added comprehensive type definitions for IPC bridge, validation, and user data structures - Introduced strict runtime validation layer to complement static type checking ### Testing Infrastructure - **New E2E testing framework** with Playwright covering 29 critical user workflows - Added 41 runtime validation unit tests (123 tests total, all passing) - Mock MIDI testing support for automated input testing - Test fixtures for dashboard/projector message buffers and workspace scaffolding - CI/CD workflow with automated testing on pull requests ### Architecture Improvements - **Modularized main process** into logical modules: IPC bridges, sandbox management, window lifecycle, workspace handling - **Refactored projector** from monolithic 1,621-line file to organized internal modules (track lifecycle, channel dispatch, preview controller) - **Dashboard hooks architecture*

  4. v0.3.0-betav0.3.0-betaJan 11, 2026pre-release

    # Release Notes - v0.3.0-beta **Release Date:** January 11, 2026 ## Features - MIDI improvements: pitch class conversions, note name resolution (e.g., "C4", "D#5"), channel limit reduced from 16 to 12 - Enhanced modals: SelectTrackModal, InputMappingsModal, SettingsModal, and track management modals with improved MIDI handling and pitch class selection - Improved modal components: customizable button alignment, additional styling options, optimized track name retrieval - Enhanced InputManager to include MIDI channel information in broadcast events - Updated documentation with DAW setup notes and MIDI channel best practices - DebugOverlayModal now clarifies log types for external inputs and method triggers ## Bug Fixes - Fixed recording data handling to preserve existing data while resetting channels for specific tracks - Improved input cleanup on shutdown to properly disconnect MIDI and OSC sources --- ## Migration Notes - MIDI channels are now limited to 12 (previously 16). Update channel assignments if they exceed this limit. - MIDI inputs now display note names instead of raw numbers (visual change only).

  5. v0.2.0-betav0.2.0-betaJan 6, 2026pre-release

    ## v0.2.0-beta Release Notes **Top 10 Updates:** 1. **Renamed `autoLoad` to `executeOnLoad`** - Clearer naming for module method options that trigger automatically when a module loads 2. **Atomic file writing for data integrity** - User data and recordings now use atomic writes with automatic backup/restore, preventing data corruption during crashes 3. **Validation system** - New `ValidationError` component provides clear error feedback in forms and modals throughout the dashboard 4. **Loading state management** - Prevents race conditions when rapidly switching between tracks, ensuring smooth transitions 5. **Bottom-aligned modals** - Added layout control for better modal positioning and improved `AddModuleModal` track selection logic 6. **Removed auto-refresh functionality** - Dashboard and Settings no longer auto-refresh unnecessarily; replaced with manual reload-data feature for better control 7. **Enhanced save management** - Dashboard now uses refs for active user data and manages save timeouts more effectively to prevent data loss 8. **Recording data cleanup** - Improved recording data management during track and set deletions, properly cleaning up

Commits per week

last 52 weeks
610Week of 2025-08-02: 0 commitsWeek of 2025-08-09: 0 commitsWeek of 2025-08-16: 0 commitsWeek of 2025-08-23: 0 commitsWeek of 2025-08-30: 0 commitsWeek of 2025-09-06: 0 commitsWeek of 2025-09-13: 0 commitsWeek of 2025-09-20: 0 commitsWeek of 2025-09-27: 0 commitsWeek of 2025-10-04: 0 commitsWeek of 2025-10-11: 0 commitsWeek of 2025-10-18: 0 commitsWeek of 2025-10-25: 0 commitsWeek of 2025-11-01: 0 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 18 commitsWeek of 2026-01-04: 54 commitsWeek of 2026-01-11: 61 commitsWeek of 2026-01-18: 20 commitsWeek of 2026-01-25: 18 commitsWeek of 2026-02-01: 11 commitsWeek of 2026-02-08: 7 commitsWeek of 2026-02-15: 3 commitsWeek of 2026-02-22: 0 commitsWeek of 2026-03-01: 0 commitsWeek of 2026-03-08: 0 commitsWeek of 2026-03-15: 0 commitsWeek of 2026-03-22: 0 commitsWeek of 2026-03-29: 5 commitsWeek of 2026-04-05: 0 commitsWeek of 2026-04-12: 0 commitsWeek of 2026-04-19: 0 commitsWeek of 2026-04-26: 0 commitsWeek of 2026-05-03: 0 commitsWeek of 2026-05-10: 0 commitsWeek of 2026-05-17: 0 commitsWeek of 2026-05-24: 0 commitsWeek of 2026-05-31: 0 commitsWeek of 2026-06-07: 0 commitsWeek of 2026-06-14: 0 commitsWeek of 2026-06-21: 0 commitsWeek of 2026-06-28: 0 commitsWeek of 2026-07-05: 0 commitsWeek of 2026-07-12: 0 commitsWeek of 2026-07-19: 0 commitsWeek of 2026-07-26: 0 commitsAug 2, 2025Jul 26, 2026
197 commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 0 commitsSun 1:00 — 0 commitsSun 2:00 — 0 commitsSun 3:00 — 0 commitsSun 4:00 — 0 commitsSun 5:00 — 0 commitsSun 6:00 — 0 commitsSun 7:00 — 0 commitsSun 8:00 — 1 commitsSun 9:00 — 1 commitsSun 10:00 — 0 commitsSun 11:00 — 1 commitsSun 12:00 — 1 commitsSun 13:00 — 1 commitsSun 14:00 — 0 commitsSun 15:00 — 3 commitsSun 16:00 — 1 commitsSun 17:00 — 2 commitsSun 18:00 — 1 commitsSun 19:00 — 2 commitsSun 20:00 — 6 commitsSun 21:00 — 2 commitsSun 22:00 — 0 commitsSun 23:00 — 0 commitsMon 0:00 — 0 commitsMon 1:00 — 1 commitsMon 2:00 — 0 commitsMon 3:00 — 0 commitsMon 4:00 — 0 commitsMon 5:00 — 0 commitsMon 6:00 — 0 commitsMon 7:00 — 0 commitsMon 8:00 — 0 commitsMon 9:00 — 0 commitsMon 10:00 — 0 commitsMon 11:00 — 0 commitsMon 12:00 — 3 commitsMon 13:00 — 0 commitsMon 14:00 — 0 commitsMon 15:00 — 0 commitsMon 16:00 — 0 commitsMon 17:00 — 3 commitsMon 18:00 — 4 commitsMon 19:00 — 0 commitsMon 20:00 — 1 commitsMon 21:00 — 1 commitsMon 22:00 — 2 commitsMon 23:00 — 0 commitsTue 0:00 — 0 commitsTue 1:00 — 1 commitsTue 2:00 — 1 commitsTue 3:00 — 0 commitsTue 4:00 — 0 commitsTue 5:00 — 0 commitsTue 6:00 — 0 commitsTue 7:00 — 0 commitsTue 8:00 — 0 commitsTue 9:00 — 0 commitsTue 10:00 — 0 commitsTue 11:00 — 3 commitsTue 12:00 — 0 commitsTue 13:00 — 0 commitsTue 14:00 — 0 commitsTue 15:00 — 1 commitsTue 16:00 — 0 commitsTue 17:00 — 2 commitsTue 18:00 — 1 commitsTue 19:00 — 8 commitsTue 20:00 — 13 commitsTue 21:00 — 2 commitsTue 22:00 — 4 commitsTue 23:00 — 1 commitsWed 0:00 — 2 commitsWed 1:00 — 0 commitsWed 2:00 — 0 commitsWed 3:00 — 0 commitsWed 4:00 — 0 commitsWed 5:00 — 0 commitsWed 6:00 — 0 commitsWed 7:00 — 1 commitsWed 8:00 — 0 commitsWed 9:00 — 0 commitsWed 10:00 — 0 commitsWed 11:00 — 0 commitsWed 12:00 — 4 commitsWed 13:00 — 0 commitsWed 14:00 — 0 commitsWed 15:00 — 0 commitsWed 16:00 — 1 commitsWed 17:00 — 4 commitsWed 18:00 — 1 commitsWed 19:00 — 5 commitsWed 20:00 — 1 commitsWed 21:00 — 1 commitsWed 22:00 — 8 commitsWed 23:00 — 4 commitsThu 0:00 — 1 commitsThu 1:00 — 1 commitsThu 2:00 — 0 commitsThu 3:00 — 0 commitsThu 4:00 — 0 commitsThu 5:00 — 0 commitsThu 6:00 — 0 commitsThu 7:00 — 0 commitsThu 8:00 — 2 commitsThu 9:00 — 0 commitsThu 10:00 — 0 commitsThu 11:00 — 0 commitsThu 12:00 — 4 commitsThu 13:00 — 0 commitsThu 14:00 — 0 commitsThu 15:00 — 1 commitsThu 16:00 — 0 commitsThu 17:00 — 3 commitsThu 18:00 — 1 commitsThu 19:00 — 3 commitsThu 20:00 — 2 commitsThu 21:00 — 3 commitsThu 22:00 — 2 commitsThu 23:00 — 3 commitsFri 0:00 — 0 commitsFri 1:00 — 0 commitsFri 2:00 — 0 commitsFri 3:00 — 0 commitsFri 4:00 — 0 commitsFri 5:00 — 0 commitsFri 6:00 — 0 commitsFri 7:00 — 0 commitsFri 8:00 — 0 commitsFri 9:00 — 1 commitsFri 10:00 — 0 commitsFri 11:00 — 0 commitsFri 12:00 — 5 commitsFri 13:00 — 0 commitsFri 14:00 — 1 commitsFri 15:00 — 2 commitsFri 16:00 — 0 commitsFri 17:00 — 4 commitsFri 18:00 — 0 commitsFri 19:00 — 0 commitsFri 20:00 — 1 commitsFri 21:00 — 4 commitsFri 22:00 — 0 commitsFri 23:00 — 1 commitsSat 0:00 — 3 commitsSat 1:00 — 0 commitsSat 2:00 — 0 commitsSat 3:00 — 0 commitsSat 4:00 — 0 commitsSat 5:00 — 0 commitsSat 6:00 — 0 commitsSat 7:00 — 0 commitsSat 8:00 — 0 commitsSat 9:00 — 0 commitsSat 10:00 — 0 commitsSat 11:00 — 4 commitsSat 12:00 — 2 commitsSat 13:00 — 1 commitsSat 14:00 — 4 commitsSat 15:00 — 3 commitsSat 16:00 — 2 commitsSat 17:00 — 4 commitsSat 18:00 — 7 commitsSat 19:00 — 5 commitsSat 20:00 — 3 commitsSat 21:00 — 2 commitsSat 22:00 — 4 commitsSat 23:00 — 2 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.

Who is committing

last 52 weeks
Maintainer commits217 (94%)
Community commits15 (6%)

232 commits in total over the last year.

DateListRankStars gained
Jan 10, 2026daily#25+123
  • freeCodeCamp/freeCodeCamp

    freeCodeCamp.org's open-source codebase and curriculum. Learn math, programming, and computer science for free.

    453.6K stars · TypeScript

  • openclaw/openclaw

    Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

    385.5K stars · TypeScript

  • openclaw/openclaw

    Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

    384.4K stars · TypeScript

  • openclaw/openclaw

    Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

    384.4K stars · TypeScript

  • openclaw/openclaw

    Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

    384.4K stars · TypeScript

  • anomalyco/opencode

    The open source coding agent.

    194.7K stars · TypeScript