The Bedframe Command Line Interface (CLI) lets you make and manage your BED directly from the terminal.
Bedframe CLI requires Node.js version 18+. 20+. You can manage multiple versions of Node on the same machine with n, nvm or nvm-windows.
Note: Installing the Bedframe CLI globally makes it easy to quickly run the project generator but is not required. You can install Bedframe CLI @bedframe/cli
(along with @bedframe/core
) as devDependencies
on each project. You can alternatively run the make
command directly but running npm create bedframe
and following the CLI prompts.
# with bun
bun add @bedframe/cli -g
# with pnpm
pnpm add @bedframe/cli -g
# with npm
npm install @bedframe/cli -g
# with yarn
yarn add @bedframe/cli -g
After installation, you will have access to the bedframe
executable in your command line. You can verify that it is properly installed by simply running bedframe
, which should present you with an intro and help message.
>_
B R O W S E R
E X T E N S I O N
D E V E L O P M E N T
F R A M E W O R K
@bedframe/cli v0.0.78
Usage: @bedframe/cli [options] [command]
Bedframe CLI - your Browser Extension Development framework (dev utility)
Options:
-V, --version output the version number
-h, --help display help for command
Commands:
make [options] [name] make your B E D
version [options] create or update git release of current version (changeset version)
publish [options] publish new or update existing extension(s)
- chrome: Chrome Web Store (C W S)
- firefox: Mozilla/Firefox Add-ons (A M O)
- edge: MS Edge Add-ons (M E A)
dev [browsers] start Vite dev server for one or more browsers concurrently
build [browsers] generate prod builds for 1 or more browsers concurrently
zip [options] [browsers] zip browser dist directories
help [command] display help for command
You can check you have the right version with this command:
bedframe --version
To create a new bedframe project, run:
bedframe make
Then follow the prompts!
You can specify the project name
as the first argument of the make
command. Using .
for the project name
will scaffold the project in the current directory.
# scaffold project called `bedframe-project`
bedframe make bedframe-project
# scaffold project in the current directory
bedframe make .
You will then be prompted to configure your BED, picking Framework
, Language
, Browser
to target, etc. All configurations can be manually edited once you generate the project.
The Bedframe make
command walks you through creating a Vite-powered, prod-ready Browser Extension Environment: one codebase continously deployed to version control and automatically published to all browser stores (currently Chrome, Firefox, and Edge).
You end up with a familiar Vite-powered project you're used to.
Run the make
command to launch the project gen prompts.
Alternatively: this command is also available as the standalone create-bedframe
package.
bedframe make --help
>_
B R O W S E R
E X T E N S I O N
D E V E L O P M E N T
F R A M E W O R K
@bedframe/cli v0.0.78
Usage: @bedframe/cli make [options] [name]
make your B E D
Arguments:
name project name
Options:
-b, --browsers <browsers> comma-separated list browsers (chrome, edge, firefox, etc)
-v, --version <version> project version (0.0.1)
-d, --description <description> project description
-a, --author <author> project author (name, email, url)
--license <license> project license (MIT)
-r, --private visibility of project (true)
-t, --type <type> extension type (popup)
--override <override> page to override (newtab)
--options <options> whether to and how render options (embedded)
-p, --packageManager <packageManager> package manager to use (pnpm)
-f, --framework <framework> framework to use (react)
-l, --language <language> language to use (typescript)
-s, --style <style> css framework to use (tailwind)
-o, --lintFormat add linting with formatting (true)
-e, --tests add tests (vitest + testing library) (true)
-g, --git initialize git for source control (true)
-h, --gitHooks use git hooks (true)
-c, --commitLint use commit linting (true)
-x, --changesets use changesets (true)
-i, --installDeps install dependencies (true)
-y, --yes make your BED w/ preconfigured defaults (false)
--help display help for command
The CLI name
argument sets manifests' name
property (required) which is a short, plain text string (maximum of 45 characters) that identifies the extension. For example:
{
"name": "My extension name"
}
You can specify a locale-specific string; see Internationalization for details.
It is displayed in the following locations:
See also Short Name.
You can optionally by-pass the prompts if you pass in the requisite flags to the make
command.
As an example, to scaffold a multi-extension project i.e. BED environment targeting Chrome
, Brave
, Opera
and Edge
browsers you can run:
$ bedframe make bedframe-project \
--browsers 'chrome, brave, opera, edge' \
--version '0.0.0' \
--description 'this is my BED! there are many like it, but this one is... MINE!!!' \
--author 'joe, joe@bedframe.dev, https://bedframe.dev' \
--license MIT \
--private \
--type overlay \
--override newtab \
--options embedded \
--packageManager bun \
--framework react \
--language typescript \
--style tailwind \
--lintFormat \
--tests \
--git \
--gitHooks \
--commitLint \
--changesets \
--installDeps
If any required configuration isn't passed in via flags
the CLI will prompt you for the missing requirements.
Flag (short) | Flag (long) | Type | Description | Default |
---|---|---|---|---|
-v | --version | string | Specify project version | 0.0.1 |
-b | --browsers | Browser[] | Specify comma-separated list of target browsers | chrome |
-p | --packageManager | PackageManager | Specify package manager to use | yarn |
-f | --framework | Framework | Specify framework to use | react |
-l | --language | Language | Specify language to use | typescript |
-s | --style | Style | Specify CSS solution to use | tailwind |
-o | --lintFormat | boolean | Configure linting with formatting | true |
-g | --git | boolean | Initialize git source control | true |
-h | --gitHooks | boolean | Add git hooks (Husky + lint staged) | true |
-t | --tests | boolean | Add tests (Vitest + Testing Library + jsdom) | true |
-c | --commitLint | boolean | Add commit linting | true |
-x | --changesets | boolean | Add changesets | true |
-i | --installDeps | boolean | Add & install dependencies | true |
-y | --yes | boolean | Set up Bedframe w/ preconfigured defaults | false |
--help | display help for command |
Pick from either npm, yarn or pnpm
The version
passed in via the Bedframe CLI make command flag (-v, --version
) or via prompt response is used to set the version
for both your project's package.json and the (one or more) manifests for the extension(s) in your project.
Note The `version` in manifest.json is not in semVer while the `version` in pacakge.json must be parseable by node-semver. If you find the two need to be different in your project, you can alternatively pass in the Version Name flag (`--versionName`) and this will be the semVer-valid `version` used in the package.json and as `version_name` in manifest.json.
One to four dot-separated integers identifying the version of this extension. A couple of rules apply to the integers:
The integers must be between 0
and 65535
, inclusive.
Non-zero integers can't start with 0
. For example, 032
is invalid because it begins with a zero.
They must not be all zero. For example, 0
and 0.0.0.0
are invalid while 0.1.0.0
is valid.
Here are some examples of valid versions:
"version": "1"
"version": "1.0"
"version": "2.10.2"
"version": "3.1.2.4567"
If the published extension has a newer version string than the installed extension, then the extension is automatically updated.
The comparison starts with the leftmost integers. Then, if those integers are equal, the integers to the right are compared, and so on. For example, 1.2.0
is a newer version than 1.1.9.9999
.
A missing integer is equal to zero. For example, 1.1.9.9999
is newer than 1.1
, and 1.1.9.9999
is older than 1.2
.
create or update git release of current version
bedframe version --help
>_
B R O W S E R
E X T E N S I O N
D E V E L O P M E N T
F R A M E W O R K
Usage: @bedframe/cli version [options]
create or update git release of current version (changeset version)
Options:
--ignore <package> skip a package from being published
--snapshot create a snapshot release for testing
-h, --help display help for command
publish new or update existing extension(s)
bedframe publish --help
>_
B R O W S E R
E X T E N S I O N
D E V E L O P M E N T
F R A M E W O R K
Usage: @bedframe/cli publish [options]
• publish new or update existing extension(s)
├ • C W S: Chrome Web Store
├ • A M O: Mozilla/Firefox Add-ons
└ • M E A: MS Edge Add-ons
Options:
-b, --browsers <browsers...> specify browsers to publish (chrome,firefox,edge)
-h, --help display help for command
start vite dev server for 1 or more browsers.
alias for vite dev w/ --mode <browser>
bedframe dev --help
>_
B R O W S E R
E X T E N S I O N
D E V E L O P M E N T
F R A M E W O R K
Usage: @bedframe/cli dev [options] [browsers]
start Vite dev server for one or more browsers concurrently
Options:
-h, --help display help for command
> bedframe dev
6 BEDs starting vite dev server! 🚀
└ dist/
├ brave/
├ chrome/
├ edge/
├ firefox/
├ opera/
└ safari/
generate prod builds for 1 or more browsers
alias for vite build w/ --mode <browser>
create zip archive(s) for 1 or more browsers