.github | ||
docker | ||
docs | ||
public | ||
services | ||
src | ||
.dockerignore | ||
.editorconfig | ||
.env | ||
.gitignore | ||
app.json | ||
CNAME | ||
docker-compose.yml | ||
Dockerfile | ||
LICENSE | ||
netlify.toml | ||
package.json | ||
Procfile | ||
README.md | ||
server.js | ||
vue.config.js | ||
yarn.lock |
Dashy
Dashy helps you organize your self-hosted services by making them accessible from a single place
User Showcase | Live Demo | Getting Started | Documentation | GitHub
Contents
-
Getting Started
-
Feature Overview
-
Community
Features 🌈
- 🔎 Instant search by name, domain or tags + customizable hotkeys & keyboard shortcuts
- 🎨 Multiple built-in color themes, with UI color editor and support for custom CSS
- 🧸 Many icon options - Font-Awesome, homelab icons, auto-fetching favicon, images, emojis, etc.
- 🚦 Status monitoring for each of your apps / links for basic availability and uptime checking
- 💂 Optional authentication with multi-user access, configurable privileges and SSO support
- 🌎 Multi-language support, with 10+ human-translated languages, and more on the way
- ☁ Optional, encrypted, free off-site cloud backup and restore feature available
- 💼 A workspace view, for easily switching between multiple apps at simultaneously
- 🛩️ A minimal view, for use as a fast-loading browser startpage
- 🖱️ Choose app launch method, either new tab, same tab, a pop-up modal or in the workspace view
- 📏 Customizable layout, sizes, text, component visibility, sort order, behavior etc.
- 🖼️ Option for full-screen background image, custom nav-bar links, html footer, title, etc.
- 🚀 Easy to setup with Docker, or on bare metal, or with 1-Click cloud deployment
- ⚙️ Easy single-file YAML-based configuration, and option to configure app through the UI
- ✨ Under active development with improvements and new features added regularly
- 🤏 Small bundle size, fully responsive UI and PWA for basic offline access
- 🆓 100% free and open source
- 🔐 Strong focus on privacy
- 🌈 And loads more...
Demo ⚡
For more examples of Dashy in action, see: The Showcase
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: or docker run -p 8080:80 lissy93/dashy
Getting Started 🛫
For full setup instructions, see: Deployment
Deploying from Docker Hub 🐳
You will need Docker installed on your system
docker run -p 8080:80 lissy93/dashy
Or
docker run -d \
-p 4000:80 \
-v /root/my-local-conf.yml:/app/public/conf.yml \
--name my-dashboard \
--restart=always \
lissy93/dashy:latest
See also examples with Docker Compose. Dashy is also available via GHCR, and tags for other architectures (arm32-7
, arm64-v8
, 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.
- Get Code:
git clone https://github.com/Lissy93/dashy.git
andcd dashy
- Configuration: Fill in you're settings in
./public/conf.yml
- Install dependencies:
yarn
- Build:
yarn build
- Run:
yarn start
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
Configuring 🔧
For full configuration documentation, see: Configuring
All of Dashy's configuration is specified in a single YAML file, located at ./public/conf.yml
. You can find a complete list of available options in th Configuring Docs. If you're using Docker, you'll probably want to pass this file in as a Docker volume (e.g. -v /root/my-local-conf.yml:/app/public/conf.yml
).
The config can also be edited directly through the UI with changes written to your conf.yml file. After making any modifications the app needs to be rebuilt, which will happen automatically or can be trigger with yarn build
or directly through the UI.
You can check that your config is valid and matches Dashy's schema, by running: yarn validate-config
.
Finally, you may find these example config helpful for getting you started.
Theming 🎨
For full theming documentation, see: Theming
Dashy comes with a number of built-in themes, but it's also easy to make your own. You can either use the color editor, or your own custom CSS. All colors, and most other CSS properties are specified using CSS variables, which are documented here, thereby customizing the look and feel of Dashy. Learn more about adding your own theme in the docs.
Icons 🧸
For full iconography documentation, see: Icons
Both sections and items can have an icon associated with them, and defined under the icon
attribute. There are many options for icons, including Font Awesome support, automatic fetching from favicon, emojis, programmatically generated icons and direct local or remote URLs.
- Favicon: Set
icon: favicon
to fetch a services icon automatically from the URL of the corresponding application - Font-Awesome: To use any font-awesome icon, specify the category, followed by the icon name, e.g.
fas fa-rocket
orfab fa-monero
. You can also use Pro icons if you have a license key, just set it underappConfig.fontAwesomeKey
- Home Lab Icons: For common self-hosted services, you can use any icon from @WalkxCode's dashboard-icons repo, by preceding it with
hl-
, e.g.icon: hl-pihole
- Emoji: Use an emoji as a tile icon, by putting the emoji's code as the icon attribute. Emojis can be specified either as emojis (
🚀
), unicode ('U+1F680'
) or shortcode (':rocket:'
) - Generative: Setting
icon: generative
, will generate a unique logo for a given service, based on it's specified URL or IP - URL: You can also pass in a URL to an icon asset, hosted either locally or using any CDN service. E.g.
icon: https://i.ibb.co/710B3Yc/space-invader-x256.png
- Local Image: To use a local image, store it in
./public/item-icons/
(or create a volume in Docker:-v /local/image/directory:/app/public/item-icons/
) , and reference it by name and extension - e.g. seticon: image.png
to use./public/item-icon/image.png
. You can also use sub-folders here - Simple Icons: Use any brand/ logo icon from simpleicons.org by setting the icon to
si-[icon-name]
- Material Design Icons: You can also use any icon from materialdesignicons.com by setting the icon to
mdi-[icon-name]
Status Indicators 🚦
For full monitoring documentation, see: Status Indicators
Dashy has an optional feature that can display a small icon next to each of your running services, indicating it's current status. This is useful if you are using Dashy as your homelab's start page, as it gives you an overview of the health of each of your running services. Hovering over the indicator will show additional information, including average response time and an error message for services which are down.
By default, this feature is off, but you can enable it globally by setting appConfig.statusCheck: true
, or enable/ disable it for an individual item, with item[n].statusCheck
.
You can also specify an time interval in seconds under appConfig.statusCheckInterval
, between checks, if this value is 0
, then status is only checked on initial page load, which is the default behavior. Status checks use the url
attribute, but to call a different endpoint instead, you can set statusCheckUrl
. Custom headers can also be specified using statusCheckHeaders
.
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 simple login feature for basic access control, which doesn't require any additional setup. To enable this feature, just add an auth
attribute under appConfig
, containing an array of users
, each with a username, SHA-256 hashed password and optional user type.
appConfig:
auth:
users:
- user: alicia
hash: 4D1E58C90B3B94BCAD9848ECCACD6D2A8C9FBC5CA913304BBA5CDEAB36FEEFA3
type: admin
Guest Access: By default, when authentication is configured no user can access your dashboard without first logging in. If you would like to allow for read-only access by unauthenticated users, then you can enable guest mode, by setting appConfig.auth.enableGuestAccess: true
.
Granular Controls: With basic login, it is also possible to control which sections are visible to which users. Under the displayData
property of a section, you can pass an array of usernames to one of the following attributes:
hideForUsers
- Section will be visible to all users, except for those specified in this listshowForUsers
- Section will be hidden from all users, except for those specified in this listhideForGuests
- Section will be visible for all logged in users, but not for guests (if guest access is enabled)
For setup instructions for other access control systems, please see the Alternative Auth Methods docs.
Opening Methods 🖱️
For full documentation on views and opening methods, see: Alternate Views
One of the primary purposes of Dashy is to make launching commonly used apps and services as quick as possible. To aid in this, there are several different options on how items can be opened. You can configure your preference by setting the target
property of any item, to one of the following values:
sametab
- The app will be launched in the current tabnewtab
- The app will be launched in a new tabmodal
- Launch app in a resizable/ movable popup modal on the current pageworkspace
- Changes to Workspace view, and launches apptop
- Opens in the top-most browsing context, useful if your accessing Dashy through an iframe
You can also set the default opening method, which will be applied to all items that don't have a specified target, using appConfig.defaultOpeningMethod
, to one of the above values.
Even if the target is not set (or is set to sametab
), you can still launch any given app in an alternative method: Alt + Click will open the modal, and Ctrl + Click will open in a new tab. You can also right-click on any item to see all options (as seen in the screenshot below). This custom context menu can be disabled by setting appConfig.disableContextMenu: true
.
In the workspace view, you can keep previously opened websites/ apps open in the background, by setting appConfig.enableMultiTasking: true
. This comes at the cost of performance, but does mean that your session with each app is preserved, enabling you to quickly switch between your apps.
The modal and workspace views work by rendering the target application in an iframe. If you are getting a a Refused to Connect
error, then you need to set the HTTP response header X-Frame-Options
to ALLOW [url-for-dashy]
. See the docs for instructions on how to do this.
Alternate Views 👓
As well as the default homepage, there is also:
- A minimal view, useful for use as a browser start page
- A workspace view, useful for visiting many apps simultaneously
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 (can be either default
, minimal
or workspace
). Clicking the page title on any view will take you back to your default starting view.
Example of Workspace View
Example of Minimal View
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, just start typing. No need to select the search bar or use any special key. You can then use either the tab key or arrow keys to select and move between results, and hit enter to launch the currently selected application. You can also use Alt + Enter
on a selected app to launch it in a popup modal, Ctrl + Enter
to open in new tab, or right-click on it to see all opening methods.
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
description: Media library
icon: favicon
url: https://plex.lab.local
tags: [ movies, videos, music ]
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, which is very useful for services you use frequently.
Example:
- title: Bookstack
icon: far fa-books
url: https://bookstack.local/
hotkey: 8
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.
To disable web search all together, set: webSearch: { disableWebSearch: true }
webSearch:
searchEngine: duckduckgo
openingMethod: newtab
With the web search, you can also define your own 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 :
).
For example, with the below code, typing :git dashy
will search GitHub for Dashy, or /w docker
will open the Docker Wikipedia page.
webSearch:
searchBangs:
/r: reddit
/w: wikipedia
/s: https://whoogle.local/search?q=
':wolf': wolframalpha
':so': stackoverflow
':git': github
Hit Esc
at anytime to close any open apps, clear the search field, or hide any modals.
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 you click "Save to Disk" or "Save Locally".
Under the config menu, you can export, view, backup, or reset app config, as well as edit the raw config file in a text editor, with built-in schema validation.
A full list of available config options can be found here. It's recommend to make and keep a backup of your configuration, to easily restore it into a new instance of Dashy.
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 it also enables Dashy to be used without having 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.
Language Switching 🌎
For full internationalization documentation, see: Multi-Language Support
Dashy supports multiple languages and locales. When available, you're language should be automatically detected and applied on load, based on your browser or systems settings. 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).
Supported Languages
- 🇬🇧 English:
en
- Default - 🇨🇳 Chinese:
cn
- Contributed by @FormatToday - 🇳🇱 Dutch:
nl
- Contributed by @evroon - 🇲🇫 French:
fr
- Contributed by @EVOTk - 🇩🇪 German:
de
- Contributed by @Niklashere - 🇳🇴 Norwegian Bokmål:
nb
- Contributed by @rubjo - 🇵🇱 Polish:
pl
- Contributed by @skaarj1989 - 🇪🇸 Spanish:
es
- Contributed by @lu4t - 🇸🇮 Slovenian:
sl
- Contributed by @UrekD - 🇮🇹 Italian:
it
- Machine Translated (awaiting human review) - 🇵🇹 Portuguese:
pt
- Machine Translated (awaiting human review) - 🇷🇺 Russian:
ru
- Contributed by Anon - 🇦🇪 Arabic:
ar
- Contributed by Anon - 🇮🇳 Hindi:
hi
- Contributed by Anon - 🇯🇵 Japanese:
ja
- Contributed by Anon
Add your Language
I would love for Dashy to be available to everyone, without language being a barrier to entry for non-native English speakers. If you have a few minutes to spare, you're help with translating it would be very much appreciated. It's quite a quick task, all text is in a single JSON file, and you don't have to translate it all. For more info, see the Adding a New Language Docs.
Setting Dashboard Info 🌳
Page settings are defined under pageInfo
. Here you can set things like title, sub-title, navigation links, footer text, etc. For example:
pageInfo:
title: Home Lab
description: Dashy
navLinks:
- title: Home
path: /
- title: Server Monitoring
path: https://server-start.local
- title: Start Page
path: https://start-page.local
footerText: 'My <b>Awesome</b> Dashboard. Built with <a href="https://dashy.to">Dashy</a>'
You can also edit this through the UI, by entering Edit mode, then clicking Edit Page Info.
System Requirements 📊
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 weather 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
Latest ✔ | Latest ✔ | 10+ ✔ | Latest ✔ | 6.1+ ✔ |
Getting Help 🙋♀️
For general discussions, check out the Discussions Board
If you're having trouble getting things up and running, feel free to ask a question. The best way to do so is in the discussion, or if you think you think the issue is on Dashy's side, you can raise a ticket. It's best to check the docs, previous issues and troubleshooting guide first, as often the solution is already there.
Raising Issues 🐛
Found a bug, or something that isn't working as you'd expect? Please raise it as an issue so that it can be resolved. Feature requests are also welcome. Similarlty, feedback is very useful, as it helps me know what areas of Dashy need some improvement.
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 it's development, then that would be awesome! Contributions of any type, however small are always very much appreciated, and you will be appropriately credited for your effort.
Several areas that we need a bit of help with at the moment are:
- Translating - Help make Dashy available to non-native English speakers by adding youre language
- Donate a small amount, by Sponsoring @Lissy93 on GitHub and receive some extra perks!
- Complete a short survey, to have your say about future features
- Share your dashboard in the Showcase, to provide inspiration for others
- Join the discussion, help answer other users questions, suggest features, share tips and ask questions
- Spread the word, by sharing Dashy or a screenshot of your dashboard, to help new users discover it
- Submit a PR, to add a new feature, fix a bug, update the docs, add a theme or something else
- Star Dashy on GitHub/ DockerHub or leave an upvote / review on these platforms
Credits 🏆
For a full 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!
Mfnalex |
Robert Ernst |
Contributors
Packages
Dashy was made possible thanks to the following packages and components. For more details on each, see Dependency Credits. Full credit to their respective authors.
- Utils:
crypto-js
,axios
,ajv
- Components:
vue-select
by @sagalbot,vue-js-modal
by @euvl,v-tooltip
by @Akryum,vue-material-tabs
by @jairoblatt,JsonEditor
by @josdejong,vue-toasted
by @shakee93 - Core: Vue.js, TypeScript, SCSS, Node.js, ESLint
- Backup & sync: This server uses Cloudflare workers plus KV and web crypto
- Services: The 1-Click demo uses Play-with-Docker Labs. Code is hosted on GitHub, Docker image is hosted on DockerHub, and the demos are hosted on Netlify.
- Actions:
action-autotag
by @butlerlogic,contributors-list
,github-pages-deploy-action
,is-sponsor-label-action
,issues-translate-action
by @tomsun28,pr-commenter-action
by @exercism,snyk node
by @snyk, andyarn-lock-changes
by @Simek. See all action credits
Developing 🧱
For full development documentation, see: Developing
Before getting started, you'll need Git, Node and optionally Yarn (run npm i -g yarn
) installed.
To set up the development environment:
- Get Code:
git clone https://github.com/Lissy93/dashy.git
andcd dashy
- Install dependencies:
yarn
- Start dev server:
yarn dev
Hot reload is enabled, so changes will be automatically detected, compiled and refreshed.
Like most Git repos, we are following the Github Flow standard.
- Create a branch (or fork if you're not a collaborator)
- Code some awesome stuff, then add and commit your changes
- Create a Pull Request, complete the checklist and ensure the build succeeds
- Follow up with any reviews on your code
- Merge 🎉
Branch names are specified in the following format: [TYPE]/[TICKET]_[TITLE]
. E.g. FEATURE/420_Awesome-feature
or FIX/690_login-server-error
.
Most commit messages use git commit emojis - e.g. ✨ = New feature, 🐛 = Bug fix, 💄 = UI stuff, 🚧 = Work in progress, 🌐 = Language, 🔖 = New release, and so on. Take a look at gitmoji.dev for a list of what each emoji indicates
Before you submit your pull request, please ensure you've checked off all the boxes in the template. For your PR to be merged, it must:
- Must be backwards compatible
- Any new features should be documented
- The build, lint and tests (run by GH actions) should all pass (there are some exceptions)
- There must not be any merge conflicts
If you're new to web development, I've put together a short list of resources, to help beginners get started
Release Schedule 🗞️
For full release, automation and CI documentation, see: Releases & Workflows
Dashy is under active development, with features, improvements and changes pushed almost daily.
We're using Semantic Versioning, to indicate major, minor and patch versions. You can find the current version number in the readme, and check your apps version under the config menu. The version number is pulled from the package.json file.
Typically there is a new major release every 2 - 4 weeks, usually on Sunday, and you can view these under the Releases Page and on DockerHub. New minor versions are pushed several times a week, and are tagged here.
For a full breakdown of each change, you can view the Changelog. Each new feature or significant change needs to be submitted through a pull request, which makes it easy to review and track these changes, and roll back if needed.
Documentation 📘
For full docs, see: Documentation Contents
Running Dashy
- 💨 Quick Start - TDLR guide on getting Dashy up and running in under 5 minutes
- 🚀 Deployment - Full guide on setting up Dashy on various different environments
- 🔧 Configuring - Complete list of all available options in the config file
- 💻 Management - Managing your app, updating, security, web server configuration, etc
- 🚒 Troubleshooting - Common errors and problems, and how to fix them
Development and Contributing
- 🧱 Developing - Running Dashy development server locally, and general workflow
- 🛎️ Development Guides - Common development tasks, to help new contributors
- 💖 Contributing - How to contribute to Dashy
- 🌟 Showcase - See how others are using Dashy, and share your dashboard
- 🏆 Credits - Shout out to the amazing people who have contributed so far
- 🗞️ Release Workflow - Info about releases, CI and automated tasks
Feature Docs
- 🛡️ Authentication - Guide to setting up authentication to protect your dashboard
- 🧿 Alternate Views - Outline of available pages / views and item opening methods
- 💾 Backup & Restore - Guide to Dashy's cloud sync feature
- 🧸 Icons - Outline of all available icon types for sections and items
- 🌐 Language Switching - How to change language, add a language, or update text
- 🚦 Status Indicators - Using Dashy to monitor uptime and status of your apps
- 🔍 Searching & Shortcuts - Finding and launching your apps, and using keyboard shortcuts
- 🎨 Theming - Complete guide to applying, writing and modifying themes and styles
Misc
- 🔐 Privacy & Security - List of requests, potential issues, and security resources
- 📄 License - Copy of the MIT License
- ⚖️ Legal - Licenses of direct dependencies
- 📏 Code of Conduct - Contributor Covenant Code of Conduct
- 🌳 Changelog - Details of recent changes, and historical versions
Roadmap 🛣️
For past and future app updates, see: Changelog
The following features and tasks are planned for the near future.
- Widget support- cards showing live stats and interactive content from your self-hosted services
- ✅ UI editor and visual configurator
- Conversion to TypeScript
- Improved test coverage
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!
- Flame by @pawelmalak (
MIT
) - HomeDash2
- Homer (
Apache License 2.0
) - Organizr (
GPL-3.0 License
) - Heimdall (
MIT
) - Smashing (
MIT
) - See more 👉 Awesome Self-Hosted
License 📜
Dashy is License under MIT X11
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.
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