High-performance, strictly typed Python wrapper for the Open-Meteo API.
Features
- 🚀 High Performance – Uses
msgspecfor maximum serialization speed - 🔒 100% Type Safe – Full static typing with
mypy --strictcompliance - 🔄 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)
| File | Size | Uploaded | |
|---|---|---|---|
| xsmeteo-0.1.1.tar.gz | 55.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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