1.4.0

Side panel rework with bottom navigation, in-panel library, pause and shortcuts, local zip install via nowly pack, presence artwork, and a dedicated changelog page after extension updates.

1.4.0 rebuilds the side panel around Home, Library, and Settings, and adds controls you use every day: pause Discord, keyboard shortcuts, a page context menu, Home search, offline install retry, and a drop-in zip workflow for presence authors (nowly pack). Store updates open a dedicated changelog page on the website.

AreaWhat changedWhy it matters
Side panel shellReplaced the previous action bar and side navigation with a bottom nav, a redesigned header, and a connection status bar that auto-hides when Nowly Host is healthy.The panel reads as a small app: switch views without losing the current activity, and connection problems stay visible only when they matter.
In-panel libraryA Library tab in the bottom nav lists the public catalog from the API (search, wrapping category chips, compact detail). Install and update run inside the extension after signature checks, including from Home update banners. Installing no longer opens nowly.me. The header and empty state no longer have a Library button. Already installed presence pages still keep a View on website link.Adding or updating a presence no longer requires leaving the side panel.
Presence artworkInstalled and Library detail pages show the presence thumbnail as a faded banner at the top of the card. If the image is missing, the card falls back to a color halo.The manage view matches the website page instead of a flat list of fields.
VersionsVersion shows as a badge: next to the name on presence pages (Home and Library), next to the category in the library list, next to Enabled or Disabled on the Home list.Version is easy to scan and no longer mixed into status or category text.
Pause DiscordA persistent pause stops Rich Presence on Discord (header button, Settings, or Ctrl+Shift+U) without uninstalling or disabling scripts. A toolbar badge and status bar show when it is on.You can hide Nowly on Discord for a meeting without tearing down your setup.
ShortcutsCtrl+Shift+Y opens the panel and Ctrl+Shift+U pauses Discord. Settings lists the current bindings and a link to change them in the browser. The panel opens in the same click or keypress as the command (Chrome requires a user gesture).You open Nowly or mute Discord without hunting the toolbar icon.
Page context menuRight-click a page to jump to the matching installed presence, the Library listing, or a hostname search in the store.You reach the right presence from the page you are on.
Home searchHome filters installed presences by name, slug, category, or site URL.Finding a presence does not require scrolling every category.
Offline installsFailed install or update requests that look like network or server errors go into a retry queue (automatic every minute, plus Retry now).A blip of API downtime no longer loses the install you just asked for.
Local zipIn developer mode (or an unpacked build), drop a built presence zip on the Debug panel. The zip must contain metadata.json and bundle.js. A source folder with only presence.ts is rejected. Local installs are kept when an unpacked extension reloads.Iterate on one presence without rebuilding the whole extension.
CLI pack`nowly pack <slug>` builds the presence and writes dist/packs/<slug>.zip. `nowly extension <slug...>` still produces a ready-to-load Chrome folder. Pack works from the presences package or the Nowly monorepo root.Authors load a presence into an extension that is already installed, instead of baking a new unpacked build every time.
Primary buttonsInstall and other primary buttons use the accent background with dark text, readable on the default cyan accent.Contrast stays correct on every theme, including light accents.
SettingsSettings are split into collapsible General, Presences, and Advanced groups. The legacy toggle that listed the active presence separately was removed from the UI. Shortcuts sit with the other options.Related options sit together, Advanced stays out of the way, and the presence list no longer has two competing layouts.
DialogsSnooze and schedule open in a Dialog instead of a Sheet.Overlays are centered, share one pattern, and fit the new side panel better than sliding sheets.
HomeThe presence list and current activity card were reworked to match the new shell. List rows keep enable, schedule, and settings. Grid cards are compact tiles (icon, name, status) with no inline controls: the whole card opens the manage view. Snooze stays on the activity card.Scanning installed presences takes less chrome. List stays actionable; grid stays a browse surface.
DisplayHome switches between a category list and a two-column card grid with a compact toggle in the header. The previous alphabetical mode was removed.Layout is changed from the top bar, without a settings detour or a control stuck on the first category.
Presence manage viewOpening a presence (from the list name or settings, or from a grid card) replaces the list with a full panel: artwork, description, enable switch, update strip, features with checks tinted in the presence color, supported URLs, credits, a titled Settings block (fields, schedule, view on website), and a separate uninstall control with confirm.Managing one presence matches the website page instead of a cramped overlay of unlabeled fields.
OnboardingThe first-run overlay layout was rebuilt and copy was updated across English, French, and Spanish.Setup follows the same visual language as the rest of the panel instead of looking like a leftover screen.
TypographyThe side panel now uses Instrument Sans.The extension UI is closer to the website instead of the previous system-default stack.
Update changelogA store update opens `/changelog/{version}` on nowly.me. That page reuses the docs release notes with a dedicated “your extension was updated” hero.After an update, users land on what changed instead of having to hunt the docs sidebar.

Side panel

The panel is no longer a single scrolling page with an action bar. Home, Library, and Settings are separate views, with a developer Logs tab when developer mode is on. The current view is persisted across service-worker restarts.

The connection status bar confirms Nowly Host when the native bridge is healthy, then fades out. It stays on screen when the host is missing or disconnected. While Discord pause is on, the toolbar badge and status bar stay visible.

The overflow menu uses a filled button in the header.

Pause, shortcuts, and page menu

Pause is stored in extension settings. Presence scripts can keep running; Discord just stops receiving activity until you unpause.

Default shortcuts (Chrome and Chromium-based browsers):

  • Ctrl+Shift+Y opens the side panel.
  • Ctrl+Shift+U toggles Discord pause.

Change them in chrome://extensions/shortcuts. Settings in the panel only lists the current keys.

Right-click a matching page to open Nowly on that presence, or on a Library search if it is not installed yet.

Library

The Library tab lives in the bottom nav, next to Home and Settings. The catalog comes from GET /presences. Install fetches GET /presences/:slug in the service worker, verifies the signature, then registers the userScript. The UI never handles the bundle.

Search and category filters stay in the panel. Categories wrap instead of scrolling sideways. The search field keeps the card background on focus.

A row opens a compact page (artwork, description, URLs, install). There is no version picker in the extension: that stays on the website.

Update banners on Home use the same install path. nowly.me can still install through the content script.

Home list and grid

Presences stay grouped by category. A compact list / grid control lives in the header and only shows on Home while the list is visible (not on a manage view, Settings, or Logs).

  • List: name opens the manage view. Enable, schedule, and settings stay on the row. A version badge sits next to Enabled or Disabled.
  • Grid: icon, name, and status, left-aligned. The whole card is clickable. Enable and schedule live on the manage view.

Search filters the installed list without leaving Home.

Presence manage view

Back (or Home) returns to the list. The player card is hidden while a presence is open.

The page is split into labeled blocks: artwork, features and URLs, credits, then Settings. A version badge sits next to the name. Uninstall sits below as its own destructive action and asks for confirmation.

Settings and dialogs

General, Presences, and Advanced fold independently. Advanced opens by default only when developer mode is already enabled.

Snooze and schedule use the same Dialog primitive. Opening a presence now uses a full manage view instead of an overlay. The old Sheet-based flows are gone.

Developer workflow

If Nowly is already loaded unpacked, build a zip and drop it on the Debug panel (developer mode):

nowly pack youtube

The zip is written to dist/packs/<slug>.zip and must include metadata.json plus bundle.js. Do not zip the TypeScript source.

If you do not have the extension loaded yet, nowly extension <slug> still writes a Chrome folder with dev-presences.json.

Docs: Load and test locally.

After an update

Chrome and Firefox store builds open https://nowly.me/changelog/1.4.0 (or the matching manifest version) on onInstalled with reason === "update". Unpacked reloads do not open a tab.