TreeMap
무료 오픈소스 디스크 사용량 시각화 도구로, 사각형 트리맵·중복 파일 탐색·디스크 가득 예측·정리 시 파일을 휴지통으로만 이동한다
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
🇨🇳 本应用支持简体中文。 nextDash 的界面提供中文语言选项 — 在设置中将语言切换为「中文」即可。 A keyboard-first, self-hosted bookmark dashboard. No accounts, no cloud, no noise. My bookmark bar had become a graveyard, so I built a self-hosted dashboard that tells me which links are already dead.README 전문 보기 ↗
🇨🇳 本应用支持简体中文。 nextDash 的界面提供中文语言选项 — 在设置中将语言切换为「中文」即可。
A keyboard-first, self-hosted bookmark dashboard. No accounts, no cloud, no noise.
My bookmark bar had become a graveyard, so I built a self-hosted dashboard that tells me which links are already dead.
Run it on any machine or container, open it in your browser, organise bookmarks across pages, and reach everything from the keyboard. Beside your bookmarks, widgets show what is going on: uptime of the services you watch, what waits in the inbox, which certificate runs out, the weather, your calendar, your feeds, your machines — and any self-hosted service that answers with JSON.
🎨 384 themes and a theme studio. 192 theme families, each with a light and a dark half, drawn from twelve materials — lacquer, glass, frost, aurora, neon, velvet, enamel, brushed metal, carbon, paper, terminal and ink — and from three collections: eight neutrals, the Looks and ThinkDashboard Classic. Aurora Glass is the default, and every material draws its own surface, category header and widget header, as a signature or in the flat Classic way. Shift + A opens the theme studio beside your dashboard and changes the real page as you go: the theme, 75 backdrops with a quiet centre behind the bookmarks, depth, glow and card glass, the category headers, the type and the contrast — or one of twelve ready-made looks that set them all at once. Compare shows what you had, 🎲 tries something at random, and nothing is saved until Apply. Search by name or material, keep up to 24 favourites, follow your system's light and dark mode, or recolour any theme and build your own in the theme editor. Manual: The new look · Manual: Appearance
Based on ThinkDashboard by MatiasDesuu.
📖 User manual (MANUAL.md) — how everything works, from the first launch to self-hosting. · Glossary
📋 Changelog (CHANGELOG.md) — every release, new and fix.
🗂️ Cheat sheet — every keyboard shortcut, printable (HTML). Press ! or F1 on the dashboard for the live list. Regenerate with npm run generate:cheatsheet.
🌐 Website: nextdash.cc
🌐 Dev log: www.jordibrw.nl
🌐 Demo: demo.nextdash.cc
🧩 Save a link from anywhere: a browser extension, a share sheet, a bookmarklet, a shell one-liner, Raycast, Dropzone 5, Alfred, Apple Shortcuts and Ulauncher — see What nextDash talks to.
nextDash is a bookmark dashboard that also knows your Docker host. The link to Sonarr, the Sonarr container and the check that watches it are one thing, not three tabs in three different tools.
How it fits together
Shift + Y, #docker) lists every container on the host: a status glow, CPU, RAM, size on disk, ports, its web UI, healthcheck results and a timeline of what happened to it. Start, stop, restart, update, roll back or follow its logs from the keyboard, one container, a compose stack or a whole selection at a time.:docker sonarr open.Keeping it current and tidy. Image update checks run on an interval and show the release notes behind an update. Skip a version, hold a container, or let nextDash update it in a nightly window: each update is watched for five minutes and rolled back when the container stops, loops or turns unhealthy. The Disk tab shows what images, volumes, build cache and bind mounts take up, and clears it after naming what goes.
On the dashboard. A homelab page can carry the Containers and Container list widgets, Uptime, Certificates, Health, Processor, Memory and Disks, seven Unraid widgets (overview, array, parity, shares, VMs, UPS and notifications) that read the server through its API, media widgets for Jellyfin, Emby, Plex, Sonarr, Radarr, Seerr, qBittorrent and SABnzbd — what was added, who is watching, what is coming, what was requested and what is downloading, with the posters from your own library — a Home Assistant widget that switches lights, switches and scenes from the page, four Beszel widgets that show how your other machines are doing, and a Custom widget that reads Sonarr, Plex, Pi-hole, Proxmox, Home Assistant and 36 more services — next to the bookmarks for all of them.
📖 Self-hosted guide in the manual — the set-up in four steps, how the pieces link up, and a morning routine. Setting up the Docker socket is under Containers view below.
services:
nextDash:
image: ghcr.io/jordibrouwer/nextdash:latest
container_name: nextDash
ports:
- "8080:8080"
volumes:
- ./data:/app/data
environment:
- PORT=8080
# On a LAN or VPS, require a token for every write (see Security):
# - NEXTDASH_WRITE_TOKEN=change-me-to-a-long-random-string
restart: unless-stopped
docker compose up -d
Open http://localhost:8080.
From a git checkout: docker-compose.prod.yml is for production (only ./data is mounted; CSS and JavaScript are built into the image). docker-compose.yml is for development (it mounts ./static, ./locales and ./templates, with Docker actions and root off and the socket commented out). Put your own mounts and variables in docker-compose.override.yml; Compose reads it automatically.
docker compose -f docker-compose.prod.yml up -d --build
go build -o nextDash && ./nextDash
Data is stored in ./data. NEXTDASH_DATA_DIR moves it.
The Processor, Memory, Disks, Containers and Container list widgets report on the machine nextDash runs on. The binary needs no setup; a container needs read-only mounts:
volumes:
- ./data:/app/data
- /mnt:/host/root/mnt:ro,rslave # Disks: required
# - /proc:/host/proc:ro # Processor, Memory: optional
# - /var/run/docker.sock:/var/run/docker.sock:ro # Containers: a real grant
environment:
- NEXTDASH_HOST_ROOT=/host/root
# - NEXTDASH_HOST_PROC=/host/proc
# - NEXTDASH_DOCKER_SOCKET=/var/run/docker.sock
# - NEXTDASH_DOCKER_CONTROL=1 # Containers: start/stop/update/remove
[!IMPORTANT] The Containers view needs three settings before it does anything — and one more on some hosts.
- The Docker socket. Mount
/var/run/docker.sockand setNEXTDASH_DOCKER_SOCKET=/var/run/docker.sock. Without both, the view shows a setup card and the Containers widget stays hidden. Read-only (:ro) is enough to look.- Actions:
NEXTDASH_DOCKER_CONTROL=1. Start, stop, pause, restart, update and remove need it. Without it the view only reads.- A write token, and a gate in front:
NEXTDASH_WRITE_TOKEN. Access to the socket is root on the host —:roon the mount does not stop the Docker API from accepting writes. The token stops other websites and scripts that do not know it. It is not a login: the dashboard hands it to every browser that opens the page. Set one, and keep nextDash behind Tailscale or a reverse proxy with authentication — with actions on, anyone who can open the dashboard can stop, update or remove your containers.- Sometimes:
NEXTDASH_RUN_AS_ROOT=1. The container starts as root, then drops to its ownnextdashuser, which joins the group the socket belongs to (docker, gid 281 on Unraid). When the socket belongs to root's group (gid 0) — Docker Desktop, some NAS systems — that user cannot read it: the log saysis owned by gid 0and Config → Containers shows No access to the socket.NEXTDASH_RUN_AS_ROOT=1keeps the app running as root so it can. Only set it then.
Docker Compose — add to the nextDash service:
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
- NEXTDASH_DOCKER_SOCKET=/var/run/docker.sock
- NEXTDASH_DOCKER_CONTROL=1 # start/stop/restart/update/remove
- NEXTDASH_WRITE_TOKEN=change-me-to-a-long-random-string
# - NEXTDASH_RUN_AS_ROOT=1 # only if the log says "owned by gid 0"
Unraid — Docker → nextDash → Edit:
/var/run/docker.sock), Docker socket variable (/var/run/docker.sock) and Write token.1 (it starts at 0).docker group, so leave Run as root at 0.Once it runs, the #docker view lists every container with a status glow, CPU and RAM and a link to its web UI, a side panel with health, a timeline, logs, an hour of CPU and memory charts and release notes, a logs window, a Disk tab, and a badge for images with an update waiting. Config → Containers shows the connection as the server sees it — socket, actions, write token, its own container — and holds the update checks and an optional GitHub token. The manual has the details, including Synology and QNAP.
nextDash reads an Unraid server through its own API (Unraid 7.2, or an older Unraid with the Unraid Connect plugin):
More is on the way: deeper Unraid integration is being worked on for future versions of nextDash. Manual: Unraid
nextDash is built for personal or small-team use on a trusted network. There are no user accounts: anyone who can reach the address can read and change the data unless you put something in front of it.
Do not expose nextDash directly to the internet. Use one of these:
127.0.0.1 and use an SSH tunnel.The short version is below; MANUAL § 23 has the details.
NEXTDASH_WRITE_TOKEN and every write or destructive API call needs the header X-NextDash-Token. The dashboard supplies it for you, which means the page hands it to every browser that opens it. So the token keeps out other websites (a page that fires requests at your network) and scripts that only know the address — not someone who can open the dashboard. Keeping those out is the job of the network or proxy above. Use a long random string, such as openssl rand -hex 32; the server warns at startup when a token is short or still the example value. The capture routes (/add and the share target) cannot send a header; give them NEXTDASH_CAPTURE_TOKEN, which opens capture and nothing else.NEXTDASH_CORS_ORIGINS allows pages of your own; * allows every origin.NEXTDASH_ACTIVITY_LOG. URLs and searches can appear in it, so treat the files as private.NEXTDASH_DOCKER_CONTROL=1 plus the write token when one is set; reading the container list and running an update check need only the socket.docker-compose.prod.yml serves CSS and JavaScript from the binary, mounts only ./data, and sets a 256 MB memory limit. The entrypoint starts as root so host Docker hooks can run, then switches to the nextdash user (NEXTDASH_RUN_AS_ROOT=1 keeps root). For TLS and long-cache static serving, run docker compose -f docker-compose.proxy.yml up -d with deploy/Caddyfile.
Recommended LAN/VPS environment:
environment:
- PORT=8080
- NEXTDASH_WRITE_TOKEN=change-me-to-a-long-random-string
- NEXTDASH_CORS_ORIGINS=https://dash.example.com
- NEXTDASH_ACTIVITY_LOG=mutate,status,security
- NEXTDASH_ACTIVITY_LOG_PERSIST=1
# Capture from a bookmarklet, share sheet or script without the write token:
# - NEXTDASH_CAPTURE_TOKEN=a-second-long-random-string
# Automatic backups:
# - NEXTDASH_AUTO_BACKUP_KEEP=7
# - NEXTDASH_AUTO_BACKUP_DIR=/backups # mount a volume there
# Logging:
# - NEXTDASH_LOG_LEVEL=warn
# - NEXTDASH_ACTIVITY_LOG_FORMAT=json # for Loki or Vector
# - NEXTDASH_ACTIVITY_LOG_URLS=host
# - NEXTDASH_ACTIVITY_LOG_MAX_AGE_DAYS=30
# System widgets (see Quick Start):
# - NEXTDASH_HOST_ROOT=/host/root
# - NEXTDASH_DOCKER_SOCKET=/var/run/docker.sock
# - NEXTDASH_DOCKER_CONTROL=1
# Rate limits and headers:
# - NEXTDASH_OUTBOUND_REQUESTS_PER_MIN=120
# - NEXTDASH_SSRF_API_RATE_PER_MIN=60
# - NEXTDASH_STATUS_PING_RATE_PER_MIN=300
# - NEXTDASH_TRUSTED_PROXIES=10.0.0.0/8
# - NEXTDASH_CSP=off
# For everyone on this server:
# - DISABLE_TELEMETRY=true
# - DISABLE_UPDATE_CHECK=true
# - DISABLE_NEWS_FEED=true
Every variable is listed in the reference table below.
GET /version returns the version and commit. GET /api/data-revision returns a hash, so open dashboard tabs notice changes made elsewhere.
| Variable | Default | Purpose |
|---|---|---|
PORT | 8080 | HTTP port (1–65535) |
NEXTDASH_DATA_DIR | ./data | Where pages, bookmarks, settings and uploads live |
NEXTDASH_WRITE_TOKEN | (unset) | Require X-NextDash-Token on writes |
NEXTDASH_ALLOWED_HOSTS | (unset) | With a write token set: extra host names the dashboard may be opened by, comma-separated (*.example.com allowed, * turns the check off). IPs, localhost and private names (.local, .lan, .ts.net, no dots) always pass |
NEXTDASH_CAPTURE_TOKEN | (unset) | A token that opens only /add and the share target |
NEXTDASH_CORS_ORIGINS | (unset) | Extra origins allowed to use the API, comma-separated; * for all. Extensions are always allowed. |
NEXTDASH_CSP | on | off disables the Content-Security-Policy header |
NEXTDASH_OUTBOUND_REQUESTS_PER_MIN | 120 | Rate limit for requests the server makes for you |
NEXTDASH_SSRF_API_RATE_PER_MIN | 60 | Rate limit for the preview, icon, archive, check-URL and alert-test APIs |
NEXTDASH_STATUS_PING_RATE_PER_MIN | 300 | Rate limit for /api/ping, the status checks the dashboard runs in your browser |
NEXTDASH_TRUSTED_PROXIES | (unset) | Addresses and CIDR ranges whose X-Forwarded-For is believed, comma-separated. Unset, the header is ignored and rate limits count per connecting address. |
NEXTDASH_AUTO_BACKUP_KEEP | 3 | How many automatic backups are kept (1–50) |
NEXTDASH_AUTO_BACKUP_DIR | data/auto-backups |
Each line links to the part of the manual that explains it.
Bookmarks and pages
Shift + M (or the pencil in the action bar, or Edit in panel… in a category's or widget's menu) puts an outline on every block, a click chooses one, and a panel beside the page edits its name, icon, width, view and sorting, a widget's settings included. Double-click a title to rename it. Manual §4Shift + J) to open a bookmark on your phone. Manual §6, §10/) and a tag view per tag: every bookmark with that tag from every page in one table, with related tags, bulk actions, and rename, merge or remove for the tag. Manual §10Search and keyboard
!. Manual §7Shift + Z switches it off), a dashboard tour of ten steps plays again with Shift + K, a four-step keyboard tour with :tour keyboard, and after an update the What's new window gives the main change of a release a spotlight. Manual §7→ on a result unfolds what you can do with it: open, open in a new tab, edit, copy the address, show in the list, move. Manual §8Health and monitoring
:checkup. Manual §12Widgets
Containers and your homelab
#docker, Shift + Y) for everything on the host: a status glow that is red only for a failure, links that grey out for a container that is not running, sortable columns with CPU, RAM and each container's size on disk, group by status or compose project, a web UI column, and a side panel with health checks, a timeline of what happened, stats, an hour of CPU and memory charts and environment. Give any container a web UI address of your own; the list, the widget and :docker <name> open all use it. Containers viewShift + G) for the machines you run Glances 4 on: processor, memory, disks, processes and containers now, and a record of its own — thirty days of graphs, incidents drawn as red bands, a forecast for disks that fill up, a comparison with last week, and Insights that answer from the record — a health score, a typical day, the load against the cores, where the memory goes and who used the most, with an info button on every block. Up to five hosts, a widget for the dashboard, notices through your alert channels, and a link both ways with the Containers view, which can read its CPU, memory and network from Glances. nextDash only reads. Manual §15ANEXTDASH_DOCKER_CONTROL and the write token; set it all under Config → Containers. Containers viewAppearance
Data
Self-hosting
extension/) — saves the current tab to a page or to the inbox. Open chrome://extensions/, switch on Developer mode, click Load unpacked and choose the extension/ folder. Manual §21GET /add?url=…&title=… saves to the inbox and answers with a readable page, so anything that can open a URL or run curl can save to nextDash. Manual §21.2integrations/ — a shell one-liner, two Raycast commands, a Dropzone 5 action, a Ulauncher extension, and recipes for Alfred and Apple Shortcuts, all built on that route. The Dropzone 5 action also has its own repository. integrations/README.mdIssues and pull requests are welcome — bugs, features and translations alike.
| Branch | Purpose |
|---|---|
dev | Day-to-day development (tests, CI, scripts) |
main | The published release, for Docker and the public repository page |
Branch from dev and open pull requests into dev.
CI runs on pushes and pull requests to dev.
When a release is ready, merge dev → main with:
git checkout dev
./scripts/release-to-main.sh v1.11.0
The script merges, removes development-only files from main (tests, Playwright, internal scripts), tags the release, pushes, and publishes a GitHub Release with gh. One-time setup: brew install gh and gh auth login.
Do not merge dev into main by hand on GitHub.
Clone for development: git clone, then git checkout dev.
Clone for Docker or stable use: stay on the default main branch.
MIT
| Where automatic backups are stored (absolute path) |
NEXTDASH_LOG_LEVEL | info | error, warn, info or debug. Detail level in the app wins. |
NEXTDASH_ACTIVITY_LOG | mutate,status | off, or channels: mutate, status, open, security, health, sources, feeds, archive, backup, store, widgets, notify, search, keys, nav, session, clienterror. Activity trail in the app wins. |
NEXTDASH_ACTIVITY_LOG_PERSIST | off | 1 writes a rotating activity.log in the data directory |
NEXTDASH_ACTIVITY_LOG_FILE | data/activity.log | Another path for that file |
NEXTDASH_ACTIVITY_LOG_FORMAT | text | text (a readable sentence) or json on stdout, for Loki or Vector |
NEXTDASH_ACTIVITY_LOG_URLS | full | full, host or off — how URLs and search text appear in the trail |
NEXTDASH_ACTIVITY_LOG_SAMPLE | (unset) | Sampling per channel, e.g. open=0.1,keys=0.25 |
NEXTDASH_ACTIVITY_LOG_MAX_AGE_DAYS | 0 (off) | Delete rotated activity.log.N files older than this |
NEXTDASH_ACTIVITY_OPEN_DETAIL | basic | off, basic or full — what a bookmark-open record holds. Open detail in the app wins. |
NEXTDASH_HOST_ROOT | (unset) | Prefix the host's disks are mounted under, for the Disks widget |
NEXTDASH_HOST_PROC | /proc | The host's /proc, for Processor and Memory |
NEXTDASH_DOCKER_SOCKET | (unset) | The Docker socket, for the Containers widget and view; unset hides the widget |
NEXTDASH_DOCKER_CONTROL | off | 1 allows start, stop, pause, restart, update and remove in the Containers view |
NEXTDASH_DISABLE_PREFETCH | off | 1 skips the icon prefetch at start-up |
NEXTDASH_DEMO | off | 1 turns the instance into a public demo: seeded data that resets itself. It empties NEXTDASH_DATA_DIR on every start and reset, so it needs a directory of its own and refuses one with a real install. Never set it on your own install. See deploy/demo/docker-compose.yml |
NEXTDASH_DEMO_RESET_MINUTES | 30 | Demo only: minutes between resets |
NEXTDASH_DEMO_IDLE_MINUTES | 10 | Demo only: reset this many minutes after the last change |
NEXTDASH_DEMO_ANALYTICS_ID | unset | Demo only: the Umami website id the demo counts its visits into, separate from every install's count. Unset, the demo counts nothing. Ignored outside the demo |
NEXTDASH_RUN_AS_ROOT | off | 1 keeps the container running as root |
NEXTDASH_BUNDLE | on | off serves scripts and stylesheets one by one, for debugging |
NEXTDASH_STATIC_MUTABLE | off | 1 re-hashes assets on every request, for a bind-mounted ./static |
DISABLE_ICON_SETS | off | 1 stops fetching the app icon sets (dashboard-icons, selfh.st/icons) from jsDelivr |
DISABLE_TELEMETRY | off | true turns analytics and the daily install count off for everyone |
NEXTDASH_DISABLE_INSTALL_PING | off | 1 turns the daily install count off and leaves analytics alone, for test runs and CI |
DISABLE_UPDATE_CHECK | off | true turns the daily GitHub release check off for everyone |
DISABLE_NEWS_FEED | off | true stops fetching posts from nextdash.cc |
nextdash.url and nextdash.hide=true steer it. Manual §14.10DISABLE_TELEMETRY), a daily check on GitHub for a newer release (DISABLE_UPDATE_CHECK), and the nextdash.cc news feed, every 90 minutes (DISABLE_NEWS_FEED). None of them carries bookmarks, settings or addresses. The optional usage analytics (off until you turn them on) add a random install code, and send a hostname of just lan, domain or localhost instead of your address. Manual §23.7/proc, the disks you name and optionally the Docker socket, read-only unless you set NEXTDASH_DOCKER_CONTROL=1, which also uses the socket to write. Update checks reach the image registries, and optionally GitHub. Manual §15.4