Sigmo is a modern, self-hosted web UI and API for managing ModemManager-based cellular modems. It ships as a single binary with an embedded Vue 3 frontend, designed to be lightweight and easy to deploy.
Sigmo focuses on advanced eSIM operations, SMS management, and network control. Pro-only features are documented in pro/README.md.
- π± eSIM Management: List, download (SM-DP+), enable, rename, and delete eSIM profiles.
- π© SMS Center: Full conversational view for SMS, send/delete capability, and USSD session support.
- βοΈ Modem Control: SIM slot switching, network scanning, manual registration, and preference configuration (Alias, MSS).
- π Secure Access: OTP-based login system via Telegram, HTTP, Email, and more.
- π Notifications: Forward incoming SMS and login tokens to Telegram, Bark, Gotify, Email, etc.
- π Portable: Single Go binary with no external runtime dependencies (except ModemManager).
Support the project and get reliable hardware for your setup.
-
Need an eUICC? We recommend eSTK.me. It is highly reliable for iOS profile downloads.
π Use code
esimcyoufor 10% off. -
Need more storage? If you require >1MB storage to install multiple eSIM profiles, we recommend 9eSIM.
π Use code
DAMONfor 10% off.
Architecture:
- Backend: Go serving
/api/v1and static assets. - Frontend: Vue 3 + Vite (Embedded in the binary).
System Requirements:
- OS: Linux.
- Service:
ModemManagerrunning on the system D-Bus when using the binary directly. The Docker image includesModemManagerand starts it inside the container. - Permissions: Root access or proper
udevrules to access modem device nodes.
Sigmo is distributed as a static binary. You do not need to install Node.js or Go to run it.
Grab the latest release for your architecture from the GitHub Releases.
# Example for Linux AMD64
curl -LO https://github.com/damonto/sigmo/releases/latest/download/sigmo-linux-amd64
chmod +x sigmo-linux-amd64
sudo install -m 0755 sigmo-linux-amd64 /usr/local/bin/sigmoSigmo uses command-line flags for startup settings and stores runtime settings in SQLite. On first start, login OTP is disabled so you can open the Web UI and configure notification channels and authentication.
Start the service.
/usr/local/bin/sigmo --listen-address=0.0.0.0:9527 --db-path=/var/lib/sigmo/sigmo.dbVisit http://localhost:9527 to access the UI.
The Docker image includes the embedded Vue frontend and installs dbus, ModemManager, qmi-utils for QMI proxy support, and libmbim-tools in the runtime image.
-
Data:
The compose setup mounts
./datato the container data directory. Sigmo stores application settings, messages, calls, internet preferences, and network preferences in SQLite. -
Start:
docker compose pull docker compose up -d
-
Open UI: Visit
http://localhost:9527, or pass--listen-addressto choose another address.
The compose setup uses network_mode: host because Sigmo's internet connection feature configures the modem network interface and host routes. Docker port publishing is disabled in this mode; use --listen-address to choose the listening address and port.
The container runs with privileged: true so Sigmo and ModemManager can access modem devices. /run is mounted as tmpfs so stale D-Bus sockets cannot survive container restarts. On hosts with strict Docker or udev policies, keep /dev, /run/udev, and /sys mounted as shown in compose.yaml.
Sigmo stores Internet Always On settings, modem network Mode/Bands preferences, and manual network registration preferences in SQLite so they can be restored after modem reloads, program restarts, and system reboots.
Startup configuration is provided through flags:
| Flag | Default | Description |
|---|---|---|
--listen-address |
0.0.0.0:9527 |
HTTP bind address. |
--db-path |
$XDG_DATA_HOME/sigmo/sigmo.db |
SQLite database path. |
--debug |
false |
Enable debug logging and internal API errors. |
--version |
false |
Print the build version and exit. |
Runtime settings are managed in the Web UI and stored in SQLite:
- Login OTP policy and auth providers.
- Notification channels: Telegram, Bark, Gotify, ServerChan, HTTP webhook, and Email.
- Internet proxy listener and password.
- Modem alias, compatibility mode, and APDU MSS.
- Internet APN preferences and Always On state.
- Network mode, bands, and manual registration preferences.
To run Sigmo as a background service, use Systemd.
- Install Unit File:
sudo install -m 0644 init/systemd/sigmo.service /etc/systemd/system/sigmo.service
- Enable & Start:
sudo systemctl daemon-reload sudo systemctl enable --now sigmo
Note: The default service runs as
rootto ensure access to ModemManager. If running as a non-root user, verifyudevrules for the modem and write permissions for the SQLite database path.
If you wish to contribute or modify the source:
-
Prerequisites: Go 1.25+, Bun (for Vue).
-
Build Frontend:
cd web && bun install && bun run build
-
Run Backend:
go run ./ --listen-address=0.0.0.0:9527 --db-path=./sigmo.db --debug
Or for frontend hot-reload:
cd web && bun run dev -
Build Docker Image:
docker build -t sigmo:local .
This repository uses mixed licensing. Public Sigmo files are released under the
MIT License; files under pro/ are proprietary and covered by
pro/LICENSE. See NOTICE.