Saule · v7.7.5 · Android browser

Saule

A browser that forgets.

Android 8+ · ~320 KB · no libraries · sideload

What it is for

Forgetting is the default, remembering is a choice

Cookies go the moment you close the tab — not later, not eventually. Everything else is swept on exit.

What survives is the keep list: the few sites you have dealings with, where a login matters, where somebody counts the articles you read, where a basket is waiting.

Erasing those is not privacy; it is a way of becoming a stranger every evening. So the choice is yours and not the browser's.

The list starts empty. Nothing is on it that you did not put there.

Cookies, tracks and cards blowing away on a ribbon of gold; one bookmarked page stays lit.
What is swept, and the one thing that stays

How you steer it

Two surfaces, either can be switched off

A strip along the top: back, a badge, the address, a menu.

And the pie — the fan at the top of this page. Drag the mark to any edge and it stays where you left it; hold the hub and the fan turns over to a second face.

On a long phone a thumb reaches the edge and almost nothing else. The pie is made out of exactly that observation.

The pie open on a page, first face.
first face
The pie turned over to its second face.
turned over

What no other browser here does

Cookies you can read

A list with a search across names and values, per host, with the parent domains walked up to the public suffix. Tap to copy a value, hold to drop one. Every host has an arrangement — kept, cleared on exit, never kept — and a badge on the strip says which, in a picture rather than a word.

The arrangement with a host: keep cookies here, clear on exit, never keep.
The arrangement with a host

A PDF opens here

Page by page, and a PDF behind a link arrives with your cookies — so the ones that live behind a login come as themselves rather than as a sign-in page.

Markdown becomes a page

Headings, code, quotes, tables and all.

Reading aloud

The voice takes its language from the document, not from the phone. A Finnish article is read in Finnish even where the application is in Russian.

A woman reading a lit page by moonlight, fan in hand.
Read here, in the language it was written in

Words

Fourteen languages, and a fifteenth with none

English, Finnish, Swedish, Russian, Ukrainian, German, French, Spanish, Arabic, Hebrew, Kazakh, Kyrgyz, Urdu, Chinese — 129 strings each, with no gaps.

And a setting that takes the labels away altogether. Not a joke: a test of whether a button can be recognised without being read.

The settings sheet in Russian, with the about block and the illustration.
Settings, in the reader’s own language

How it is made

Plain Java, four command-line tools

No Gradle, no Android Studio, no dependency resolution, nothing downloaded at build time. Java compiled against android.jar, packed and signed by hand. Written on a phone, in conversation.

aapt package -f -m -J gen -M AndroidManifest.xml -S res -I android.jar -F base.ap_
javac --release 8 -classpath android.jar -d cls $(find src gen -name "*.java")
dalvik-exchange --output classes.dex cls
zipalign -f 4 unsigned.zip saule.apk && apksigner sign --ks <key> saule.apk

The design decisions are the author’s: what the browser forgets, what it keeps, where the mark sits, what a button is allowed to promise. The code was written and rewritten against those decisions by Claude and ChatGPT, which also argued when a decision contradicted itself and translated the interface into thirteen languages the author does not speak. Every line was read before it shipped; some of it was sent back.

The artwork is theirs too, and not the same one twice: the woman on the launcher was drawn by Gemini, the two illustrations on this page by ChatGPT, and the icon glyphs inside the application are hand-drawn where the Material set had no word for what was meant.

Permissions

Three, and one is optional

Internet — to fetch pages, which is the whole job.

Network state — to know whether there is a connection before blaming a site for a blank page.

Location (coarse) — weather on the fresh page. Optional; refuse it and the sky goes quiet.

No account, no sync, no telemetry. Nothing is sent anywhere, and the log stays on the phone.