Skip to content

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 (datetime and zoneinfo, or Temporal) 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.difference no longer raises OverflowError for datetimes whose local date is the first or last date datetime.date can hold.

0.1.0 - 2026-10-25

Added

  • Rust core: Schedule built from WorkDay, Break and Holidays rules, with between, add, sub, next_period and previous_period. Supports overnight and 24-hour shifts, per-rule IANA time zones and DST, as specified in DESIGN.md.
  • Rust core: Weekdays, the set of days a rule applies to, and Rule, which every rule type converts into.
  • Rust core: minimum supported Rust version 1.85.
  • Python: typed Schedule API with WorkDay, Break and Holidays rules, between, add, sub, next_period and previous_period on timezone-aware datetimes. Accepts zone names, zoneinfo.ZoneInfo, pytz zones and datetime.timezone.utc. Errors subclass WorkclockError and the matching built-in exception.
  • Python: between_many, add_many and sub_many process a batch in one call, from lists or NumPy datetime64/timedelta64 arrays, which broadcast together under NumPy's rules.
  • Python: Schedule pickles and deep-copies, so it can be passed to multiprocessing workers, and workclock.Rule names the type of its rules.
  • Python: type hints with a py.typed marker, 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.md lists 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: Schedule with between, add, sub, nextPeriod and previousPeriod, taking Dates or ISO 8601 strings and milliseconds, and error classes for instanceof checks.
  • npm package: betweenMany, addMany and subMany for arrays and Float64Arrays of epoch milliseconds.
  • npm package: runs on Node.js 22 and later, and in browsers through a bundler or, without one, from the workclock/web entry 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

On this page