AIKON README

The project's README from github.com/emir/AIKON. As one markdown file: README.md.

AIKON

Formerly Claude S40. The project was called Claude S40 up to phone app 0.10.x / server 0.7.x, while it only talked to Claude. Since it also speaks to OpenAI, Gemini and Grok it is called AIKON (Nokia spelled backwards). The repository moved from emir/claude-s40 to emir/AIKON (GitHub redirects the old address); the Java package and server names keep the old name.

AIKON: today's AI on a 2007 Nokia

Today's AI on a 2007 Nokia. AIKON is an AI chat client for Nokia Series 40 and Symbian S60 phones (Java ME, CLDC 1.1 / MIDP 2.0), plus the small Go server it talks to. Pick a model per chat (Claude, OpenAI, Gemini or Grok), type on the keypad, get the answer on a 240x320 screen: with today's news, weather and exchange rates from web search, long answers you can page through, and a UI in Turkish, English, Spanish, Portuguese, French, German, Russian or Indonesian. Tested on the Nokia 6300 (S40) and the Nokia E63 (S60 QWERTY).

Video (still as Claude S40): on a Nokia 6300, on X

Features

On the phone

On the server

Screens

Home Waiting for a reply Lists and paragraphs Reading mode
A calendar entry, selected Message actions Quick prompts Dark theme, large text

Screenshots are from the FreeJ2ME emulator in the app's test mode (the "[Test mode]" replies are fake and cost nothing; the emulator reports no calendar API, so the harness turns the calendar actions on for these screens and never saves); the cover is a drawing. Start-up animation: docs/images/splash.gif.

Independent side project. Not made, endorsed or supported by Anthropic, OpenAI, Google, xAI or Nokia. See TRADEMARKS.md.

Tested on a Nokia 6300 (RM-217, firmware V06.60), and on a Nokia E63 (Symbian S60 3rd Edition FP1, 320x240, QWERTY, over WLAN; see docs/SETUP.md). Other Series 40 phones (CLDC 1.1 / MIDP 2.0, 240x320) may work but are untested.

How it works

Nokia (Java ME app) --HTTPS: TLS 1.0, RSA, no SNI, cert from YOUR private CA--> claude-s40-server --HTTPS--> Claude / OpenAI / Gemini / Grok APIs
                                                                                     |
                                                                              SQLite (Docker volume)

A 2007 phone cannot speak modern HTTPS: the Nokia 6300 offers only TLS 1.0 with RSA key exchange, sends no SNI, and its root store stops around 2008. Public clouds (including Cloudflare) refuse that handshake. So the server terminates TLS itself with a certificate from a private root CA that you put on the phone once. Details and measurements: docs/ARCHITECTURE.md.

What's inside

Path What
app/ The phone app: CLDC 1.1 / MIDP 2.0 MIDlet, ~220 KB JAR, UI in eight languages (see Features). Reproducible build with package checks.
server/ One Go binary / Docker image (~7 MB): phone-facing TLS, chat backend (Claude via the official anthropic-sdk-go; OpenAI, Gemini, Grok over plain HTTPS), SQLite, pairing, admin API bound to localhost.
docs/ SETUP.md (step by step), ARCHITECTURE.md (protocol, TLS, design).

Get it

git clone https://github.com/emir/AIKON.git
cd aikon

Quick start

Full guide: docs/SETUP.md. In short:

  1. A Docker host with a public IPv4 and TCP 443 (a $4-6/month VPS is enough).
  2. server/scripts/pki.sh ca ~/.config/claude-s40/pki and server/scripts/pki.sh server ~/.config/claude-s40/pki <server-ip>.
  3. server/deploy/push.sh root@<server-ip> --execute (starts in test mode, no API cost).
  4. echo GATEWAY_URL=https://<server-ip> > app/app.local.properties && make -C app, then install app/dist/AIKON.jad/.jar on the phone.
  5. Put the root CA on the phone (server/deploy/serve-ca.sh, compare the fingerprint).
  6. On the phone the setup wizard walks through the connection test and pairing; approve the code with server/deploy/admin.sh root@<server-ip> pair <code>.
  7. server/deploy/set-key.sh root@<server-ip> (Claude; add openai, gemini or xai for the others), then S40_MOCK=0 S40_MODELS=... server/deploy/push.sh root@<server-ip> --execute to go live.

Development

make test          # server: go vet + go test -race; app: build + package checks + reproducibility
make -C app        # phone app only (downloads pinned build tools to app/.deps)
make -C server test

Requirements: Go 1.26+, JDK 11+, Python 3 with Pillow, Docker (for deployment), OpenSSL or LibreSSL.

Privacy and cost

Translations

The app is written in English; every other language is one text file, app/lang/xx.txt: an English text, a TAB, its translation, one per line. The Spanish, Portuguese, French, German, Russian and Indonesian files are first drafts: corrections from native speakers are very welcome (a pull request that edits the file is enough). A new language is a new file plus its code and name in L.java (LANGS, NAMES); make -C app langs copies the files to server/lang (the server sends them to phones, which carry only English) and shows what each file covers, and the build refuses a file that misses a text. Languages written right to left (Arabic, Hebrew) need layout work first, and scripts the phones' fonts lack (Japanese, Chinese) are out of reach on this hardware.

Contributors

License

MIT, see LICENSE. Copyright (c) 2026 Emir Karşıyakalı. Build-time tools are downloaded, not bundled (ECJ: EPL-2.0, ProGuard: GPL-2.0, MicroEmulator API stubs: LGPL, CafeUndZopfli: Apache-2.0); none of them end up in the phone app. The optional emulator harness app/emu/EmuShot.java links against FreeJ2ME (GPL-3.0), which is not included.

AIKON (emir/AIKON)

Searching Database…

350 ·GitHub
What is this?AIKON is an AI chat client for old Nokia Series 40 and Symbian S60 feature phones (Java ME, CLDC 1.1 / MIDP 2.0), paired with a small Go server that relays your messages to Claude, OpenAI, Gemini or Grok so a 2007-era phone can chat with modern AI models.
Is this just a phone app, or do I need the server too?Both: a ~220 KB J2ME MIDlet (app/) runs on the phone, and a ~7 MB Go binary or Docker image (server/) does the TLS termination, talks to the AI providers, and stores chats in SQLite. The phone cannot work without pointing at your own running server.
How do I get it running?Stand up a Docker host with a public IPv4 and TCP 443 (a $4-6/month VPS works), generate a private CA and server cert with server/scripts/pki.sh, deploy with server/deploy/push.sh, build the phone app with make -C app after setting your GATEWAY_URL, install the .jad/.jar on the phone, load the root CA onto it, and pair through the on-phone setup wizard.
What do I need on my computer to build and deploy it?Go 1.26+, JDK 11+, Python 3 with Pillow, Docker for deployment, and OpenSSL or LibreSSL for generating the certificates; you also need your own API keys for the AI providers you want to enable.
Will it work on my old Nokia?It is confirmed working on the Nokia 6300 (S40) and Nokia E63 (S60 QWERTY); other Series 40 phones with CLDC 1.1 / MIDP 2.0 and a 240x320 screen may work but are untested. Right-to-left languages like Arabic and Hebrew need layout work, and scripts the phones' fonts lack, like Japanese or Chinese, are out of reach on this hardware.
Where do my chats, photos and notes end up?Your provider API keys and chat history live only on your own server; chats are kept for 30 days (pinned ones until you unpin or delete them) and photos stay with their chat for the same 30 days. Your notes for the AI and saved replies stay on the phone itself.
Why does the server need its own private certificate authority?A 2007 Nokia only speaks TLS 1.0 with RSA key exchange and sends no SNI, so public clouds refuse its handshake; the server terminates TLS itself using a certificate from a private CA that you install on the phone once.
Who pays for the actual AI requests?Every message bills your own API key with that provider; the server enforces per-device daily request, token, web-search, voice-message and photo limits and never retries a paid call automatically.
What can the phone do besides plain chat?It can search the web for news, weather and rates, dictate voice messages, ask about photos taken with the camera, add calendar and to-do entries from a reply, save replies as .txt files, and shorten, explain, or translate any message.
What languages does the app support?The menus come in English, Turkish, Spanish, Portuguese, French, German, Russian and Indonesian, and replies follow whatever language you type in regardless of the menu language.
Creator
emir
Size
14.8 MB
Stars
350
Age
21d
Commits · 90 Days