Overview
Discover what makes WeeWX powerful
WeeWX is a **Python‑centric** weather data processing framework that ingests raw sensor feeds, normalises them into a unified schema, and produces static artefacts (HTML pages, PNG plots, CSV summaries) as well as pushes data to remote services. At its core it is a **data pipeline**: the *driver* layer reads from thousands of hardware protocols (serial, USB, TCP/IP, SDR), the *engine* stores records in either SQLite or MySQL and triggers scheduled jobs (via a lightweight cron‑like scheduler), and the *skin* layer renders the user interface through Jinja2 templates. Developers benefit from a clean separation of concerns, an extensible plugin architecture, and a well‑documented API surface that can be interacted with programmatically or via HTTP hooks.
Language & Runtime
Data Store
Scheduler
Template Engine
Overview
WeeWX is a Python‑centric weather data processing framework that ingests raw sensor feeds, normalises them into a unified schema, and produces static artefacts (HTML pages, PNG plots, CSV summaries) as well as pushes data to remote services. At its core it is a data pipeline: the driver layer reads from thousands of hardware protocols (serial, USB, TCP/IP, SDR), the engine stores records in either SQLite or MySQL and triggers scheduled jobs (via a lightweight cron‑like scheduler), and the skin layer renders the user interface through Jinja2 templates. Developers benefit from a clean separation of concerns, an extensible plugin architecture, and a well‑documented API surface that can be interacted with programmatically or via HTTP hooks.
Architecture
- Language & Runtime – Pure Python 3.7+; the entire codebase is written in idiomatic Python, making it accessible to developers familiar with scripting and object‑oriented design.
- Data Store – Optional backends: SQLite (default, zero‑config) or MySQL/MariaDB for higher write throughput and multi‑user setups. The ORM layer is lightweight, using
sqlite3orpymysql. - Scheduler – A custom event loop built on top of
asyncio‑like callbacks, allowing plugins to register periodic tasks without external cron jobs. - Template Engine – Jinja2 drives all skins; developers can write their own templates or override existing ones without touching the core logic.
- Extensibility – A plugin framework based on Python packages that expose entry points (
weewx.drivers,weewx.outputs, etc.). This enables developers to write drivers for new hardware, outputs for novel data sinks (e.g., MQTT, InfluxDB), or skins that consume the same API. - Deployment – Runs on any POSIX system (Linux, macOS, *BSD, Solaris) and is optimized for low‑resource devices like the Raspberry Pi. The code is container‑friendly; a Docker image is maintained in the upstream repo, and all dependencies are managed by Poetry.
Core Capabilities
- Hardware Abstraction – Over 200 supported weather stations (Davis, Oregon Scientific, Fine Offset, etc.) each with a dedicated driver that translates proprietary packets into the WeeWX record format.
- Data Publishing – Built‑in outputs for FTP/FTPS, rsync, MQTT, InfluxDB, and a large list of online weather services (WU, CWOP, Windy, etc.).
- Almanac & Forecast – Generates comprehensive celestial almanacs (sunrise, sunset, moon phases) and can ingest external forecast feeds.
- Skin & API – Exposes a REST‑like JSON endpoint (
/json) for real‑time data, and the templating system can be extended to serve custom dashboards or mobile apps. - Internationalisation – Full i18n support via gettext, with locale‑aware date/time formatting and unit conversions.
Deployment & Infrastructure
WeeWX is lightweight enough to run unattended on a single‑board computer, yet scalable via database sharding or clustering of output services. Containerisation is straightforward: the official Docker image pulls a minimal base (Debian slim), installs Python and dependencies via Poetry, and mounts /opt/weewx for configuration. For production deployments, a reverse proxy (NGINX) can expose the JSON API over HTTPS while static skins are served from a separate web server. The scheduler’s event loop can be replaced with systemd timers if preferred.
Integration & Extensibility
- Plugin Ecosystem – Thousands of community plugins exist, covering new sensors (e.g., weather radars), data sinks (Kafka, ElasticSearch), and skins. Developers can create a plugin by implementing a subclass of
weewx.StdDriveror defining an output class that inherits fromweewx.Output. - Webhooks & Callbacks – Output modules can emit events to external services via HTTP POST, enabling real‑time alerts or CI integrations.
- Custom APIs – The JSON endpoint can be consumed by any client; developers often build dashboards in React or Vue that poll
/jsonand render live charts. - Configuration – All settings are stored in a single
weewx.conffile (INI style), making it easy to version‑control or template with Ansible/Chef.
Developer Experience
The project places a strong emphasis on documentation: the official guide covers installation, driver development, skin authoring, and output configuration. The codebase follows PEP‑8 with a comprehensive test suite (PyTest) and continuous integration via GitHub Actions. Community support is active on the mailing list, GitHub discussions, and a dedicated IRC channel. Licensing (GPLv3) ensures freedom to modify and redistribute, while the open‑source nature encourages rapid iteration.
Use Cases
- Home Weather Stations – Hobbyists running a Raspberry Pi to collect and display local weather data on a personal website.
- IoT Edge Deployments – Integrating WeeWX with MQTT brokers to feed sensor data into a larger IoT platform.
- Research & Education – Universities deploying multiple stations across campuses, using the JSON API for data analysis in Python notebooks.
- Weather Service Aggregation – Small meteorological groups that need to publish data to public weather sites while retaining full control over the underlying hardware.
Advantages
- Performance & Flexibility – Lightweight core with optional high‑
Open SourceReady to get started?
Join the community and start self-hosting WeeWX today
Related Apps in other
Immich
Self‑hosted photo and video manager
Syncthing
Peer‑to‑peer file sync, no central server
Strapi
Open-source headless CMS for modern developers
reveal.js
Create stunning web‑based presentations with HTML, CSS and JavaScript
Stirling-PDF
Local web PDF editor with split, merge, convert and more
MinIO
Fast, S3-compatible object storage for AI and analytics
Weekly Views
Repository Health
Information
Tags
Explore More Apps
Isso
Self‑hosted commenting server like Disqus
Hoppscotch
Fast, lightweight API development tool
Headphones
Automated music downloader for NZB and Torrent
OctoPrint
Remote control and monitoring for 3D printers
StackStorm
Event‑driven automation for modern infrastructure
Tiny File Manager
Lightweight web file manager in a single PHP file