Android alarm clock · open source

An alarm with
no off switch.

IRIS replaces the snooze button with something you have to physically do. Smile at the camera. Walk back to a spot you photographed. Hunt down an object it names at random. Find real daylight. Solve arithmetic. The alarm keeps ringing until one of them is genuinely done.

Side-loaded APK · Android 8.0+ · no Play Store listing

5Dismissal challenges
100%On-device — no network
0Accounts, ads, trackers
0.9.0Current version
The idea

Snoozing is a decision you make while asleep.

Every alarm clock hands its most consequential button to the least capable version of you. A tap is a reflex; it happens before you are conscious enough to regret it. Maths puzzles were the usual answer, and they fail the same way — you can do them lying down, eyes half shut, and be asleep again ninety seconds later.

Movement, not taps

Most IRIS challenges cannot be satisfied from under the duvet. They need the camera pointed at something across the room, or a walk to somewhere with real light.

Nothing leaves the phone

Face detection, scene matching and object recognition all run on-device through ML Kit. No frame is uploaded, stored or kept. The app needs the internet for exactly one thing: checking its own updates.

It still has to ring

Exact alarms through Doze, a foreground service that owns the audio, a volume floor so a muted stream can't silence it, and re-arming after reboot, time changes and app updates.

The challenges

Five ways to prove you're actually up.

Pick one per alarm. Each has a different cost at 6am, which is the real difference between them — and you can rehearse any of them in the editor before you trust it.

Mirror Iris

Hold a real smile at the front camera, eyes open, for three seconds. In a dark bedroom the screen becomes the light source: brightness goes to full and a white ring-light wash lights your face without blowing out the preview.

Easiest · can be done in bed

Passes when smile confidence > 0.8 and both eyes open > 0.7, held continuously for 3s.

Target Iris

Photograph a spot when you set the alarm — the kitchen counter, the bathroom mirror, a bookshelf across the room. The alarm only stops once the camera is looking at that place again. A thumbnail of the spot is shown while it rings, because half asleep you will not remember which shelf you chose.

Hard · gets you across the room

Passes when scene similarity to your captured anchor exceeds 82% across 4 consecutive frames. Matching uses a perceptual hash plus a luminance histogram, so it survives different light and imperfect framing.

Hunt Iris

The app names a household object when the alarm goes off — a sink, a shoe, a cup, an open drawer — and you have to point the camera at a real one. Choosing it at ring time is the whole point: it cannot be staged on the bedside table the night before. Each target comes with a hint about which room to try.

Hardest · unpredictable, sends you hunting

Passes when the on-device labeller recognises the named object at > 55% confidence across 3 consecutive frames. Don't own one? Two swaps are allowed — then you're stuck with what you were given.

Light Iris

Walk somewhere genuinely bright and hold it there. Uses the ambient light sensor, not the camera — so it works with the camera permission refused, and a phone screen shoved at the sensor won't do it.

Medium · needs real light

Passes when the sensor holds above 500 lux for 1.5 seconds, so a torch flashed past doesn't count.

Math Iris

Arithmetic on a big drawn keypad — not the system keyboard, which over a lock screen is at the mercy of whichever keyboard app you have installed. Difficulty and the number of problems are both settings. A wrong answer rerolls the question and shakes the pad, but never takes back one you already solved.

Medium · no camera, works anywhere

Passes when you answer the configured number of problems correctly (3 by default). Needs no camera, no sensor and no permission, which makes it the fallback on any device that can't run the others.

When it goes off

A card you push aside, then the challenge.

Deliberately a drag rather than a button — half asleep a button is easy to hit by accident, a deliberate push across the screen is not. The whole screen takes the colour of the decision as the card moves.

← Snooze Amber wash. Says exactly how long: rings again in 9 min.
Stop → Green wash. Goes on to the challenge — it is not an off switch.

Snooze behaves like a real alarm clock

A snooze arms a fresh exact alarm and posts a Snoozed until 06:09 notification with a cancel action. Snoozing again replaces the pending one rather than stacking, and solving the challenge — or disabling or deleting the alarm — cancels it. The challenge is still waiting at the end of it.

It takes over the screen, locked or not

A full-screen intent only wins while the phone is locked, so IRIS also starts the alarm screen outright when you're already using the phone. It shows over the lock screen rather than dismissing it — no PIN prompt in front of your alarm.

The wake check

Solving a challenge proves you were awake for ten seconds, not that you stayed up. Optionally, IRIS re-arms the same challenge for a few minutes later, and only an explicit I'm up cancels it.

Nothing rings without a way out

If a challenge genuinely can't run — no camera, permission refused — IRIS falls back to one that can and says so, rather than ringing at something impossible until the auto-silence timeout.

Before you trust it

Rehearse any challenge in the editor.

Every interesting question about these challenges is one no description can answer. Can the detector find your face in your bedroom's light? Does it recognise the objects in your kitchen? Is the spot you captured actually matchable from where you'll be standing?

TRY IT NOW runs the chosen challenge immediately, against the real detector, in the real ringing screen — the same code path, just without an alarm attached. Thirty seconds in the editor beats finding out at 6am.
Around the alarm

Everything else is in service of it.

An alarm clock, and nothing else

No timer, no stopwatch, no focus mode, no tab bar. IRIS does one thing and the whole screen belongs to it — which is what the enormous clock and the list under it were always designed for.

Assistant & quick actions

Registers the standard alarm intents, so "Hey Google, set an alarm for 7:30" can be handed to IRIS. Long-press the launcher icon to go straight to a new alarm.

A time picker worth using

A clock-face dial: minutes on the outer ring, hours on the inner one, both draggable and tappable, scrubbing a minute at a time so exact times need no second control. New alarms open at the current time.

Built for the dark

Pitch-black-first design with amber and neon-green accents, Space Grotesk throughout, and light / dark / system themes. The ringing screen stays dark whatever the app theme — it's a face full of phone in a dark bedroom.

Alarms that survive

Exact alarms via setExactAndAllowWhileIdle, re-armed after reboot, clock changes, timezone changes and app updates. Volume fades in from near-silence, and a muted alarm stream is raised to a floor then put back.

Manage the list fast

Long-press any alarm to start a selection — rings appear beside every row and the toggles step aside — then delete as many as you like at once.

Download

Get IRIS Alarm 0.9.0

Requires Android 8.0 (Oreo) or newer. There is no Play Store listing — these APKs are downloaded and installed directly.

BuildWho it's forSize
arm64-v8a Recommended Every phone sold in roughly the last eight years. Pick this one if you're not sure. ~27 MB
armeabi-v7a Older 32-bit devices. ~20 MB
x86_64 Emulators and the handful of Intel-based devices. ~29 MB
universal Contains every architecture. Much larger — only worth it if the others refuse to install. ~81 MB

Installing

Download the arm64-v8a APK Your browser will warn you about downloading a file of this type. That warning is about side-loading in general, not about this file.
Allow your browser to install unknown apps Android will offer this the first time you open the APK. It's a per-app permission and you can revoke it afterwards.
Open IRIS and walk through the permission setup Nothing here is optional theatre — each one is something the OS can withhold that would stop an alarm waking you.
Set your first alarm, then hit TRY IT NOW Rehearse the challenge once before you rely on it.

Permissions it asks for, and why

Notifications & full-screen alerts

The ringing alarm is delivered as a notification. Without these it cannot show anything at all.

Display over other apps

Lets the alarm take over the screen while you're already using the phone, instead of a banner you have to notice.

Exact alarms

Without it Android may fire the alarm late — sometimes by many minutes — to save battery.

Unrestricted battery

Battery optimisation can delay or drop an alarm while the phone is idle overnight, which is exactly when it needs to fire.

Camera

Only for the Mirror, Target and Hunt challenges. Frames are analysed in memory and never stored or sent anywhere. Light Iris and Math Iris work without it.

Install unknown apps

Only so the in-app updater can hand a new build to the system installer. You can skip it and update by downloading APKs yourself.

Updates. Settings → Updates checks this project's GitHub releases, downloads the build matching your device, and installs it without leaving the app. Android only accepts an update signed with the same key as the installed build.
Worth knowing before you rely on it

The unglamorous parts.

The signing key is public

Android refuses an update signed with a different key than the installed app, so the in-app updater only works if every release is signed with one key — and that key lives in the repository. It is deliberately not a secret. It means anyone could build an APK that installs over this one, so only install builds from this project's own releases page.

Manufacturer skins can still kill it

Xiaomi, Samsung, Huawei, Oppo and others add autostart and background limits that Android cannot report. If the alarm doesn't appear over the lock screen with everything granted, look for Autostart or Lock screen display in the app's system settings.

It's young

The logic is covered by unit tests and every build is compiled and linted in CI, but this has been tested on a small number of real phones. Keep a second alarm for anything that genuinely matters until you've watched it fire a few times.

Recognition is imperfect by nature

The object labeller knows a fixed vocabulary, and every hunt target was checked against it — but whether it finds your sink in your morning light is a real question. That's precisely what the rehearsal button is for.