al-falak
Al-Falak is an offline library for Islamic astronomy, starting with precise prayer times and expanding into broader temporal calculations. It follows a pipeline architecture: input coordinates and date flow through astronomical models to produce accurate timekeeping outputs. It originates from the same batoulapps/adhan port lineage as alphahm/adhanpy (via that Python port) and is developed and released as an independent library, from a detached fork of the original adhanpy repository.
Features
- Offline — no network calls, no API keys
- Timezone-aware — returns UTC
datetimeobjects, with optionalZoneInfoconversion - Multiple calculation methods — Muslim World League, ISNA, Egyptian, Karachi, Umm al-Qura, Dubai, Moonsighting Committee, and more
- Polar region support — configurable strategies for locations above the Arctic/Antarctic circles
- High latitude rules — middle of the night, seventh of the night, twilight angle
- Madhab selection — Shafi (default) and Hanafi for Asr calculation
- Qibla direction — degrees clockwise from north
- Sunnah times — middle and last third of the night
- CLI —
python -m alfalakfor quick terminal output - Fully typed — PEP 561
py.typedmarker,mypy --disallow-untyped-defsclean
Requirements
- Python >= 3.11
Installation
pip install al-falak
Quick Start
from datetime import datetime
from alfalak import PrayerTimes, CalculationMethod, Prayer
# Coordinates for Raleigh, NC
coordinates = (35.7750, -78.6336)
today = datetime.now()
prayer_times = PrayerTimes(
coordinates,
today,
CalculationMethod.NORTH_AMERICA,
)
print(f"Fajr: {prayer_times.fajr.strftime('%H:%M')}")
print(f"Sunrise: {prayer_times.sunrise.strftime('%H:%M')}")
print(f"Dhuhr: {prayer_times.dhuhr.strftime('%H:%M')}")
print(f"Asr: {prayer_times.asr.strftime('%H:%M')}")
print(f"Maghrib: {prayer_times.maghrib.strftime('%H:%M')}")
print(f"Isha: {prayer_times.isha.strftime('%H:%M')}")
Usage
Timezone Conversion
Pass a ZoneInfo object to get times in that timezone:
from zoneinfo import ZoneInfo
from alfalak import PrayerTimes, CalculationMethod
london_zone = ZoneInfo("Europe/London")
prayer_times = PrayerTimes(
(51.5074, -0.1278),
datetime.now(),
CalculationMethod.MOON_SIGHTING_COMMITTEE,
time_zone=london_zone,
)
Custom Calculation Parameters
from alfalak import PrayerTimes, CalculationParameters
params = CalculationParameters(
fajr_angle=18,
isha_angle=18,
isha_interval=90, # Isha = Maghrib + 90 minutes
)
prayer_times = PrayerTimes(
coordinates,
today,
calculation_parameters=params,
)
Qibla Direction
from alfalak import Qibla
direction = Qibla((35.7750, -78.6336)).direction
print(f"Qibla: {direction:.1f}° clockwise from north")
Sunnah Times
from alfalak import PrayerTimes, SunnahTimes, CalculationMethod
prayer_times = PrayerTimes(coordinates, today, CalculationMethod.MUSLIM_WORLD_LEAGUE)
sunnah = SunnahTimes(prayer_times)
print(f"Middle of the night: {sunnah.middle_of_the_night}")
print(f"Last third: {sunnah.last_third_of_the_night}")
Polar Regions
from alfalak import PrayerTimes, CalculationParameters, PolarCircleRule
params = CalculationParameters(
polar_circle_rule=PolarCircleRule.NEAREST_LATITUDE, # default
)
prayer_times = PrayerTimes(
(78.2232, 15.6267), # Longyearbyen, Svalbard
datetime.now(),
calculation_parameters=params,
)
Command Line
python -m alfalak --latitude 35.7750 --longitude -78.6336 --date 2015-07-12 --method NORTH_AMERICA
Output:
fajr=2015-07-12T08:42:00+00:00
sunrise=2015-07-12T10:08:00+00:00
dhuhr=2015-07-12T17:21:00+00:00
asr=2015-07-12T21:09:00+00:00
maghrib=2015-07-13T00:32:00+00:00
isha=2015-07-13T01:57:00+00:00
API Reference
See docs/user/api-reference.md for the full API reference
(rendered site).
Migrating from adhanpy
Al-Falak is developed as an independent library, but it originates from the same
batoulapps/adhan port lineage as
adhanpy, so the public surface keeps the same
class and method names — switching packages is typically a matter of changing the
install (adhanpy → al-falak) and the import (adhanpy → alfalak). The move exists
to track currently supported Python versions, keep development dependencies and tooling
current, and leave room for the milestones of this project to evolve on their own.
In return you get a hardened AlFalakError hierarchy, fully typed APIs, and ongoing
maintenance. See the migration guide for details.
Examples
See src/example/ for comprehensive examples covering:
- Basic usage
- Calculation methods comparison
- Qibla direction
- Sunnah times
- Polar region strategies
- High latitude rules
- Madhab selection
- CLI usage
Development
See CONTRIBUTING.md for setup and contribution guidelines.
Architecture
See ARCHITECTURE.md for a high-level overview of the codebase.
Attribution & References
Original Authors & Projects
- batoulapps — Original
adhanlibrary in Java, JavaScript, Swift, and Kotlin. The astronomical calculation methods, formulas, and overall architecture are derived from these implementations. - alphahm — Original adhanpy Python port. This fork continues from that work.
Astronomical Calculation Sources
The prayer time calculation methods, mathematical formulas, and computational steps are derived from:
- Jean Meeus — Astronomical Algorithms (2nd ed., Willmann-Bell, 1998). The core astronomical formulas for solar position, equation of time, and hour angle calculations.
- US Naval Observatory (USNO) — Solar position algorithms and twilight calculations. Reference: aa.usno.navy.mil
- PrayTimes.org — Standard prayer time calculation methods and Fajr/Isha angle conventions. Reference: praytimes.org
- Muslim World League — Fajr angle 18°, Isha angle 17°
- ISNA (Islamic Society of North America) — Fajr angle 15°, Isha angle 15°
- Egyptian General Authority of Survey — Fajr angle 19.5°, Isha angle 17.5°
- University of Islamic Sciences, Karachi — Fajr angle 18°, Isha angle 18°
- Umm al-Qura University, Makkah — Fajr angle 18.5°, Isha interval 90 minutes
- Moonsighting Committee — Fajr angle 18°, Isha angle 18°, with seasonal adjustments
License
This project is licensed under the MIT License — see LICENSE for details.
Credits
- batoulapps — original
adhanimplementation and calculation methods - alphahm — original
adhanpyPython port - Azahari Zaman — community maintenance of
al-falak
Metadata
Release files for al-falak 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| al_falak-1.0.0.tar.gz | 148.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| al_falak-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 174.3 kB
Release files / al_falak-1.0.0.tar.gz
| Download URL | al_falak-1.0.0.tar.gz |
|---|---|
| Size | 148.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1983700643781791b3b3abe436e248b3ee28c6b8f4a5b9bc2f6e4e1116897a35
|
|
BLAKE2b-256 checksum How to use checksums |
92b5601a9e0f9788c72eaeb2bfa6d62ed32403474be8497a18375240305b6bd2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.
Transparency logRelease files / al_falak-1.0.0-py3-none-any.whl
| Download URL | al_falak-1.0.0-py3-none-any.whl |
|---|---|
| Size | 26.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1fd90599f8da65dd40cb183de63eb3523465060e8dd9a26d4130be54b0c29ed4
|
|
BLAKE2b-256 checksum How to use checksums |
fbe2d2d44262219a0fd5bd7f7a19a4a0b8856f605dbca6bcc5e366d268e5c2e1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.
Transparency log