Skip to content

damonto/sigmo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

837 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Sigmo (Formerly Telmo)

License: MIT Go Report Card Release

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.

✨ Features

  • πŸ“± 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).

πŸ›οΈ Recommended Hardware & Offers

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 esimcyou for 10% off.

  • Need more storage? If you require >1MB storage to install multiple eSIM profiles, we recommend 9eSIM.

    🎁 Use code DAMON for 10% off.


πŸ›  Architecture & Requirements

Architecture:

  • Backend: Go serving /api/v1 and static assets.
  • Frontend: Vue 3 + Vite (Embedded in the binary).

System Requirements:

  • OS: Linux.
  • Service: ModemManager running on the system D-Bus when using the binary directly. The Docker image includes ModemManager and starts it inside the container.
  • Permissions: Root access or proper udev rules to access modem device nodes.

πŸ“₯ Installation

Sigmo is distributed as a static binary. You do not need to install Node.js or Go to run it.

1. Download Binary

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/sigmo

2. Configure

Sigmo 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.

3. Run

Start the service.

/usr/local/bin/sigmo --listen-address=0.0.0.0:9527 --db-path=/var/lib/sigmo/sigmo.db

Visit http://localhost:9527 to access the UI.

Docker Compose

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.

  1. Data:

    The compose setup mounts ./data to the container data directory. Sigmo stores application settings, messages, calls, internet preferences, and network preferences in SQLite.

  2. Start:

    docker compose pull
    docker compose up -d
  3. Open UI: Visit http://localhost:9527, or pass --listen-address to 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.

βš™οΈ Configuration Reference

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.

πŸ’» Service Deployment

To run Sigmo as a background service, use Systemd.

Systemd Example

  1. Install Unit File:
    sudo install -m 0644 init/systemd/sigmo.service /etc/systemd/system/sigmo.service
  2. Enable & Start:
    sudo systemctl daemon-reload
    sudo systemctl enable --now sigmo

Note: The default service runs as root to ensure access to ModemManager. If running as a non-root user, verify udev rules for the modem and write permissions for the SQLite database path.


πŸ—οΈ Development

If you wish to contribute or modify the source:

  1. Prerequisites: Go 1.25+, Bun (for Vue).

  2. Build Frontend:

    cd web && bun install && bun run build
  3. 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

  4. Build Docker Image:

    docker build -t sigmo:local .

πŸ“„ License

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.

About

A self-hosted web UI and API for managing ModemManager-based cellular modems

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors