tzdata
Python package providing the IANA time zone database as installable, versioned data
Repository Health
Technical Analysis
tzdata is a Python package that ships zic-compiled binaries of the IANA time zone database as pip-installable data, created as part of PEP 615 (support for the IANA time zone database in the standard library’s zoneinfo module). It exists as a fallback for systems that don’t have OS-level time zone data installed, or where that data isn’t in a location Python’s zoneinfo module can find, most notably Windows, minimal containers, and some virtualenv setups.
Unlike most Python packages, tzdata contains almost no logic — its src/tzdata/__init__.py is six lines — and instead is a versioned, redistributable data package. New releases track upstream IANA tzdata releases, so pip install --upgrade tzdata is the standard way to get current time zone rules (e.g. new DST law changes) without upgrading the Python interpreter itself.
What You Get
- zic-compiled IANA time zone binaries for every zone in the IANA database, importable via
zoneinfoonce installed - Regular releases tracking upstream IANA tzdata updates, so time zone rule changes (DST law changes, zone renames) can be picked up via a simple pip upgrade
- A working fallback for platforms without reliable OS time zone data, notably Windows and minimal/slim container images
- Version metadata (
tzdata.IANA_VERSION) so applications can introspect which IANA release is bundled - License compliance data (
licenses/directory) covering the underlying IANA tzdata license terms
Common Use Cases
- Ensuring
zoneinfo.ZoneInfo('America/New_York')resolves correctly in Docker containers built from slim/minimal base images that lack system tzdata - Guaranteeing consistent, versioned time zone behavior across Windows, Linux, and macOS in a cross-platform Python application without depending on the OS’s time zone data
- Pinning a specific IANA tzdata version in a
requirements.txt/pyproject.tomlfor reproducible date/time calculations across deployments - Picking up newly enacted DST or time zone law changes quickly via a package upgrade rather than waiting on an OS update
Under The Hood
Architecture - The package’s actual Python code is minimal by design: src/tzdata/__init__.py (6 lines) exposes version metadata, while src/tzdata/zoneinfo/ and src/tzdata/zones/ contain the compiled IANA zone data itself, structured so Python’s zoneinfo module (or the backports.zoneinfo package on older Python) can locate zone files by standard path (e.g. tzdata.zoneinfo.America.New_York). The repository’s real complexity lives in its build/release tooling: update.py fetches and compiles the latest upstream IANA tzdata release using zic, and bump_version.py/tag_release.sh automate versioning that tracks the upstream IANA release identifier.
Tech Stack - Pure Python packaging using setuptools as the build backend (pyproject.toml + setup.cfg), with isort/pre-commit for repo hygiene. The package has no runtime dependencies of its own — it is consumed by Python’s standard library zoneinfo module or the backports.zoneinfo shim, not by importing tzdata’s Python code directly in most cases.
Code Quality - Testing focuses on the data itself rather than logic: tests/test_contents.py verifies the packaged zone data matches expectations, and tests/test_version.py checks version-string consistency with the upstream IANA release. Given the package is fundamentally a data distribution mechanism rather than an algorithmic library, this test shape (contents + version validation) appropriately targets the actual risk surface — a corrupted or mismatched data release.
API Design - There is effectively no API surface to learn: applications don’t import tzdata directly in normal use, they simply install it so that zoneinfo.ZoneInfo(...) (standard library, Python 3.9+) can find zone data on interpreter startup. This zero-API design is the correct one for a data-only fallback package — the value is in resolving an availability problem, not in providing new functionality to call.
Used by 15 apps in this directory
LibrePhotos
File Storage
Self-hosted photo library with AI-powered face recognition, semantic search, and automatic event albums — no cloud required.
marimo
Data Engineering · Developer Tools
A reactive Python notebook that eliminates hidden state, runs reproducibly, and deploys as a web app or script — stored as pure Python, built for the AI era.
Polar
Developer Tools · Ecommerce · Invoicing Finance
Open source payments infrastructure that turns software into a business — subscriptions, usage-based billing, digital products, and merchant-of-record compliance in one platform.
PostgresML
AI Development · Databases
Run ML training and LLM inference natively inside PostgreSQL with GPU acceleration — no data movement required.
SWIRL
Data Engineering · Databases · Search
Federated AI search and RAG across 100+ enterprise sources—no data extraction, no vector database required.
Taiga Back
Developer Tools · Project Management
Self-hosted agile project management backend with Scrum, Kanban, issue tracking, and a full REST API — built on Django and PostgreSQL.