ConsumerSeptember 14, 2026by
Aephoron
Aephoron

Aephoron: A Browser with Its Own Engine, and a Wallet Built In

Every "crypto browser" so far has been Chromium with a wallet extension pre-installed. Aephoron is not. Its rendering engine, Kinetoor, is a deep fork of Servo in Rust, and the browser around it is built from 19 crates the ecosystem maintains. This post is what it is and what it took to make it real on a phone.

What is built

Desktop (egui UI, Material Design 3 toolbar and tabs): 350+ roadmap tasks complete; compiles clean. Crates include on-chain DNS resolution for .emp domains via EmpoorioChain, IPFS/IPNS gateway, DNS-over-HTTPS (Empoorio, Cloudflare, Quad9), an AES-256-GCM password manager with breach checking, encrypted E2E sync over IPFS, bookmarks, downloads, PWA install, PDF viewing, translation, multi-profile with guest mode, a price ticker for DMS/DUSD, an auto-updater, and DevTools with a network HAR export and a crash viewer.

Wallet: aephoron-wallet integrates Eoonia — SIWE and personal_sign — plus WalletConnect v2 and a payments crate with generic eth_call and ERC-20 encoding. Ethereum and EmpoorioChain (chain id 2026) both first-class.

Ads: empoorio-ads connects natively to SkoopoS's centralised ad backend — verified end to end in July 2026 — so the browser's ad slot is the ecosystem's own verifiable-advertising system rather than a third party's.

Assistant: aephoron-ai puts the Ailoos model (via api.ailoos.com) in the sidebar, in the style of Brave's Leo — the previous version of this page described that browser; this one describes the ecosystem's own.

Android, 8 September 2026

Kinetoor rendered a real website on a POCO F8 PRO — a full news site, redirect followed, URL returned to the bar — drawn into an Android Surface via a platform view. Getting there meant clearing four traps invisible at compile time:

  1. jemalloc does not build for aarch64-linux-android, but its build script still emitted the link flag; a shared library tolerates unresolved symbols, so linking succeeded and dlopen failed at runtime. Removed jemalloc from the Android allocator.
  2. Android's pointer tagging (Scudo) put non-zero bits in the top byte of heap pointers; SpiderMonkey requires those bits clear and aborted the script thread. jemalloc had been masking this by returning untagged pointers. Fixed with allowNativeHeapPointerTagging="false".
  3. Initialising the engine twice killed the process — a global OnceLock; the "already started" flag now lives at process scope and a new surface is resumed, never re-initialised.
  4. R8 stripped the JNI callbacks in release — 18 method names vanished from the dex because Rust calls them by name and the shrinker cannot see that. Compiles green, works in debug, fails only in the build that goes to the store. Fixed with keep rules and a script that checks the bridge against the built artefact.

Release AAB: 90.8 MB, within the Play limit, after LTO and size optimisation brought the engine from 138 MB to 89 MB.

The August audit

Twelve agents audited Aephoron in August 2026 and found real problems — a remote-code-execution path in the updater and a wallet store decryptable without a password among them. Both fixed; the audit is recorded.

Status

Desktop builds and runs. Android renders and is being hardened for a store release; no listing yet. aephoron.com is live.

Based on the Aephoron roadmap (session 14), the Android Kinetoor notes (2026-09-08), the SkoopoS integration (2026-07-30) and the August 2026 audit.

Share this article