⚠️ Proof of Concept — This is an ambitious study project. It is fully functional, but not designed for production use.
ReactSIP is a compact SIP desktop softphone built with React + Electron as a deep-dive study project on VoIP communication, Electron desktop architecture, and native audio engine integration. The goal is not to compete with commercial solutions, but to explore and truly understand every layer of the stack — from the SIP protocol and RTP all the way through the native C process up to the React UI.
Despite being a PoC, all core features are implemented and working: SIP registration, voice calls, audio control, DTMF, transfer, call history, and more.
This repo was born out of a desire to genuinely understand how a modern softphone works — without relying on third-party SDKs that hide the complexity. Every technical decision here was made with learning in mind:
- How does the SIP protocol actually work in practice (REGISTER, INVITE, BYE, re-INVITE)?
- How do you integrate a native C process as an Electron sidecar?
- How do you manage reactive call state with Zustand?
- How do you package and distribute an Electron app with auto-update via GitHub Releases?
Functional proof of concept. Core features are working, but the codebase is still evolving — behavior and UI may change at any time.
- SIP account registration (username/password/domain)
- Outgoing and incoming calls
- Hangup, hold, mute, DTMF, transfer
- Call history
- Audio input/output device selection
- Input/output volume sliders
- Native SIP/RTP media path via UDP on Windows (sidecar
sip-agent.exe) - Installer + portable builds
- Auto-update from GitHub Releases (installer build)
| Layer | Technology |
|---|---|
| UI | React 18 + Vite 5 |
| Desktop shell | Electron 24 |
| State | Zustand |
| Build/distribution | electron-builder + electron-updater |
| Native audio engine | PJSIP (C) via sip-agent.exe sidecar |
- Windows 10/11 x64
- Node.js 20+
- npm
- SIP server credentials (host/domain, user, password)
npm install
npm run electron-devnpm run electron-buildOutput in release/:
ReactSIP Setup <version>.exe— installerReactSIP <version>.exe— portablelatest.yml— used by auto-update
One of the most interesting aspects of this PoC is the integration with a native C sidecar based on PJSIP, responsible for the actual media path (SIP + RTP) on Windows. This allows bypassing Electron's limitations when dealing with low-latency UDP.
Binary location: native/sip-agent/bin/sip-agent.exe
Build scripts:
npm run native:setup:pjsip
npm run native:build:pjproject
npm run native:build:pjsip
npm run native:sync-agentIf you already have sip-agent.exe in native/sip-agent/bin/, electron-build will package it automatically.
Configured via:
electron-builder.json(GitHub provider)public/electron.js(electron-updater)
Notes:
- Auto-update is intended for the installer (
NSIS) distribution. - Portable build usually does not auto-update.
- Update the version in
package.json. - Commit and push to
main. - Create and push a tag:
git tag v0.0.3
git push origin v0.0.3- The GitHub Actions workflow (
.github/workflows/release.yml) builds and publishes assets to the Release automatically.
Basic account fields (Settings):
- Display Name
- Username
- Password
- Domain/IP
Advanced:
- Transport (
udp,ws,wss) - Local SIP port
- RTP range
- STUN (optional)
- Show/Hide Debug tab
- Ensure the build uses relative assets (
vite.config.jswithbase: './'). - Rebuild and reinstall the latest executable.
- Ensure
electron-updateris independencies(not onlydevDependencies). - Rebuild the installer and reinstall.
- The app has a safe fallback if the updater module is unavailable.
- Sync
package-lock.jsonwithpackage.json:npm install # commit both files
- Confirm the native engine is being used (UDP mode on Windows).
- Check microphone permission and selected devices.
- Validate your SIP/PBX RTP configuration and firewall rules.
microsip-react-client/
public/
electron.js
preload.js
src/
components/
context/
hooks/
assets/
native/
sip-agent/
scripts/
electron-builder.json
vite.config.js
package.json
Dev builds may show Electron CSP warnings. Tighten CSP and Electron security settings before any production hardening.
Project license not finalized yet.
ReactSIP is a study project — technical contributions, issues, and discussions are welcome.