The lab for the protocols your show, installation and IoT gear speaks.
Send, capture, emulate and impair OSC, UDP/TCP, HTTP, WebSocket and MQTT —
by hand, as repeatable experiments, and from CI or an AI assistant.
Documentation · Download · Server & Docker · Changelog
Documentation in: English · Русский · Español · Français · Deutsch · Português · 中文 · 日本語 · 한국어 · हिन्दी · العربية
Signal Lab is a desktop app for Windows and Linux and a server you use from a browser (also as a Docker image). It is built for bringing up shows, installations and networked devices before the rest of the system exists — and for testing the services and APIs they talk to. In one window: an OSC sender and monitor, a UDP/TCP terminal, an HTTP and WebSocket client, an MQTT client and broker, mock servers for the devices and APIs that are not there yet, a network impairment relay, a load tester and a test runner for CI.
| Talk to devices | OSC with typed arguments, a monitor and a waveform generator; raw UDP and TCP; HTTP with Basic, Bearer and Digest, cookies and bursts; WebSocket; MQTT 3.1.1 with QoS 0–2, retained messages and a last will; broadcast, multicast and discovery. |
| See every byte | The Inspector captures what Signal Lab sends and receives, decoded and in hex; export it, or save a frame as a signal. |
| Keep a library | Signals in folders, fired from anywhere with Ctrl+K. |
| Fake what is not there | Emulators: HTTP APIs, OSC/UDP responders, TCP devices and an MQTT broker, with rules, templated replies, faults and outages. |
| Break the network on purpose | An impairment relay for UDP and TCP: latency, jitter, loss and bursts of loss, duplication, corruption, reordering, a bandwidth limit, resets, half-open connections and going offline, with presets from a LAN to a satellite link. |
| Push and probe | Storm, a controlled flood of UDP datagrams or TCP connections with the rate, throughput and errors live; the Scanner, a TCP connect scan with the greeting each service sends. |
| Make it repeatable | Experiments: a visual flow of sends, waits, checks, extraction, branches, loops, parallel branches, retries and fault phases, with parameters, profiles and secrets — seeded, reproducible, with a report of every run. |
| Load it | Load profiles on an HTTP request — constant, ramp, steps, spike, random arrivals — with thresholds on p95, errors and rate, and two runs compared. |
| Automate it | signallab, the command line with JUnit reports for CI and a GitHub Action; MCP for AI assistants; an HTTP API for everything the interface does. |
The interface speaks eleven languages: English, Russian, Spanish, French, German, Portuguese, Chinese, Japanese, Korean, Hindi and Arabic. The documentation is complete in eight of them; in Portuguese, Japanese and Arabic most of its pages are still being translated.
-
Windows —
Signal.Lab_<version>_x64-setup.exe(just for you, or for everyone) or the.msifrom the latest release. The installers are not code-signed yet, so SmartScreen may ask: More info → Run anyway. -
Linux —
.deb,.rpmor.AppImagefrom the same page. -
Server — on a Linux host with Docker: in one command (it offers to install Docker if it is missing), or by hand:
curl -fsSL https://raw.githubusercontent.com/ProAnima/SignalLab/main/deploy/install.sh | shdocker run -d --name signallab --network host --restart unless-stopped \ -v signallab-data:/data --read-only --cap-drop ALL --security-opt no-new-privileges \ ghcr.io/proanima/signallab:latest docker logs signallab # the access token, on the first start -
Command line —
signallabcomes with the Windows installers, the.deband the.rpm(not the AppImage) and is in the server image; archives for CI are on the release page.
The desktop app looks for signed releases once a day and installs one when you say so. Details: installing and updating, running a server.
The documentation is online and, from the release after 1.0.0, inside the app and the server, so it works offline: press F1 on any screen.
| Getting started | what it is, installing, the window, a first session, the ideas |
| Protocols | OSC, UDP and TCP, HTTP, WebSocket, MQTT, broadcast and discovery |
| Tools | signals, the Inspector, emulators, impairment, Storm, Scanner |
| Experiments | the editor, every node, data and templates, flow, load, faults, runs |
| Automation | the command line, CI, MCP |
| Server · HTTP API | running it, its security, every command and event |
| Reference | shortcuts, files, troubleshooting, every error message |
npm install
npm run tauri dev # the desktop app with live reload
npm run check # the checks CI runs; CI also tours every screen and builds the imageYou need Node 22.18 or newer (CI uses 24), Rust as pinned in rust-toolchain.toml
and, on Windows, the MSVC build tools and WebView2 (part of Windows 10 and 11); on
Linux, WebKitGTK 4.1 and the libraries Tauri needs. See
building and running
and the architecture.
Storm, Scanner and Broadcast send real traffic to real hosts, and a broadcast or a
sweep reaches every device on the segment. Point them only at equipment you own or
are authorised to test. Every default unicast target is on loopback — Broadcast's
broadcast, multicast and sweep modes start on the local segment
(255.255.255.255, 239.1.1.1, 192.168.1.0/24); the engine's guard rails — a
sweep of at most 1024 hosts, a beacon of at most 50 000 packets a second — are
guard rails, not permission.
Issues, ideas, translations and pull requests are welcome — see CONTRIBUTING.md. Report security problems privately as SECURITY.md describes. Everyone follows the code of conduct.
MIT © 2026 ProAnimaStudio — info@proanima.net.