Cross-platform desktop network command center for USB cellular modems (4G/5G dongles) and portable travel routers. Open-core.
Built for remote software engineers, digital nomads, and enterprise power-users across Europe, the Americas, and Africa who demand absolute bandwidth optimization, advanced network security, and automated carrier workflows. Replaces bloated, legacy carrier software with an intelligent, hardware-agnostic dashboard.
Built with Tauri v2 + React + TypeScript + Rust.
- Dashboard — modem detection, signal, network info, OS-synced connect/disconnect, live data usage, auto-reconnect with backoff
- SMS — inbox, compose, send, delete; modal detail view; desktop notifications on new arrivals
- USSD — dial codes, multi-step recipes (build your own for any carrier), saved one-tap favourites, friendly error translation, auto-recovery from stale sessions
- Calls — dial / answer / hang up, global ringing banner + ringtone across all views, persisted call history (last 100)
- Contacts — read the SIM phonebook, search by name or number, one-tap call / SMS
- Secure Nomad VPN — import any WireGuard
.conf, manage profiles, auto-connect the tunnel the moment the modem comes online so no packet leaves unencrypted - PIN unlock — for SIMs locked at boot
- Cross-platform — Linux first (uses ModemManager via
mmcliso it coexists with NetworkManager); Windows / macOS via direct AT-command serial path - Brand-aligned theming — Brand / Dark / Light, persisted across sessions
- Free & offline — no cloud APIs, no telemetry, no subscriptions
The Rust binary compiles on Linux, macOS, and Windows. The user-facing feature set varies by platform because some pieces require OS-specific daemons (ModemManager, NetworkManager) that only exist on Linux.
| Feature | Linux | Windows | macOS |
|---|---|---|---|
| Modem detection (AT) | ✅ | ✅ | ✅ |
| ModemManager (mmcli) backend | ✅ | ❌ | ❌ |
| NetworkManager-driven connect/disconnect | ✅ | ❌ | ❌ |
| SMS / USSD | ✅ | ✅ | ✅ |
| Voice call dial / answer / hang up | ✅ | ✅ | ✅ |
| Voice call audio | hardware-dep |
hardware-dep + Mobile Partner | hardware-dep |
| Secure Nomad VPN (WireGuard) | ✅ | ❌ planned | wireguard-tools installed via Homebrew |
| SIM phonebook import | ✅ (debug-mode MM) | ✅ | ✅ |
| Advanced telemetry (RSRP/RSRQ/SINR/Cell ID) | ✅ | ✅ | ✅ |
| mDNS device discovery | ✅ | ✅ | ✅ |
Live data usage from /proc/net/dev |
✅ | ||
| Auto-reconnect | ✅ | ||
| App auto-pause of NM autoconnect | ✅ | n/a | n/a |
Voice call audio is hardware-dependent everywhere. Most cheap USB dongles (Huawei E173 and friends) don't expose audio over USB so you can dial and hear nothing. Modems with USB Audio Class (Quectel EC25/EM12, certain ZTE) route audio natively on every OS.
One-line install — the -latest.deb URL always points at the most recent build:
curl -L -o /tmp/ew-plug.deb https://cdn.ewooral.com/apps/ew-plug-latest.deb
sudo apt install -y /tmp/ew-plug.debOr pin a specific version:
curl -L -o /tmp/ew-plug.deb https://cdn.ewooral.com/apps/ew-plug_0.1.0_amd64.deb
sudo apt install -y /tmp/ew-plug.debAfter install, launch from Activities as ew-plug or run ew-plug from a terminal. Browse all binaries at ewplug.ewooral.com/download.
macOS / Windows: binaries are on the way. Build from source via the Quick Start below in the meantime.
# Prerequisites: Node.js, pnpm, Rust toolchain
# Clone and install
git clone https://github.com/Ewooral/ew-plug.git
cd ew-plug
pnpm install
# Run in development mode
pnpm tauri devYou may need serial port permissions:
sudo usermod -aG dialout $USER
# Log out and back inpnpm tauri buildProduces platform-specific installers in src-tauri/target/release/bundle/.
MIT