lau/tzdata
69.2
Adequate · 3 October 2026
2.8k
lines of production code
Elixir
primary language
2
measurements over time
What this system is
This system is a library that provides IANA timezone data to Elixir applications, managing the lifecycle of timezone definitions through runtime-loaded ETS tables. It supports automatic updates by polling the IANA database for new releases and handles historical and future timezone rules, including complex edge cases like leap seconds and daylight saving time transitions. The library ensures compatibility with modern Elixir and OTP versions by utilizing built-in HTTP clients and adhering to standard calendar behaviors.
Behavioural changes
Add module documentation and type specifications to Tzdata
The Tzdata module now includes comprehensive @moduledoc documentation explaining its role in providing IANA time zone data, along with @spec type definitions for functions like zone\_list, periods, and zone\_exists?. This improves code readability and enables better static analysis and IDE support for users interacting with the library.
lib · high confidence
Added placeholder for release ETS directory
A .gitkeep file was added to the priv/release\_ets directory to ensure the directory is tracked by version control. This supports the automatic update mechanism by keeping the directory structure intact, as referenced in the commit messages regarding ignoring remote poll files and maintaining necessary directories.
priv · medium confidence
Introduces built-in HTTP client and deprecates Hackney dependency
Tzdata now includes a built-in HTTP client adapter (\Tzdata.HTTPClient.Httpc\) that leverages Erlang/OTP 25+ features for secure TLS certificate verification using the OS trust store, eliminating the need for external HTTP libraries on supported versions. The previous Hackney-based adapter (\Tzdata.HTTPClient.Hackney\) is now deprecated; users on older OTP versions or those preferring external clients can still use Hackney, but they will see deprecation warnings and are encouraged to upgrade to OTP 25+ for improved security and reduced dependency overhead.
_lib/tzdata/http\client · high confidence
Timezone data is now loaded from versioned ETS tables with optional auto-updates
The library has moved from compile-time generated code to runtime-loaded ETS tables, allowing timezone data to be updated without recompiling the application. A new \Tzdata.EtsHolder\ GenServer manages the lifecycle of these tables, supporting versioned \.ets\ files (e.g., \2024b.v2.ets\) to handle schema changes. An optional \Tzdata.ReleaseUpdater\ can be enabled via the \:autoupdate\ application config to automatically poll IANA for new releases and swap the active table. The system also introduces \Tzdata.FarFutureDynamicPeriods\ to calculate timezone rules for dates far beyond the cached data, and implements the \Calendar.TimeZoneDatabase\ behavior for Elixir 1.8+ compatibility.
lib/tzdata · high confidence
Tzdata 1.2.0: OTP 25+ httpc default, Elixir 1.12+ requirement, and historical period fixes
This release updates the library to require Elixir 1.12 or greater and ships with the 2026d IANA timezone data release. A key behavioral change is that Hackney is no longer a mandatory dependency; on Erlang/OTP 25+, Tzdata now defaults to the built-in :httpc client for automatic updates, using OS-trusted CA certificates for security, while Hackney is deprecated. The release also fixes incorrect historical time zone periods (such as wrong abbreviations and redundant zero-effect periods) for many zones, including America/Chicago and Europe/Dublin, and adds support for parsing the IANA \factory\ source file to include the \Factory\ zone.
(repo-wide) · high confidence
Updated Elixir configuration syntax and enabled timezone data autoupdate
The application configuration has been migrated from the deprecated Mix.Config module to the modern import Config syntax, aligning with Elixir 1.16 standards. Additionally, the logger is now configured to output timestamps in UTC, and the tzdata library has been explicitly set to enable automatic updates for timezone data.
config · high confidence
Updated time zone data to release 2015f
The time zone source data files (such as \asia\, \southamerica\, \backward\, and \etcetera\) have been updated to the 2015f release. This update refreshes historical and current time zone definitions, including daylight saving time rules and zone links, ensuring the application reflects the latest changes from the IANA time zone database.
_source\data · high confidence
Test coverage
Expanded test coverage for time-zone data parsing and period calculation; Expanded timezone fixture coverage for edge cases and recent data updates.
Dependencies
Upgrade to Elixir 1.12+ and modernize dependencies
The library now requires Elixir 1.12 or later, enabling the use of modern OTP features and stricter dependency management. The HTTP client dependency has been updated to support both Hackney 1.x and 4.x, and documentation tooling has been upgraded to ex\_doc 0.21. Additionally, the project structure has been refined by switching from 'contributors' to 'maintainers' in the package metadata and restricting test-only dependencies like Sham and Bandit to Elixir 1.13+ environments.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 68 → 69 (+0.8)
- Rubric changed (rubric-2026.09.15 → rubric-2026.10.1) — scores are not directly comparable.
Lenses
- Code Health 95 → 95 (+0.0)
- Architecture 100 → 100 (+0.0)
- Maturity 59 → 59 (-0.0)
- Readiness 67 → 69 (+2.4)
- Security 78 → 79 (+1.3)
New (3)
- High CVE: [GHSA redacted] (mix.lock)
- High CVE: [GHSA redacted] (mix.lock)
- Medium CVE: EEF-[CVE redacted] (mix.lock)
Changes since last survey
- 3 commits — 2 feature/other, 1 fixes
By area
- (root) — 2 commits
- lib/tzdata — 1 commit
Notable commits
- fix: Fix warning of unused require (#190)
- change: Correct pattern matching in do_latest_file_size_by_head (#191)
- change: Release 1.2.2 (#192)
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
lau/tzdata was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 3 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 2cb19455eca479a95cdaa580ef75cb47a1253915 — the exact code this score is about.
- Scored under rubric-2026.10.1 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-24c657e50118.