Skip to main content

xsmeteo

Python 3.12+ License: MIT

High-performance, strictly typed Python wrapper for the Open-Meteo API.

Features

  • 🚀 High Performance – Uses msgspec for maximum serialization speed
  • 🔒 100% Type Safe – Full static typing with mypy --strict compliance
  • 🔄 Sync & Async – Both synchronous and asynchronous clients
  • ⏱️ Built-in Rate Limiting – Hierarchical token bucket respecting Open-Meteo limits
  • 🌍 Full API Coverage – All 9 Open-Meteo endpoints supported

Installation

pip install xsmeteo

Or with uv:

uv add xsmeteo

Quick Start

Synchronous Usage

from xsmeteo import XSMeteo

with XSMeteo() as client:
    # Get weather forecast
    forecast = client.get_forecast(
        latitude=52.52,
        longitude=13.41,
        hourly=["temperature_2m", "rain"],
        timezone="auto",
    )
    print(forecast)
    # Access data using dictionary syntax:
    if forecast.hourly:
        print(forecast.hourly["temperature_2m"])

Asynchronous Usage

import asyncio
from xsmeteo import AsyncXSMeteo

async def main():
    async with AsyncXSMeteo() as client:
        forecast = await client.get_forecast(
            latitude=52.52,
            longitude=13.41,
            hourly=["temperature_2m"],
        )
        print(forecast)
        if forecast.hourly:
            print(forecast.hourly["temperature_2m"])

asyncio.run(main())

API Coverage

Endpoint Method Description
Forecast get_forecast() Current weather and up to 16-day forecast
Historical get_historical() Decades of historical weather data (ERA5)
Marine get_marine() Oceanographic data (waves, currents)
Air Quality get_air_quality() Pollutants and pollen forecasts
Geocoding search_locations() Forward geocoding (name to coordinates)
Elevation get_elevation() Altitude data for coordinates
Flood get_flood() River discharge and flood forecasts
Ensemble get_ensemble() Probabilistic ensemble forecasts
Climate get_climate() Long-term climate projections (CMIP6)

Rate Limiting

xsmeteo includes built-in rate limiting that respects Open-Meteo's fair use policy:

Limit Value
Minutely ~600 requests
Hourly ~5,000 requests
Daily ~10,000 requests

Custom limits can be configured:

from xsmeteo import XSMeteo, RateLimitConfig

custom_limits = [
    RateLimitConfig(limit=100, period_seconds=60.0),  # 100/min
]

client = XSMeteo(rate_limits=custom_limits)

License

MIT License. See LICENSE for details.

Attribution

This library uses the Open-Meteo API under CC-BY 4.0.

Release files for xsmeteo 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for xsmeteo 0.1.1
File Size Uploaded
xsmeteo-0.1.1.tar.gz 55.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for xsmeteo 0.1.1
File Interpreter ABI Platform
xsmeteo-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 82.7 kB

Release files / xsmeteo-0.1.1.tar.gz

Download URL xsmeteo-0.1.1.tar.gz
Size 55.8 kB
Tags Source
SHA-256 checksum
How to use checksums
a65fa04be21ceae435f0661a540a27a13a17e04398efc4f71ceeeabd08f5cba7
BLAKE2b-256 checksum
How to use checksums
54823e0982fe8b8a6ebe5de0cb10fcf201f9596d97914564ffef2eb9deece037
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 1, 2026.

Transparency log

Release files / xsmeteo-0.1.1-py3-none-any.whl

Download URL xsmeteo-0.1.1-py3-none-any.whl
Size 26.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
eeb0b031e4fbb1041dc1d1207858c06490132ade9a05f236f88ea8365c4ace24
BLAKE2b-256 checksum
How to use checksums
47c1d19e24f29b1c8aad865776ea23c91e9ca7cfdca06e945010d173e1c8b87c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 1, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page