Skip to content

🎸 NINJAM client as a DAW plugin β€” jam with musicians worldwide (CLAP/VST3/AU)

License

Notifications You must be signed in to change notification settings

mkschulze/JamWide

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

81 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

JamWide

A cross-platform audio plugin client for NINJAM β€” the open-source, internet-based real-time collaboration software for musicians.

🌐 Website: jamwide.audio

License Platform Formats Version Status

What is NINJAM?

NINJAM (Novel Intervallic Network Jamming Architecture for Music) allows musicians to jam together over the internet in real-time. Unlike traditional approaches that try to minimize latency, NINJAM embraces it by using a time-synchronized approach where everyone plays along with what was recorded in the previous interval. This creates a unique collaborative experience where musicians can perform together regardless of geographic location.

About This Plugin

JamWide ports the NINJAM client functionality into a cross-platform CLAP audio plugin, allowing you to:

  • Use NINJAM directly in your DAW β€” Connect to jam sessions without leaving your production environment
  • Route audio flexibly β€” Use your DAW's mixer for monitoring and processing
  • Record sessions natively β€” Capture everything directly in your DAW's timeline
  • Apply effects β€” Process incoming audio from other musicians with your favorite plugins

Features

Core Functionality

  • Connect to any NINJAM server
  • Real-time audio streaming with OGG/Vorbis encoding
  • Automatic BPM/BPI synchronization with the server
  • BPM/BPI voting via chat commands
  • Local and remote channel management
  • Chat room with message history and timestamps

Audio

  • Stereo input/output
  • Master and metronome volume/pan/mute controls
  • Per-channel volume, pan, mute, and solo
  • VU meters for all channels
  • Visual timing guide for beat alignment
  • Soft clipping on master output

User Interface

  • Dear ImGui interface
  • Native rendering (Metal on macOS, D3D11 on Windows)
  • Server browser with live user lists
  • Real-time status and connection display
  • Collapsible panels for all sections

Supported Hosts

Works with any DAW that supports CLAP, VST3, or Audio Unit plugins:

Format Hosts
CLAP Bitwig Studio, REAPER, MultitrackStudio
VST3 Ableton Live, Cubase, FL Studio, REAPER, Studio One
AU v2 Logic Pro, GarageBand, MainStage (macOS only)

System Requirements

  • Windows: Windows 10 or later (64-bit)
  • macOS: macOS 10.15 (Catalina) or later

Building

Requirements

  • CMake 3.20 or later
  • C++20 compatible compiler
    • macOS: Xcode 14+ / Apple Clang 14+ (macOS 10.15+)
    • Windows: Visual Studio 2022 / MSVC 19.30+ (Windows 10+)
  • Git (for submodule dependencies)

Dependencies (included as submodules)

Build Instructions

# Clone the repository
git clone --recursive https://github.com/mkschulze/JamWide.git
cd JamWide

# Initialize submodules if not cloned with --recursive
git submodule update --init --recursive

macOS

# Configure - Dev build with verbose logging
cmake -B build -DCMAKE_BUILD_TYPE=Release -DJAMWIDE_DEV_BUILD=ON

# Configure - Production build with minimal logging  
cmake -B build -DCMAKE_BUILD_TYPE=Release -DJAMWIDE_DEV_BUILD=OFF

# Build
cmake --build build --config Release

# Quick install (builds and installs to user plugin folders)
./install.sh

Windows

Requirements:

  • Visual Studio 2022 (or newer) with C++ Desktop Development workload
  • CMake 3.20+ (included with Visual Studio)
  • Git for Windows
# Configure with Visual Studio 2022 (or Visual Studio 18 for VS 2026)
cmake -B build -G "Visual Studio 17 2022" -A x64 -DCLAP_WRAPPER_DOWNLOAD_DEPENDENCIES=TRUE

# Build with MSBuild
$MSBUILD = "C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe"
& $MSBUILD build\jamwide.sln /p:Configuration=Release /v:minimal

# Quick install (builds and installs to user plugin folders)
.\install-win.ps1

Note: The -DCLAP_WRAPPER_DOWNLOAD_DEPENDENCIES=TRUE flag automatically downloads VST3 SDK and other dependencies.

Quick Install

macOS

./install.sh
# Installs to:
# - ~/Library/Audio/Plug-Ins/CLAP/JamWide.clap
# - ~/Library/Audio/Plug-Ins/VST3/JamWide.vst3
# - ~/Library/Audio/Plug-Ins/Components/JamWide.component

Windows

.\install-win.ps1
# Installs to:
# - %LOCALAPPDATA%\Programs\Common\CLAP\JamWide.clap
# - %LOCALAPPDATA%\Programs\Common\VST3\JamWide.vst3

Build Output

macOS

  • build/JamWide.clap β€” CLAP plugin
  • build/JamWide.vst3 β€” VST3 plugin
  • build/JamWide.component β€” Audio Unit v2

Windows

  • build/CLAP/Release/JamWide.clap β€” CLAP plugin
  • build/Release/JamWide.vst3 β€” VST3 plugin

Installation

macOS (CLAP)

Copy JamWide.clap to:

  • ~/Library/Audio/Plug-Ins/CLAP/ (user)

macOS (VST3)

Copy JamWide.vst3 to:

  • ~/Library/Audio/Plug-Ins/VST3/ (user)

macOS (Audio Unit)

Copy JamWide.component to:

  • ~/Library/Audio/Plug-Ins/Components/ (user)

Windows (CLAP)

Copy JamWide.clap to:

  • %LOCALAPPDATA%\Programs\Common\CLAP\ (user)

Windows (VST3)

Copy JamWide.vst3 to:

  • %LOCALAPPDATA%\Programs\Common\VST3\ (user)

Usage

  1. Load the JamWide plugin on a track in your DAW
  2. Open the plugin GUI
  3. Enter a server address (e.g., ninbot.com:2049) or select from the list
  4. Enter your username and optional password
  5. Click Connect
  6. Route audio to the plugin's input for your local channel
  7. The plugin output contains the mixed audio from all participants

Parameters

Parameter Range Description
Master Volume 0.0 – 1.0 Overall output level
Metronome Volume 0.0 – 1.0 Click track level
Metronome Pan -1.0 – 1.0 Click track stereo position
Monitor Input On/Off Hear your own input
Connected On/Off Connection state

Project Status

βœ… Stable Release β€” Tested on macOS and Windows in Ableton Live, REAPER, Bitwig Studio, Logic Pro, and GarageBand

Features

  • Core NJClient port (audio engine, networking)
  • CLAP, VST3, and Audio Unit v2 plugin formats
  • Platform GUI (macOS Metal, Windows D3D11)
  • Full UI: status, connection, chat, local/remote channels, master controls
  • Server browser with live user lists (autosong.ninjam.com)
  • VU meters and visual timing guide
  • BPM/BPI voting via chat
  • Anonymous login support
  • Thread-safe command queue architecture
  • GitHub Actions CI/CD for Windows and macOS

Future

  • Linux support (X11/Wayland + OpenGL)
  • UI styling and graphics improvements
  • Per-channel receive toggle

Architecture

JamWide/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ core/           # NJClient port (networking, audio decode/encode)
β”‚   β”œβ”€β”€ plugin/         # CLAP entry point and wrapper
β”‚   β”œβ”€β”€ platform/       # OS-specific GUI (Metal/D3D11 + ImGui)
β”‚   β”œβ”€β”€ threading/      # Run thread, command queue, SPSC ring
β”‚   β”œβ”€β”€ net/            # Server list fetcher
β”‚   β”œβ”€β”€ ui/             # ImGui UI panels
β”‚   └── debug/          # Logging utilities
β”œβ”€β”€ wdl/                # WDL libraries (jnetlib, sha, etc.)
β”œβ”€β”€ libs/               # Third-party submodules
└── CMakeLists.txt

Threading Model

The plugin uses a command queue architecture for thread safety:

  • UI Thread - Renders ImGui, sends commands to run thread
  • Run Thread - Processes NJClient, handles network I/O
  • Audio Thread - Calls AudioProc() for sample processing

Communication is lock-free via SPSC ring buffers.

Contributing

Contributions are welcome! Please feel free to submit issues and pull requests.

Development Setup

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)

UI ID Check

To avoid Dear ImGui ID collisions, run the local checker:

python3 tools/check_imgui_ids.py

It flags unscoped widget labels that are not wrapped in ImGui::PushID(...). 5. Open a Pull Request

License

This project is licensed under the GNU General Public License v2.0 β€” see the LICENSE file for details.

NINJAM and the original client code are Copyright Β© Cockos Incorporated.

Acknowledgments

  • Cockos for creating NINJAM and making it open source
  • WDL library by Cockos
  • The CLAP team for the excellent plugin API
  • Omar Cornut for Dear ImGui

See Also


Made with β™ͺ for musicians who want to jam together, anywhere in the world.

About

🎸 NINJAM client as a DAW plugin β€” jam with musicians worldwide (CLAP/VST3/AU)

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •