Weather that lives in your top bar. The panel icon animates with the sky outside - sun, drifting clouds, rain, snow, thunderstorms - beside a live temperature. Open the menu and the whole card is the sky: a live animated backdrop of drifting clouds, twinkling stars and falling precipitation, painted frame by frame. What's inside: * Animated menu backdrop with eleven scenes, from clear sun and moon to fog, sleet, hail and lightning * Hourly chart: switch between temperature, precipitation or wind * The moon carries the real lunar phase at night; sunrise and sunset bathe the card in golden-hour light * Eight days of forecast tiles, current conditions at a glance * 20 languages with full bidirectional support: the entire card mirrors in Arabic, Hebrew, Persian and Urdu * Metric or imperial units, 12- or 24-hour clock, live scene previews in preferences * Three backdrop styles: animated sky, solid, or theme background with accent charts Weather data from Open-Meteo (global), Met.no (ECMWF) and NOAA NWS - choose your favourite forecaster, no API keys needed. Location: detected automatically through GNOME's own location service (IP lookup where none is available), or a city you pick. No accounts, no tracking, no analytics: weather requests go straight from your machine to the provider you choose. Automatic detection prefers the system location service, with the standard GNOME prompt naming this extension; its IP-lookup and city-label fallbacks each contact one free keyless endpoint and are used only when needed. Nothing is cached on disk. Demo: https://github.com/vijaybala-lang/weatherglass/releases/download/v8/weatherglass-demo-card.mp4
Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.
EGO-L-004 warning
main loop sources should be removed in disable()
Main loop sources assigned in `enable()` are missing matching removals in `disable()` or its helper methods.
menu.js:123
this._animTimerId = GLib.timeout_add(GLib.PRIORITY_LOW, SKY_FRAME_INTERVAL_MS, () => {
const now = GLib.get_monotonic_time();
if (this.mapped ?? true) {
this._time += Math.min((now - this._lastTime) / 1000000, 0.1);
| Version | Status |
|---|---|
| 10 | Unreviewed |
| 9 | Active |
| 8 | Active |
| 7 | Rejected |
| 6 | Rejected |
| 5 | Active |
| 4 | Rejected |
| 3 | Rejected |
| 2 | Rejected |
| 1 | Rejected |
1. Please remove `this._isDestroyed`: https://gjs.guide/extensions/review-guidelines/best-practices.html#lifecycle-and-destruction-state 2. Unnecessary try-catch wrapper (line 93 `extension.js`): https://gjs.guide/extensions/review-guidelines/best-practices.html#avoid-unnecessary-try-catch-wrappers 3. Search for `?.(` in the package: https://gjs.guide/extensions/review-guidelines/best-practices.html#avoid-unnecessary-checks