Joyce is a self-hosted web console for the Jasmin SMS Gateway. Configure SMPP connectors, users, MO/MT routes, filters and interceptors from a clean UI. Every change is applied to your running gateway in real time, and you only see success when Jasmin confirms it.
The Joyce way
live via Perspective BrokerTraffic from your apps is filtered, routed and delivered through the SMPP connectors you configure in Joyce.
What is Joyce?
Jasmin is a battle-tested, open-source SMS gateway used by carriers, aggregators and businesses to move millions of messages over SMPP and HTTP. But out of the box, configuring it means a telnet session into jcli: cryptic commands, no validation, no audit trail, and one typo away from broken routing.
Joyce replaces that with a web console built on Jasmin's native Perspective Broker API, the same management interface jcli itself uses. Nothing is faked or scraped: when you save a connector or a route in Joyce, it is applied to the live gateway and persisted, and if Jasmin rejects it you see the real error immediately.
It's a Django application you host yourself, next to your gateway. Your credentials, your traffic and your configuration never leave your infrastructure.
Before · jcli
smppccm -a > cid carrier_a > host 10.0.0.12 > port 2775 > username smppuser > submit_throughput 50 > ok mtrouter -a > type StaticMTRoute > filters U-tier1 > ...
After · Joyce
Features
Everything you would normally manage over telnet (groups, users, connectors, routes, filters and interceptors) is a first-class screen with permissions and history.
The full smppccm surface: bind type, TON/NPI, timers, reconnection policy, DLR expiry, throughput throttling, SSL. Start, stop and monitor each connector from the list view.
Build Default, Static, Random-RoundRobin and Failover routes for both directions, attach filters and connectors, set rates and ordering. No route syntax to memorize.
Create MO/MT filters (source, destination, user, group, content and more) and upload Python interceptor scripts that rewrite or reject messages mid-flight.
Manage the accounts your customers bind and send with: HTTP/SMPP authorizations, value filters, defaults, balance and throughput quotas. The complete Jasmin credential model, not a subset.
Isolate teams or customers in workspaces with their own members and roles (Administrator, Gateway Manager, Reports, API) on one shared Jasmin deployment.
Joyce talks to the gateway over Jasmin's Perspective Broker and waits for confirmation. If Jasmin rejects a change, you get the actual error. Never a green toast over a broken config.
How it works
Set the RouterPB and SMPP management ports (8988/8989) in the environment, or just run the bundled Docker Compose, which ships Jasmin, Redis, RabbitMQ and a test SMSC.
Sign up, name your organization and invite teammates with the roles they need. Each workspace keeps its gateway objects separate.
Add your carriers as SMPP connectors, define groups and users, then wire up filters and MO/MT routes. Start the connectors and watch them bind.
Your applications keep using Jasmin's standard HTTP API and SMPP server. Joyce manages the gateway and never sits in your message path.
Self-hosting
Joyce is free software under GPL v3. Run it on the same host as Jasmin or anywhere that can reach the PB ports. The repository includes a complete development stack.
# grab the code git clone https://github.com/ekeeya/jasmin-web-gui.git cd jasmin-web-gui # bring up jasmin + friends docker compose up -d # run joyce poetry install python manage.py migrate python manage.py runserver
FAQ
For day-to-day configuration, yes. Joyce uses the same management API that jcli uses, so both stay in sync. You can keep jcli around for edge cases and debugging, and Joyce won't mind.
No. Messages keep flowing directly through Jasmin's HTTP API and SMPP server. Joyce is a management plane only. If it goes down, your traffic doesn't.
Joyce is developed and tested against Jasmin 0.11.x. Because it uses the stable Perspective Broker interfaces, nearby versions generally work too.
Yes. Free and open source under GPL v3. If it saves you hours of telnet pain, the author accepts coffee in crypto (see the repository README).
Create a workspace, connect your Jasmin instance and manage your gateway like it's 2026.