nextDash 1.2.0 is already out! It is the keyboard release — typing on the dashboard now does only what you meant it to — and it is the release where three views stop claiming to know more than they do: the inbox was counting links it was not showing you, and a failed health check worked out exactly why it had failed and then threw that away. And this morning, 1.2.1 followed with a single fix in Health, which is covered at the end.
Source and downloads: github.com/jordibrouwer/nextdash — release notes: CHANGELOG.md
nextDash 1.2.0 — 16 August 2026
What you type arrives whole
This is the fix that matters most, and it is worth explaining properly, because the old behaviour was subtly worse than it looked. Bookmark shortcuts fired the moment the typed text matched one exactly. Type github with a shortcut on git and the bookmark opened after three letters, leaving hub behind in the box. Which of your words survived being typed therefore depended entirely on which other bookmarks you happened to own — and it got worse every time you added one. Measured on an install with 200 shortcuts, eight of thirteen ordinary English words were swallowed mid-word.
Nothing opens by itself any more. Typing narrows the list, and Enter opens the top result — with an exact shortcut match sorted to the front, so the shortcuts you have learned still work first time. It is one keystroke longer than before, and in exchange it behaves the same tomorrow as it does today, however many bookmarks you add.
jandkmove the cursor again. They picked a row and then typed their own letter over it, so the selection disappeared in the same keypress that made it. Letters now reach the grid only while a row is actually selected, and the arrow keys — which always pass through — are how you get there. Theg/Gchord no longer eats the first letter of a word either, for the same reason: it only acts when the cursor is on a row.cis the one documented exception; it still creates a category unconditionally.- The line you type into says what it is. The key that starts each mode now sits in front of the query — > for search, : for commands, ? for finders, and so on — with an × to clear it once you have typed something. Escape clears the box on screen as well, rather than closing it and leaving the old text there to greet you next time.
- A short key legend under the bookmarks, for anyone who wants one. It appears only once you start moving through the grid with the keyboard, and disappears again when you open something, so it is not a permanent fixture. Switch it on or off under Behavior → General; it is on for fresh installs.
- Shortcut hints on the toolbar icons are now off — including on installs that already exist. Changing the default alone would not have reached anyone, since every existing install already carries that field in its stored settings, so this went out as a one-time migration. The switch is in the same place if you want them back.
- The shortcut field warns you about the letter you are assigning. It tells you what the grid already does with that key and when, and lists the shortcuts the page has spoken for — rather than letting you discover the collision later, in the middle of a word.
Inbox
The inbox had a habit of describing a list other than the one on screen. Filter it by site or search it, and the tiles, the pills and the unread badge all carried on reporting the totals for everything.
- Every number counts the links you can see. A search or a site filter narrows the tiles, the pills and the badge along with the list. Mark all read becomes Mark shown read while anything is narrowing the view — which is the difference between tidying up and losing your queue — and the first tile is now called Active, because a sleeping link is deliberately not part of it.
- Sleeping links are no longer invisible. A line under the list says how many are asleep and when the first one wakes, and takes you to them. The site picker also stops offering a host whose only link is snoozed and then answering with “no matching links”.
- Import a list back in. The inbox could always be exported and never read back. Import now sits beside the CSV and JSON exports, skips links that are already there, and reports afterwards how many arrived, how many were already in, and how many did not fit.
- A link can go back to unread. Marking something read by mistake used to leave deleting it as the only way out. The fetched page description is now shown under the title as well — and it is searched, and carried into both exports.
Health
The monitoring engine knew why your links were failing and did not say so. Anything that was not a plain HTTP error — a DNS failure, a timeout, a refused connection, a bad certificate — was recorded as “down, no code” and displayed as a blank.
- A failure says why. DNS, timeout, refused, TLS, redirect and content failures all now carry their reason into the incident list, the timeline and the CSV export.
- One dropped check no longer counts as an outage. A failed check is re-probed a few seconds later and only recorded if it fails the second time too. A single hiccup on your connection used to dent a month of uptime.
- A 30-day figure that only has a week behind it says so. The window is now reported with how much history actually sits inside it, rather than labelling a week’s worth of data “30 days” and letting you draw the wrong conclusion from it.
- Certificate warnings reach everyone. They were only ever raised for bookmarks explicitly set to Monitor, so an install running the ordinary periodic checks never saw one at all. Every check contributes now.
- A recovery says how long it was down — “back online after 3h 12m” — you can mute or unmute a whole selection in one go, and the trend chart can draw six things instead of only healthy: score, broken, monitors down, stale and unchecked alongside it, with the ones that are counts rather than percentages getting their own axis.
- The check timeout is a setting. It was fixed at three seconds, which is fine for most things and wrong for any service that legitimately takes longer to answer.
Finding things
- Search can say “not”. A minus in front of any filter excludes instead of selects, so
tag:dev -status:pinnedmeans “dev links I have not pinned”. Collection rules have been able to express that for a long time; the search bar could not. - Four more status filters:
status:untagged,status:tagged,status:notedandstatus:unnoted— the questions the bar was closest to being able to ask and could not. :trashopens the recycle bin straight from the dashboard, where deleted bookmarks, pages and categories wait out their thirty days.Ctrl/Cmd + Enteron a search result opens it in a new tab, whatever your standing preference says — matching what the same combination already did on the grid.
Dashboard and config
- Moving a bookmark can be undone. Deleting one has offered an undo for a long time; moving one — or twenty at once, to another page — offered nothing at all. Both are undoable now, restoring from a snapshot so every bookmark goes back to the category it actually came from rather than to a single guessed destination. While fixing it, one thing turned up that is worth being straight about: the shared notification helper quietly translated the undo callback into nothing, which means the bulk-delete undo announced in 1.0.4 had been dead since the day it shipped. Both work now.
- A category can carry an icon and be moved with the keyboard. Right-click its header for Icon…, type an emoji and watch the heading follow along as you go; Alt with the left or right arrow moves the category itself, and the move is announced to screen readers.
- Settings that are a shape are drawn. Columns, spacing, margins, density, background dots, type size, layout version, content flow and the button bar’s position now show a small picture of what they do, redrawn as you change them — in config, and in the help pages where the subject is a layout. It is much faster than reading a sentence about “density” and then trying it to find out.
- A setting changed on one device arrives on the other. A second screen used to keep its old appearance until you reloaded it by hand; the dashboard now tracks the settings revision and applies the change when it sees one.
- A failed automatic backup says so. The tile turns red and names the error. A full disk could previously stop your backups for months while the panel looked perfectly healthy — which is exactly the kind of failure you find out about at the worst possible moment.
- A bookmark row in config says where it lives, as one breadcrumb — page then category — with each half filtering the list when you click it.
- Fresh installs start on Retro CRT, with fold-all and shortcut hints switched off. Existing installs are untouched: your theme stays your theme.
- The browser extension can send a link straight to the inbox. Two new context-menu entries and Ctrl/Cmd + Shift + U — so something you want to keep but do not want to file yet goes where it belongs in one keystroke, instead of becoming a bookmark you will have to move later.
nextDash 1.2.1 — 17 August 2026
One fix, in the Health view, and it is a good illustration of a scoring system quietly working against its own advice. Health asks you to open a questionable link and see for yourself. It then charged you for having done so: never opened and not opened in 30 days each cost ten points, so the very first open raised the row’s score, and under the default worst-first sort that carried the row away from you. Measured on a 200-bookmark install, a row sitting at position 10 landed at position 188 — while the reader was still working through the list.
- Usage no longer decides where a row sits. Both penalties are zero. Usage is still counted and still visible: the Unused and Stale tiles and filters are unchanged, and the reason is still named on the row. It simply no longer moves it.
- The tiebreak had the same problem one level down. Sorting by score falls back to the row’s status when scores are equal — and opening a never-opened row that also has no preview changes its status from unused to missing preview, which is a different rank, so the row travelled on that instead. The tiebreak now reads a stable key with the two usage flags removed.
- A row you have dealt with stays where it was. Opening one under Unused, or re-checking one under Broken, takes it out of what the filter selects — and the list used to close the gap under your cursor and move everything below it up by one, mid-task. It keeps its position now, dimmed and marked handled, until you ask the list a different question (change the filter, the sort or the search) or reload the report on purpose with
Ror Retest all. Leaving the view clears it too. - The score breakdown separates deductions from context. Reasons that cost nothing are now listed under worth knowing, at no cost to the score — because a full score with a deduction printed underneath it reads as broken arithmetic, and invites you to go looking for a bug that is not there.
Upgrading
If you are running the Docker image:
docker compose pull
docker compose up -d
Building from a git checkout instead:
git pull
docker compose -f docker-compose.prod.yml up -d --build
Or straight from source, without Docker:
git pull
go build -o nextDash && ./nextDash
There is nothing to migrate by hand. Two things do change on existing installs, both deliberately: shortcut hints on the toolbar icons are switched off by a one-time migration, and typing on the grid no longer opens a bookmark on an exact match — press Enter to open the top result. Everything else, including your theme, is left exactly as you had it.
The full picture
Every entry above, along with the tests, locale keys and documentation that came with them, is in the changelog. The manual and the README carry the new keyboard model, the inbox round trip and the health engine, and the printable cheat sheet has been regenerated alongside them. Config → Overview also has three short spotlights for the changes most likely to catch you out: typing filters and Enter opens, the health failure reason, and the inbox counts.
nextDash is a keyboard-first, self-hosted bookmark dashboard. No accounts, no cloud, no noise — and it tells you which of your links are already dead.
Source and downloads: github.com/jordibrouwer/nextdash
Release notes for these versions: v1.2.0 and v1.2.1 on GitHub