Home

Awesome

<h1 align="center">Dashy</h1> <p align="center"> <i>Dashy helps you organize your self-hosted services by making them accessible from a single place</i> <br/> <img width="120" src="https://i.ibb.co/yhbt6CY/dashy.png" /> <br/> <b><a href="./docs/showcase.md">User Showcase</a></b> | <b><a href="https://demo.dashy.to">Live Demo</a></b> | <b><a href="./docs/quick-start.md">Getting Started</a></b> | <b><a href="https://dashy.to/docs">Documentation</a></b> | <b><a href="https://github.com/Lissy93/dashy">GitHub</a></b> </p> <p align="center"> <br> <sup>Dashy is kindly sponsored by <a href="https://umbrel.com?ref=dashy">Umbrel</a> - the personal home cloud and OS for self-hosting</sup><br> <a href="https://umbrel.com?ref=dashy"> <img width="400" src="https://github.com/Lissy93/dashy/blob/WEBSITE/docs-site-source/static/umbrel-banner.jpg?raw=true" /> </a> </p>

[!NOTE] Version 3.0.0 has been released, and requires some changes to your setup, see #1529 for details.

<details> <summary><b>Table of Contents</b></summary> <p> </details>

Features ๐ŸŒˆ

โฌ†๏ธ Back to Top

Demo โšก

Live Instances: Demo 1 (Live Demo) โ”† Demo 2 (Dashy Links) โ”† Demo 3 (Dev Preview)

Screenshots: Checkout the Showcase, to see example dashboards from the community

Spin up your own demo: One-Click Deploy with PWD or docker run -p 8080:8080 lissy93/dashy

<p align="center"> <img width="800" src="https://i.ibb.co/L8YbNNc/dashy-demo2.gif" alt="Demo" /> </p>

โฌ†๏ธ Back to Top


Getting Started ๐Ÿš€

For full setup instructions, see: Deployment

Deploying from Docker Hub ๐Ÿณ

You will need Docker installed on your system

docker run -p 8080:8080 lissy93/dashy

Or

docker run -d \
  -p 4000:8080 \
  -v /root/my-local-conf.yml:/app/user-data/conf.yml \
  --name my-dashboard \
  --restart=always \
  lissy93/dashy:latest

Dashy on Docker Hub

See also: examples with Docker Compose. Dashy is also available via GHCR, and tags for other architectures (arm32v7, arm64v8, etc.) and set versions are supported

Once you've got Dashy running, see App Management Docs for info on using health checks, updating, backups, web-server configs, logs, performance, security, and more.

Deploying from Source ๐Ÿ”จ

You will need git, the latest or LTS version of Node.js and (optionally) Yarn installed on your system.

See docs: Full list of Dashy's commands

Deploy to the Cloud โ˜๏ธ

Dashy supports 1-Click deployments on several popular cloud platforms. To spin up a new instance, just click a link below:

For more 1-click cloud deployments, see Cloud Deployment

โฌ†๏ธ Back to Top


Configuring ๐Ÿ”ง

For full configuration documentation, see: Configuring

Dashy is configured through a YAML file, located at ./user-data/conf.yml. In addition, you can find a complete list of available options in the Configuring Docs. The config can also be edited and saved directly through the UI.

โฌ†๏ธ Back to Top


Theming ๐ŸŽจ

For full theming documentation, see: Theming

Dashy comes pre-bundled with several built-in themes, which you can preview, apply and edit through the UI. With the theme configurator and support for custom CSS, everything is in place to quickly develop your own unique-looking dashboard.

<p align="center"> <a href="https://i.ibb.co/BVSHV1v/dashy-themes-slideshow.gif"> <img alt="Example Themes" src="https://raw.githubusercontent.com/Lissy93/dashy/master/docs/assets/theme-slideshow.gif" width="400" /> </a> </p> <p align="center"> <a href="https://i.ibb.co/cLDXj1R/dashy-theme-configurator.gif"> <img alt="Example Themes" src="https://raw.githubusercontent.com/Lissy93/dashy/master/docs/assets/theme-config-demo.gif" width="400" /> </a> </p>

โฌ†๏ธ Back to Top


Icons ๐Ÿงธ

For full iconography documentation, see: Icons

Both sections and items can have an icon associated with them, defined under the icon attribute. With several different icon packs supported, you'll be able to find the perfect thumbnail for any app or service.

The following icon types are supported:

<p align="center"> <img width="400" src="https://i.ibb.co/GTVmZnc/dashy-example-icons.png" /> </p>

โฌ†๏ธ Back to Top


Status Indicators ๐Ÿšฆ

For full monitoring documentation, see: Status Indicators

Dashy has an optional feature to check if each app/ service is up and responding, then display a small status indicator icon. Hovering over it will show additional stats like response time and status code.

Status indicators can be globally enabled by setting appConfig.statusCheck: true or enabled/ disabled on a per-item basis. Status is checked on page load, but you can allow continuous polling by specifying a time interval between checks, in seconds under appConfig.statusCheckInterval. You can also use a different endpoint for status checking, with statusCheckUrl, and if needed, pass in custom headers under statusCheckHeaders.

<p align="center"> <img alt="Status Checks demo" src="https://raw.githubusercontent.com/Lissy93/dashy/master/docs/assets/status-check-demo.gif" width="600" /> </p>

โฌ†๏ธ Back to Top


Widgets ๐Ÿ“Š

For full widget documentation, see: Widgets

You can display dynamic content from services in the form of widgets. There are several pre-built widgets availible for showing useful info, and integrations with commonly self-hosted services, but you can also easily create your own for almost any app.

<p align="center"> <img width="600" src="https://i.ibb.co/GFjXVHy/dashy-widgets.png" /> </p>

โฌ†๏ธ Back to Top


Authentication ๐Ÿ”

For full authentication documentation, see: Authentication

Dashy has full support for secure single-sign-on using Keycloak for secure, easy authentication, see setup docs for a full usage guide.

There is also a basic auth feature, which doesn't require additional setup. To enable this, add an auth attribute under appConfig, containing an array of users, each with a username, SHA-256 hashed password and optional user type. Basic auth also supports several access control features, including read-only guest access and granular controls.

appConfig:
  auth:
    users:
    - user: alicia
      hash: 4D1E58C90B3B94BCAD9848ECCACD6D2A8C9FBC5CA913304BBA5CDEAB36FEEFA3
      type: admin

Other access control systems are also supported, see the Alternative Auth Methods docs.

โฌ†๏ธ Back to Top


Alternate Views ๐Ÿ‘“

As well as the default homepage, there is also:

You can change the view from the UI, using the switch icon in the top-right corner, or select a default view in the config under appConfig.startingView attribute.

<p align="center"> <b>Example of Workspace View</b><br> <img alt="Workspace view demo" src="https://raw.githubusercontent.com/Lissy93/dashy/master/docs/assets/workspace-demo.gif" width="600" /> </p> <p align="center"> <b>Example of Minimal View</b><br> <img alt="Workspace view demo" src="https://raw.githubusercontent.com/Lissy93/dashy/master/docs/assets/minimal-view-demo.gif" width="600" /> </p>

โฌ†๏ธ Back to Top


Opening Methods ๐Ÿ–ฑ๏ธ

For full documentation on views and opening methods, see: Alternate Views

There are several different ways you can launch apps. You can specify the default opening method for any given item under the target attribute or set a site-wide default under appConfig.defaultOpeningMethod. Right-click on an item to item for all options. The following options are supported:

โฌ†๏ธ Back to Top


Searching and Shortcuts ๐Ÿ”Ž

For full documentation on searching, see: Searching & Shortcuts

Quickly finding and launching applications is the primary aim of Dashy. To that end, instant search and customizable keyboard shortcuts are built-in.

To start filtering, start typingโ€”no need to select the search bar or use any special key. Then use either the tab key or arrow keys to select and move between results, and hit enter to launch the currently selected application.

For apps that you use regularly, you can set a custom keybinding. Use the hotkey parameter on a certain item to specify a numeric key between 0 - 9. You can then launch that app by just pressing that key.

You can also add custom tags to a given item to make finding them based on keywords easier. For example, in the following example, searching for 'Movies' will show 'Plex'

  items:
  - title: Plex
    hotkey: 8
    icon: favicon
    description: Media library
    url: https://plex.lab.local
    tags: [ movies, videos, music ]

To search the web directly through Dashy, just press enter after typing your query. Options for web search are set under appConfig.webSearch. There is built-in support for 10+ search engines, or use your own custom provider or self-hosted instance. With the web search, you can also define your bangs to redirect results to any given app, website, or search engine, when the query is preceded with a certain character sequence (usually beginning in /, ! or :).

webSearch:
  searchEngine: duckduckgo
  openingMethod: newtab
  searchBangs:
    /r: reddit
    /w: wikipedia
    /s: https://whoogle.local/search?q=
    ':wolf': wolframalpha
    ':so': stackoverflow
    ':git': github

Hit Esc at any time to close any open apps, clear the search field, or hide any modals.

โฌ†๏ธ Back to Top


Config Editor โš™๏ธ

For full config documentation, see: Configuring

As well as passing in a YAML config file, you can also configure the app directly through the UI and preview changes live.

To edit any section or item, right-click on it, and select "Edit", or enter the Edit Mode (using the Pen icon in the top-right), then click any part of the page to edit. Changes will be visible immediately but will not be saved until clicking "Save to Disk" or "Save Locally".

Under the config menu, you can export, view, backup, or reset app config and edit the raw config file in a text editor with built-in schema validation. It's recommended to keep a backup of your config.

<p align="center"> <img alt="Interactive Editor demo" src="https://user-images.githubusercontent.com/1862727/139543020-b0576d28-0830-476f-afc8-a815d4de6def.gif" width="600" /> </p> <p align="center"> <img alt="Config Editor demo" src="https://raw.githubusercontent.com/Lissy93/dashy/master/docs/assets/config-editor-demo.gif" width="600" /> </p>

โฌ†๏ธ Back to Top


Cloud Backup & Sync โ˜

For full backup documentation, see: Cloud Backup & Sync

Dashy has an optional built-in feature for securely backing up your config to a hosted cloud service and then restoring it on another instance. This is useful not only for backing up your configuration off-site but also enables Dashy to be used without having to write a YAML config file.

All data is fully E2E encrypted before being sent to the backend (done in CloudBackup.js using crypto.js 's AES method). The data is then sent to a Cloudflare worker and stored in a KV data store.

โฌ†๏ธ Back to Top


Language Switching ๐ŸŒŽ

For full internationalization documentation, see: Multi-Language Support

Dashy supports multiple languages and locales. When available, your language should be automatically detected and applied on load. But you can also select a language through the UI (under config --> Switch Language) or set appConfig.language to your language (specified as a 2-digit ISO 639-1 code), as seen below, e.g. language: de.

Supported Languages

Add your Language

I would love Dashy to be available to everyone without language being a barrier to entry. If you've got a few minutes to spare, consider adding translations for your language. It's a quick task, and all text is in a single JSON file. Since any missing text will fall back to English, you don't need to translate it all.

โฌ†๏ธ Back to Top


Multi-Page Support ๐Ÿ“ƒ

For full multi-page documentation, see: Pages & Sections

Within your dashboard, you can have as many sub-pages as you require. To load additional pages, specify a name, and path to a config file under pages. The config file can be either local (stored in /public), or remote (located anywhere accessible).

pages:
- name: Networking Services
  path: 'networking.yml'
- name: Work Stuff
  path: 'work.yml'

Or

pages:
- name: Getting Started
  path: 'https://snippet.host/tvcw/raw'
- name: Homelab
  path: 'https://snippet.host/tetp/raw'
- name: Browser Startpage
  path: 'https://snippet.host/zcom/raw'

System Requirements ๐Ÿ“Š

If running on bare metal, Dashy requires Node V 16.0.0 or later, LTS (16.13.2) is recommended.

If running in Docker container, the recommended base image is Alpine (3.15)

The hardware requirements vary depending on where and how you are running Dashy. Generally speaking, on a bare-metal system or Docker container, 1GB of memory should be more than enough, and depending on whether you are using your own assets, then 1GB of disk space should be sufficient.

If you are using one of the 1-click cloud deployment methods, serving the app through a CDN or using a static hosting provider, then there are no specific requirements, as the built app is just a series of static JS files, and so is very light-weight.

Dashy also wells run on low-powered ARM-based single board computers, such as a Raspberry Pi (tested on Pi 3)

Browser Support

ChromeFirefoxIEOperaSafari
Latest โœ”Latest โœ”10+ โœ”Latest โœ”6.1+ โŒ

โฌ†๏ธ Back to Top


Support ๐Ÿ™‹โ€โ™€๏ธ

If you're having trouble getting Dashy up and running, or have a question about usage or configuration, feel free to ask. The best place to do this is via the Discussions.

If you've found something which isn't working as it should, please raise a bug by opening a ticket.

It's best to check the docs, previous issues and troubleshooting guide first.

โฌ†๏ธ Back to Top


Supporting Dashy ๐Ÿ’–

For full details and other ways you can help out, see: Contributing

If you're using Dashy and would like to help support its development, then that would be awesome! Contributions of any type, any size, are always very much appreciated, and we will appropriately credit you for your effort.

Several areas that we need a bit of help with at the moment are:

Sponsor Lissy93 on GitHub

โฌ†๏ธ Back to Top

Credits ๐Ÿ†

For a complete list of credits, and attributions to packages used within Dashy, see: Credits

Thank you so much to everyone who has helped with Dashy so far; every contribution is very much appreciated.

Sponsors

Huge thanks to the sponsors helping to support Dashy's development!

<!-- readme: sponsors -start --> <table> <tr> <td align="center"> <a href="https://github.com/vincentkoc"> <img src="https://avatars.githubusercontent.com/u/25068?u=cbf098fc04c0473523d373b0dd2145b4ec99ef93&v=4" width="80;" alt="vincentkoc"/> <br /> <sub><b>Vincent Koc</b></sub> </a> </td> <td align="center"> <a href="https://github.com/AnandChowdhary"> <img src="https://avatars.githubusercontent.com/u/2841780?u=747e554b3a7f12eb20b7910e1c87d817844f714f&v=4" width="80;" alt="AnandChowdhary"/> <br /> <sub><b>Anand Chowdhary</b></sub> </a> </td> <td align="center"> <a href="https://github.com/shrippen"> <img src="https://avatars.githubusercontent.com/u/2873570?v=4" width="80;" alt="shrippen"/> <br /> <sub><b>Shrippen</b></sub> </a> </td> <td align="center"> <a href="https://github.com/bile0026"> <img src="https://avatars.githubusercontent.com/u/5022496?u=aec96ad173c0ea9baaba93807efa8a848af6595c&v=4" width="80;" alt="bile0026"/> <br /> <sub><b>Zach Biles</b></sub> </a> </td> <td align="center"> <a href="https://github.com/UlisesGascon"> <img src="https://avatars.githubusercontent.com/u/5110813?u=3c41facd8aa26154b9451de237c34b0f78d672a5&v=4" width="80;" alt="UlisesGascon"/> <br /> <sub><b>Ulises Gascรณn</b></sub> </a> </td> <td align="center"> <a href="https://github.com/digitalarche"> <img src="https://avatars.githubusercontent.com/u/6546135?u=564756d7f44ab2206819eb3148f6d822673f5066&v=4" width="80;" alt="digitalarche"/> <br /> <sub><b>Digital Archeology</b></sub> </a> </td></tr> <tr> <td align="center"> <a href="https://github.com/InDieTasten"> <img src="https://avatars.githubusercontent.com/u/7047377?u=8d8f8017628b38bc46dcbf3620e194b01d3fb2d1&v=4" width="80;" alt="InDieTasten"/> <br /> <sub><b>InDieTasten</b></sub> </a> </td> <td align="center"> <a href="https://github.com/araguaci"> <img src="https://avatars.githubusercontent.com/u/7318668?v=4" width="80;" alt="araguaci"/> <br /> <sub><b>Araguaci</b></sub> </a> </td> <td align="center"> <a href="https://github.com/bmcgonag"> <img src="https://avatars.githubusercontent.com/u/7346620?u=2a0f9284f3e12ac1cc15288c254d1ec68a5081e8&v=4" width="80;" alt="bmcgonag"/> <br /> <sub><b>Brian McGonagill</b></sub> </a> </td> <td align="center"> <a href="https://github.com/vlad-tim"> <img src="https://avatars.githubusercontent.com/u/11474041?u=eee43705b54d2ec9f51fc4fcce5ad18dd17c87e4&v=4" width="80;" alt="vlad-tim"/> <br /> <sub><b>Vlad</b></sub> </a> </td> <td align="center"> <a href="https://github.com/helixzz"> <img src="https://avatars.githubusercontent.com/u/12218889?u=d06d0c103dfbdb99450623064f7da3c5a3675fb6&v=4" width="80;" alt="helixzz"/> <br /> <sub><b>HeliXZz</b></sub> </a> </td> <td align="center"> <a href="https://github.com/patvdv"> <img src="https://avatars.githubusercontent.com/u/12430107?u=e8911c2fb91af4d30432f76da8c40927b2830bd7&v=4" width="80;" alt="patvdv"/> <br /> <sub><b>Patrick Van Der Veken</b></sub> </a> </td></tr> <tr> <td align="center"> <a href="https://github.com/MioOgbeni"> <img src="https://avatars.githubusercontent.com/u/24291977?u=4178230d1acd14b41ca7f4eaf9b96811045167f0&v=4" width="80;" alt="MioOgbeni"/> <br /> <sub><b>Tomรกลก Novรกk</b></sub> </a> </td> <td align="center"> <a href="https://github.com/mryesiller"> <img src="https://avatars.githubusercontent.com/u/24632172?u=0d20f2d615158f87cd60a3398d3efb026c32f291&v=4" width="80;" alt="mryesiller"/> <br /> <sub><b>Gรถksel YeลŸiller</b></sub> </a> </td> <td align="center"> <a href="https://github.com/sushibait"> <img src="https://avatars.githubusercontent.com/u/26634535?v=4" width="80;" alt="sushibait"/> <br /> <sub><b>Shiverme Timbers</b></sub> </a> </td> <td align="center"> <a href="https://github.com/undefined"> <img src="" width="80;" alt="undefined"/> <br /> <sub><b>Undefined</b></sub> </a> </td> <td align="center"> <a href="https://github.com/OlliVHH"> <img src="https://avatars.githubusercontent.com/u/84959562?v=4" width="80;" alt="OlliVHH"/> <br /> <sub><b>HamburgerJung</b></sub> </a> </td> <td align="center"> <a href="https://github.com/frankdez93"> <img src="https://avatars.githubusercontent.com/u/87549420?v=4" width="80;" alt="frankdez93"/> <br /> <sub><b>Frankdez93</b></sub> </a> </td></tr> <tr> <td align="center"> <a href="https://github.com/st617"> <img src="https://avatars.githubusercontent.com/u/128325650?v=4" width="80;" alt="st617"/> <br /> <sub><b>St617</b></sub> </a> </td> <td align="center"> <a href="https://github.com/nrvo"> <img src="https://avatars.githubusercontent.com/u/151435968?u=e1dcb307fd0efdc45cddbe9490a7b956e4da6835&v=4" width="80;" alt="nrvo"/> <br /> <sub><b>Nrvo</b></sub> </a> </td> <td align="center"> <a href="https://github.com/hudsonrock-partnerships"> <img src="https://avatars.githubusercontent.com/u/163282900?u=5f2667f7fe5d284ac7a2da6b0800ea8970b0fcbf&v=4" width="80;" alt="hudsonrock-partnerships"/> <br /> <sub><b>Hudsonrock-partnerships</b></sub> </a> </td></tr> </table> <!-- readme: sponsors -end -->

Contributors

Auto-generated contributors

Stats

Stats

โฌ†๏ธ Back to Top


Developing ๐Ÿงฑ

For full development documentation, see: Developing

Open Project in VS Code Open in GitPod Open in GitHub Code Spaces

Before getting started, you'll need Git, Node and optionally Yarn (run npm i -g yarn) installed.

To set up the development environment:

  1. Get Code: git clone https://github.com/Lissy93/dashy.git and cd dashy
  2. Install dependencies: yarn
  3. Start dev server: yarn dev
  4. Open the browser: http://localhost:8080

When you're ready, you can build the production app with yarn build, and then run it with yarn start

If you're new to web development, I've put together a short list of resources to help beginners get started

Repo Status: Open PRs Total PRs GitHub commit activity Last Commit Contributors

โฌ†๏ธ Back to Top


Documentation ๐Ÿ“˜

For full docs, see: Documentation Contents

Running Dashy

Feature Docs

Development and Contributing

Misc

โฌ†๏ธ Back to Top


Roadmap ๐Ÿ›ฃ๏ธ

For upcoming features that will be released in the near future, see the Current Roadmap

For past updates, see the Changelog

โฌ†๏ธ Back to Top


Alternatives ๐Ÿ™Œ

A few self-hosted web apps serve a similar purpose to Dashy. If you're looking for a dashboard, and Dashy doesn't meet your needs, I highly recommend you check these projects out!

โฌ†๏ธ Back to Top


License ๐Ÿ“œ

Dashy is Licensed under MIT X11

Copyright ยฉ 2021-2024 Alicia Sykes <https://aliciasykes.com>

Permission is hereby granted, free of charge, to any person obtaining a copy of this
software and associated documentation files (the "Software"), to deal in the Software
without restriction, including without limitation the rights to use, copy, modify, merge,
publish, distribute, sublicense, and/or sell copies of the Software, and to permit
persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or
substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION WITH THE SOFTWARE OR THE USE
OR OTHER DEALINGS IN THE SOFTWARE.

Except as contained in this notice, Dashy shall not be used in advertising or otherwise
to promote the sale, use, or other dealings in this Software without prior written
authorization from the repo owner.

TDLR; You can do whatever you like with Dashy: use it in private or commercial settings, redistribute and modify it. But you must display this license and credit the author. There is no warranty that this app will work as expected, and the author cannot be held liable for anything that goes wrong. For more info, see TLDR Legal's Explanation of MIT

FOSSA Status

โฌ†๏ธ Back to Top


<!-- License + Copyright --> <p align="center"> <i>ยฉ <a href="https://aliciasykes.com">Alicia Sykes</a> 2024</i><br> <i>Licensed under <a href="https://gist.github.com/Lissy93/143d2ee01ccc5c052a17">MIT</a></i><br> <a href="https://github.com/lissy93"><img src="https://i.ibb.co/4KtpYxb/octocat-clean-mini.png" /></a><br> <sup>Thanks for visiting :)</sup> </p> <!-- Dinosaurs are Awesome --> <!-- . - ~ ~ ~ - . .. _ .-~ ~-. //| \ `..~ `. || | } } / \ \ (\ \\ \~^..' | } \ \`.-~ o / } | / \ (__ | / | / `. `- - ~ ~ -._| /_ - ~ ~ ^| /- _ `. | / | / ~-. ~- _ |_____| |_____| ~ - . _ _~_-_ -->