Changelog
Every notable change to the workclock Rust crate, Python package and npm package, by release.
The changes to all three packages, included from CHANGELOG.md in the repository.
All notable changes to this project are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased
Changed
- JavaScript: CI also tests the npm package on Node.js 26, and builds the website and publishes the package with it.
- Benchmarks also compare each binding with a loop written by hand with its
language's standard library (
datetimeandzoneinfo, orTemporal) and checked against workclock. The numbers in the READMEs, DESIGN.md and the documentation site come from a new GitHub Actions run. - The documentation site moved to https://workclock.karthik.nz, served from the domain root. The crates.io, PyPI and npm pages link to it.
0.1.2 - 2026-10-26
Changed
- Python: PyPI shows a Python-only README,
python/README.md, which links to businesstimedelta on PyPI. - Benchmark numbers in the READMEs, DESIGN.md and the documentation site come from a public GitHub Actions run instead of a laptop, with each binding's speed-up over businesstimedelta 1.0.1 measured in the same run.
0.1.1 - 2026-10-25
Fixed
- Python compat:
HolidayRule.differenceno longer raisesOverflowErrorfor datetimes whose local date is the first or last datedatetime.datecan hold.
0.1.0 - 2026-10-25
Added
- Rust core:
Schedulebuilt fromWorkDay,BreakandHolidaysrules, withbetween,add,sub,next_periodandprevious_period. Supports overnight and 24-hour shifts, per-rule IANA time zones and DST, as specified inDESIGN.md. - Rust core:
Weekdays, the set of days a rule applies to, andRule, which every rule type converts into. - Rust core: minimum supported Rust version 1.85.
- Python: typed
ScheduleAPI withWorkDay,BreakandHolidaysrules,between,add,sub,next_periodandprevious_periodon timezone-aware datetimes. Accepts zone names,zoneinfo.ZoneInfo, pytz zones anddatetime.timezone.utc. Errors subclassWorkclockErrorand the matching built-in exception. - Python:
between_many,add_manyandsub_manyprocess a batch in one call, from lists or NumPydatetime64/timedelta64arrays, which broadcast together under NumPy's rules. - Python:
Schedulepickles and deep-copies, so it can be passed tomultiprocessingworkers, andworkclock.Rulenames the type of its rules. - Python: type hints with a
py.typedmarker, and a stub for the compiled extension. - Python:
workclock.compat, the businesstimedelta 1.0.1 API on the workclock engine, which fixes overnight shifts and upstream issues 8, 9 and 10. Most code runs unchanged;MIGRATING.mdlists the differences. - Searches are bounded: a schedule without working time, or a result outside the supported range, is an error instead of a hang or a panic.
- npm package:
Schedulewithbetween,add,sub,nextPeriodandpreviousPeriod, takingDates or ISO 8601 strings and milliseconds, and error classes forinstanceofchecks. - npm package:
betweenMany,addManyandsubManyfor arrays andFloat64Arrays of epoch milliseconds. - npm package: runs on Node.js 22 and later, and in browsers through a
bundler or, without one, from the
workclock/webentry point. - Python wheels use the stable ABI (abi3), so one wheel per platform covers CPython 3.9 and later.
- The Python wheels and the npm package bundle the IANA time zone database.
- Examples in Rust, Python and JavaScript: when a support ticket is due and how much of its SLA has been used.
Report a problem with this pageAsk a question in Discussions