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 dev build (or copies a local one), then bakes your compiled presence into it.
nowly build youtube
nowly extension youtubeYou can pass several slugs:
nowly extension youtube github figmaThen:
- Open
chrome://extensionsand enable Developer mode - Load unpacked and select
dist/extension-dev - Open the target site with Discord Desktop and Nowly Host running
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 unpacked extension.
To use a local extension build instead of the CDN zip:
nowly extension youtube --from ../nowly/apps/extension/dist/chromenowly 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 (with presences as a submodule), you can bake every built presence into the extension:
nowly build youtube
pnpm build:extension:devLoad apps/extension/dist/chrome unpacked. Reload after each rebuild.
2. Zip drop (nowly pack)
Use this when Nowly is already loaded (unpacked or a store build with developer mode). You only rebuild the presence, not the whole extension.
nowly pack youtubeThat 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:
- Open Settings → Advanced
- Enable Developer mode (always on for unpacked builds)
- Expand Debug
- 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 or with developer mode on. Store builds without developer mode still require a signed release from the API.
After each code change:
nowly pack youtubeDrop 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 |
See also CLI.