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 orchestrating and triggering visual modules via MIDI, OSC, and audio.

Stars
2.2K
Forks
195
Watchers
32
Open issues
2
Open PRs
8
Contributors
~9
Commits
274
Branches
8

TypeScriptGPL-3.0Created Dec 31, 2025Last push 1d agoLatest release v0.7.0-beta+2 stars this week+15 this month

Quick answers

What is nw_wrld?
An event-driven sequencer for orchestrating and triggering visual modules via MIDI, OSC, and audio.
What does nw_wrld do?
nw_wrld is an event-driven sequencing platform designed to orchestrate and trigger custom visual modules using modern web technologies. It allows users to write their own visual modules in JavaScript—leveraging libraries like Three.js, p5.js, or D3.js—and then trigger them in real-time using built-in sequencers, MIDI controllers, OSC signals, or audio inputs. The platform utilizes a dual-window architecture, separating the control dashboard from the visual projector, making it ideal for live performances and interactive exhibitions. By utilizing hot-reloading and self-contained project folders, it provides a highly flexible environment for generative art and audiovisual composition.
Who is nw_wrld for?
VJ artists, creative coders, and developers looking for a flexible, web-tech based platform for live audiovisual sequencing.
How do I get started with nw_wrld?
npm install && npm start
How popular is nw_wrld on GitHub?
aagentah/nw_wrld has 2,160 stars and 195 forks on GitHub, and gained 2 stars in the last 7 days.
What license does nw_wrld use?
aagentah/nw_wrld is released under the GPL-3.0 license.

Star history

since Jul 28, 2026
01K2KJul 2026Aug 2026Sep 2026Oct 2026
2.2K stars as of Oct 4, 2026. Measured daily since Jul 28, 2026; GitHub no longer exposes earlier star timestamps.

Contribution activity

commits per day, last 52 weeks
OctNovDecJanFebMarAprMayJunJulAugSepOctMonWedFri2025-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: 11 commits2026-06-06: 6 commits2026-06-07: 3 commits2026-06-08: 0 commits2026-06-09: 0 commits2026-06-10: 0 commits2026-06-11: 6 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: 1 commit2026-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 commits2026-08-02: 0 commits2026-08-03: 0 commits2026-08-04: 0 commits2026-08-05: 0 commits2026-08-06: 0 commits2026-08-07: 0 commits2026-08-08: 0 commits2026-08-09: 0 commits2026-08-10: 0 commits2026-08-11: 0 commits2026-08-12: 0 commits2026-08-13: 0 commits2026-08-14: 0 commits2026-08-15: 0 commits2026-08-16: 0 commits2026-08-17: 0 commits2026-08-18: 0 commits2026-08-19: 9 commits2026-08-20: 0 commits2026-08-21: 2 commits2026-08-22: 0 commits2026-08-23: 0 commits2026-08-24: 0 commits2026-08-25: 0 commits2026-08-26: 0 commits2026-08-27: 0 commits2026-08-28: 0 commits2026-08-29: 0 commits2026-08-30: 0 commits2026-08-31: 0 commits2026-09-01: 0 commits2026-09-02: 0 commits2026-09-03: 0 commits2026-09-04: 0 commits2026-09-05: 0 commits2026-09-06: 0 commits2026-09-07: 0 commits2026-09-08: 0 commits2026-09-09: 0 commits2026-09-10: 0 commits2026-09-11: 0 commits2026-09-12: 0 commits2026-09-13: 0 commits2026-09-14: 0 commits2026-09-15: 0 commits2026-09-16: 0 commits2026-09-17: 0 commits2026-09-18: 0 commits2026-09-19: 0 commits2026-09-20: 0 commits2026-09-21: 0 commits2026-09-22: 0 commits2026-09-23: 0 commits2026-09-24: 0 commits2026-09-25: 0 commits2026-09-26: 0 commits2026-09-27: 0 commits2026-09-28: 0 commits2026-09-29: 0 commits2026-09-30: 0 commits2026-10-01: 0 commits2026-10-02: 0 commits2026-10-03: 0 commits2026-10-04: 0 commits2026-10-05: 0 commits2026-10-06: 0 commits2026-10-07: 0 commits2026-10-08: 0 commits2026-10-09: 0 commits2026-10-10: 0 commits
235 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Actively maintained

    Pushed within 48 hours

  • Continuous integration

    Automated checks passing

What nw_wrld does

nw_wrld is an event-driven sequencing platform designed to orchestrate and trigger custom visual modules using modern web technologies. It allows users to write their own visual modules in JavaScript—leveraging libraries like Three.js, p5.js, or D3.js—and then trigger them in real-time using built-in sequencers, MIDI controllers, OSC signals, or audio inputs. The platform utilizes a dual-window architecture, separating the control dashboard from the visual projector, making it ideal for live performances and interactive exhibitions. By utilizing hot-reloading and self-contained project folders, it provides a highly flexible environment for generative art and audiovisual composition.

VJ artists, creative coders, and developers looking for a flexible, web-tech based platform for live audiovisual sequencing.

  • Event-driven sequencing: Trigger visual modules using built-in 16-step sequencers or external signals.
  • External signal mapping: Seamlessly integrates with MIDI controllers, OSC senders, and live audio inputs.
  • Dual-window architecture: Separates the control dashboard from the live visual projector output.
  • Hot module reloading: Edit JavaScript visual modules and see the changes instantly without restarting.
  • Library agnostic: Supports custom visual modules built with Three.js, p5.js, D3.js, or vanilla JavaScript.

Where teams use it

Live audiovisual performance

VJ artists use MIDI controllers and a DAW to trigger generative visuals in real-time during live sets.

Interactive art exhibitions

Creators map OSC signals from hardware sensors to trigger spatial 3D graphics in an installation.

Generative visual prototyping

Developers use hot-reloading to rapidly prototype and test new data visualization modules using Three.js.

Audio-reactive rendering

Users map live audio frequencies to automatically scale, rotate, and color visual modules on the projector.

Getting started: npm install && npm start

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

A project folder holds three things: modules/ (your hot-reloadable visual modules), assets/ (images, JSON, and other resources), and nw_wrld_data/ (tracks, settings, and recordings). For the full annotated layout, see Project Structure below.

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:

  • 22 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 a single-channel workflow and a split-channel workflow (method triggers on one channel, track selection on another). For the full channel-defaults walkthrough and best practice, see Getting Started.


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, and 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, listAssets
  • Global libs: THREE, p5, d3, Noise
  • Three.js loaders: OBJLoader, PLYLoader, PCDLoader, GLTFLoader, STLLoader
/*
@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, viewportLine, background, and invert. A built-in matrix method is also available as a triggerable method, handled by the projector layout layer: declare and trigger it, but do not call it from module code.

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 (default 120), patterns loop continuously and save with your tracks.

External Modes (Advanced) - Drive channels from MIDI, OSC, live audio input, or an uploaded audio file. For the per-source breakdown and routing details, see Advanced: External Input Control above. 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 22 starter modules in your modules/ folder, grouped by category:

2D:

  • AsteroidGraph - p5.js with workspace JSON data
  • Corners - DOM-based corner UI elements
  • Frame - Border frame overlay
  • GridDots - Animated dot grid patterns
  • GridOverlay - Canvas-based grid overlay
  • Image - Load images from workspace assets
  • ImageGallery - Cycle through multiple workspace images
  • MathOrbitalMap - Mathematical orbit mapping
  • OrbitalPlane - Orbital mechanics simulation
  • PerlinBlob - Noise-driven animated blob
  • ScanLines - Animated scan-line overlay

3D:

  • BasicGeometry - Three.js primitive geometry example
  • CloudPointIceberg - 3D point cloud
  • CubeCube - Nested cube visualization
  • CubeGrowth - Growing cube animation
  • LowEarthPoint - Low earth orbit visualization
  • ModelLoader - Load external 3D models
  • SpinningCube - Basic Three.js example

Text:

  • CodeColumns - Animated code/text columns
  • HelloWorld - Minimal working example
  • Text - Configurable text display and manipulation
  • ZKProofVisualizer - Zero-knowledge proof visualization

Study these modules to learn patterns for 2D, 3D, and text. 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
│   └── ...22 starter modules
│
├── assets/                     # ← YOUR ASSETS GO HERE
│   ├── images/
│   │   ├── blueprint.png      # Included starter asset
│   │   └── your-image.png     # Add your own images
│   ├── models/                 # 3D models (OBJ, PLY, PCD, GLTF/GLB, STL)
│   │   └── cube.obj            # Included starter model
│   ├── fonts/                  # Fonts for text modules
│   │   └── RobotoMono-VariableFont_wght.ttf
│   └── 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
│   │
│   ├── projector/              # Visual output window
│   │   ├── Projector.ts        # Main projector logic
│   │   ├── moduleSandboxEntry.ts # SDK initialization (sandbox entry)
│   │   └── helpers/
│   │       ├── moduleBase.ts   # Base class (the foundation)
│   │       └── threeBase.ts    # Three.js base class
│   │
│   ├── main/                   # Electron main process
│   │   ├── InputManager.ts     # MIDI/OSC input handling
│   │   ├── starter_modules/    # Starter modules (seeded into projects)
│   │   └── workspaceStarterModules.ts
│   │
│   └── shared/
│       ├── json/               # JSON file management
│       ├── config/             # Default configuration
│       ├── sequencer/          # Sequencer playback engine
│       ├── midi/               # MIDI utilities
│       ├── audio/              # Audio feedback
│       └── styles/             # Shared styles (_main.css)
│
├── index.js                    # Thin bootstrap into the compiled main process
├── package.json
└── README.md

src/index.js is a thin bootstrap that loads the compiled main process. The Electron main process lives under src/main/mainProcess/ (entry.ts, windows.ts, sandbox.ts, workspace.ts, protocols.ts, lifecycle.ts, and ipcBridge/).


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

Common quick fixes are below. For the full troubleshooting reference (module, asset, sequencer, MIDI, dev-mode, and Linux/WSL issues), see Getting Started.

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 hidden Trigger show() method or set executeOnLoad: true
No MIDI detected Enable IAC Driver/loopMIDI and verify DAW MIDI output

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 (a single universal macOS DMG covering 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 v0.5.1-beta
  2. Push the tag: git push origin v0.5.1-beta
  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

Releases and announcements

7 total
  1. v0.7.0-betav0.7.0-betaAug 21, 2026127 downloads

    ## Changelog nw_wrld 0.7.0-beta is a hardening release. No new signal sources this time; instead the focus is on project data that survives crashes, packaged builds that are locked down properly, a noticeably lighter dashboard and projector under live input, and a large cleanup of the codebase and documentation. Two small dashboard additions came along for the ride: one-click duplication of sets, tracks and modules, and a live input readout in the footer. Download the `.dmg`, `.exe`, `.AppImage`, or `.deb` from the release page; each artifact has a SHA256 checksum in `SHA256SUMS`. - **Duplicate Sets, Tracks and Modules**: Every set, track and module instance now has a duplicate button. Copies carry their full configuration (module settings, channel mappings, sequencer patterns and recordings), get a fresh id, and are named with a `(Copy)` suffix that increments if you duplicate again. Track copies are placed in the next free track slot. - **Live Input Activity in the Footer**: The dashboard footer now shows the most recent track selection and channel trigger as they arrive, with the source (MIDI, OSC, audio, file or sequencer). You can confirm signal is reaching nw_wrld wi

  2. v0.6.0-betav0.6.0-betaApr 2, 2026108 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

  3. 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

  4. 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*

  5. 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).

Commits per week

last 52 weeks
610Week 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: 17 commitsWeek of 2026-06-07: 9 commitsWeek of 2026-06-14: 0 commitsWeek of 2026-06-21: 0 commitsWeek of 2026-06-28: 0 commitsWeek of 2026-07-05: 1 commitsWeek of 2026-07-12: 0 commitsWeek of 2026-07-19: 0 commitsWeek of 2026-07-26: 0 commitsWeek of 2026-08-02: 0 commitsWeek of 2026-08-09: 0 commitsWeek of 2026-08-16: 11 commitsWeek of 2026-08-23: 0 commitsWeek of 2026-08-30: 0 commitsWeek of 2026-09-06: 0 commitsWeek of 2026-09-13: 0 commitsWeek of 2026-09-20: 0 commitsWeek of 2026-09-27: 0 commitsWeek of 2026-10-04: 0 commitsOct 11, 2025Oct 4, 2026
235 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 — 3 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 — 10 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 — 4 commitsThu 11:00 — 0 commitsThu 12:00 — 4 commitsThu 13:00 — 0 commitsThu 14:00 — 0 commitsThu 15:00 — 3 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 — 6 commitsFri 22:00 — 10 commitsFri 23:00 — 2 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 — 4 commitsSat 13:00 — 1 commitsSat 14:00 — 4 commitsSat 15:00 — 4 commitsSat 16:00 — 3 commitsSat 17:00 — 5 commitsSat 18:00 — 7 commitsSat 19:00 — 5 commitsSat 20:00 — 5 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 commits259 (95%)
Community commits15 (5%)

274 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.

    456.7K stars · TypeScript

  • openclaw/openclaw

    The AI that really does things. Any OS. Any Platform. The lobster way. 🦞

    391.3K stars · TypeScript

  • anomalyco/opencode

    The open source coding agent.

    211.7K stars · TypeScript

  • n8n-io/n8n

    Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.

    206.7K stars · TypeScript

  • microsoft/vscode

    Visual Studio Code

    193.5K stars · TypeScript

  • firecrawl/firecrawl

    Supercharge your AI agents with data from the web and beyond. Building the library for superintelligence. 🔥

    188.6K stars · TypeScript