Skip to content

Releases

CRTL 1.6.1

Choose a tag to compare

@BrainInBlack BrainInBlack released this 07 Oct 10:31
Immutable release. Only release title and notes can be modified.
v1.6.1
19886af

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

Choose a tag to compare

@BrainInBlack BrainInBlack released this 26 Sep 14:57
Immutable release. Only release title and notes can be modified.
v1.6.0
0f4c364

Added

  • Update check for the offline version. The downloaded CRTL.html can
    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

Choose a tag to compare

@BrainInBlack BrainInBlack released this 26 Sep 08:21
Immutable release. Only release title and notes can be modified.
v1.5.0
1700bfb

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

Choose a tag to compare

@BrainInBlack BrainInBlack released this 25 Sep 13:19
Immutable release. Only release title and notes can be modified.
v1.4.0
b318934

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.

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: vite 8.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

Choose a tag to compare

@BrainInBlack BrainInBlack released this 15 Sep 19:02
Immutable release. Only release title and notes can be modified.
v1.3.2
fd11849

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 - engines goes from >=24 to >=26,
    and CI runs on Node 26 instead of 24. On an older Node, npm install warns
    about the unsupported engine.
  • Updated the test tooling - vitest 5.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

Choose a tag to compare

@BrainInBlack BrainInBlack released this 12 Sep 08:53
Immutable release. Only release title and notes can be modified.
v1.3.1
84ddd8f

What's Changed

Full Changelog: v1.3.0...v1.3.1

CRTL - v1.3.0

Choose a tag to compare

@BrainInBlack BrainInBlack released this 25 Jul 06:36
Immutable release. Only release title and notes can be modified.
v1.3.0
93c1467

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-tap window.open now sets noreferrer alongside noopener, so no
    Referer header is sent. Overlay (secondary) links already stripped it.

CRTL - v1.2.1

Choose a tag to compare

@BrainInBlack BrainInBlack released this 16 Jul 11:32
Immutable release. Only release title and notes can be modified.
v1.2.1
7fbd033

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

Choose a tag to compare

@BrainInBlack BrainInBlack released this 15 Jul 21:33
Immutable release. Only release title and notes can be modified.

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 their bi:/svg: ids on import) and never any sync credentials. Like
    gist sync it needs a secure context (file:// or https://).
  • 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 /health path) 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. normalizeConfig now also drops null/non-object
    records inside groups/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). Updated LICENSE, 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
    entered http:// looked lost on the next edit (it was still saved, via a
    hidden original-scheme fallback). Now only the default https:// is hidden;
    http:// stays visible and round-trips - and deleting it upgrades the link to
    the https:// default. Thanks to @hckroeger
    for the prototype.

CRTL - v1.0.1

Choose a tag to compare

@BrainInBlack BrainInBlack released this 14 Jul 10:15
Immutable release. Only release title and notes can be modified.

[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.