Widgets
Dashy has support for displaying dynamic content in the form of widgets. There are several built-in widgets available out-of-the-box as well as support for custom widgets to display stats from almost any service with an API.
Contentsβ
- General Widgets
- Clock
- Weather
- Weather Forecast
- RSS Feed
- Calendar
- Image
- Public IP Address
- IP Blacklist Checker
- Domain Monitor
- Crypto Watch List
- Crypto Price History
- Crypto Wallet Balance
- Code Stats
- Mullvad Status
- Email Aliases (addy.io)
- Vulnerability Feed
- Exchange Rates
- Public Holidays
- Covid-19 Status
- Sports Scores
- Live Tennis
- News Headlines
- TFL Status
- Stock Price History
- ETH Gas Prices
- Joke of the Day
- Chuck Norris quotes
- XKCD Comics
- Flight Data
- NASA APOD
- GitHub Trending
- GitHub Profile Stats
- Healthchecks Status
- Hackernews Trending
- Mvg Departure
- Mvg Connection
- Custom search
- Rescuetime overview
- Minecraft Server
- Self-Hosted Services Widgets
- System Info
- CPU History
- Memory History
- System Load History
- Pi-Hole Stats
- Pi-Hole Stats v6
- Pi-Hole Queries
- Pi-Hole Queries v6
- Pi-Hole Recent Traffic
- Pi-Hole Recent Traffic v6
- Stat Ping Statuses
- Synology Download Station
- AdGuard Home Block Stats
- AdGuard Home Filters
- AdGuard Home DNS Info
- AdGuard Home Top Domains
- Nextcloud User
- Nextcloud User Statuses
- Nextcloud Notifications
- Nextcloud System
- Nextcloud Stats
- Nextcloud PHP OPcache
- Ntfy stream
- Proxmox lists
- Sabnzbd
- Gluetun VPN Info
- Drone CI Build
- Filebrowser
- Linkding
- Uptime Kuma Status Page
- Uptime Kuma
- Tactical RMM
- System Resource Monitoring
- Dynamic Widgets
- Usage & Customizations
General Widgetsβ
Clockβ
A simple, live-updating time and date widget with time-zone support. All fields are optional.
Optionsβ
| Field | Type | Required | Description |
|---|---|---|---|
timeZone | string | Optional | The time zone to display date and time in. Specified as Region/City, for example: Australia/Melbourne. See the Time Zone DB for a full list of supported TZs. Defaults to the browser / device's local time |
format | string | Optional | A country code for displaying the date and time in local format. Specified as [ISO-3166]-[ISO-639], for example: en-AU. See here for a full list of locales. Defaults to the browser / device's region |
customCityName | string | Optional | By default the city from the time-zone is shown, but setting this value will override that text |
hideDate | boolean | Optional | If set to true, the date and city will not be shown. Defaults to false |
hideSeconds | boolean | Optional | If set to true, seconds will not be shown. Defaults to false |
use12Hour | boolean | Optional | If set to true, 12 hour time will be displayed. Defaults to the settings suggested by the current format and timeZone |
Exampleβ
- type: clock
options:
timeZone: Europe/London
format: en-GB
hideDate: false
Infoβ
No external data requests.
Weatherβ
A simple, live-updating local weather component, showing temperature, conditions and more info.
Optionsβ
| Field | Type | Required | Description |
|---|---|---|---|
apiKey | string | Required | Your OpenWeatherMap API key. You can get one for free at openweathermap.org |
city | string | Required | A city name to use for fetching weather. This can also be a state code or country code, following the ISO-3166 format |
cityId | number | Optional | An OpenWeatherMap numeric city ID, used to disambiguate cities that share a name. You can find the ID in the URL of the city's page on openweathermap.org (e.g. 2643743 for London, GB). If provided, this will override the city option |
units | string | Optional | The units to use for displaying data, can be either metric or imperial. Defaults to metric |
hideDetails | boolean | Optional | If set to true, the additional details (wind, humidity, pressure, etc) will not be shown. Defaults to false |
lat | number | Optional | To show weather for a specific location, you can provide the latitude and longitude coordinates. If provided, this will override the city and cityId options |
lon | number | Optional | To show weather for a specific location, you can provide the latitude and longitude coordinates. If provided, this will override the city and cityId options |
Exampleβ
- type: weather
options:
apiKey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
city: London
units: metric
hideDetails: true
Infoβ
- CORS: π’ Enabled
- Auth: π΄ Required
- Price: π Free plan
- Privacy: See OWM Privacy Policy
Weather Forecastβ
Displays the weather (temperature and conditions) for the next few days for a given location. Note that this requires either the free OpenWeatherMap Student Plan, or the Premium Plan.
Optionsβ
| Field | Type | Required | Description |
|---|---|---|---|
apiKey | string | Required | Your OpenWeatherMap API key. You can get one at openweathermap.org or for free via the OWM Student Plan |
city | string | Required | A city name to use for fetching weather. This can also be a state code or country code, following the ISO-3166 format |
cityId | number | Optional | An OpenWeatherMap numeric city ID, used to disambiguate cities that share a name. You can find the ID in the URL of the city's page on openweathermap.org (e.g. 2643743 for London, GB). If provided, this will override the city option |
lat | number | Optional | Latitude for a specific location. If provided alongside lon, this will override the city and cityId options |
lon | number | Optional | Longitude for a specific location. If provided alongside lat, this will override the city and cityId options |
numDays | number | Optional | The number of days to display of forecast info to display. Defaults to 4, max 16 days |
units | string | Optional | The units to use for displaying data, can be either metric or imperial. Defaults to metric |
hideDetails | boolean | Optional | If set to true, the additional details (wind, humidity, pressure, etc) will not be shown. Defaults to false |
Exampleβ
- type: weather-forecast
options:
city: California
numDays: 6
apiKey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
units: imperial
Infoβ
- CORS: π’ Enabled
- Auth: π΄ Required
- Price: π΄ Premium (free for personal use only)
- Privacy: See OWM Privacy Policy
RSS Feedβ
Display news and updates from any RSS-enabled service.
Optionsβ
| Field | Type | Required | Description |
|---|---|---|---|
rssUrl | string | Required | The URL location of your RSS feed |
apiKey | string | Optional | An API key for rss2json. It's free, and will allow you to make 10,000 requests per day, you can sign up here |
limit | number | Optional | The number of posts to return. If you haven't specified an API key, this will be limited to 10 |
orderBy | string | Optional | How results should be sorted. Can be either pubDate, author or title. Defaults to pubDate |
orderDirection | string | Optional | Order direction of feed items to return. Can be either asc or desc. Defaults to desc |
parseLocally | boolean | Optional | If true parse the rss feed locally instead of using the rss2json API. |
Exampleβ
- type: rss-feed
options:
rssUrl: https://www.schneier.com/blog/atom.xml
apiKey: xxxx
Infoβ
- CORS: π’ Enabled
- Auth: π Optional
- Price: π Free Plan (up to 10,000 requests / day)
- Privacy: See Rss2Json Privacy Policy
Calendarβ
Shows upcoming events from any calendar that publishes an iCalendar (.ics) feed. Works with Nextcloud, Google, Proton, iCloud, Outlook, Radicale, BaΓ―kal, etc.
Note that this needs to be proxied through Dashy, since calendar providers don't send CORS headers.
webcal:// links are accepted, same as https://.
Recurring events, exceptions and moved occurrences are all expanded, and times are converted to your browser's timezone.
Events already underway stay listed until they end, and calendars with no name set use the name their feed publishes.
Optionsβ
| Field | Type | Required | Description |
|---|---|---|---|
calendarUrl | string or array | Required | The URL of your ICS feed. Pass an array to combine several, each either a URL or an object with url, plus optional name and color |
days | number | Optional | How many days ahead to show. Min: 1, max: 365. Defaults to 7 |
limit | number | Optional | Maximum number of events to show. Defaults to 10 |
hideAllDay | boolean | Optional | If true, all-day events are omitted |
showLocation | boolean | Optional | If true, shows each event's location under its title |
showDescription | boolean | Optional | If true, shows each event's description under its title |
startDate | string | Optional | Show events from this date instead of today, e.g. 2026-09-03 |
Exampleβ
- type: calendar
options:
calendarUrl: https://nextcloud.example.com/remote.php/dav/public-calendars/AbCdEf123?export
days: 14
Combining calendars, and colour-coding them:
- type: calendar
options:
limit: 15
calendarUrl:
- url: https://calendar.google.com/calendar/ical/xxxx/private-xxxx/basic.ics
name: Personal
color: '#5cabca'
- url: webcal://p12-calendars.icloud.com/published/2/xxxx
name: Family
color: '#e8j54a'
Getting your feed URLβ
| Provider | Where to find it |
|---|---|
| Nextcloud | Calendar β β― β Copy subscription link, then append ?export. Or, for a private calendar, use https://user:app-password@host/remote.php/dav/calendars/user/calendar-name?export |
| Settings β Settings for my calendars β Integrate calendar β Secret address in iCal format | |
| Proton | Settings β Calendars β Share with anyone. Requires a paid plan, and the link must be set to Full view |
| iCloud | Right-click the calendar β Share Calendar β Public Calendar |
| Outlook | Settings β Calendar β Shared calendars β Publish a calendar, choosing the ICS link |
Keeping your URL privateβ
A calendar URL is a password in disguise: anyone who has it can read your calendar. Since widget options are sent to the browser, don't put a secret feed URL directly in your config if other people can view your dashboard. Instead, set it as an environment variable prefixed with DASHY_, and reference the name:
- type: calendar
options:
calendarUrl: DASHY_MY_CALENDAR
The proxy substitutes the real value server-side, so the URL never reaches the browser.
Infoβ
- CORS: π΄ Proxied
- Auth: π Optional (a secret or authenticated feed URL, where the calendar isn't public)
- Price: π’ Free
- Host: Self-Hosted or Managed
- Privacy: No third-party service is used; Dashy fetches your feed directly
Imageβ
Displays an image.
This may be useful if you have a service (such as Grafana - see example), which periodically exports charts or other data as an image.
You can also store images within Dashy's public directory (using a Docker volume), and reference them directly. E.g. -v ./path/to/my-homelab-logo.png:/app/public/logo.png, then in the widget imagePath: /logo.png.
Similarly, any web service that serves up widgets as image can be used. E.g. you could show current star chart for a GitHub repo, with: imagePath: https://starchart.cc/Lissy93/dashy.svg.
If you'd like to embed a live screenshot, of all or just part of a website, then this can be done using API Flash.
Or what about showing a photo of the day? Try https://source.unsplash.com/random/400x300 or https://picsum.photos/400/300
Optionsβ
| Field | Type | Required | Description |
|---|---|---|---|
imagePath | string | Required | The path (local or remote) of the image to display |
imageWidth | string | Optional | Specify a fixed width for rendered image. Accepts either integer value in px, or any string value with units (e.g. 420, 100px, 6.9rem) (defaults to auto) |
imageHeight | string | Optional | Specify a fixed height for rendered image. Accepts either integer value in px, or any string value with units (e.g. 420, 100px, 6.9rem) (defaults to auto) |
Exampleβ
- type: image
options:
imagePath: https://i.ibb.co/yhbt6CY/dashy.png
Infoβ
Unless image fetched from remote source, no external data request is made.
Public IPβ
Displays your public IP address, ISP and approximate location.
Optionsβ
| Field | Type | Required | Description |
|---|---|---|---|
provider | string | Optional | One of ipinfo (default), freeipapi, ipquery, ip-api, or ipgeolocation. See the table below |
apiKey | string | Optional | Required for ipgeolocation. Optional for ipinfo (a free token raises the rate limit from ~1k/day to ~50k/month) |
hideLocation | boolean | Optional | Set to true to hide the flag, ISP name and city/region β only the IP address is shown. Defaults to false |
Exampleβ
Default (no options needed)
- type: public-ip
Using ip-api via the proxy (gets server IP, because of useProxy)
- type: public-ip
useProxy: true
options:
provider: ip-api
Using ipgeolocation with a key:
- type: public-ip
options:
provider: ipgeolocation
apiKey: xxxxxxxxxxxxxxx
Setting useProxy: true makes the lookup happen from Dashy's server instead of your browser, so the upstream API returns the public IP of the machine running Dashy, whereas without useProxy it will show your public IP.
Supported providersβ
| Provider | Key | Proxy | Notes |
|---|---|---|---|
ipinfo (default) | π’ Not needed / π Optional | π’ Not needed | Service from ipinfo.io. Keyless gives ~1k/day; a free token raises this to ~50k/month. Sometimes blocked by adblockers. |
freeipapi | π’ Not needed | π’ Not needed | Keyless, 60 req/min via freeipapi.com. |
ipquery |