A daily prayer notification daemon for Muslims on Windows and Linux, supporting 21 global standard calculation methods, all madzhab, all country.
muslimtify
A daily prayer notification daemon for Muslims on Windows and Linux, supporting 21 global standard calculation methods, all madzhab, all country.
README
Muslimtify
Muslimtify keeps you consistent with your daily prayers by delivering accurate prayer times and timely desktop notifications. Designed for Linux and Windows, it automatically calculates prayer schedules and reminds you 30, 15, and 5 minutes before the Adhan — or at your own custom intervals — and when it's time to pray. All calculations run locally, requiring no internet connection or external services.
Muslimtify supports 21 international calculation methods including MWL, ISNA, Umm al-Qura (Makkah), Egyptian General Authority, Kemenag (Indonesia), JAKIM (Malaysia), Diyanet (Turkey), and more. The default method is Kemenag. With persistent configuration and minimal setup, Muslimtify integrates seamlessly into your daily routine without interrupting your workflow.
[!Note] Prayer time calculations are powered by libmuslim, a portable library extracted from this project to enable a more flexible and reusable ecosystem for Muslim developers.
| Linux | Windows |
|---|---|
Roadmap
Merge commandlocation autoandmethod autointo (only)config autoand optimize auto detection per (249) countryRefactor from timer-driven into a portable long-running loopAdd custom adzan sound notificationsRe-design command-line (BREAKING CHANGES)- Add read lat/long from user GPS
- Add GUI (see branch gui to see a progress)
- Distribute to Flatpak
- MacOS support (if devices is available)
- Wearable Device support
- Embedded Device Support
[!Important] This project is available for Linux and Windows users, but not yet for Mac users because we need a Mac device to make Muslimtify run on macOS. We are looking for brothers and sisters who have a Mac and experience in low-level C programming to contribute to the project and help bring Muslimtify to macOS. Alternatively, you can support us via GitHub Sponsors in the sponsor section.
Installation
Prebuilt Binaries (GitHub Releases)
Every release ships ready-to-run binaries for Linux and Windows on the Releases page.
Linux (x86_64 or aarch64) — the binaries are dynamically linked, so
install the runtime libraries first, then extract and install:
# Ubuntu/Debian
sudo apt install libnotify4 libcurl4
# Fedora/RHEL
sudo dnf install libnotify libcurl
# Arch
sudo pacman -S libnotify curl
tar xzf muslimtify-<version>-linux-<arch>.tar.gz
sudo cp -r muslimtify-<version>-linux-<arch>/{bin,lib,share} /usr/local/
muslimtify daemon install
Windows (x64 or arm64) — download and run the matching installer:
muslimtify-<version>-setup-x64.exe # Intel/AMD
muslimtify-<version>-setup-arm64.exe # ARM
Verify any download against the published checksums:
sha256sum -c SHA256SUMS
Arch Linux (AUR)
yay -S muslimtify
Fedora (COPR)
sudo dnf copr enable rizukirr/muslimtify
sudo dnf install muslimtify
Debian/Ubuntu (PPA)
sudo add-apt-repository ppa:rizukirr/muslimtify
sudo apt update
sudo apt install muslimtify
Linux Source Install
Install dependencies:
# Ubuntu/Debian
sudo apt install git build-essential cmake pkg-config libnotify-dev libcurl4-openssl-dev
# Fedora/RHEL
sudo dnf install git gcc cmake pkgconfig libnotify-devel libcurl-devel
# Arch Linux
sudo pacman -S git base-devel cmake pkgconfig libnotify curl
Clone, install, and enable background checks:
git clone https://github.com/rizukirr/muslimtify.git
cd muslimtify
sudo ./install.sh
muslimtify daemon install
Windows (winget)
winget install muslimtify
Windows Source Install
git clone https://github.com/rizukirr/muslimtify.git
cd muslimtify
.\install.ps1
muslimtify daemon install
To remove the Windows install later, run .\uninstall.ps1.
If you prefer building manually first:
cmake -S . -B build
cmake --build build --config Release
cmake --install build --config Release
muslimtify daemon install
Post Installation
Run muslimtify daemon status to check if Muslimtify is registered with systemd. If no status is found, run muslimtify daemon install to register the service and ensure it runs as expected.
Muslimtify automatically selects the standard prayer time calculation method based on your country and location. Run muslimtify to verify that your configuration is correct. If the automatic selection does not meet your needs, you can set it manually using muslimtify method <key-method>. A full list of available methods is documented here.
Configuration
Muslimtify can be configured with CLI commands or by editing config.json
manually.
Config paths:
- Linux config:
~/.config/muslimtify/config.json - Linux cache:
~/.cache/muslimtify - Windows config:
%APPDATA%\muslimtify\config.json - Windows cache:
%LOCALAPPDATA%\muslimtify
Common setup commands:
muslimtify location set --auto # detect location from IP
muslimtify location set --auto --city=Mansoura # auto-detect but use your own city label
muslimtify method --auto # select method from the detected country
muslimtify location set --lat=-6.175 --long=106.82 # set location manually (uses system timezone)
muslimtify location set --timezone=Asia/Jakarta # override timezone
muslimtify location set --city=Jakarta # add a city label
muslimtify location set --refresh-interval=21600 # re-check location every 6h (0=off, min 3600)
muslimtify method --list # list all available calculation methods
muslimtify method mwl # set calculation method
muslimtify madzhab hanafi # set madzhab (shafi/hanafi)
muslimtify notification --reminder --all 30 15 5 # set every prayer's reminders (minutes before adhan)
muslimtify notification --reminder fajr 30 15 5 # set reminders for a single prayer
muslimtify notification # show current notification settings
muslimtify location # show current location
Resetting the configuration is done by deleting config.json. Muslimtify falls
back to built-in defaults when the file is missing, and rewrites it the next
time you change a setting. Validation runs automatically every time the config
is loaded.
Calculation Methods
Muslimtify supports the following calculation methods:
| Key | Method | Region |
|---|---|---|
mwl |
Muslim World League | Europe, Far East |
makkah |
Umm al-Qura, Makkah | Arabian Peninsula |
isna |
ISNA | North America |
egypt |
Egyptian General Authority | Africa, Middle East |
karachi |
Univ. Islamic Sciences, Karachi | Pakistan, India, Bangladesh |
turkey |
Diyanet, Turkey | Turkey |
singapore |
MUIS, Singapore | Singapore |
jakim |
JAKIM, Malaysia | Malaysia |
kemenag |
KEMENAG, Indonesia | Indonesia (default) |
france |
UOIF, France | France |
russia |
Spiritual Admin., Russia | Russia |
dubai |
GAIAE, Dubai | UAE |
qatar |
Min. of Awqaf, Qatar | Qatar |
kuwait |
Min. of Awqaf, Kuwait | Kuwait |
jordan |
Min. of Awqaf, Jordan | Jordan |
gulf |
Gulf Region | Gulf states |
tunisia |
Min. of Religious Affairs | Tunisia |
algeria |
Min. of Religious Affairs | Algeria |
morocco |
Min. of Habous, Morocco | Morocco |
portugal |
Comunidade Islamica de Lisboa | Portugal |
moonsighting |
Moonsighting Committee | Worldwide |
You can also use a custom method by setting "method": "custom" in config.json with your own fajr_angle and isha_angle values.
Manual JSON editing is useful when you want precise control over enabled prayers, reminder offsets, notification settings, or location data.
Default config.json{
"location": {
"latitude": 0.0,
"longitude": 0.0,
"timezone": "UTC",
"timezone_offset": 0.0,
"auto_detect": true,
"city": "",
"country": ""
},
"prayers": {
"fajr": {
"enabled": true,
"adhan": "",
"adhan_enabled": true,
"reminders": [30, 15, 5],
"offset": 0
},
"sunrise": {
"enabled": false,
"adhan": "",
"adhan_enabled": false,
"reminders": [],
"offset": 0
},
"dhuha": {
"enabled": false,
"adhan": "",
"adhan_enabled": false,
"reminders": [],
"offset": 0
},
"dhuhr": {
"enabled": true,
"adhan": "",
"adhan_enabled": true,
"reminders": [30, 15, 5],
"offset": 0
},
"asr": {
"enabled": true,
"adhan": "",
"adhan_enabled": true,
"reminders": [30, 15, 5],
"offset": 0
},
"maghrib": {
"enabled": true,
"adhan": "",
"adhan_enabled": true,
"reminders": [30, 15, 5],
"offset": 0
},
"isha": {
"enabled": true,
"adhan": "",
"adhan_enabled": true,
"reminders": [30, 15, 5],
"offset": 0
}
},
"notification": {
"timeout": 5000,
"urgency": "critical",
"sound": "adhan",
"sound_alarm": "alarm",
"sound_reminder": "reminder",
"icon": "muslimtify"
},
"calculation": {
"method": "kemenag",
"madhab": "shafi"
}
}
Troubleshooting
Notifications are not appearing
- Run
muslimtify daemon statusto confirm the background service is running. - On Linux, verify desktop notifications work with
notify-send "Test" "Hello". - On Windows, local system settings can block toast delivery. Check notification settings, Focus Assist / Do Not Disturb, and whether the command is running in an interactive desktop session.
Location detection is not working
- Run
muslimtify location set --autoagain. - Set coordinates manually with
muslimtify location set --lat=<latitude> --long=<longitude>. If the host machine is in a different region than the coordinates, override the timezone with--timezone=<iana>, e.g.muslimtify location set --lat=-6.21 --long=106.84 --timezone=Asia/Jakarta. - Check network access to
ipinfo.ioif auto detection keeps failing.
Contributing
Contributions are welcome. See CONTRIBUTING.md for workflow, style, and testing guidance.
License
Muslimtify is released under the MIT License. See the repository license files for details.
Support
- Bugs and feature requests: GitHub Issues
- Questions and discussion: GitHub Discussions