Web-based administrative dashboard for the SMSGate ecosystem — turn Android devices into SMS gateways.
Explore the docs »
Report Bug
·
Request Feature
- About The Project
- Architecture
- Getting Started
- Development
- API Endpoints
- Contributing
- License
- Contact
The SMSGate Web Dashboard is a standalone Go HTTP server with an embedded Svelte 5 single-page application. It provides a graphical user interface and REST API for managing Android devices configured as SMS gateways through the SMSGate platform.
The dashboard acts as a proxy to the SMSGate 3rd Party API, handling authentication, session management, and real-time event streaming via Server-Sent Events.
- Dashboard — aggregated statistics: devices online/active/total, messages sent/pending/failed
- Message Management — paginated message list with filtering (by state, device, date range); send new SMS; view delivery status and timeline
- Device Management — view registered devices with online/offline status, remove devices
- Webhook Management — create, list, and delete webhooks for SMS events (received, sent, delivered, failed, MMS, data SMS, system ping)
- API Token Management — generate JWT tokens with granular scope selection (15 permission levels); copy and revoke tokens
- Device Settings — configure message intervals, SIM selection mode, processing order, ping intervals, log lifetime, webhook signing key, retry policy, gateway cloud URL, and encryption passphrase
- Real-time Notifications — live SSE stream for incoming messages, state changes, and device status updates with toast notifications
- OpenAPI Documentation — Swagger UI at
/api/v1/docs - Prometheus Metrics — metrics endpoint for monitoring
Browser (Svelte SPA) ──► Go Dashboard (:3000) ──► SMSGate 3rd Party API (:443)
│
┌─────────┼─────────┐
│ │ │
Cookie SSE Webhook
Sessions Events Callbacks
- Authentication: credentials are validated against the SMSGate API, then stored in cookie-backed server sessions
- Real-time: the dashboard registers webhooks on the SMSGate server for each user session; incoming webhook callbacks are translated to SSE events and pushed to the browser
- Frontend: Svelte 5 SPA compiled to static files, embedded in the Go binary via
embed.FS
Multi-platform Docker images are published to GitHub Container Registry:
docker pull ghcr.io/android-sms-gateway/web-dashboard:latestRun with:
docker run -p 3000:3000 \
-e HTTP__LISTEN=0.0.0.0:3000 \
-e GATEWAY__URL=https://api.sms-gate.app/3rdparty/v1 \
-e GATEWAY__WEBHOOK_URL=https://your-public-url/api/webhooks/callback \
ghcr.io/android-sms-gateway/web-dashboard:latestImages support linux/amd64 and linux/arm64, are based on Alpine Linux, and run as a non-root user.
Pre-built binaries for Linux, macOS, and Windows are available on the GitHub Releases page.
# Example — download and run the Linux amd64 binary
curl -LO https://github.com/android-sms-gateway/web-dashboard/releases/latest/download/web-dashboard_linux_amd64.tar.gz
tar xzf web-dashboard_linux_amd64.tar.gz
./web-dashboard- Clone the repository.
git clone https://github.com/android-sms-gateway/web-dashboard.git cd web-dashboard - Install Go dependencies.
make deps
- Build the project (generates OpenAPI docs and compiles frontend).
make build
The application is configured via environment variables or an optional YAML file:
| Variable | Default | Description |
|---|---|---|
HTTP__LISTEN |
127.0.0.1:3000 |
HTTP server bind address |
GATEWAY__URL |
https://api.sms-gate.app/3rdparty/v1 |
SMSGate 3rd Party API endpoint |
GATEWAY__WEBHOOK_URL |
http://localhost:3000/api/webhooks/callback |
Public callback URL for webhook events |
CONFIG_PATH |
— | Path to optional YAML configuration file |
Example:
export HTTP__LISTEN=0.0.0.0:8080
export GATEWAY__URL=https://api.sms-gate.app/3rdparty/v1
./web-dashboardStart the development server with live reload:
make airThis runs the Go server via air (hot reload on .go changes) and automatically builds the Svelte frontend. The Vite dev server proxies /api requests to the Go server.
- Go 1.25+
go version
- Node.js 20+
node --version
golangci-lint(optional, for linting)golangci-lint version
air(optional, for live reload)go install github.com/air-verse/air@latest
| Command | Description |
|---|---|
make build |
Full production build (gen + compile Go binary) |
make test |
Run tests with race detection |
make coverage |
Run tests and generate coverage report |
make lint |
Run golangci-lint |
make fmt |
Format code with golangci-lint |
make air |
Start development server with live reload |
make gen |
Generate OpenAPI docs and compile frontend assets (prerequisite for build) |
All endpoints are prefixed with /api/v1.
| Method | Route | Auth | Description |
|---|---|---|---|
| POST | /auth/login |
No | Authenticate with SMSGate credentials |
| POST | /auth/logout |
No | Destroy session |
| GET | /auth/me |
Yes | Get authenticated username |
| GET | /stats |
Yes | Aggregated dashboard statistics |
| GET | /messages |
Yes | List messages (paginated, filterable) |
| POST | /messages |
Yes | Send a new SMS |
| GET | /messages/:id |
Yes | Get message details with delivery timeline |
| GET | /devices |
Yes | List registered devices |
| DELETE | /devices/:id |
Yes | Remove a device |
| GET | /webhooks |
Yes | List webhooks |
| POST | /webhooks |
Yes | Create a webhook |
| DELETE | /webhooks/:id |
Yes | Delete a webhook |
| GET | /settings |
Yes | Get device settings |
| PATCH | /settings |
Yes | Update device settings |
| POST | /tokens |
Yes | Generate an API token |
| DELETE | /tokens/:jti |
Yes | Revoke an API token |
| GET | /events |
Yes | SSE real-time event stream |
| POST | /api/webhooks/callback/:userId |
No | Webhook callback receiver (called by SMSGate) |
OpenAPI documentation is available at /api/v1/docs when enabled.
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Distributed under the Apache 2.0 License. See LICENSE for more information.
Maintainer: @capcom6
Project Link: https://github.com/android-sms-gateway/web-dashboard