TLDR: We can use a web-based proxy for WhatsApp on feature phones. However, this setup requires technical knowledge (to run your server exposed to the internet). Alternatively in the future, I may host a multi-user server for friends and relatives who are not as technically inclined. If you’re interested in a hosted server, feel free to sign up on this form.
WhatsApp has effectively replaced SMS in modern cross-platform text communications. WhatsApp’s core functionality of basic texting can still be handled by feature phones, even though it provides more advanced features like group video calls that likely won’t work well on these devices.
WhatsApp started on an open protocol (XMPP), allowing third-party clients to be implemented. Over the years, the protocol has become more locked down, limiting access to only official clients. On feature phones, up until recently, WhatsApp did maintain an official client for KaiOS. Sadly, this client has been discontinued and is planned to be sunset by 2025.
On KaiOS below 3.X, the main alternative is to install chooj, an excellent Matrix client that even has VoIP call support. Matrix is a federated communication protocol where users can run bridges to other communication protocols, including WhatsApp. Self-hosting a Matrix server with bridges requires technical knowledge and time, but some providers offer hosted Matrix server solutions. Similarly, one could install convo, a Jabber/XMPP client, and use XMPP transports (or gateways, i.e. services that allow XMPP users to communicate with users that are connected to other networks and protocols).
On other devices, such as those running Nokia’s S30+ system, we don’t have the option of installing new apps, including chooj. However, these devices commonly come equipped with a basic web browser. While WhatsApp offers an official web client at web.whatsapp.com, it is incompatible with primitive web browsers like Opera Mini. Even if it were compatible, the web client would be impractical to use, as it does not maintain the session and would require re-scanning a QR code each time the browser is closed and reopened.
SuperBasic IM: a web-based WhatsApp proxy for dumbphones
For this reason, I decided to make a simple web-based proxy which works as follows:
- It uses whatsapp-web.js to connect to WhatsApp. This unofficial library runs the official web client under the hood and allows applications to interact with it.
- It exposes a primitive web chat application using the hapi framework. The application’s web user interface is super-limited, allowing even primitive web browsers such as Opera Mini to render it on feature phones.
Understandably, this workaround does not support WhatsApp’s advanced features, such as video calls, but it enables basic text messaging functionality. Additionally, it does not provide real-time notifications for new messages. So that sucks, but don’t we use dumbphones to get some rest from constant notifications? 😉 Besides, we can kindly ask the other people to ring our number and hang up, prompting us to check for new WhatsApp messages.
How to set up the web proxy
Prerequisites
In any case, if you would like to run your web proxy, you will need the following prerequisites:
- A server with at least 1GB RAM: that could be your computer or you can rent a VPS. (Since this server is exposed publicly to the internet, make sure to follow common security hardening guidelines.)
- A public IP address: if you’re lucky, you may have one from your internet provider; usually, when self-hosting at home, you may need to use a tunnel. (If you’re using a VPS, it usually comes with a public IP or a public IP can be added for a small charge.)
- If you don’t have a domain name assigned and a TLS certificate (e.g. from a tunnel provider), you may also need to purchase a domain name and run a reverse proxy, such as nginx, to accept TLS connections and configure it to proxy connections to the Node.js server application. Note that some dumbphone web browsers may not have Let’s Encrypt as a Certificate Authority (CA) in their root of trust and refuse connections to your server, so you may need to look for a different CA to issue you a TLS certificate.
- Software: download and install Node.js and Git.
Setup
Once you have these prerequisites, you can set up the web proxy on your server as follows:
git clone [email protected]:tomtau/superbasic-im.git
cd superbasic-im
npm install
npm run build
cd dist
node.js index.js init
- Follow the instructions to create a user and password
Running the server
Run the server: NODE_ENV=production node.js index.js
.
This won’t run the server in the background though. You could execute it in a tmux
or screen
session, but it’s better to use a process manager, such as pm2
or forever
or systemd
:
Using pm2
- Install
pm2
:npm install -g pm2
- Start the server:
pm2 start index.js
Using forever
- Install
forever
:npm install -g forever
- Start the server:
forever start index.js
Using systemd
- Create a systemd service file:
/etc/systemd/system/superbasic.service
[Unit]
Description=SuperBasic IM
After=network.target
[Service]
ExecStart=/usr/bin/node /path/to/dist/index.js
WorkingDirectory=/path/to/dist/
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target
- Enable the service:
sudo systemctl enable superbasic.service
- Start the service:
sudo systemctl start superbasic.service
Login and connect to WhatsApp
After completing the setup, you can access the deployed server’s public URL in your dumbphone’s web browser (if the screen is large enough to display a QR code, around 2.4 inches or more) or any other browser. You should see a login form, so use the credentials you created during initialization. On Nokia devices, the built-in hidden browser may work better than Opera Mini.
After your first login, you’ll see a QR code. Scan it with your smartphone using the WhatsApp app (Settings -> Linked Devices -> Link Device). If the scan fails, try refreshing the page to generate a new QR code.
The QR code page won’t automatically refresh, so check your smartphone to see if the new device has been added to Linked Devices, and wait for it to sync. That’s it - you can now use WhatsApp through your dumbphone’s web browser.
Et voilà!
What is supported
- Sending and receiving messages
- Sending and receiving files
- Sending photos may be cumbersome as you need to know the file names and navigate to them in a file browser, but it works
- Files are sent and received as originals without any processing, so video/audio playback depends on device compatibility
- Downloading VCard of any WhatsApp contact: a handy way to semi-manually sync your contact list on the dumbphone
What is not supported:
- Audio and video calls: this functionality is not available in most dumbphone web browsers
- Instant notifications
- You can ask the other person to notify you via call/SMS if they need a timely response on WhatsApp
- Maybe this could be automated, e.g. if I don’t check a selected chat with unread messages for X minutes, it could send an automatic reminder, e.g.: “Sorry, I’m on a dumbphone and will reply to your message later; if it is urgent, please call me”
- I was thinking of potentially connecting it to SMS gateways, but that could be expensive (and annoying) for chatty WhatsApp groups… so perhaps it could work if it’s only for selected contacts with some message limit?
- You can ask the other person to notify you via call/SMS if they need a timely response on WhatsApp
- Emojis: may not be supported in dumbphone web browsers
- Currently, emojis are converted to text representations (e.g., ❤️ becomes :heart:)
- Dumbphones may also lack easy emoji input, so the text representation can be used (and converted back to emoji for the recipient)
- Future improvements could include converting common emojis to ASCII equivalents (e.g., <3 for ❤️) or serving custom emoji images on the server
- Locations: not very useful if dumbphones lack GPS and web browser access to location data
- Group chat management
- Polls
The proxy currently supports a single user, but some friends and family with dumbphones have expressed interest. I’m considering setting up a multi-user alternative. If you’re interested in using this on a hosted server, despite the limitations, feel free to sign up on this form.