6 releases

new 0.4.0 Jul 4, 2025
0.3.5 Jul 3, 2025
0.3.3 Jun 29, 2025

#115 in Command line utilities

Download history 157/week @ 2025-06-20 298/week @ 2025-06-27

464 downloads per month

AGPL-3.0-or-later

1.5MB
2K SLoC

Outside

Download Latest Build demo

A multi-purpose weather client for your terminal.

Usage: outside [OPTIONS]

Options:
  -l, --location <LOCATION>  Location to fetch weather data for,
                             leave blank to auto-detect using your IP address
  -u, --units <UNITS>        Units of measurement [possible values: metric, imperial]
  -o, --output <OUTPUT>      Display format [possible values: tui, simple, detailed, json, waybar]
  -s, --stream               Enable streaming mode for continuous output
  -i, --interval <INTERVAL>  Interval in seconds between streaming updates [default: 30]
  -h, --help                 Print help
  -V, --version              Print version

The --location should be a string with your city and country code, e.g. London, GB or New York, US. If this value is not provided, http://ip-api.com will be used to auto-detect your location based on your IP address. Location data is cached for 4 hours, and weather data is cached for 10 minutes to reduce API calls.

Example Outputs

Simple

Overcast 18°C | Wind 713 | Precipitation 53%

Detailed

$ outside -o detailed
Edmonton, CA
Current:     17.6°C Overcast
Feels Like:  17.5°C
Humidity:    72%
Pressure:    1006.9hPa
Wind:        6.6km/h with gusts up to 13.0km/h (W)
UV Index:    6.2
Precip:      0.8 mm (53% chance)
Sunrise:     05:07am
Sunset:      10:06pm

Fri 06/27    9-22°C - Rain showers, slight
Sat 06/28    13-21°C - Thunderstorm
Sun 06/29    11-24°C - Overcast
Mon 06/30    14-25°C - Overcast
Tue 07/01    15-25°C - Overcast
Wed 07/02    14-30°C - Overcast
Thu 07/03    16-24°C - Rain showers, slight


$ outside -o detailed -l 'Los Angeles, US' -u imperial
Los Angeles, US
Current:     67.1°F Clear sky
Feels Like:  68.9°F
Humidity:    80%
Pressure:    1012.5hPa
Wind:        4.6mp/h with gusts up to 5.8mp/h (W)
UV Index:    8.5
Precip:      0.0 inch (0% chance)
Sunrise:     05:43am
Sunset:      08:08pm

Fri 06/27    61-85°F - Fog
Sat 06/28    58-87°F - Fog
Sun 06/29    58-85°F - Fog
Mon 06/30    65-77°F - Clear sky
Tue 07/01    64-79°F - Clear sky
Wed 07/02    64-77°F - Clear sky
Thu 07/03    63-74°F - Clear sky

JSON

$ outside -j json | jq
{
  "city": "Edmonton",
  "country": "CA",
  "temperature": 17.6,
  "temperature_low": 9.1,
  "temperature_high": 21.7,
  "feels_like": 17.5,
  "temperature_unit": "°C",
  "wind_speed": 6.6,
  "wind_gusts": 13.0,
  "wind_speed_unit": "km/h",
  "wind_direction": 257,
  "wind_compass": "W",
  "weather_code": 3,
  "weather_icon": "󰖐",
  "weather_description": "Overcast",
  "openweather_code": "04d",
  "humidity": 72,
  "humidity_unit": "%",
  "pressure": 1006.9,
  "pressure_unit": "hPa",
  "sunrise": "05:07am",
  "sunset": "10:06pm",
  "uv_index": 6.2,
  "precipitation_chance": 53,
  "precipitation_sum": 0.8,
  "precipitation_unit": "mm",
  "precipitation_hours": 4.0,
  "forecast": [
    {
      "date": "Fri 06/27",
      "weather_code": 80,
      "weather_icon": "󰖗",
      "weather_description": "Rain showers, slight",
      "openweather_code": "09d",
      "uv_index": 6.2,
      "precipitation_sum": 0.8,
      "precipitation_hours": 4.0,
      "precipitation_chance": 53,
      "temperature_high": 21.7,
      "temperature_low": 9.1
    },
    ...
    {
      "date": "Thu 07/03",
      "weather_code": 80,
      "weather_icon": "󰖗",
      "weather_description": "Rain showers, slight",
      "openweather_code": "09d",
      "uv_index": 4.5,
      "precipitation_sum": 4.8,
      "precipitation_hours": 3.0,
      "precipitation_chance": 35,
      "temperature_high": 23.7,
      "temperature_low": 16.1
    }
  ],
  "cache_age": 355
}

Waybar

$ outside -o waybar | jq
{
  "text": "󰖐 18°C 󰖗 53%",
  "tooltip": "Edmonton, CA\nOvercast\nFeels Like  17.5 °C\nForecast    9-22 °C\nHumidity    72%\nPressure    1006.9 hPa\nWind        6.613.0 km/h (W)\nPrecip      0.8 mm (53% chance)\n\n 05:07am    10:06pm",
  "class": [],
  "percentage": 100
}

Installation

From crates.io

cargo install outside

From Source

You can install the outside binary by checking out this repository and then using cargo:

cargo build --release
cargo install --path .

Configuration Options

As an alternative to passing the command line options, the application will look for the following configuration file:

~/.config/outside/config.yaml

An example configuration file:

units: Metric
simple:
  template: "{weather_icon} {temperature | round}{temperature_unit} <U+F059D> {wind_speed | round}<U+EA9F>{wind_gusts | round}"
waybar:
  text: "{weather_icon} {temperature | round}{temperature_unit} <U+F059D> {wind_speed | round}<U+EA9F>{wind_gusts | round}"
  hot_temperature: 30
  cold_temperature: 0

Available Template Variables

You can run outside -o json to see a list of all the current variables and their values.

Waybar Configuration

outside as a waybar module

Add the following configuration to your Waybar config file (usually located at ~/.config/waybar/config.jsonc):

"custom/weather": {
  "exec": "/path/to/outside -o waybar -s true",
  "format": "{text}",
  "tooltip": true,
  "return-type": "json",
}

And the corresponding CSS to style the widget (usually located at ~/.config/waybar/style.css). Feel free to adjust the CSS to your liking:

#custom-weather {
  padding: 0.3rem 0.6rem;
  margin: 0.4rem 0.25rem;
  border-radius: 6px;
  background-color: #1a1a1f;
  color: #f9e2af;
}

Important: You will also need a nerd patched font to display the weather icons. You can find one at Nerd Fonts. Many distributions already include these fonts, so you may not need to install anything extra.

Conditional Styling

You can also add conditional styling based on the weather condition. For example, to change the background color based on the weather condition and have the module blink during adverse conditions, you can use the following CSS:

#custom-weather {
  animation-timing-function: linear;
  animation-iteration-count: infinite;
  animation-direction: alternate;
}

@keyframes blink-condition {
  to {
    background-color: #dedede;
  }
}

#custom-weather.hot {
  background-color: #dd5050;
}

#custom-weather.cold {
  background-color: #5050dd;
}

#custom-weather.rain,
#custom-weather.snow,
#custom-weather.fog {
  color: #dedede;
  animation-name: blink-condition;
  animation-duration: 2s;
}

License

This project is licensed under the AGPL V3 or Greater - see the LICENSE file for details.

Dependencies

~28–44MB
~735K SLoC