| .. | ||
| src | ||
| .mise.toml | ||
| API_ENDPOINTS.md | ||
| ARCHITECTURE.md | ||
| build.zig | ||
| build.zig.zon | ||
| DATA_FLOW.md | ||
| README.md | ||
| REWRITE_STRATEGY.md | ||
| TARGET_ARCHITECTURE.md | ||
wttr.in Zig Rewrite Documentation
This directory contains comprehensive documentation for rewriting wttr.in in Zig.
Documentation Files
TARGET_ARCHITECTURE.md ⭐ NEW
Target architecture for Zig rewrite:
- Single binary design
- Simplified caching (one layer)
- Pluggable weather provider interface
- Rate limiting middleware
- Module structure
- Testing strategy
- Performance targets
ARCHITECTURE.md
Current system architecture documentation:
- Component breakdown (Go proxy, Python backend, static assets)
- Request flow diagrams
- API endpoints
- External dependencies
- Caching strategy
- Configuration
- Known issues
API_ENDPOINTS.md
Complete API reference:
- All endpoints with examples
- Query parameters
- Output formats
- Language support
- HTTP headers
- Rate limits
- Usage examples
DATA_FLOW.md
Detailed request processing flow:
- Step-by-step request handling
- Location resolution process
- Weather data fetching
- Rendering pipeline
- Caching mechanisms
- Error handling
- Performance optimizations
REWRITE_STRATEGY.md
Comprehensive rewrite plan:
- Goals and non-goals
- Phase-by-phase breakdown (10-11 weeks)
- Module organization
- Testing strategy
- Risk mitigation
- Success criteria
- Alternative approaches
Quick Start
- Read ARCHITECTURE.md - Understand the current system
- Read DATA_FLOW.md - Understand how requests are processed
- Read REWRITE_STRATEGY.md - Understand the rewrite plan
- Refer to API_ENDPOINTS.md - When implementing specific endpoints
Current System Summary
Architecture: Hybrid Python/Go
- Go proxy (port 8082): LRU caching, prefetching
- Python backend (port 8002): Weather logic, rendering
- External binaries: wego (Go), pyphoon (Python)
- External services: Geolocator (port 8004)
Key Stats:
- ~5000 lines of Python
- ~400 lines of Go
- 54 languages supported
- 12,800 entry LRU cache
- 1000-2000s cache TTL
- Zero unit tests (only integration tests)
Main Challenges:
- ANSI weather rendering (currently done by wego)
- PNG image generation (PIL + pyte)
- GeoIP database parsing (MaxMind format)
- 54 language translations
- Multiple output formats (ANSI, HTML, PNG, JSON, Prometheus)
Recommended Approach
Option A: Incremental (Recommended)
- Replace Go proxy with Zig (2 weeks)
- Test and deploy
- Replace Python backend with Zig (8-9 weeks)
- Full cutover
Option B: Full Rewrite
- All at once (10-11 weeks)
- Higher risk, but cleaner result
Next Steps
- Review documentation
- Choose rewrite strategy
- Set up Zig project structure
- Begin implementation (start with HTTP server or Go proxy)
Questions?
See REWRITE_STRATEGY.md "Questions to Answer" section for key decisions needed.