Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
90 commits
Select commit Hold shift + click to select a range
3ba0d75
👽 Begin the Vue 2 --> Vue 3 migration
lissy93 Mar 9, 2026
1aa7cda
⬆ Upgrade happy-dom and vite, all security issues resolved
lissy93 Mar 9, 2026
fe4df07
🚨 Fixes DeepScan warning, fixes (hopefully) Netlify/Vercel deploy
lissy93 Mar 9, 2026
902feaa
🔀 Sync from master
lissy93 Mar 11, 2026
d4f1d7f
🚚 Vue 3 compatibility fixes
lissy93 Mar 29, 2026
198c2db
⏩ Pull from master
lissy93 Mar 29, 2026
4de2dfb
💚 Fixes CI build, updatading missing old Vue2 patterns to Vue 3
lissy93 Mar 29, 2026
a85fd0a
🔂 Merge branch 'master' of github.com:lissy93/dashy into migration/vu…
lissy93 Apr 7, 2026
def411a
👔 Removes dep for vue-tooltip, and wrote our own directive instead
lissy93 Apr 13, 2026
8bf2f8e
🔄️ Merge branch 'master' of github.com:lissy93/dashy into migration/v…
lissy93 Apr 13, 2026
8f5d4d7
⬆️ Dependencies update
lissy93 Apr 13, 2026
201d83f
🎨 Resolves style regressions
lissy93 Apr 17, 2026
052ff83
✨ Schema-driven UI config editors
lissy93 Apr 18, 2026
b3406cc
🐛 Restores config store honoring local overrides
lissy93 Apr 18, 2026
16704d8
🥅 Catch warning from ResizeObserver.prototype.unobserve
lissy93 Apr 18, 2026
2419737
💄 UI work on section headers
lissy93 Apr 18, 2026
4d22e2c
🦖 Adds small util for json deep clone
lissy93 Apr 18, 2026
eb3d720
✨ Builds toast plugin, updates usage across app
lissy93 Apr 18, 2026
8e2d155
🚚 Moves util files into neater sub-directories
lissy93 Apr 19, 2026
c9c7a9c
📱 Responsivness fixes for edit menu, plus tooltip orphan fix
lissy93 Apr 19, 2026
ba0c967
🚚 Updates util imports
lissy93 Apr 19, 2026
98a5080
📱 Improved navlink responsivness
lissy93 Apr 19, 2026
4eab074
💥 Removes default footer, if not configured by user
lissy93 Apr 19, 2026
fa000bb
💬 Removes old footer text, no longer used
lissy93 Apr 19, 2026
382f37a
✨ All multi view, config, section paths working
lissy93 Apr 20, 2026
cc639a7
✨ Makes startingView configurable
lissy93 Apr 20, 2026
93285f0
✨ Reliably apply page title/meta across views
lissy93 Apr 20, 2026
7341bac
✨ Adds ability to set favicon and address bar color
lissy93 Apr 20, 2026
e69d3f3
🩹 Fix footer hidden after switching views
lissy93 Apr 21, 2026
92d168e
🎨 Consolidated settings menu, instead of 8+ different buttons
lissy93 Apr 21, 2026
8dcf8b3
🎨 Consolidated theme logic
lissy93 Apr 21, 2026
a2a23d6
🎨 Neatness tweaks for theme applying
lissy93 Apr 21, 2026
b2d1be2
♻️ Splits themes into files
lissy93 Apr 21, 2026
0524046
🍱 Updates settings icons for greater consistency
lissy93 Apr 21, 2026
6c8afed
💄 Themes
lissy93 Apr 22, 2026
0a129b7
✨ New masonry layout, for default section responsivness
lissy93 Apr 22, 2026
8f22408
📱 New responsive item layout within sections
lissy93 Apr 22, 2026
43d1824
✨ Bring all home section features into minimal view
lissy93 Apr 22, 2026
7983bc2
✨ Adds nav links, and editor to minimal view
lissy93 Apr 23, 2026
93a453a
➕ Adds codemirror for config editor
lissy93 Apr 24, 2026
6017eb6
✨ New and improved YAML editor, with schema validation
lissy93 Apr 24, 2026
e55607f
🎨 Structural code and UX improvments to yaml editor
lissy93 Apr 24, 2026
1e33557
🥅 Catch any config warn/errs and display cleanly
lissy93 Apr 24, 2026
b06a775
📱 Responsive edit mode bottom banner, with yaml link
lissy93 Apr 24, 2026
4b76447
⚡ Performance, functionality and robustness work for multi-config edi…
lissy93 Apr 24, 2026
ce7662e
⚡ Performance, functionality and robustness work for multi-config edi…
lissy93 Apr 24, 2026
2e82029
🧵 Small improvments to multi-config load ordering
lissy93 Apr 24, 2026
15d8360
➖ Remove rss-parser, wrote own with native DOMParser
lissy93 Apr 24, 2026
e74ee80
🚨 Removes ::v-deep, resolves deprication warn
lissy93 Apr 24, 2026
ec346dd
🏎️ Lazy-load simple-icons and error report
lissy93 Apr 24, 2026
c4249e7
⚡ Lazy load the schema data, only when needed
lissy93 Apr 24, 2026
6699851
⚡ Lazy load OIDC and KC code, only when needed
lissy93 Apr 24, 2026
160888f
⚡ Lazy load all config editing things
lissy93 Apr 24, 2026
bd96102
⚡ Lazy load translations, only lang needed
lissy93 Apr 24, 2026
aa4c7a0
🚨 Resolves warning about dual-method import
lissy93 Apr 24, 2026
d53a27c
➖ Removes remedial and entities dependencies
lissy93 Apr 24, 2026
d56dafa
➖ Removes Sentry trace
lissy93 Apr 24, 2026
381dcf7
➖ Removes connect-history-api-fallback dep
lissy93 Apr 24, 2026
0ac634e
➖ Removes register-service-worker dep, does manually
lissy93 Apr 25, 2026
c94dd5e
⬆️ Upgrades Keycloak
lissy93 Apr 25, 2026
bcfeb6b
➖ Removes vue3-json-viewer
lissy93 Apr 25, 2026
030fa96
✨ Adds new config view/export menu
lissy93 Apr 25, 2026
923bdbb
🔧 Setup more comprehensive linting
lissy93 Apr 25, 2026
b17eb80
🔥 Remove all eslint-ignore comments, may fail
lissy93 Apr 25, 2026
2aaad0d
🏷️ Adds prop types to components
lissy93 Apr 25, 2026
9198d9d
🚨 Fixes ambiguous import warns from js-yaml
lissy93 Apr 25, 2026
09fd868
🚨 Fixes all remaining lint warnings
lissy93 Apr 25, 2026
7f79c72
➖ Removes vue modal, implements our own
lissy93 Apr 25, 2026
acbb069
🩹 Semver fix for update checker
lissy93 Apr 25, 2026
b84a9b5
✨ Adds debug view, removes about page
lissy93 Apr 25, 2026
7478129
✨ During UI edit, strip out empty/defaults before save
lissy93 Apr 25, 2026
7166ebd
🩹 Fix warnings from modal opening
lissy93 Apr 25, 2026
f9b80f7
🧪 Fix test for item link
lissy93 Apr 25, 2026
bddfb9f
📱 Responsive burger menu for mobile navbar
lissy93 Apr 26, 2026
8689a0e
✨ Confirm dialog, for confirmation before deletions
lissy93 Apr 26, 2026
9b06084
➖ Removes npm-run-all dep, and the build-and-start command
lissy93 Apr 26, 2026
abe85ef
🐳 Removes build requirement from Dockerfile
lissy93 Apr 26, 2026
1ed0363
💥 Removes legacy docker work-arounds
lissy93 Apr 26, 2026
c1ee134
✨ Upgrades Netlify to Node 24
lissy93 Apr 26, 2026
e1d5a2d
🐳 Docker ignore unnecessary meta files
lissy93 Apr 26, 2026
644b53e
💥 Removes legacy Heroku configs
lissy93 Apr 26, 2026
31a1431
🔧 Updates dev container versions and config
lissy93 Apr 26, 2026
ee099aa
💥 Removes all in-app rebuild functionality
lissy93 Apr 26, 2026
31a1cbf
🦖 Adds env var parsing for backward compatibility widget tokens
lissy93 Apr 26, 2026
c86bade
✨ Remote config preview
lissy93 Apr 26, 2026
0e99bbb
🔄️ Synced from master
lissy93 Apr 26, 2026
31481f8
🎨 Open section btn moved to section head
lissy93 Apr 26, 2026
d6aeae0
✨ Add/edit/remove widget through UI
lissy93 Apr 26, 2026
e604687
🦖 Placeholder/default conf.yml
lissy93 Apr 26, 2026
20277ad
🔖 Bump Dashy to 4.0.0
lissy93 Apr 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
36 changes: 29 additions & 7 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,25 @@
"name": "Dashy",
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
"image": "mcr.microsoft.com/devcontainers/javascript-node:1-24-bookworm",

"customizations": {
"vscode": {
"extensions": [
"Vue.volar",
"dbaeumer.vscode-eslint",
"ms-azuretools.vscode-docker",
"ms-azuretools.vscode-containers",
"EditorConfig.EditorConfig",
"esbenp.prettier-vscode",
"vitest.explorer",
"redhat.vscode-yaml"
]
],
"settings": {
"editor.formatOnSave": false,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
},
"eslint.validate": ["javascript", "vue"],
"files.eol": "\n"
}
}
},

Expand All @@ -23,11 +31,25 @@
"ghcr.io/devcontainers/features/github-cli:1": {}
},

// Make the dev server and production server ports available locally.
"forwardPorts": [8080, 4000],
// Ports to forward to the host (Codespaces / Dev Containers will surface these).
"forwardPorts": [8080, 4000, 4001],
"portsAttributes": {
"8080": {
"label": "Vite Dev Server",
"onAutoForward": "openPreview"
},
"4000": {
"label": "Dashy (Production)",
"onAutoForward": "notify"
},
"4001": {
"label": "Dashy (SSL)",
"onAutoForward": "silent"
}
},

// Use 'postCreateCommand' to run commands after the container is created.
"postCreateCommand": "yarn install --ignore-engines --network-timeout 300000"
// Runs once after the container is created, then VS Code attaches.
"postCreateCommand": "yarn install --network-timeout 600000"

// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
// "remoteUser": "root"
Expand Down
24 changes: 15 additions & 9 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
# Files specified here are not required for Docker
# so ignoring them helps to reduce the container size
# The Docker container MUST have the following files:
# package.json yarn.lock server.js vue.config.js src/ services/

node_modules
docs
.git
.github
# Files specified here are not required for Docker
# Excluding them helps keep the build context lite
node_modules
docs
tests
dist
.git
.github

# The only things needed to build the Dockerfile are:
# Depens: package.json, yarn.lock
# Setup: tsconfig.json, vite.config.mjs
# Client: index.html, src/, public/
# Server: services/, server.js
# Config: user-data/conf.yml
23 changes: 10 additions & 13 deletions .env
Original file line number Diff line number Diff line change
Expand Up @@ -37,23 +37,20 @@

# If using BASIC_AUTH above, set these to the same values to skip the browser auth prompt
# Requires a rebuild to take effect - only use on trusted networks
# VUE_APP_BASIC_AUTH_USERNAME=
# VUE_APP_BASIC_AUTH_PASSWORD=
# VITE_APP_BASIC_AUTH_USERNAME=
# VITE_APP_BASIC_AUTH_PASSWORD=

# Override where the path to the configuration file is, can be a remote URL
# VUE_APP_CONFIG_PATH=/conf.yml
# VITE_APP_CONFIG_PATH=/conf.yml

# Usually the same as BASE_URL, but accessible in frontend
# VUE_APP_DOMAIN=https://dashy.to
# VITE_APP_DOMAIN=https://dashy.to

# Override the page title for the frontend app
# VUE_APP_TITLE=''

# Set the default view to load on startup (can be `minimal`, `workspace` or `home`)
# VUE_APP_STARTING_VIEW=home
# VITE_APP_TITLE=''

# Set the Vue app routing mode (can be 'hash', 'history' or 'abstract')
# VUE_APP_ROUTING_MODE=history
# VITE_APP_ROUTING_MODE=history

# Should enable SRI for build script and link resources
# INTEGRITY=true
Expand All @@ -62,11 +59,11 @@
# IS_DOCKER=true

# Again, set automatically using package.json during build time
# VUE_APP_VERSION=2.0.0
# VITE_APP_VERSION=2.0.0

# Directory for conf.yml backups
# BACKUP_DIR=./user-data/config-backups

# Setup any other user defined vars by prepending VUE_APP_ to the var name
# VUE_APP_pihole_ip=http://your.pihole.ip
# VUE_APP_pihole_key=your_pihole_secret_key
# Setup any other user defined vars by prepending VITE_APP_ to the var name
# VITE_APP_pihole_ip=http://your.pihole.ip
# VITE_APP_pihole_key=your_pihole_secret_key
20 changes: 11 additions & 9 deletions .github/workflows/docker-build-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,13 +39,10 @@ jobs:
type=raw,value=latest
flavor: |
latest=false
labels: |
maintainer=Lissy93
org.opencontainers.image.title=Dashy
org.opencontainers.image.description=A self-hosted startpage for your server
org.opencontainers.image.documentation=https://dashy.to/docs
org.opencontainers.image.authors=Alicia Sykes
org.opencontainers.image.licenses=MIT

- name: ⏱️ Capture Build Timestamp
id: timestamp
run: echo "iso=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> "$GITHUB_OUTPUT"

- name: 🔧 Set up QEMU
uses: docker/setup-qemu-action@v4
Expand All @@ -71,12 +68,17 @@ jobs:
- name: 🚦 Check Registry Status
uses: crazy-max/ghaction-docker-status@v4

- name: ⚒️ Build and push
- name: ⚒️ Build and Push
uses: docker/build-push-action@v7
with:
context: .
file: ./Dockerfile
platforms: linux/amd64,linux/arm64,linux/arm/v7
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build-args: |
VERSION=${{ steps.meta.outputs.version }}
REVISION=${{ github.sha }}
CREATED=${{ steps.timestamp.outputs.iso }}
cache-from: type=gha
cache-to: type=gha,mode=max
push: true
21 changes: 19 additions & 2 deletions .github/workflows/pr-quality-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,25 @@ jobs:
- name: 🔍 Run ESLint
run: yarn lint

typecheck:
name: 🧷 Type Check
runs-on: ubuntu-latest
steps:
- name: 🛎️ Checkout Code
uses: actions/checkout@v6

- name: 🔧 Setup Node.js
uses: actions/setup-node@v6
with:
node-version: '20'
cache: 'yarn'

- name: 📦 Install Dependencies
run: yarn install --frozen-lockfile

- name: 🧷 Run vue-tsc
run: yarn typecheck

test:
name: 🧪 Run Tests
runs-on: ubuntu-latest
Expand Down Expand Up @@ -67,8 +86,6 @@ jobs:

- name: 🏗️ Build Project
run: yarn build
env:
NODE_OPTIONS: --openssl-legacy-provider

- name: ✅ Verify Build Output
run: |
Expand Down
2 changes: 0 additions & 2 deletions .github/workflows/update-docs-site.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,6 @@ jobs:

- name: Run script to update documentation 🪄
working-directory: website-docs
env:
NODE_OPTIONS: '--openssl-legacy-provider'
run: |
cp -r ../master-docs/docs ./
python ./do-doc-updaty-magic.py
Expand Down
29 changes: 0 additions & 29 deletions .gitpod.yml

This file was deleted.

29 changes: 29 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{
"version": "0.2.0",
"configurations": [
{
"type": "msedge",
"request": "launch",
"name": "dashy: edge",
"url": "http://localhost:8080",
"webRoot": "${workspaceFolder}/src",
"preLaunchTask": "dashy start"
},
{
"type": "chrome",
"request": "launch",
"name": "dashy: chrome",
"url": "http://localhost:8080",
"webRoot": "${workspaceFolder}/src",
"preLaunchTask": "dashy start"
},
{
"type": "firefox",
"request": "launch",
"name": "dashy: firefox",
"url": "http://localhost:8080",
"webRoot": "${workspaceFolder}/src",
"preLaunchTask": "dashy start"
}
]
}
1 change: 0 additions & 1 deletion .yarnrc

This file was deleted.

114 changes: 63 additions & 51 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,51 +1,63 @@
FROM node:18.19.1-alpine AS build

# Set the platform to build image for
ARG TARGETPLATFORM
ENV TARGETPLATFORM=${TARGETPLATFORM:-linux/amd64}

# Install additional tools needed if on arm64 / armv7
RUN \
case "${TARGETPLATFORM}" in \
'linux/arm64') apk add --no-cache python3 make g++ ;; \
'linux/arm/v7') apk add --no-cache python3 make g++ ;; \
esac

# Create and set the working directory
WORKDIR /app

# Install app dependencies
COPY package.json yarn.lock ./
RUN yarn install --ignore-engines --immutable --no-cache --network-timeout 300000 --network-concurrency 1

# Copy over all project files and folders to the working directory
COPY . ./

# Build initial app for production
RUN yarn build --mode production --no-clean

# Production stage
FROM node:20.11.1-alpine3.19

# Define some ENV Vars
ENV PORT=8080 \
DIRECTORY=/app \
IS_DOCKER=true

# Create and set the working directory
WORKDIR ${DIRECTORY}

# Update tzdata for setting timezone
RUN apk add --no-cache tzdata

# Copy built application from build phase
COPY --from=build /app ./

# Finally, run start command to serve up the built application
CMD [ "yarn", "build-and-start" ]

# Expose the port
EXPOSE ${PORT}

# Run simple healthchecks every 5 mins, to check that everythings still great
HEALTHCHECK --interval=5m --timeout=5s --start-period=30s CMD yarn health-check
FROM node:24-alpine AS build

WORKDIR /app

COPY package.json yarn.lock ./
RUN yarn install --frozen-lockfile --network-timeout 600000

COPY . .
RUN yarn build

FROM node:24-alpine AS deps

WORKDIR /app

COPY package.json yarn.lock ./
RUN yarn install --production --frozen-lockfile --network-timeout 600000 \
&& yarn cache clean

FROM node:24-alpine

ARG VERSION=dev
ARG REVISION
ARG CREATED

LABEL org.opencontainers.image.title="Dashy" \
org.opencontainers.image.description="The self-hosted dashboard" \
org.opencontainers.image.url="https://dashy.to" \
org.opencontainers.image.documentation="https://dashy.to/docs" \
org.opencontainers.image.source="https://github.com/lissy93/dashy" \
org.opencontainers.image.licenses="MIT" \
org.opencontainers.image.authors="Alicia Sykes <alicia@omg.lol>" \
org.opencontainers.image.vendor="Alicia Sykes" \
org.opencontainers.image.version="${VERSION}" \
org.opencontainers.image.revision="${REVISION}" \
org.opencontainers.image.created="${CREATED}"

ENV NODE_ENV=production \
IS_DOCKER=true \
PORT=8080 \
HOST=0.0.0.0

WORKDIR /app

RUN apk add --no-cache tzdata tini

COPY --chown=node:node --from=deps /app/node_modules ./node_modules
COPY --chown=node:node --from=build /app/dist ./dist
COPY --chown=node:node --from=build /app/public ./public
COPY --chown=node:node --from=build /app/services ./services
COPY --chown=node:node --from=build /app/src/utils/config/ConfigSchema.json ./src/utils/config/ConfigSchema.json
COPY --chown=node:node --from=build /app/server.js ./server.js
COPY --chown=node:node --from=build /app/package.json ./package.json
COPY --chown=node:node --from=build /app/user-data/conf.yml ./user-data/conf.yml

USER node

EXPOSE 8080

HEALTHCHECK --interval=5m --timeout=10s --start-period=20s --retries=3 \
CMD node services/healthcheck.js

ENTRYPOINT ["/sbin/tini", "--"]
CMD ["node", "server.js"]
1 change: 0 additions & 1 deletion Procfile

This file was deleted.

Loading