mrkeyoor.com_
Thu 10 Sept 07:02 UTC
Self-Hostedevaluationupdated 10 Sept 2026

wttr.in review

wttr.in is a weather service designed to be queried with curl, opened in a browser, or consumed as JSON and Prometheus text. It turns a place name, airport code, IP address, or coordinates into compact output that works especially well in terminals and status bars.

Verdict

Our wttr.in run built in 7 seconds, but 21 of 25 test packages failed during setup, so the public curl service is much easier to recommend than today's self-hosting path. Use it for personal terminals, status bars, and low-stakes displays where brief outages or source errors are acceptable. Delay a production deployment until you have verified the Docker path, external providers, and the full suite in your own image.

We ran it

Lab card: what happened when we ran wttr.inScreenshot of wttr.in (wttr.in)
Install✓ · 27s101 packages
Build✓ · 7s
Tests✗ · 53s4 passed · 21 failed of 25 (go test)
Repo638 files~13,052 lines of source · 13.2 MB · 1 CI workflows · Dockerfile · tests dir

Answers from our run

Does wttr.in build from source?

Dependencies installed in 27 seconds (101 packages), and the build succeeded in 7 seconds. We cloned commit c369bc4 into a clean Debian container with 3 CPUs and no project-specific setup.

Do wttr.in's tests pass?

Not all of them: 4 of 25 passed and 21 failed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use wttr.in?

Safety-critical alerts or decisions that cannot tolerate bad source data: open issue 1280 reports the same incorrect temperature across several Chilean cities.

What are the alternatives to wttr.in?

Open-Meteo, wego. Our wttr.

Setup2/57-second build, but 21 of 25 test packages failed
Docs3/5Many formats are documented; setup and format reports show drift
Community4/530,507 stars and issue activity through September 2026
Maturity3/5Long-running service, active rewrite, and no GitHub release channel

Who it’s for

Terminal users who want a readable forecast from one curl command.
Status-bar and dashboard builders who can cache results and poll at a sensible interval.
Developers who want weather output as plain text, JSON, PNG, HTML, or Prometheus metrics.
Self-hosters willing to configure geocoding data, an external weather source, caches, and fonts.

Who it’s NOT for

Safety-critical alerts or decisions that cannot tolerate bad source data: open issue 1280 reports the same incorrect temperature across several Chilean cities.
Offline self-hosting: the README's configuration needs a GeoLite2 database, an OpenCage token for place lookup, and an upstream weather source.
Operators expecting the checked-in Dockerfile to be production-ready: open pull request 1294 reports a glibc versus Alpine runtime mismatch and a command missing required arguments.
Teams requiring a clean go test ./... result on fresh Debian: our run passed 4 of 25 packages and failed 21 during setup.
Organizations that pin deployments to published GitHub releases: the repository's latest-release endpoint returned no release, so updates must follow commits or another packaging route.

Setup reality

Our sandbox installed 101 packages in 27 seconds and built wttr.in in 7 seconds. Tests then failed in 53 seconds: 4 passed and 21 failed out of 25. Commit c369bc4 contained 638 files, about 13,052 source lines, and occupied 13.2 MB.

Using the public endpoint needs only an HTTP client. A self-hosted instance needs a config file, cache and log paths, GeoLite2 data for IP lookup, an OpenCage token for place resolution, and a weather source; the sample points back to wttr.in unless you configure WorldWeatherOnline.

The build embeds fonts and other assets into one binary. The repo has a Dockerfile, but open pull request 1294 reports that its Debian-built binary cannot run in the Alpine stage and that its command omits required arguments. Our failing test tail showed setup failures but did not identify their cause.

One URL returns terminal, browser, image, JSON, or metrics output

A request to wttr.in/London can return an ANSI forecast for curl, while query options select plain text, custom one-line fields, JSON, PNG, HTML, or Prometheus exposition text. Locations can be cities, airport codes, coordinates, IP addresses, domain names, and named attractions. That range explains the project's staying power: one endpoint fits a shell prompt, a tmux status bar, a browser bookmark, or a small program without making each client draw weather symbols itself.

The code behind that surface is compact enough to inspect. Our measured commit c369bc4 had 638 files and about 13,052 lines of source in a 13.2 MB checkout. Installation still brought in 101 packages, which is more machinery than a curl user ever sees. The Apache-2.0 license permits reuse, and the repository includes a Dockerfile plus a dedicated tests directory. One CI workflow is present, a much smaller automation footprint than many services with this level of public use.

A self-hosted instance still depends on geocoding and weather data

The current README describes a single binary with fonts, pages, translations, and static assets embedded at build time. Serving useful forecasts requires data around that binary. The documented configuration points to a MaxMind GeoLite2 City database for IP resolution, OpenCage for turning names into coordinates, disk and database cache paths, and an upstream weather endpoint. OpenCage needs a token. WorldWeatherOnline is optional, with its own registration and token when selected.

The sample weather URL points back to the public wttr.in JSON endpoint unless the operator changes it. That makes the default self-hosting recipe a private presentation and cache layer over the original service, rather than an independent forecast source. Build preparation also installs font packages before producing the binary. Our sandbox completed that build in 7 seconds, but production still needs provider quotas, cache sizing, file permissions, logs, and a policy for upstream errors.

What happened when we ran it

Our sandbox installed wttr.in in 27 seconds with 101 packages, then built it successfully in 7 seconds. The test step ended with exit code 1 after 53 seconds. Go reported 4 passed packages and 21 failed packages out of 25. This was commit c369bc4 in a fresh unprivileged Debian container with 3 CPUs, 8 GB of RAM, no secrets, and the golang:1.24-bookworm image.

The end of the log showed setup failures in packages including internal/assets, internal/config, internal/formatter, internal/query, and internal/server. It showed successful results for internal/ip and internal/renderer/oneline, then a final FAIL. Those lines do not state the root cause, so it would be wrong to blame a missing font, network call, or code defect from that evidence alone. The useful finding is exact: the build passed, while 21 of 25 package tests did not get through setup in our environment.

The checked-in Docker path has a specific open repair

The Dockerfile builds on Debian and copies the result into Alpine. Open pull request 1294 says that binary uses glibc through a cgo SQLite dependency, while Alpine supplies musl, causing the container to fail when executing the file. The same report says the image command lacks the required server subcommand and configuration path. Its proposed fix changes the runtime image, supplies the arguments, and handles an unconfigured geocoder without a nil-pointer crash.

That report is still an open pull request, so adopters should verify the current image rather than treating the proposed repair as merged behavior. Our 7-second native build does not test whether the multi-stage image starts, accepts its config, or serves a forecast. The repo's Dockerfile is valuable as a record of required build fonts and ports, but production packaging needs a start-up test that launches the exact image and requests text, JSON, and PNG output.

Weather source errors matter more than pretty terminal output

The service supports compact formats that are easy to place in automation. Easy parsing does not make the forecast authoritative. Open issue 1280 reports identical, incorrect temperatures for several cities in Chile and labels the problem as data-source related. Issue 1270 says documented high and low placeholders were returning literal field markers for the reporter. Our lab did not reproduce those reports. Both remain directly relevant when an application consumes the output without a person checking it.

A personal status line can tolerate a stale or odd result. Safety alerts, agricultural controls, travel dispatch, and paid weather products need a source with defined coverage, validation, and support. The README recommends reasonable polling intervals and provides wttr.is as a fallback domain for scripts. Our 53-second failed test run adds another reason to keep retries and error handling in the client instead of assuming every HTTP response contains sound forecast data.

September commits show activity without a release channel

GitHub recorded a push on September 7, 2026. A Docker repair pull request opened on September 6, and other issues received updates during August. The repository had 30,507 stars and 331 combined issues and pull requests when fetched. That count is not a bug total. Together with the recent push, it shows a maintained project with a large backlog and ongoing user reports.

GitHub's latest-release endpoint returned 404, and the tags list contained only markers for the old Python backend and old Go frontend. Commit-based development can work for a public service, but organizations that require versioned artifacts must create their own pinning and change-review process. The 4-of-25 package result on commit c369bc4 makes that discipline more important. For casual use, the hosted endpoint remains the project's clearest success. Self-hosters are taking on a service, its providers, and its unfinished packaging details.

Alternatives

ProjectWhat it isPick it when
Open-MeteoAn open-source weather API server aimed at structured forecast data.pick this instead when an application needs a data API more than terminal artwork and curl-friendly presentation.
wegoA terminal weather client that wttr.in originally wrapped.pick this instead when you want a local command-line client and do not need to operate a shared HTTP service.

What people are saying

  1. [velocity-scout] chubin/wttr.in

Sources

  1. wttr.in README
  2. wttr.in repository facts
  3. Open Docker and location repair
  4. Incorrect temperature report
  5. High and low output documentation report
  6. wttr.in releases

More self-hosted reviews

appsmith · setup-ipsec-vpn · SafeLine · Interstellar · skywalking · bitcoin · the whole board →