Reach any phone with a *123# menu.

Free, open-source software for developers and public-interest organisations that build the menus people open by dialling a code. You run it yourself, so you own the service and its data.

See it on a phone

An early version: it works, but it is not ready for real users yet. Free and open source.

Works with

  • Any phone with a SIM card
  • Africa's Talking (tested)
  • Mastodon
  • ActivityPub

Why it matters

Every phone can do this.
Few can build it.

If you have ever dialled a code to check your airtime balance, you have used USSD. A text menu appears and you reply with a number. It works on every phone, with no internet.

In Sub-Saharan Africa, 60% of mobile internet subscribers still use a basic or 3G phone (GSMA, 2025). Building a menu is hard, so mostly banks and phone companies have one. OpenUSSD is for everyone else.

  • Clinic reminders

    Patients confirm or change a clinic visit by pressing a number. No app, no smartphone, no data bundle.

  • Savings group balances

    Chama members check their savings and the next meeting from any phone, without calling the treasurer.

  • Community news

    This one works today: the demo reads posts from Mastodon, an open social network, on a basic phone.

  • Yours to run

    Runs on your own server, so you own the service and its data. Change providers without rewriting, and later connect to a network directly.

The clinic and chama screens are examples. The community news screen is real output from the demo.

A real session

What it looks like
on a phone.

Real screens from the current version, step by step.

Handset screen: OpenUSSD Fediverse
1. Public timeline
2. About
0. Quit
Plain letters · 54 / 182 characters used

Screens from the test phone that comes with OpenUSSD, using sample posts.

Status

It works today.
It is not ready for real users yet.

Version 0.1 is an early version. Here is what works, what is missing and what to watch out for.

Not yet

  • SMS
  • A second network, such as MTN
  • A toolkit for TypeScript (JavaScript)
  • Posting to Mastodon from a phone, and linking a phone to an account (#9)
  • A permanent record of each session
  • An independent security review

Known limitations

  • Someone who captures a message from OpenUSSD to an app could send it again within 5 minutes. Until this is fixed, apps should ignore repeats.
  • The test phone that comes with OpenUSSD has no security. It is only for trying OpenUSSD on your own computer.
  • If the phone company retries a step, the app can receive it twice.
  • There are no ready-made downloads yet. You build it from the source code or run it with Docker.

The full plan is in the roadmap. Want to help? Read the contributing guide.

How it works

From a keypad to your app. In three steps.

  1. 1. Dial

    Any phone

    *384*1234#

    through the phone company

  2. 2. OpenUSSD

    OpenUSSD

    • translates one standard message
    • remembers where they are
    • routes to the right app
  3. 3. Your app

    Your app

    any language

    Go toolkit today, TypeScript planned

A phone dials *384*1234#

Any phone with a SIM card. The phone company sends each step to OpenUSSD in its own format.

OpenUSSD translates it

It turns every format into one, remembers where the person is, and sends a signed message to the right app.

Your app answers with the next screen

Your app can use any programming language. A Go toolkit keeps every screen short enough; TypeScript is planned.

For developers

Try it on your computer.
No phone company needed.

You need Docker and Go installed. A test phone runs in your terminal, so you need no account with a phone company.

git clone https://github.com/davidrukahu/openussd
cd openussd
export FEDIVERSE_WEBHOOK_SECRET=$(openssl rand -hex 32)
docker compose up --build

# in a second terminal
go run ./cmd/ussdsim -shortcode '*384*1234#'

1Clone the repository and set a webhook secret.

2Start the gateway and the Fediverse tenant with Docker Compose.

3Dial the demo shortcode from cmd/ussdsim in a second terminal.

To use a phone in your browser instead, connect a free Africa's Talking test account. See getting USSD access in practice.

FAQ

Common
questions.

Have a question that is not here? Ask it on GitHub.

Ask a question

What is USSD?

The menu you get when you dial a short code, for example to check your airtime balance or buy a data bundle. You reply with a number. It works on every phone, with no app and no internet.

Who is OpenUSSD for?

Developers and public-interest organisations, such as health, education, farming and local government teams, that run USSD services and want to own them. If you need one simple menu in one country, a provider on its own may be enough.

Why not just use a USSD provider, such as Africa's Talking?

You still use one. A provider connects you to the phone networks, but you build the menu yourself, in that provider's own format. OpenUSSD does the hard parts once, such as remembering each step, fitting every screen and checking where requests come from. It also lets you change or add providers without rewriting your menu. Today it supports Africa's Talking; more providers are planned.

Who sees the data?

You, your provider and the phone network. OpenUSSD runs on your own server, and there is no OpenUSSD company or cloud in between.

Can I connect to a phone network directly?

Not yet. Direct connections over SMPP, a protocol many networks offer, are planned. They remove the provider in the middle, but need an agreement with the network.

Do I need an agreement with a phone company?

Not to build and test. To go live, you need an agreement with Africa's Talking or a phone company. Here is what is possible today.

Which networks does it support?

Africa's Talking today, which reaches Kenya, Uganda, Nigeria, Rwanda, Tanzania and Malawi. MTN and others are planned.

Is it ready to use with real people?

Not yet. It is an early version, and parts will change before version 1.0. See known limitations.

What does it cost?

The software is free (AGPL-3.0). You pay only for hosting, and for each session Africa's Talking or a phone company charges.

How is it funded?

It is unfunded so far. The roadmap shows what funding would pay for.

Open standards

Built on public standards, not locked to one company.

Published standards and a documented format, so anyone can build on it.

  • GSM 03.38

    3GPP TS 23.038

    The standard alphabet for phone text. A screen holds 182 of its letters, or 70 when other characters appear.

  • USSD

    3GPP TS 24.090

    Unstructured Supplementary Service Data: the menu session a *123# code opens.

  • ActivityPub

    W3C Recommendation

    The standard behind Mastodon and the open social web. The demo reads posts through Mastodon.

  • HMAC-SHA256

    RFC 2104

    A standard way to sign messages, so an app can check that a message really came from OpenUSSD.

  • Redis

    optional

    Optional. Shares the conversation memory when you run OpenUSSD on more than one server.

Every phone deserves
the open web.

Free and open source. Developers can try it in minutes, and organisations can get in touch on GitHub.

Visit the project on GitHub