github jordibrouwer/nextdash v1.7.0

3 hours ago

Dashboard

  • new — icon-only action buttons (category ⋯, sort chip, config row icons, and the bottom dock's / > : ? * . ! buttons) restyled for the newer themes: borderless, soft filled, circular where the content is a single glyph. New static/css/action-btn-tokens.css defines --action-btn-bg / -bg-hover / -color / -shadow from the same color-mix()-against---text-primary formula theme-depth.css already uses for --hairline, so every theme gets the new look with no per-theme override. Full-word buttons (Quickstart, page tabs, Settings/Delete rows) are untouched.
  • new — a Lock layout setting (Config → Behavior → General, and :lock-layout / :locklayout in the command palette) turns off drag-and-drop reordering for both bookmarks within a category and categories on the grid. Reuses the existing sort-locked drag hint (attachSortLockedDragHint in dashboard-render-core.js) with its own wording instead of a second hint mechanism, and marks the category grid's drag handle with a plain cursor via a new body.layout-locked class. Sorting, adding, renaming, and deleting are unaffected — this only gates the drag gesture. The checkbox carries a small "New" badge (config-field-badge, a generic property any control can now set) so it stands out on the tab.
  • new — a Weather widget: current conditions beside a forecast, in its own "What's happening around you?" group in the widget catalogue. Reuses the location, source and unit already set for the header's own weather line (Behavior → Date & weather) rather than asking a second time — the widget's own settings hold only a Forecast range choice (3 days / 5 days / 24 hours), with a hint pointing back to where the location lives. static/js/weather.js gained fetchForecast, one Open-Meteo request carrying both current and daily/hourly rather than two round trips, cached in localStorage alongside the header's own reading. Polls on the same 30-minute cadence as the header line (weather entry in POLLED_WIDGET_TYPES, dashboard-render-core.js) rather than a setting of its own.
  • new — a Calendar widget, beside Weather in the same "What's happening around you?" group: what is coming up, from one ICS feed set for the whole install (Behavior → Date & weather → Calendar feed URL, separate from the existing outbound calendar link). Fetched and parsed server-side (internal/app/widgets_calendar.go) rather than in the browser, the same reasoning as the custom widget: most providers hand out a private feed address that is not meant for cross-origin JS, and it is not a thing to leave sitting in a script. A hand-rolled parser reads SUMMARY/DTSTART/DTEND, unfolds RFC 5545 line folding, and reads VALUE=DATE and TZID — recurring events (RRULE) show their own stated occurrence rather than being expanded, a deliberate v1 limit. One feed cache shared by every calendar widget (15-minute TTL, GET /api/widgets/calendar?pageId=&id=), each widget narrowing it to its own Look-ahead-days and row count. Reuses the existing .dashboard-widget-rows row styling — no new CSS. A saved widget setting or a changed feed URL redraws the tile immediately — forgetWidgetCaches (dashboard-render-core.js) now drops the calendar tile's own client cache too, and calendarIcsUrl gets its own branch in setBehavior's datetime handling (dashboard-config.js), the same shape the weather fields already use.

Config

  • new — Hypr mode moved out of the General checkbox list into its own titled section, directly under Onboarding, with a full explanation of what it does. It was easy to mistake for the "Open links in a new tab" checkbox above it when it was just another one-line label + info icon.

Command palette

  • new — a typed setting command now marks its current value visually, not just in the row text. Every toggle (:animations, :lock-layout, …) and every multi-choice command (:density, :columns, :theme, …) paints its current-value row with a soft accent tint and a small "current" pill, on top of the existing "(current)"/"✓" text. Comes from two shared helpers — _buildOnOffRows/_handleSimpleToggle and the new _markCurrentRow (replacing _markCurrent, spread into the row instead of just naming it) in search-commands.js — so every command built on them picked it up in one pass rather than a per-command edit. The list already re-renders in place after a change (_paletteRefreshrefreshCommandPaletteInPlace), so the highlight moves with it live.

Docs

  • new — the manual and the in-app Help cover the Weather and Calendar widgets, Lock layout, and the Calendar feed URL. MANUAL.md gains a "What's happening around you?" table beside the other widget groups (nineteen types now, not seventeen), Lock layout notes under Reorder bookmarks and Reorder categories, a :lock-layout row in the command table, a "Calendar widget shows nothing" entry under troubleshooting, and a header note keeping Calendar URL (the outbound link) apart from Calendar feed URL (what the widget reads). Help's widget catalogue, Behavior tour and widget intro say the same in all five locales — de, fr and zh were still missing the system-widget group as well, so their kind counts were wrong before this and are right now.
  • Release plumbing for v1.7.0. New static/data/whats-new/v1.7.0.json, entry added first in index.json, both tokens in whats-new-stub.js moved (DASHBOARD_RELEASE to 2026.09-dashboard-release-v1.7.0, NEXTDASH_WHATS_NEW_DATA_VERSION to whats-new-v280), helpVersionBody rewritten for this release in all five locales, three spotlight entries with since: "v1.7.0" in static/data/overview-features.json for Config → Overview and About → News & features, two new Help tips, and tests/whats-new-hidden-release.spec.js rewritten around the new state.
  • hideFromModal cleared on v1.6.1 and v1.6.2. They were held back so they would not displace v1.6.0 in front of readers who had already seen it. v1.7.0 leads the modal now, so both are ordinary entries again and a reader scrolling back finds no version missing between two that are there.

Don't miss a new nextdash release

NewReleases is sending notifications on new releases.