I've been self hosting for a while but did not find a dashboard that suits my needs and that I like the look of. This is my attempt to solving that.
Disclaimer: This project is being rewritten. If you want a stable version, use the legacy compose instead. Not every feature of the legacy version has been ported to the new one
Use of AI: The development of this project is AI-Assisted by using it as a tool - not as a substitute for real programming skills.
- GUI Editing: Edit and manage links, search engines, your wallpapers in settings via the GUI instead of relying purely on a config.
- Built-in Authentication: dashwise has Auth built right into it - and even features
- SSO via OIDC: While tested with PocketId, it should work via OIDC - which can be configured in Pocketbase directly.
- Links: store your most important links for quick access and group them into Link Groups and Folders coming. Links can also be monitored with downtime being logged.
- Glanceables: Customizable bits of one-line information next to the clock.
- Widgets: Modular blocks on the dashboard that show key info or actions at a glance. They can be moved and customized individually.
- News: Subscribe to RSS feeds to stay on top of everything.
- Notfications: Dashwise can receive notifications via PUSH requests to /api/v1/notifications/TOPIC-NAME
- Wallpapers: Upload them to dashwise directly, or even change the default one for new users by mounting one into the container
- Spotlight-like Search: Hit Ctrl+K from your dashboard, and you'll be able to search your links and integrations or use bangs for search engines specified in settings.
- Integrations: directly integrates with your favourite self hosted apps. Supported services are Karakeep, Dashdot, Beszel and Jellyfin. More integrations are planned
For production depolyments, use the docker-compose.yaml (image is currently only built for arm, will change later).
For local development, install dependencies and start the workspace scripts:
bun install
bun run devThe PocketBase backend can be either run using the aio container (default method) or connected to an external database (not recommended, migrations may fail)
You can use the following environment variables for the all-in-one container - default values will also work:
| Name | Required | Default Value | Description |
|---|---|---|---|
| INSTANCE_NAME / NEXT_PUBLIC_INSTANCE_NAME | No | Dashwise | The dashboard's display name |
| PB_URL / NEXT_PUBLIC_PB_URL | No (if start pocketbase is true) | http://127.0.0.1:8090 |
PocketBase URL. Backend uses PB_URL, frontend uses NEXT_PUBLIC_PB_URL |
| START_POCKETBASE | No | true |
Start the bundled PocketBase process; set to false to use an external instance |
| PB_BINARY_PATH | No | - | Path to PocketBase binary (default: pocketbase/pocketbase) |
| PORT | No | 3000 |
HTTP port for the backend server |
| Name | Required | Default Value | Description |
|---|---|---|---|
| PB_ADMIN_EMAIL | Yes | default@dashwise.local |
Email of the PocketBase admin user |
| PB_ADMIN_PASSWORD | Yes | DashwiseIsAwesome |
Password of the PocketBase admin user |
| Name | Required | Default Value | Description |
|---|---|---|---|
| NEXT_PUBLIC_APP_URL / APP_BASE_URL | No | http://localhost:3000 |
Public URL of the application |
| NEXT_PUBLIC_BACKEND_URL | No | - | Backend URL for frontend API calls (fallback: window.location.origin in production) |
| DASHWISE_URL | No | - | Internal Dashwise URL for jobs container communication |
| Name | Required | Default Value | Description |
|---|---|---|---|
| NEXT_PUBLIC_DEFAULT_BG_URL / DEFAULT_BG_URL | No | /dashboard-wallpaper.png |
Default background URL for new users |
| NEXT_PUBLIC_ENABLE_SSO / ENABLE_SSO | No | false |
Enable Single Sign-On (SSO) via OIDC |
| NEXT_PUBLIC_DISABLE_USER_SIGNUP / DISABLE_USER_SIGNUP | No | false |
Disable user self-registration |
| Name | Required | Default Value | Description |
|---|---|---|---|
| NEXT_PUBLIC_INTEGRATIONS_ENABLE_SSL / ALLOW_INSECURE_CERTS_FOR_INTEGRATION_URLS | No | false |
Allow insecure SSL certificates for integration URLs |
| ALLOW_SSL | No | false |
Enable SSL for internal service communication |
| LOG_LEVEL / BACKEND_LOG_LEVEL | No | - | Backend log level (debug, info, warn, error) |
| Name | Required | Default Value | Description |
|---|---|---|---|
| JOBS_URL / NEXT_PUBLIC_JOBS_URL | No | http://127.0.0.1:3001 |
URL of the jobs service |
| JOBS_WEBHOOK_ENABLE / NEXT_PUBLIC_JOBS_WEBHOOK_ENABLE | No | false |
Explicitly enable the jobs webhook. Set to 1 or true to force-enable |
| JOBS_WEBHOOK_URL | No | http://jobs:3000/api/forward-notifications |
Webhook URL for forwarding notifications to jobs |
| JOBS_MONITORING_RETRY_AFTER | No | 5000 |
Time in milliseconds to wait before retrying a failed monitoring ping |
| Name | Required | Default Value | Description |
|---|---|---|---|
| SEARCHITEMS_SCHEDULE | No | */10 * * * * |
Interval for search item indexing job |
| ENABLE_ICONS_REFRESH | No | false |
Enable automatic icon refresh job |
| PULL_ICONS_SCHEDULE | No | 0 */6 * * * |
How often the icons refresh job runs |
| MONITORING_INDEXER_SCHEDULE | No | */10 * * * * |
How often the monitoring indexer runs |
| MONITORING_RUNNER_SCHEDULE | No | */1 * * * * |
How often the monitoring runner executes |
| UPDATE_CHECK_SCHEDULE | No | 0 2 * * * |
Schedule for update check job |
| FEED_BUILDING_SCHEDULE | No | */30 * * * * |
Schedule for news feed building job |
| NOTIFICATION_FORWARDER_SCHEDULE | No | * * * * * |
Schedule for notification forwarder job |
| DEFAULT_INTEGRATIONS_SCHEDULE | No | 0 4 * * * |
Schedule for default integrations sync |
| PAGECONFIG_CLEANUP_SCHEDULE | No | 0 5 * * * |
Schedule for page config cleanup |
| MONITORING_OUTLIER_THRESHOLD_TYPE | No | relative |
Threshold type for monitoring outliers (absolute or relative) |
| MONITORING_OUTLIER_THRESHOLD_VALUE | No | 50 |
Threshold value for monitoring outliers |
Frontend: React SPA bundled with Bun API Layer: Bun with Hono Backend: Pocketbase
Each user has page-based config records in pageConfig (for example home, news, lab) plus user-level preferences.
The frontend reads and refreshes page config through the usePageConfig hook.
Selfh.st icons, Font Awesome, Bun, React, Shadcn
Feel free to contribute! I'll probably create a more detailed roadmap soon.
Refer to docs/integrations.md for more