2.0.0 - 22-01-2026

Major breaking release with significant architectural improvements and API changes. See UPGRADE.md for migration guide.

Added

New weather and forecast APIs: current_weather, one_call, forecast_5day, forecast_hourly, forecast_16day, historical

Air quality APIs with pollution data and forecasts: air_pollution, air_pollution_forecast, air_pollution_history

Geocoding APIs to convert between location names and coordinates: geocode, reverse_geocode

Explicit batch functions with *_batch suffix for concurrent multi-location requests

Location validation via ExOwm.Location module with constructors: by_city, by_coords, by_id, by_zip

Telemetry support with [:ex_owm, :request, :start] and [:ex_owm, :request, :stop] events

Configurable cache TTL per endpoint with per-request overrides

Optional caching - can be disabled via :cache_enabled config (enabled by default)

Modern HTTP client using Req instead of HTTPoison for better retry and telemetry

Consistent error tuples with detailed feedback

Upgrade guide in UPGRADE.md with migration examples

Changed

Breaking changes:

get_weather renamed to one_call for API clarity

Single location requests return {:ok, data} instead of [{:ok, data}]

Batch requests require explicit *_batch function calls

All Coordinator GenServers removed - simplified to direct function calls

Worker modules unified into ExOwm.Client

HTTPoison replaced with Req

Improvements:

Error tuples are now consistent (always 2 or 3 elements)

Location maps still work but ExOwm.Location constructors recommended

Simplified supervision tree - only Cache supervised

Removed ~400 lines of code for better maintainability

Deprecated

Old v1.x function names (will be removed in v3.0.0):

get_current_weather/2 - Use current_weather/2 or current_weather_batch/2

get_weather/2 - Use one_call/2 or one_call_batch/2

get_five_day_forecast/2 - Use forecast_5day/2 or forecast_5day_batch/2

get_hourly_forecast/2 - Use forecast_hourly/2 or forecast_hourly_batch/2

get_sixteen_day_forecast/2 - Use forecast_16day/2 or forecast_16day_batch/2

get_historical_weather/2 - Use historical/2 or historical_batch/2

OpenWeatherMap deprecated APIs:

one_call/2 and one_call_batch/2 - One Call API 2.5 deprecated by OpenWeatherMap in June 2024. Consider using specific endpoint APIs instead.

historical/2 and historical_batch/2 - Historical data via One Call API 2.5 deprecated. Use air_pollution_history for air quality historical data.

All deprecated functions currently work with deprecation warnings.

Removed

ExOwm.Supervisor module - replaced by inline supervision in Application

All ExOwm.*Weather.Coordinator modules - 6 GenServers removed

All ExOwm.*Weather.Worker modules - 6 modules removed

ExOwm.WorkerHelper module - functionality moved to Client

Direct GenServer access - use main ExOwm module functions

Migration Path

Minimal changes (keep using deprecated API):

# Your v1.x code continues to work with deprecation warnings
ExOwm.get_current_weather([%{city: "Warsaw"}])
# => Warning: deprecated, use current_weather_batch instead

Recommended migration:

# Before
ExOwm.get_current_weather([%{city: "Warsaw"}], units: :metric)
# => [{:ok, data}]

# After
location = ExOwm.Location.by_city("Warsaw")
ExOwm.current_weather(location, units: :metric)
# => {:ok, data}

See UPGRADE.md for complete migration guide with all patterns.

Technical Details

Architecture Changes:

  • Removed 6 stateless Coordinator GenServers that added no value
  • Removed 6 duplicate Worker modules (240 lines of duplicated code)
  • Unified request logic into single ExOwm.Client module
  • Direct Task.async_stream for concurrent requests (no GenServer indirection)
  • Simplified supervision tree from 7 processes to 1 (Cache)

Dependencies:

  • Added: req ~> 0.5 (modern HTTP client)
  • Added: telemetry ~> 1.0 (observability)
  • Removed: httpoison (replaced by Req)

Performance:

  • Reduced process overhead (no unnecessary GenServer serialization)
  • Better concurrent request handling with Task.async_stream
  • Smart default TTL per endpoint type
  • Maintained backward compatibility for smooth migration

1.1.1 - 16-12-2018

Added

- Formatter and changelog files.

Modified

- Split coordinator into separate GenServer processes.
- Re-factor and re-name main modules.
- Format whole project.