CLI
Use the Nowly CLI to create, build, validate, and test presences locally.
The Nowly CLI is published as @nowly/cli on npm. Install it globally:
pnpm i -g @nowly/cliInteractive Mode
Run the CLI without arguments to open an interactive menu:
nowlyCreate a Presence
nowly init "Netflix"The interactive prompt asks whether Discord already supports the platform if the user links their account. That writes discordNative in metadata.json. You can also pass it:
nowly init "Spotify" --discord-nativeBuild Presences
Build every presence:
nowly buildBuild one presence:
nowly build youtubeRebuild on file changes (reload the unpacked extension after each rebuild, or re-drop the zip if you use pack):
nowly build youtube --watch
nowly pack youtube --watchTest a Presence Locally
There are two ways to load a built presence without the Nowly API. Full walkthrough: Load and Test Locally.
Pre-built extension
If you only cloned the presences repository (the common case for contributors), use nowly extension to get a ready-to-load browser-specific dev build without the full nowly monorepo:
nowly build youtube
nowly extension youtube # Chrome (default)
nowly extension youtube --firefox
nowly extension youtube --f # Firefox aliasThis downloads the matching Chrome or Firefox dev extension from the CDN, bundles the presence(s) you list, and writes a dev-presences.json file into it.
For Chrome, load dist/extension-dev unpacked at chrome://extensions.
For Firefox, load dist/extension-dev-firefox/manifest.json from about:debugging#/runtime/this-firefox with Load Temporary Add-on.
After editing the presence, rebuild and rerun nowly extension <slug>, then reload the extension.
Use --chrome / --c to select Chrome explicitly. Use --firefox / --f to select Firefox. The options are mutually exclusive.
To use a specific local extension build instead of the CDN one, pass --from:
nowly extension youtube --chrome --from ../nowly/apps/extension/dist/chrome
nowly extension youtube --firefox --from ../nowly/apps/extension/dist/firefoxZip drop
If Nowly is already loaded as an unpacked development build, pack the presence and drop it in the Debug panel:
nowly pack youtubeThe zip is written to dist/packs/youtube.zip. Drop it on Settings → Advanced → Debug. Unsigned zips only work on unpacked builds, not Chrome Web Store installs. Developer mode only reveals the Debug UI.
If you have the full monorepo
If you cloned nowly itself and ran pnpm repos (which clones presences into packages/presences), you can build the extension with every presence baked in directly:
pnpm build:extension:dev --bundledRebuild the changed presence then the extension after each change:
nowly build youtube
pnpm build:extension:dev --bundledReload at chrome://extensions - the presence is already installed and ready to use.
List Presences
nowly listValidate Metadata
nowly validate