Using Cargo workspaces with a `napi-rs` project

Using workspaces to manage crates and dependencies within a default `napi-rs` project.

Creating a new project with is as easy as:

npm install -g @napi-rs/cli

Followed by...

napi new

... which is great. But I wanted to keep the project within a Cargo Workspace so I made the following changes (using the project name bslive, which stands for Browsersync Live, in case you wondered)

Step 1

Create a new directory at the root level of the project

mkdir bslive

Step 2

Move the following files/folders




Should look something like:

Step 3

Now create a new Cargo.toml in the root of the project, to replace the one you just moved


workspace.members = ["bslive"]
workspace.resolver = "2"

Step 4

The last is to tell napi where to build from (since it defaults to the root of the project).

In the package.json file, find the scripts section and change both build and build:debug to include the flag --cargo-name <name>


-   "build": "napi build --platform --release",
+   "build": "napi build --cargo-name bslive --platform --release",
-   "build:debug": "napi build --platform",
+   "build:debug": "napi build --cargo-name bslive --platform",


Now you can create lots of separate crates in the root of the project (or under a common subdirectory, like crates) and the regular workspace improvements will apply :)