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…

353 ·GitHub
这是什么?AIKON 是面向老式诺基亚 Series 40 和 Symbian S60 功能机(Java ME、CLDC 1.1 / MIDP 2.0)的 AI 聊天客户端,搭配一个小型 Go 服务器把你的消息转发给 Claude、OpenAI、Gemini 或 Grok,让 2007 年代的功能机也能与现代 AI 模型聊天。
这只是一个手机应用,还是还需要服务器?两者都要:一个约 220 KB 的 J2ME MIDlet(app/)运行在手机上,一个约 7 MB 的 Go 二进制或 Docker 镜像(server/)负责 TLS 终止、与 AI 提供商通信并用 SQLite 存储聊天。手机必须指向你自己运行的服务器才能工作。
怎么让它跑起来?搭建一台具有公网 IPv4 和 TCP 443 的 Docker 主机(每月 4-6 美元的 VPS 即可),用 server/scripts/pki.sh 生成私有 CA 和服务器证书,用 server/deploy/push.sh 部署,设置好 GATEWAY_URL 后用 make -C app 构建手机应用,把 .jad/.jar 安装到手机上,把根 CA 装进手机,然后通过手机上的设置向导完成配对。
在我的电脑上构建和部署它需要什么?Go 1.26+、JDK 11+、带 Pillow 的 Python 3、用于部署的 Docker,以及用于生成证书的 OpenSSL 或 LibreSSL;你还需要为自己想启用的 AI 提供商准备 API 密钥。
它在我的老诺基亚上能用吗?已确认可在 Nokia 6300(S40)和 Nokia E63(S60 全键盘)上运行;其他具备 CLDC 1.1 / MIDP 2.0 和 240x320 屏幕的 Series 40 手机也许能用,但未经测试。阿拉伯语和希伯来语等从右到左的语言需要额外的排版工作,而手机字体所缺少的文字系统(如日文或中文)在这类硬件上无法实现。
我的聊天、照片和笔记最终存在哪里?你的提供商 API 密钥和聊天历史只保存在你自己的服务器上;聊天记录保留 30 天(已固定的会保留到你取消固定或删除为止),照片随其所属的聊天同样保留 30 天。你写给 AI 的备注和保存的回复则留在手机本身。
为什么服务器需要自己的私有证书颁发机构?2007 年的诺基亚只支持带 RSA 密钥交换的 TLS 1.0,且不发送 SNI,因此公有云会拒绝它的握手;服务器使用来自私有 CA 的证书自行终止 TLS,这个 CA 只需安装到手机上一次。
实际的 AI 请求由谁付费?每条消息都计入你在相应提供商处的 API 密钥;服务器按设备执行每日请求、token、网页搜索、语音消息和照片限额,并且从不自动重试付费调用。
除了普通聊天,手机还能做什么?它可以联网搜索新闻、天气和汇率,用语音输入消息,询问用相机拍下的照片,从回复中添加日历和待办事项,把回复保存为 .txt 文件,还能缩短、解释或翻译任意消息。
应用支持哪些语言?菜单提供英语、土耳其语、西班牙语、葡萄牙语、法语、德语、俄语和印尼语,回复则会跟随你输入的语言,与菜单语言无关。
Creator
emir
Size
14.8 MB
Stars
353
Age
23d
Commits · 90 Days