Repository navigation
Releases
CRTL 1.6.1
A small fix for keyboard users, plus tooling and security housekeeping.
Fixed
- Keyboard focus no longer leaves link strips half-open - tabbing through the page
(Option+Tab in Safari) scrolled hidden link strips sideways into view and left them
stuck half-open across several entries. A strip now slides fully open while focus is
on one of its links and closes again when focus moves on.
Security
- Cleared a high-severity advisory in
source-map-js
(GHSA-68fv-2mgg-jv7q). It only
affects the build tooling and was never part of the shipped page.
Download: grab CRTL.html below and open it from disk - or use the hosted version,
which is already up to date.
Full changelog: v1.6.0...v1.6.1
CRTL 1.60
Added
-
Update check for the offline version. The downloaded
CRTL.htmlcan
now tell you when a newer release is out. Open Help (bottom-left) ->
Updates -> Check now: it asks GitHub for the latest release and
gives you a link to download it.Prefer not to think about it? Turn on Check on startup in the same
place. CRTL then checks at most once a day, and when there's a new version
an Update to vX.Y.Z item appears in the gear menu, with a small dot
on the gear. It's off by default and remembered per device: nothing is
checked unless you ask. The hosted web version is always up to date and
doesn't need it.
Fixed
- Edit-mode switch in the Paper theme. When switched on, its knob blended
into the track (completely so in dark mode), so you couldn't tell it was on.
Download: CRTL.html below is the offline version - one self-contained
file, open it straight from disk. The hosted web version is updated too.
CRTL 1.5.0
Added
-
Paper colour theme. A black-and-white alternative to the green
phosphor look: soft black on a warm white, with the same scanlines,
knockout titles and shadows. Its dark mode is a true inversion - a
soft-black page with paper-white group headers.Pick it under the gear -> Theme (it switches between Phosphor and
Paper). The sun / moon button still flips light and dark within
whichever theme you choose. Both are remembered per device and never
synced, so your phone and desktop can each look the way you like.
Changed
- Bolder check / cross marks in colour-blind friendly mode
(Accessibility, bottom-left) - the thin glyphs were hard to make out at
their small size.
Download: CRTL.html below is the offline version - one self-contained
file, open it straight from disk. The hosted web version is updated too.
CRTL 1.4.0
Added
-
Double-width and double-height groups (#36).
A group with a long list no longer has to tower over the rest of the
dashboard. In edit mode, two arrow buttons in each group's header make it
span two columns or two rows:- Double width lays the group's entries out in two columns, row by row,
each lined up with the entries of the groups beside it. - Double height gives the group two rows of the grid, so shorter groups
stack next to it.
Only one can be on at a time - turn one off to use the other. On screens too
narrow for two columns (below 700px, e.g. phones) both fall back to a normal
group. The setting syncs with the rest of your config; existing groups and
gists are unchanged until you use it. - Double width lays the group's entries out in two columns, row by row,
Fixed
- Home probes could be lost when setting up sync on a new device.
Importing a setup blob pulled your config - Home-detection probes included -
from the gist, but the open Global options dialog kept showing the old
probes. Pressing Save options then wrote that old list back and pushed it
to the gist, replacing your probes on every machine. The probes field now
follows every import (setup blob, encrypted backup, background sync), unless
you have typed in it yourself.
If your probes went missing this way, re-enter them once in Global options. - Home / Away updates right after an import instead of on the next 30-second
check. Probes from the gist or a backup take effect immediately, and on the
web version a beacon arriving this way switches on auto-detect straight away.
Changed
- Updated the build and test tooling:
vite8.3.0 -> 8.3.1,vitest
5.0.1 -> 5.0.2. None of this ships in CRTL - the built app is unchanged.
Download: CRTL.html below is the offline version - one self-contained
file, open it straight from disk. The hosted web version is updated too.
Full Changelog: v1.3.2...v1.4.0
CRTL 1.3.2
Maintenance release. The app itself is unchanged from 1.3.1 - this only
affects building CRTL from source.
Changed
- Building CRTL now needs Node 26 -
enginesgoes from>=24to>=26,
and CI runs on Node 26 instead of 24. On an older Node,npm installwarns
about the unsupported engine. - Updated the test tooling -
vitest5.0.0 -> 5.0.1. None of this ships
in CRTL.
Download
CRTL.html below is the entire app in one self-contained file. Download it
and open it in any browser - no install, no server, no accounts.
Full changelog: v1.3.1...v1.3.2
v1.3.1
What's Changed
- deps: bump happy-dom from 20.11.0 to 20.11.1 in the dev-dependencies group by @dependabot[bot] in #23
- deps: bump the dev-dependencies group across 1 directory with 2 updates by @dependabot[bot] in #25
- Dependably Frenzy by @BrainInBlack in #26
- deps: bump the dev-dependencies group with 3 updates by @dependabot[bot] in #28
- Vite Bump by @BrainInBlack in #32
- deps: bump the dev-dependencies group across 1 directory with 2 updates by @dependabot[bot] in #30
- Version Bumps by @BrainInBlack in #33
- chore: release 1.3.1 by @BrainInBlack in #34
Full Changelog: v1.3.0...v1.3.1
CRTL - v1.3.0
Added
- Touch mode. On a phone or tablet CRTL now adapts instead of asking for
mouse gestures a finger can't make: edit mode gives every entry and group
header a drag grip (the rest of the row stays free to scroll the page),
edit / delete open as a menu on the row rather than icons that only appear on
hover, buttons grow to a thumb-sized target, and the bottom corner buttons
keep clear of the iPhone home indicator. - Detection is automatic - it follows the pointer the device reports, and
re-checks when that changes (an iPad gaining a trackpad). Accessibility
has an override if the guess is wrong; it stays on the device and is never
synced.
Changed
- Dialogs no longer close when you click beside them. The entry editor,
Global options, Accessibility and the sync-conflict prompt hold unsaved edits
or a decision that has to be made, and a stray click next to the box used to
discard them. Close them with their buttons or Escape. Help still closes on
an outside click (there is nothing to lose), as do the gear and context
menus. - Checkboxes are themed to match the panel instead of using the browser's
default control, and their labels now read as labels rather than as a field
heading. The Accessibility options each got a heading, and touch mode moved
below the colour-blind option. - Help lost its Close button - click outside it or press Escape.
Fixed
- Drag-and-drop no longer gets stuck when the browser takes the gesture over.
A touch that turned into a page scroll left the dragged entry (or group)
floating over the page next to an orphan placeholder, and blocked every
later drag; a cancelled drag now puts everything back. - Dragging only starts after the pointer travels a few pixels, so a tap or a
click on an entry's edit / delete buttons can no longer lift the row by
accident. - A long-press that travels is treated as a scroll: starting a touch-scroll on
an entry no longer slides its links overlay in. - Opening a link's primary target no longer leaks the CRTL page URL: the
single-tapwindow.opennow setsnoreferreralongsidenoopener, so no
Refererheader is sent. Overlay (secondary) links already stripped it.
CRTL - v1.2.1
Fix the version shown in the UI: package.json was stuck at 1.0.1 since
v1.0.1, so every build since then - including the v1.2.0 release
artifact - reported the wrong version. Bump to 1.2.1 and sync
package-lock. UI version now always matches the release tag.
CRTL - v1.2.0
Added
- Encrypted local backup. Global options can now export the config as a
passphrase-encrypted file and import it on another machine - no GitHub
account needed. The key is derived per export via PBKDF2-SHA256 (600k
iterations, random salt); the payload is AES-GCM encrypted and mirrors the
gist payload: groups, links, and probes only - no icon cache (icons re-embed
from theirbi:/svg:ids on import) and never any sync credentials. Like
gist sync it needs a secure context (file://orhttps://). - Accessibility menu + colour-blind friendly health dots. A new button next
to Help opens an Accessibility menu; its first option renders resolved health
dots as a check (up) or cross (down) glyph instead of relying on colour alone.
The setting is part of the synced config, so it follows you across machines.
Thanks to @hckroeger for the prototype. - Per-entry health-check URL. An entry can now probe a dedicated endpoint
(e.g. a/healthpath) instead of its first link, so services that block the
cross-origin health fetch (CORS/CORP) or sit behind a login stop showing a
false "down" while the tile still opens the first link. Thanks to
@hckroeger for the prototype.
Changed
- Tidier Global options. The gist sync and encrypted backup sections are now
collapsible and collapsed by default, so the modal opens compact. Each header
stays visible - including the sync on/off toggle - and the sync section
auto-expands when there's a sync error to surface. - Deep config sanitization.
normalizeConfignow also drops null/non-object
records insidegroups/entries/links, non-string probes and icon-cache
values, and coerces non-string entry icons, so a corrupt or hostile payload -
from localStorage, a synced gist, or an imported backup file - can't crash
rendering and persist itself as a bricked config. - Relicensed from PolyForm Noncommercial 1.0.0 to MIT + Commons Clause.
PolyForm NC barred all commercial use, including a company running CRTL on its
own internal homelab. The new terms allow use (companies included),
modification, and free redistribution, and forbid only selling the software
(per the Commons Clause). UpdatedLICENSE,package.json, the README badge
and license note, and CONTRIBUTING.
Fixed
http://no longer disappears when re-editing a link. The entry editor
used to strip any scheme from the URL field for display, so an explicitly
enteredhttp://looked lost on the next edit (it was still saved, via a
hidden original-scheme fallback). Now only the defaulthttps://is hidden;
http://stays visible and round-trips - and deleting it upgrades the link to
thehttps://default. Thanks to @hckroeger
for the prototype.
CRTL - v1.0.1
[1.0.1] - 2026-07-14
Changed
- Split the periodic-check timers. Home/Away detection and the per-service
health probes used to share one 60-second loop and fire together. They now run
on separate timers: Home/Away re-detects every 30 seconds, and the service
probes run on their own 30-second timer staggered 5 seconds later so the two
bursts of network calls don't overlap. The gist re-pull keeps its own
60-second clock.