DeltaSleep icon
Free & Open Source · GPLv3

Your sleep data
stays in your bed

On-device sleep phase and snore tracking. No account. No cloud. No network calls — ever. Verified by CI on every commit.

23:0001:0003:0005:0007:00
Awake Light Deep

Privacy isn't a feature.
It's the architecture.

Most sleep apps treat your most vulnerable hours as a data source. DeltaSleep is built around a different premise: your data is yours, full stop.

  • No INTERNET permission in the manifest
  • CI fails if http, socket, or fetch appear in source
  • Raw audio is never written to disk
  • Reproducible F-Droid build, no binary blobs
  • "Nuke all data" overwrites the database before deleting
<!-- AndroidManifest.xml -->

<!-- No INTERNET permission.
Enforced by design. -->

<uses-permission
  android:name=
  "android.permission
    .RECORD_AUDIO" />
<uses-permission
  android:name=
  "android.permission
    .FOREGROUND_SERVICE" />
<uses-permission
  android:name=
  "android.permission
    .POST_NOTIFICATIONS" />

Everything you need.
Nothing you don't.

🌙

Sleep Phase Tracking

Awake, Light, and Deep sleep classified every 30 seconds using on-device audio heuristics. No wearable required.

🎙

Snore Detection

Spectral band-power analysis in the 20–300 Hz range. Flags snore events per epoch without recording a single clip.

📊

Hypnogram

A colour-coded sleep stage chart rendered locally. See your night at a glance the moment you wake up.

📤

CSV Export

Full epoch data exported to any folder via the system file picker. Open format — your data, your tools.

🔋

Battery Efficient

Target: ≤ 3% drain per 8-hour night. The mic duty-cycles to 80% when no events are detected.

🎵

Won't interrupt music

Uses the mix-with-others audio session. Spotify, Audible, podcasts — they all keep playing.

How it works

1

Tap Sleep

Optional countdown, then the mic calibrates room noise. No cloud call, no account prompt.

2

DSP on-device

A Rust library (compiled via NDK) extracts RMS, ZCR, and band power from 10 ms audio frames. Raw PCM is discarded immediately.

3

Epoch written

Every 30 s, a sleep phase label and snore flag are written to a local SQLite database. That's it.

4

Wake up

Tap Stop. Your hypnogram appears instantly — no sync, no spinner, no server.

Tech stack

UIKotlin + Jetpack Compose
DatabaseRoom (SQLite, app-private storage)
DSPRust → .so via Android NDK
BuildGradle 8.6 + cargo-ndk
Min SDKAndroid 8.0 (API 26)
LicenseGPLv3