4.9 KiB
Cache Configuration
wttr.in uses three separate caches following Linux Filesystem Hierarchy Standard (FHS) and XDG Base Directory specifications.
External Services
Required Services
- Met.no Weather API - Primary weather data provider
- No API key required
- Free, open API from Norwegian Meteorological Institute
- Rate limit: Be respectful, use caching
Optional Services
- IP2Location.io - Fallback IP geolocation service
- API key required: Sign up at https://www.ip2location.io/
- Used when MaxMind GeoIP database lookup fails
- Free tier: 30,000 requests/month
- Set via
IP2LOCATION_API_KEYenvironment variable
Database Files
- MaxMind GeoLite2 City - IP geolocation database
- Free database, auto-downloaded if missing
- No API key required for database usage
- Updates available monthly from MaxMind
Cache Locations
All caches default to $XDG_CACHE_HOME/wttr (typically ~/.cache/wttr).
1. Weather Response Cache
Purpose: Caches weather API responses to reduce upstream requests
Default Location: $XDG_CACHE_HOME/wttr/ (individual files)
Environment Variable: WTTR_CACHE_DIR
Size: 10,000 entries (configurable via WTTR_CACHE_SIZE)
Expiration: 1000-2000 seconds (16-33 minutes, randomized to avoid thundering herd)
Eviction: LRU (Least Recently Used)
This is the main cache that stores weather forecast responses from Met.no. Each entry has a randomized TTL to prevent cache stampedes.
2. Geocoding Cache (Optional)
Purpose: Caches location name → coordinates mappings
Default: Disabled (in-memory only)
Environment Variable: WTTR_GEOCACHE_FILE
Format: JSON
Expiration: None (persists indefinitely)
Eviction: None (grows unbounded)
When enabled, persists geocoding lookups to disk. Saves every 15 minutes if dirty. Useful for reducing external geocoding API calls.
3. IP2Location Cache
Purpose: Caches IP → coordinates from IP2Location API
Default Location: $XDG_CACHE_HOME/wttr/ip2location.cache
Environment Variable: IP2LOCATION_CACHE_FILE
Format: Binary (32-byte records)
Expiration: None (persists indefinitely)
Eviction: None (append-only, grows unbounded)
Only used when IP2LOCATION_API_KEY is configured. Provides fallback when MaxMind GeoIP database lookup fails.
GeoIP Database Location
Default: $XDG_CACHE_HOME/wttr/GeoLite2-City.mmdb
Environment Variable: WTTR_GEOLITE_PATH
This is the MaxMind GeoLite2 database. It will be automatically downloaded if missing.
Environment Variables Summary
| Variable | Default | Description |
|---|---|---|
WTTR_CACHE_DIR |
$XDG_CACHE_HOME/wttr |
Weather response cache directory |
WTTR_CACHE_SIZE |
10000 |
Maximum number of cached weather responses |
WTTR_GEOCACHE_FILE |
(none) | Optional persistent geocoding cache file |
WTTR_GEOLITE_PATH |
$XDG_CACHE_HOME/wttr/GeoLite2-City.mmdb |
MaxMind GeoLite2 database path |
IP2LOCATION_API_KEY |
(none) | API key for IP2Location fallback service |
IP2LOCATION_CACHE_FILE |
$XDG_CACHE_HOME/wttr/ip2location.cache |
IP2Location cache file |
XDG_CACHE_HOME |
~/.cache |
XDG base cache directory |
Examples
Minimal Configuration (defaults)
./wttr
# Uses ~/.cache/wttr/ for all caches and GeoIP database
Custom Cache Location
WTTR_CACHE_DIR=/var/cache/wttr ./wttr
# All caches and GeoIP in /var/cache/wttr/
Enable Persistent Geocoding Cache
WTTR_GEOCACHE_FILE=~/.cache/wttr/geocache.json ./wttr
With IP2Location Fallback
IP2LOCATION_API_KEY=your_key_here ./wttr
# Cache at ~/.cache/wttr/ip2location.cache
Production Setup
WTTR_CACHE_DIR=/var/cache/wttr \
WTTR_CACHE_SIZE=50000 \
WTTR_GEOCACHE_FILE=/var/cache/wttr/geocache.json \
IP2LOCATION_API_KEY=your_key_here \
./wttr
# GeoIP and IP2Location cache also in /var/cache/wttr/
Cache Maintenance
Weather Cache
- Automatic expiration: Entries expire after 16-33 minutes (randomized)
- LRU eviction: When cache reaches max size (10,000 entries), least recently used entries are removed
- Disk cleanup: Expired files are cleaned up on access
- Safe to delete entire cache directory; will be recreated as needed
Geocoding Cache
- No expiration: Entries persist indefinitely
- No eviction: Cache grows unbounded
- Auto-save: Writes to disk every 15 minutes when modified
- Consider periodic cleanup if cache grows too large
IP2Location Cache
- No expiration: Entries persist indefinitely
- Append-only: File grows unbounded (32 bytes per unique IP)
- No cleanup: Consider periodic truncation for long-running deployments
- Safe to delete; will be recreated on next API lookup
GeoIP Database
- Manual updates: Download new database periodically for accuracy
- Auto-download: Database is automatically downloaded if missing on startup
- Typical update frequency: monthly (MaxMind releases)