A collection of small, self-contained demo applications built on the
Pexip Pulse SDK. Each demo highlights a slice of what Pulse can do, and is
designed so you can cd into it, read a short README, run two or three
commands, and see it work.
New to Pulse? Start with doppler (a video call in one file),
then browse pexninja when you want to see the full breadth
of the SDK. Extending the repo? Read AGENTS.md and
docs/adding-a-demo.md.
| Demo | What it shows | Platform / build |
|---|---|---|
| doppler | A Pexip Infinity video call in one heavily-commented file: connect over REST, render the remote + self-view yourself, plus RTMP ingest and a camera-on-RTMP "Twitch mix". | C++ / CMake · built by default |
| gateway | Two Pulse instances bridged together, relaying raw audio + video between two conferences using only the data-session input/output APIs — a tiny cross-domain "guard". | C++ / CMake · built by default |
| sip | Pulse used purely as a media engine, with PJSIP doing the SIP signalling (manual SDP offer/answer). No Pexip Infinity node required. | C++ / CMake · opt-in (needs PJSIP) |
| pexninja | The full reference client (~12k LoC) exercising the widest array of Pulse functionality — conference control, roster, devices, annotation, media stats and much more. | C++ / CMake (Linux, macOS) · MSVC (Windows, via the Pulse NuGet) · opt-in (extra deps) |
| android | A Kotlin/Gradle sample app using the Pulse Android SDK: preflight, join, roster, chat, screen share, media stats. | Android / Gradle |
| windows | A native Windows WinForms app that places a call through the Pexip.Pulse NuGet package: connect over REST, two-way audio + video using the default devices, with the remote and self-view video rendered inside the window. | Windows / .NET (WinForms) |
The C/C++ demos link against the Pulse library + headers. The SDK artifacts ship
in this repo under sdk/, organised by platform.
Install the .deb packages — apt -f install pulls in the couple of system
libs they need (libpulse0, libspeex1, libxv1, ...):
sudo dpkg -i sdk/linux/debs/libpexcommon_*.deb \
sdk/linux/debs/libpexpulse_*.deb \
sdk/linux/debs/libpexpulse-dev_*.deb
sudo apt-get install -fThis installs the headers under /opt/pexip/include and the shared library
under /opt/pexip/lib.
The Pulse dylibs ship under sdk/macos/; point CMake at them with
-DPEXIP_PREFIX="$(pwd)/sdk/macos" (see the per-demo READMEs).
sudo apt-get install -y cmake build-essential \
libglfw3-dev libgl1-mesa-devIndividual demos may need a little more (e.g. pexninja wants libx11-dev,
sip needs PJSIP) — each demo's README spells out its extras.
The build is a thin orchestrator: every demo is a CMake sub-project gated behind
a BUILD_<DEMO> option. The lightweight demos build by default:
cmake -S . -B build
cmake --build build -j
./build/run-doppler.sh # or ./build/run-pulse-gateway.shOn the first configure, CMake fetches Dear ImGui from GitHub (≈ 5 MB). Enable
the opt-in demos with their options, e.g. -DBUILD_PEXNINJA=ON or
-DBUILD_DOPPLER_SIP=ON — see each demo's README for details.
Each demo ships a generated run-<demo>.sh launcher that puts Pulse's private
sibling libraries on the dynamic-linker search path. If you'd rather run the
binary directly:
LD_LIBRARY_PATH=/opt/pexip/lib ./build/demos/doppler/doppler
# or, system-wide:
echo /opt/pexip/lib | sudo tee /etc/ld.so.conf.d/pexip.conf && sudo ldconfigdemos/ One folder per demo (source + README + CMakeLists).
sdk/ The Pulse SDK artifacts: linux/ (debs + extracted), macos/, windows/.
cmake/ Shared CMake helpers (PulseDemo.cmake).
docs/ adding-a-demo.md, a DEMO_TEMPLATE/ skeleton, and api/ — the
generated Pulse C API reference (open docs/api/index.html).
scripts/ Helper scripts (e.g. install-pjsip.sh).
AGENTS.md How to relate to the Pulse SDK and extend this repo.
The repo is built to grow. Copy docs/DEMO_TEMPLATE/,
drop in your source, wire up a few lines of CMake using the shared helpers, and
add a row to the table above. The full walk-through — including the conventions
that keep every demo easy to build and run — is in
docs/adding-a-demo.md, and the SDK orientation for
agents and humans alike is in AGENTS.md.