
The KosherJava Zmanim API version 3.0.0 was released on Oct 21, 2026 י׳ חשון תשפ״ז in Maven and GitHub.
This is a major release, and unlike the releases that came before it, it will break existing code. The API has moved to java.time, a number of classes and methods were renamed, and the methods that had been deprecated over the years were removed. The zmanim themselves are almost all unchanged; what changed is what they are called and what type they return. Allow some time for the upgrade, and see the full list of changes since the 2.5.0 release in GitHub.
New in Version 3.0.0
Two New Calculators
- The
MeeusCalculatorimplements Jean Meeus’s high-accuracy algorithm. The existingNOAACalculator, which remains the default, is based on NOAA‘s implementation of his low-accuracy algorithm. - The
SPACalculatorimplements the Solar Position Algorithm. Both new calculators are more accurate and slower than the NOAA calculator, though for practical zmanim the difference is a matter of seconds. - The USNO-based
SunTimesCalculatoris now deprecated. It is less accurate than the other three and is only being kept for reference and comparison with older implementations.
Breaking Changes
- The minimum supported JRE is now Java 11, up from Java 8. Note that the JavaDocs only generate properly under Java 21. This affects generating the documentation, not the compiled code, which continues to target Java 11.
- The API uses
java.timethroughout. All zmanim returnInstants rather thanDates, sha’os zmaniyos return aDuration(andnullrather thanLong.MIN_VALUEwhen not applicable),CalendarandGregorianCalendargave way toLocalDateandZonedDateTime,TimeZonetoZoneId, andSimpleDateFormattoDateTimeFormatter. The now obsoletecom.kosherjava.util.Timeclass was removed. - The confusingly named
ComplexZmanimCalendaris now theComprehensiveZmanimCalendar. - Generically named methods in the
ZmanimCalendarwere renamed to say which opinion they calculate. The zmanim did not change, only the names:getTzais()is nowgetTzaisGeonim8Point5Degrees(),getAlosHashachar()isgetAlos16Point1Degrees(),getSofZmanShmaMGA()isgetSofZmanShmaMGA72Minutes(), andgetMinchaGedola(),getMinchaKetana()andgetPlagHamincha()gained aGRAsuffix. Minute-based zmanim now spell outMinutes, andgetChatzos()isgetChatzosHayom(). Parshawas renamedParshah, in the formatters as well, and the misspelledisAssurBemlacha()andgetBainHasmashos()methods were corrected.- Deprecated methods flagged for removal are gone, among them
getSofZmanShmaKolEliyahu(), the fixed local chatzos based zmanim, and theJewishCalendartefila methods that moved toTefilaRules. The redundantGeoLocationUtilsclass was removed in favor ofGeoLocation. - A few zmanim that were a drop too early were corrected.
getTzaisGeonim4Point37Degrees()is nowgetTzaisGeonim4Point42Degrees()andgetTzaisGeonim4Point61Degrees()isgetTzaisGeonim4Point66Degrees().getTzaisGeonim5Point88Degrees()was removed. - The
getSofZman*Chametz*methods returnnullwhen it is not Erev Pesach. - The source is now UTF-8, so the Hebrew in the documentation and code (particularly in
HebrewDateFormatter) appears properly.
Chatzos
getChatzosHalayla()was added, calculated as astronomical midnight rather than as halfway between sunset and sunrise or twelve hours after chatzos hayom.- Two settings control how chatzos is used:
useAstronomicalChatzos(on by default, retaining the backwards compatibility break introduced in 2.5.0) anduseAstronomicalChatzosForOtherZmanim(off by default).getChatzosAsHalfDay()returns half-day chatzos regardless of the setting. - The generic
getHalfDayBasedZman(startOfHalfDay, endOfHalfDay, hours)replacesgetFixedLocalChatzosBasedZmanim()and allows other zmanim to be based on chatzos, andgetPercentOfShaahZmanisFromDegrees(degrees, sunset)simplifies percentage-of-the-day calculations.
The Sun’s Position, and the Arctic
- Solar azimuth and elevation were fixed in the
NOAACalculator, andgetSolarAzimuth(Instant, GeoLocation)andgetSolarElevation(Instant, GeoLocation)were added to theAstronomicalCalculator, along withgetTimeAtAzimuth(azimuth)in theAstronomicalCalendar. - The sun’s apparent angular semi-diameter for the day is now used by default rather than a fixed radius.
getPolarPlagHaminchaBenIshChai()andgetPolarStartOfDayTeshuvosVehanhagos()were added for latitudes where the sun does not cross the horizon, together withgetSunriseOrEasternmostSolarAzimuth()andgetSunsetOrWesternmostSolarAzimuth().- The USNO noon calculation was corrected in locations where it was sometimes twelve hours off, and
getInstantFromTime()was tweaked to address issues near the dateline.
The Calendar Classes
JewishCalendargainedgetTekufa()andgetTekufaAsInstant()for the tekufos, plus and minus methods for years, months and days matchingLocalDate, and a publicisJewishLeapYear(int).isHavdalahRecited()was renamedisTonightMutarBemelacha(),isYomTov()now returns true for 20 Nissan, andgetDaysInJewishMonth()andgetLastDayOfGregorianMonth()take their parameters in year, month order.HebrewDateFormattergainedformatParsha(Parshah), andgetHebrewMonthList()/setHebrewMonthList(String[]), which allow overriding the default month names such as Cheshvan to Marcheshvan.TefilaRulesgainedisMizmorLesodaRecited(), and no longer has Tachanun recited on Erev Rosh Hashana.ComprehensiveZmanimCalendargainedgetMisheyakir12Point85Degrees(),getSofZmanAchilasChametzMGA72MinutesZmanis()andgetSofZmanBiurChametzMGA72MinutesZmanis(), and agetMinchaGedolaGreaterThan30(Instant)that works with any mincha gedola calculation.
A number of other small changes, null-handling corrections and bug fixes are in the full list of changes. I would like to thank Moshe Dicker, Elyahu Jacobi and Maor Na’im of RoyZmanim, and many others who helped with code that went into this release. I would also like to thank Eli Julian for his continued release support skills.