Documentation
Technical reference for QuranBuddy v0.1.0
Overview
QuranBuddy is a cross-platform desktop Quran reader built with Tauri v2 (Rust backend) and Next.js 16 (React 19 frontend). It uses a static site export served inside a Tauri webview with full native integration via IPC commands and events.
The application provides Quran reading with tajweed color coding, audio recitations from 17+ reciters, verse-by-verse and word-by-word audio playback, prayer times with azan notifications, and a distraction-free reading experience.
- Version: 0.1.0
- Identifier: com.quran.buddy
- License: Open Source
- Window: 1280x800, frameless (custom title bar)
Installation
Download the latest installer for Windows. Choose between the standard setup wizard (.exe) or the package manager format (.msi).
Requirements
- Windows 10+ (64-bit)
- ~22 MB free disk space
- WebView2 Runtime (pre-installed on Windows 11)
- Internet connection for recitation streaming (optional)
Keyboard Shortcuts
| Shortcut | Action | Scope |
|---|---|---|
| D | Toggle dark/light theme | Global |
| Escape | Clear search / close dropdown | Surah reader |
| Ctrl + K | Open command palette | Global |
Features
Quran Reader
Full Quran text with Uthmani script, verse-by-verse navigation, tajweed color coding (17 color rules), translations, and word-by-word clickable text for audio playback.
Audio Recitations
17+ reciters including Maher Al Muaiqly, Yasser Al Dossari, Hazza Al-Balushi, and more. Supports verse-by-verse streaming, offline download with progress tracking, word-by-word audio, and play queue with shuffle/repeat.
Prayer Times
Accurate prayer times via Aladhan API (14 calculation methods). Azan notifications, pre-prayer reminders, countdown timer, 3 azan styles (Makkah, Madinah, Egypt), and test notification support.
Customization
Dark/light/system theme, tajweed toggle, translations toggle, configurable reciter, azan style and volume, prayer calculation method, startup on login (Windows), and auto-hiding title bar.
Configuration
Settings are persisted as JSON at %APPDATA%/quranbuddy/config.json on Windows.
| Field | Type | Default | Description |
|---|---|---|---|
| city | string | "Dubai" | City for prayer times |
| country | string | "UAE" | Country for prayer times |
| method | u32 | 2 | Prayer calculation method (ISNA) |
| theme | string | "dark" | dark / light / system |
| last_surah | u32 | 1 | Last viewed surah |
| reciter_id | u32 | 7 | Default reciter ID |
| tajweed_enabled | bool | false | Tajweed color coding |
| translations_enabled | bool | true | Verse translations |
| prayer_notifications_enabled | bool | false | Prayer time alerts |
| selected_azan | string | "Makkah" | Azan style |
| azan_volume | f32 | 0.5 | Azan volume (0.0-1.0) |
| reminders_enabled | bool | false | Pre-prayer reminders |
| reminder_minutes | u32 | 10 | Minutes before prayer |
Architecture
Rust Backend
The backend is organized into four modules:
lib.rsApp setup, 40+ Tauri commands, audio playback via rodio, system tray, and prayer scheduler background task (30-second polling loop).api.rsQuran.com API integration (chapters, verses, audio URLs, search), azan MP3 downloads, and Aladhan prayer times.config.rsJSON-based settings persistence with serde — stored at%APPDATA%/quranbuddy/config.json.main.rsEntry point with Windows console hiding on release builds.
Frontend (Next.js)
/Splash page with command palette (cmdk) for quick navigation./homeChapter grid with download management for each surah./surah/[id]Full reader with tajweed HTML, word-by-word audio, verse search, and audio player./settingsAll app settings with persistence via Tauri IPC./ptimesPrayer times dashboard with live countdown, azan preview, and notification test.
Audio System
A dedicated background thread (rodio) manages azan playback. The frontend uses HTMLAudioElement for verse recitations:
- Streaming: Direct MP3 URLs from mp3quran.net servers.
- Offline: Downloaded to
$APPDATA/audio/{chapter_id:03d}_{reciter_id}.mp3, served via Tauri'sasset://protocol. - Word-by-word: Quran.com API or constructed URLs at
https://verses.quran.com/wbw/{chapter:03d}_{verse:03d}_{word:03d}.mp3. - Audio output: Supports
setSinkId()for device selection when supported.
Prayer Scheduler
The Rust backend runs an async task that checks every 30 seconds for matching prayer times. On match, it sends an OS notification via tauri-plugin-notification and plays the selected azan. Pre-prayer reminders fire at the configured interval. Notifications are deduplicated per prayer per day.
Azan styles: Makkah (Ali Ibn Ahmad Mala), Madinah, Egypt (Abdulbasit Abdusamad).
Tauri Commands
All IPC commands registered in the Rust backend, callable from the frontend via @tauri-apps/api.
Config
get_settings— Returns current Config objectsave_settings(settings)— Persists partial config changesreset_settings— Restores defaultsget_config_path— Returns config file pathopen_config_folder— Opens directory in file managerget_startup_setting/set_startup_setting— Windows auto-start via registry (winreg)
Quran API
get_chapters— All 114 surahs from Quran.com APIget_recitations— API reciters + 10 custom reciters (IDs 7001-7010)get_chapter_audio(chapter_id, reciter_id)— Audio URL for surahget_verses_by_chapter(chapter_id)— All verses (paginated)get_verses_tajweed(chapter_id)— Tajweed-coded Uthmani textget_verse_words(chapter_id, verse_number)— Word-level audio URLssearch_verses(query, page)— Global Quran search
Audio Download
download_chapter_audio(chapter_id, reciter_id)— Downloads MP3 with progress eventsget_chapter_audio_path(chapter_id, reciter_id)— Local file pathdelete_chapter_audio(chapter_id, reciter_id)— Deletes cached audioget_bulk_chapter_audio_status(reciter_id)— Lists all downloaded chapters
Prayer / Azan
get_prayer_times— Fetches from Aladhan APIpreview_azan(azan_name)— Streams and plays azan previewget_azan_list— Available azan stylestrigger_test_notification— Test OS notification + azan
FAQ
Support
QuranBuddy is free and open source. If you encounter issues or have suggestions, reach out:
- GitHub: github.com/mnsartawi/quranbuddy
- Email: me@sartawi.dev
Enjoying QuranBuddy?
Consider supporting the project to help with development and hosting costs.
Get in touch