hebrewcal
A pure-Python library for the Hebrew calendar.
hebrewcal makes the Hebrew calendar usable programmatically and converts it
bidirectionally against the Gregorian and Julian calendars. Every computation is
performed locally — the library never issues network calls to any external service.
It is built for two audiences:
- Religious use — holidays (Israel and the Diaspora, including minority feasts and Shushan Purim), Shabbat candle lighting and Havdalah, zmanim, Torah readings, the Omer count, yahrzeit, and the sabbatical and jubilee cycle.
- Academic use — historical, medieval and ancient dates, Babylonian and biblical month names, proleptic calendars, the Julian/Gregorian reform, and the documented "missing years" of the Anno Mundi count.
Project status. Feature-complete against the roadmap: calendar core and conversion, astronomy, holidays, religious times, and alternative calendars are all implemented, documented and tested.
Installation
pip install hebrewcal
hebrewcal requires Python 3.11+ and has no runtime dependencies (standard library
only).
Quick start
from hebrewcal import GregorianDate, HebrewDate, to_hebrew, to_gregorian, weekday
# What Hebrew date and weekday corresponds to 31 October 1867?
g = GregorianDate(1867, 10, 31)
h = to_hebrew(g)
print(h) # HebrewDate(year=5628, month=8, day=2) -> 2 Marheshvan 5628
print(weekday(g).name) # THURSDAY
# Convert a Hebrew date back to Gregorian.
print(to_gregorian(HebrewDate(5785, 7, 1))) # GregorianDate(year=2024, month=10, day=3)
Every calendar reduces a date to an integer Rata Die (RD) day count and rebuilds a date from it, so any two calendars are interconvertible through RD:
from hebrewcal import GregorianDate, to_julian
GregorianDate(2026, 6, 26).to_rd() # 739793
to_julian(GregorianDate(2026, 6, 26)) # JulianDate(year=2026, month=6, day=13)
Features
- Proleptic Gregorian and Julian calendars (explicit, configurable Julian/Gregorian reform) and a complete Hebrew calendar (molad/halakim, dechiyot, year typing, keviah, Metonic cycle), all interconvertible through Rata Die.
- Parsing (ISO 8601, DIN 5008, slash form), formatting, a gematria converter, month/weekday name tables (transliteration, Babylonian, biblical), and the Anno Mundi era with the documented "missing years" notice.
- Astronomy (pure Python): solar position, sunrise/sunset, twilight, the molad as a civil instant.
- Holidays for Israel and the Diaspora: festivals, fasts (with postponement), modern Israeli days, minority feasts, Rosh Chodesh, the Omer and the special Shabbatot.
- Religious times: Shabbat candle lighting and Havdalah, zmanim, the molad announcement, yahrzeit, Torah readings, and the Shmita cycle.
- Alternative calendars: the Qumran 364-day calendar, plus documented computed Samaritan and Karaite models.
- An optional command-line interface (see below).
Command line
Installing the package provides a hebrewcal command (and python -m hebrewcal):
$ hebrewcal convert 1867-10-31
2 Marheshvan 5628 (Yom Chamishi)
$ hebrewcal shabbat 2026-06-26 --lat 40.71 --lon -74.01 --tz America/New_York
Candle lighting: 20:13
Havdalah: 21:21
Documentation
Full documentation, including a user guide with many examples, lives at hebrewcal.readthedocs.io.
Development
git clone https://github.com/bsesic/hebrewcal.git
cd hebrewcal
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pre-commit install
Run the lint gate and the test suite:
flake8
ruff check .
mypy
pytest
See CONTRIBUTING.md for the branching strategy and conventions.
Citation
If you use hebrewcal in academic work, please cite it. Citation metadata is provided in
CITATION.cff, and each release is archived on Zenodo.
- Concept DOI (always resolves to the latest version): 10.5281/zenodo.20583972
- Each release also has its own version-specific DOI on the Zenodo record.
License
MIT © Benjamin Schnabel
Metadata
Release files for hebrewcal 1.5.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 | |
|---|---|---|---|
| hebrewcal-1.5.0.tar.gz | 42.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| hebrewcal-1.5.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 94.6 kB
Release files / hebrewcal-1.5.0.tar.gz
| Download URL | hebrewcal-1.5.0.tar.gz |
|---|---|
| Size | 42.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
36f2fe3b955f08239c23cb54e4c4b1279b9653a816fa55f73607739629c06086
|
|
BLAKE2b-256 checksum How to use checksums |
d62a1b44fb4f398b67c819d93770ce5e893a5cf91dc94cbcd10980856927c66e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 Jun 10, 2026.
Transparency logRelease files / hebrewcal-1.5.0-py3-none-any.whl
| Download URL | hebrewcal-1.5.0-py3-none-any.whl |
|---|---|
| Size | 51.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c9ba7765eccf9ac0158e038139bae2019988b28df84ad847d514b1ca34f63c2b
|
|
BLAKE2b-256 checksum How to use checksums |
196d7572e6c79eb9d316caab399535b3b6f29f04e794e2a889e8bb6f3a2c40da
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 Jun 10, 2026.
Transparency log