dashy/README.md

11 KiB

Dashy

Dashy helps you organize your self-hosted services, by making them all accessible from a single place

Features 🌈

  • Instant search by name, domain and tags - just start typing
  • Full keyboard shortcuts for navigation, searching and launching
  • Multiple color themes, with easy method for adding more
  • Customizable layout options, and item sizes
  • Quickly preview a website, by holding down the Alt key while clicking, to open it in a resizable pop-up modal
  • Many options for icons, including full Font-Awesome support and the ability to auto-fetch icon from URLs favicon
  • Additional info for each item visible on hover (including opening method icon and description as a tooltip)
  • Option for full-screen background image, custom nav-bar links, and custom footer text
  • User settings stored in local storage and applied on load
  • Encrypted cloud backup and restore feature available
  • Easy single-file YAML-based configuration
  • Small bundle size, fully responsive UI and PWA makes the app easy to use on any device
  • Plus lots more...

Live Demos: Demo 1Demo 2Demo 3

Screenshots Screenshots

Recording

Demo


Running the App 🏃‍♂️

For full setup instructions, see: Getting Started

Deploying from Docker Hub 🐳

You will need Docker installed on your system

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

After making changes to your configuration file, you will need to run: docker exec -it [container-id] yarn build to rebuild. You can also run other commands, such as yarn validate-config this way too. Container ID can be found by running docker ps.

Deploying from Source 🚀

You will need both git and the latest or LTS version of Node.js installed on your system

  • Get Code: git clone git@github.com:Lissy93/dashy.git and cd dashy
  • Configuration: Fill in you're settings in ./public/conf.yml
  • Install dependencies: yarn
  • Build: yarn build
  • Run: yarn start

After making changes to your configuration file, you will need to run: yarn build to rebuild.


Configuring 🔧

For full configuration documentation, see: Configuring

Dashy is configured with a single YAML file, located at ./public/conf.yml (or ./app/public/conf.yml for Docker). Any other optional user-customizable assets are also located in the ./public/ directory, e.g. favicon.ico, manifest.json, robots.txt and web-icons/*. If you are using Docker, the easiest way to method is to mount a Docker volume (e.g. -v /root/my-local-conf.yml:/app/public/conf.yml)

In the production environment, the app needs to be rebuilt in order for changes to take effect. This can be done with yarn build, or docker exec -it [container-id] yarn build if you are using Docker (where container ID can be found by running docker ps). You can check that your config matches Dashy's schema before deploying, by running yarn validate-config.

You may find these example config helpful for getting you started


Theming 🎨

For full configuration documentation, see: Theming

The app comes with a number of built-in themes, but it's also easy to write you're own. All colors, and most other CSS properties make use of CSS variables, which makes customizing the look and feel of Dashy very easy.

You can also apply custom CSS overrides directly through the UI (Under Config menu --> Custom CSS), or specify it in your config file under appConfig.customCss. If you have a lot of custom styles, you can pass in the path to a stylesheet, in appConfig.externalStyleSheet.


Cloud Backup & Sync ☁

For full 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 feature is totally optional, and if you do not enable it, then Dashy will not make any external network requests.

This is useful not only for backing up your configuration off-site, but it also enables Dashy to be used without having write a YAML config file, and makes it possible to use a public hosted instance, without the need to self-host.

All data is encrypted before being sent to the backend. In Dashy, this is done in CloudBackup.js, using crypto.js's AES method, using the users chosen password as the key. The data is then sent to a Cloudflare worker (a platform for running serverless functions), and stored in a KV data store.


Developing 🧱

For full development documentation, see: Developing

  1. Get Code: git clone git@github.com:Lissy93/dashy.git and cd dashy
  2. Install dependencies: yarn
  3. Start dev server: yarn dev

Hot reload is enabled, so changes will be detected automatically, triggering the app to be rebuilt and refreshed. Ensure that all lint checks and tests are passing before pushing an code or deploying the app.

If you are new to Vue.js or web development and want to learn more, here are some resources to help get you started. Dashy is a pretty straight-forward application, so would make an ideal candidate for your first PR!


Notes ✏

Alternatives 🙌

There are a few self-hosted web apps, that 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! Including, but not limited to: HomeDash2, Homer (Apache License 2.0), Organizr (GPL-3.0 License) and Heimdall (MIT License)

Credits 🏆

This app definitely wouldn't have been quite so possible without the making use of the following package and components. Full credit and big kudos to their respective authors, who've done an amazing job in building and maintaining them.

Core

At it's core, the application uses Vue.js, as well as it's services. Styling is done with SCSS, JavaScript is currently Babel, (but I am in the process of converting to TypeScript), linting is done with ESLint, the config is defined in YAML, and there is a simple Node.js server to serve up the static app.

Frontend Components

Utilities

  • crypto-js - Encryption implementations by @evanvosberg and community MIT
  • axios - Promise based HTTP client by @mzabriskie and community MIT
  • ajv - JSON schema Validator by @epoberezkin and community MIT

Backup & Sync Server

Although the app is purely frontend, there is an optional cloud backup and restore feature. This is built as a serverless function on Cloudflare workers using KV and web crypto


License 📜

Copyright © 2021 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 SOFTWAREOR THE USE
OR OTHER DEALINGS IN THE SOFTWARE.

Dashy - A feature-rich dashboard for your homelab 🚀 | Product Hunt