WebRTC Without a Browser: Meet Momo, the Native Client That Runs Anywhere
You've probably built something with WebRTC before. You wired up a video call in the browser, it worked, and then you hit the wall: what if you need to stream from a Raspberry Pi, a Jetson, or a headless Linux box with no Chrome in sight? That's the gap Momo fills. It's a WebRTC native client built on libwebrtc that runs without a browser, so you can put a WebRTC endpoint on hardware where a browser was never an option.
What It Does
Momo is a native WebRTC client from Shiguredo that uses libwebrtc directly instead of leaning on a browser runtime. It runs across multiple environments and supports several connection modes. In P2P mode, Momo acts as its own signaling server, so you can open a browser, point it at Momo, and you're connected. It also speaks the Ayame signaling protocol (which means Momo-to-Momo connections work), and it has a Sora mode for Shiguredo's WebRTC SFU.
The project is written to take advantage of hardware acceleration wherever it's available. On Raspberry Pi, it taps the GPU's video hardware through V4L2 M2M for H.264 encode and decode (though the Pi 5 drops H.264 hardware support, so keep that in mind). On macOS, it uses Apple VideoToolbox for H.264 and H.265. NVIDIA cards get VP9, AV1, H.264, and H.265 through the NVIDIA Video Codec SDK. Intel graphics get the same codec set via Intel VPL on Windows and Ubuntu x86_64. Jetson boards use the JetPack SDK. There's also OpenH264 for software H.264 encode and decode when hardware isn't an option.
Why It's Cool
-
It handles the awkward hardware cases. The whole point of a browserless client is that it goes where browsers don't. Momo's hardware support list reads like a survey of embedded and edge platforms: Raspberry Pi, Jetson, Intel iGPUs, NVIDIA discrete cards. If you're building something that captures or displays video on a device that boots to a shell, this is aimed squarely at you.
-
Performance is the explicit goal. The README calls out 120 fps streaming (using uncompressed camera input plus a hardware encoder) and 4K capture and playback. Those numbers only make sense if you're bypassing the browser and talking to the encoder directly, which is exactly what Momo does.
-
The P2P mode removes infrastructure. Momo carries its own signaling server, so a browser can connect to it with nothing else running. For quick tests or simple one-to-one setups, that's one less moving piece to stand up.
-
It supports uncompressed formats. YUY2 and NV12 input are supported, which matters if you're pulling raw frames from a camera and want to skip a conversion step before encoding.
-
Simulcast and data channels are there. In Sora mode you get simulcast (multiple quality streams at once). There's also a data channel feature for reading and writing serial directly, designed for cases where you'd rather have low latency than guaranteed reliability. That's a specific, unusual capability that hints at robotics or device-control use cases.
-
Client certificates and device selection are covered. Sora mode supports client certificates, and you can enumerate and pick audio and video devices on Linux and macOS (video device selection also works on Windows).
How to Try It
Start at the repository: github.com/shiguredo/momo. The README links to the project site at momo.shiguredo.jp for documentation, and the build status badge points to a GitHub Actions workflow you can inspect for build details.
A few practical notes before you dive in:
- Check the hardware acceleration table first. Match your target platform against the supported encoders and decoders so you know what you're getting. If you're on a Raspberry Pi 5, remember H.264 hardware acceleration isn't available there.
- Pick your mode. P2P is the simplest way to get a browser talking to Momo. Ayame lets Momo instances talk to each other. Sora mode unlocks simulcast and client certificates.
- Read the platform docs. The README references
doc/LIBCAMERA.mdfor Raspberry Pi camera support,doc/LINUX_VIDEO_DEVICE.mdfor specifying video devices on Linux, anddoc/LINUX_AUDIO_DEVICE.mdfor audio devices.
One thing worth flagging up front: Shiguredo states it won't respond to PRs or issues that haven't been discussed on Discord, and that Discord is Japanese-only. Read their OSS guidelines before contributing.
Final Thoughts
Momo isn't trying to be everything to everyone. It's a focused tool for people who need WebRTC on hardware where a browser doesn't belong, and it's clearly built by a team that cares about squeezing performance out of specific chips. If you're working with Raspberry Pi, Jetson, or other embedded targets and you've been fighting to get real-time video working, this is worth a serious look. Just budget time for reading the platform-specific docs and confirming your hardware's codec support first.