Hey everyone! Welcome to Secure Dialer, my open-source, privacy-first, 100% offline Android phone app.
I built this dialer from scratch because I believe your phone dialer is the single most important app on any phone. Every phone call you make or receive should stay completely private and safe between you and the other person. Most pre-installed stock dialers and commercial caller ID apps track your call records, upload your address book to remote servers, and drain your battery with background telemetry and ads. Secure Dialer is built with a simple, honest promise: zero internet permission, zero ads, zero trackers, and complete on-device privacy.
┌──────────────────────────────────────────────────────────┐
│ Android OS Framework │
└────────────────────────────┬─────────────────────────────┘
│ (Native InCall IPC)
┌────────────────────────────▼─────────────────────────────┐
│ MyInCallService : InCallService │
└────────────────────────────┬─────────────────────────────┘
│
┌─────────────────────┼─────────────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────────┐
│ Dialer Repo │ │ Room SQLite │ │ Android KeyStore │
│ (T9 Search) │ │ (SQLCipher) │ │ (Hardware Root) │
└──────────────┘ └──────────────┘ └──────────────────┘
I am not originally from an Android development background, but I was looking for a dialer that is lightweight, super fast, privacy-oriented, and beautiful. I kept searching for an open-source dialer that fit all my everyday needs, but couldn't find one that felt completely right.
There are great open-source dialers out there like Fossify Dialer, Koler, and others—everyone of them is good enough and has their own features and use cases.
What I tried to make is a dialer that is fully functional, secure, fast, and lightweight, while bringing the clean simplicity of Material 3 and Material 3 Expressive into your daily phone calls.
I wanted an app that:
- Works flawlessly on modern flagship phones (Android 14, 15, 16) with expressive dynamic colors and smooth 120Hz animations.
- Runs smoothly on older devices (Android 9, 10, 11, 12) that we all have at home and don't want to throw away.
- Is simple enough for elders and parents to use without confusion, modern for younger users, and packed with practical tools for power users.
| Feature / Security Point | Secure Dialer (FOSS) | Google / Samsung Dialer | Truecaller / Commercial | Simple / Fossify |
|---|---|---|---|---|
| 100% Free & Open Source (GPLv3) | Yes | No (Closed source) | No (Closed source) | Yes |
| Zero Internet Permission | Yes (100% Offline) | No (Background telemetry) | No (Uploads contacts) | Yes |
| Local Offline Spam Screening | Yes (CallScreeningService) | Needs Cloud Sync | Needs Cloud & Upload | Limited |
| On-Device Database Encryption | Yes (SQLCipher AES-256) | Plaintext SQLite | Stored on Cloud Servers | Plaintext SQLite |
| Hardware Key Protection | Yes (Android KeyStore) | No | No | No |
| Emergency Fake Call Simulator | Yes (Built-in) | No | No | No |
| Material 3 Expressive UI | Yes (Jetpack Compose) | Stock Material | Cluttered / Ads | Classic M2 / M3 |
| Works on Older & Newer Phones | Yes (API 24 to 36) | OEM Restricted | Heavy resource usage | Yes |
Built natively with Kotlin 2.0, Jetpack Compose (Material 3), and Room Database with SQLCipher:
- Fast T9 Predictive Search: Search your contacts in milliseconds right from the dialpad by spelling names or dialing numbers.
- Tactile Haptic Engine: Crisp, responsive vibration feedback and classic DTMF tones.
- Smart Clipboard Paste: Long-press to paste phone numbers directly; automatically strips out dashes, spaces, and formatting brackets.
- Quick Speed Dial (Keys 1-9): Long-press any digit from 1 to 9 to instantly call your favorite contacts or emergency numbers.
- Full Dual-SIM Support: Multi-SIM prompt on outgoing calls with customizable default SIM preference per contact or carrier.
- Zero Internet Access: The app does not declare
android.permission.INTERNETin its manifest. It is physically impossible for the app to send your data anywhere. No ads, no telemetry, no tracking SDKs. - Encrypted Database: Custom call notes, speed dials, and blacklists are stored locally on-device using strong AES-256 SQLCipher encryption.
- Android KeyStore Protection: Database encryption keys are sealed inside your device's hardware enclave (TEE / StrongBox).
- Encrypted Backups: Export and import your configurations and blocklists with password protection using PBKDF2 (10,000 rounds) and AES-GCM.
- 🎭 Fake Call Simulator: Need to politely excuse yourself from an awkward meeting or situation? Trigger a realistic, customizable incoming call screen with a timer (5s, 10s, 30s) that rings and looks just like a real call.
- 📝 In-Call Notes & Local Recorder: Take private notes during phone calls and save them encrypted locally.
- 👋 Motion Gestures: Flip phone face-down to silence incoming rings, or raise-to-ear to answer incoming calls automatically.
- ⏰ Call Back Reminders: Schedule local alarms to remind you to return missed calls without relying on cloud notification servers.
- 📊 Visual Call Summary: Review clean, offline statistics and charts of your calling habits directly inside the app.
- Native Call Screening: Block unwanted callers, robocalls, and hidden numbers offline in under 5ms using Android's native
CallScreeningService. - vCard / VCF Backup & Restore: Import and export standard
.vcfcontact files completely offline. - Duplicate Contact Cleaner: Find and merge repeating phone numbers and duplicate contacts with one tap.
To work properly as your Default Phone App, Android requires standard telephony permissions. Because Secure Dialer has zero internet permission, your data stays 100% on your device:
| Permission | What It Does | Why It Is Safe |
|---|---|---|
READ_CONTACTS |
Shows your contacts in the dialpad and contacts tab. | Reads locally on your phone; never uploaded anywhere. |
WRITE_CONTACTS |
Lets you add, edit, or delete contacts directly in the app. | Updates only your local address book. |
CALL_PHONE |
Places phone calls when you tap a number or speed dial. | Connects directly through your carrier SIM. |
READ_CALL_LOG |
Shows your recent calls, missed calls, and call history. | Kept strictly on your phone. |
WRITE_CALL_LOG |
Lets you clear call history entries or delete old logs. | Modifies local logs on your device only. |
MODIFY_AUDIO_SETTINGS |
Switches audio between earpiece, speakerphone, and Bluetooth headsets. | Standard audio routing for active calls. |
USE_FULL_SCREEN_INTENT |
Wakes up your screen and shows the incoming call screen when locked. | Needed so you never miss an incoming call. |
POST_NOTIFICATIONS |
Shows ongoing call controls and missed call badges in your status bar. | Local system notifications only. |
SEND_SMS |
Sends quick decline text messages (e.g. "I'm in a meeting, call you later"). | Only sends texts when you tap a quick reply button. |
READ_PHONE_STATE |
Detects active SIM cards and carrier lines for dual-SIM phones. | Needed for SIM slot detection. |
VIBRATE |
Provides tactile feedback when tapping keypad buttons. | Hardware haptics only. |
If you use Obtainium, you can get automatic update notifications directly from our GitHub Releases:
- Install Obtainium on your Android phone.
- Tap Add App and paste our repository URL:
https://github.com/Secure-Phone-apps/Secure-Dialer. - Tap Add and Obtainium will automatically pick the right APK for your device and keep you updated!
You can download signed release APKs directly from our GitHub Releases Page:
| APK File Name | Which One Should You Download? |
|---|---|
secure-dialer-v1.3.0-arm64-v8a.apk |
Most modern Android phones (Pixel, Samsung Galaxy, OnePlus, Xiaomi, Motorola from the last 6+ years). Choose this one if unsure! |
secure-dialer-v1.3.0-armeabi-v7a.apk |
Older 32-bit Android phones and budget devices. |
secure-dialer-v1.3.0-x86_64.apk |
64-bit Emulators, ChromeOS, or Android-x86 PC setups. |
secure-dialer-v1.3.0-universal.apk |
Universal build that runs on any Android device. |
If you want to inspect the code, run tests, or compile your own APK:
# 1. Clone the repository
git clone https://github.com/Secure-Phone-apps/Secure-Dialer.git
cd Secure-Dialer
# 2. Run unit tests
gradle :app:testDebugUnitTest
# 3. Build the debug APK
gradle :app:assembleDebugOutput APK will be generated at: app/build/outputs/apk/debug/
I am continuously working to refine this dialer and make it as reliable, beautiful, and secure as possible.
- 💬 GitHub Discussions: Share your ideas, ask questions, or tell me how it runs on your phone model.
- 🐛 GitHub Issues: Found a bug or glitch? Please report it with your phone model and Android version so I can fix it!
- 📚 Project Wiki: Deep-dive technical guides on encryption, permissions, and custom ROM setups (GrapheneOS, CalyxOS, LineageOS).
- 💖 Sponsor on GitHub Sponsors: If you find this dialer helpful and want to support my work and help me get test devices, your support means the world to me!
Secure Dialer is free software licensed under the GNU General Public License v3.0 (GPLv3). You are free to inspect, audit, modify, and build it from source. See the LICENSE file for full details.






