Command Palette

Search for a command to run...

Load and Test Locally

Load a built presence into the Nowly extension with a pre-built dev package or a zip drop.

After nowly build <slug>, you still need to get that bundle into a browser. There are two local loading methods. Neither talks to the Nowly API.

1. Pre-built extension (nowly extension)

This is the usual first-time path, especially if you only cloned the presences repository. The CLI downloads a ready-made Chrome or Firefox dev build, then bakes your compiled presence into it.

nowly build youtube
nowly extension youtube             # Chrome (default)
nowly extension youtube --firefox
nowly extension youtube --f         # Firefox alias

You can pass several slugs:

nowly extension youtube github figma --firefox

The browser options are mutually exclusive. Use --chrome / --c to select Chrome explicitly.

Then:

  • Chrome: open chrome://extensions, enable Developer mode, and Load unpacked → dist/extension-dev.
  • Firefox: open about:debugging#/runtime/this-firefox, choose This Firefox, click Load Temporary Add-on..., and select dist/extension-dev-firefox/manifest.json.

The presence is installed from dev-presences.json as soon as the extension starts. After you change code, rebuild, rerun nowly extension <slug>, and reload the extension.

To use a local extension build instead of the CDN zip:

nowly extension youtube --chrome --from ../nowly/apps/extension/dist/chrome
nowly extension youtube --firefox --from ../nowly/apps/extension/dist/firefox

nowly extension writes an unpacked folder. It is the right tool when you do not already have Nowly loaded in the browser.

Full Nowly monorepo

If you cloned nowly and ran pnpm repos (which clones presences into packages/presences), you can bake every built presence into the extension:

nowly build youtube
pnpm build:extension:dev --bundled

Load apps/extension/dist/chrome unpacked. Reload after each rebuild.

2. Zip drop (nowly pack)

Use this when Nowly is already loaded as an unpacked development build. Store installs from the Chrome Web Store reject unsigned zips. You only rebuild the presence, not the whole extension.

nowly pack youtube

That command builds the presence, then zips dist/presences/youtube/ into dist/packs/youtube.zip. The zip must contain at least metadata.json and bundle.js. Nested folders are fine.

Then in the side panel:

  1. Open Settings → Advanced
  2. Enable Developer mode (always on for unpacked builds)
  3. Expand Debug
  4. Drop the .zip (or browse to it)

The presence installs as a local source. Unpacked boot pruning does not remove it. Unsigned zips are accepted only on an unpacked build (Load unpacked). The Settings developer-mode toggle only shows the Debug UI; it does not allow zip install on a store build. Store builds still require a signed release from the API.

After each code change:

nowly pack youtube

Drop the new zip again. You do not need to reload the unpacked extension unless you changed the extension itself.

Which method to pick

| Situation | Method | |---|---| | First setup, or no Nowly in the browser | nowly extension <slug> | | Nowly already loaded, iterate on one presence | nowly pack <slug> then drop the zip | | You work in the full nowly monorepo | pnpm build:extension:dev --bundled |

See also CLI.