crates.io Discord

Build tool for Leptos:

Leptos Logo



Features

Getting started

Install:

cargo install --locked cargo-leptos

If you, for any reason, need the bleeding-edge super fresh version:

cargo install --git https://github.com/leptos-rs/cargo-leptos --locked cargo-leptos

Help:

cargo leptos --help

For setting up your project, have a look at the examples


Dependencies

The dependencies for sass, wasm-opt and cargo-generate are automatically installed in a cache directory when they are used if they are not already installed and found by which. Different versions of the dependencies might accumulate in this directory, so feel free to delete it.

| OS | Example | | ------- | ----------------------------------------- | | Linux | /home/alice/.cache/cargo-leptos | | macOS | /Users/Alice/Library/Caches/cargo-leptos | | Windows | C:\Users\Alice\AppData\Localcargo-leptos |

If you wish to make it mandatory to install your dependencies, or are using Nix or NixOs, you can install it with the no_downloads feature enabled to prevent cargo-leptos from trying to download and install them.

cargo install --features no_downloads --locked cargo-leptos


Single-package setup

The single-package setup is where the code for both the frontend and the server is defined in a single package.

Configuration parameters are defined in the package Cargo.toml section [package.metadata.leptos]. See the Parameters reference for a full list of parameters that can be used. All paths are relative to the package root (i.e. to the Cargo.toml file)


Workspace setup

When using a workspace setup both single-package and multi-package projects are supported. The latter is when the frontend and the server reside in different packages.

All workspace members whose Cargo.toml define the [package.metadata.leptos] section are automatically included as Leptos single-package projects. The multi-package projects are defined on the workspace level in the Cargo.toml's section [[workspace.metadata.leptos]] which takes three mandatory parameters:

```toml [[workspace.metadata.leptos]]

project name

name = "leptos-project" bin-package = "server" lib-package = "front"

more configuration parameters...

```

Note the double braces: several projects can be defined and one package can be used in several projects.


Build features

When building with cargo-leptos, the frontend, library package, is compiled into wasm using target wasm-unknown-unknown and the features --no-default-features --features=hydrate The server binary is compiled with the features --no-default-features --features=ssr


Parameters reference

These parameters are used either in the workspace section [[workspace.metadata.leptos]] or the package, for single-package setups, section [package.metadata.leptos].

Note that the Cargo Manifest uses the word target with two different meanings. As a package's configured [[bin]] targets and as the compiled output target triple. Here, the latter is referred to as target-triple.

Compilation parameters

```toml

Sets the name of the binary target used.

#

Optional, only necessary if the bin-package defines more than one target

bin-target = "my-bin-name"

The features to use when compiling all targets

#

Optional. Can be extended with the command line parameter --features

features = []

The features to use when compiling the bin target

#

Optional. Can be over-ridden with the command line parameter --bin-features

bin-features = ["ssr"]

If the --no-default-features flag should be used when compiling the bin target

#

Optional. Defaults to false.

bin-default-features = false

The profile to use for the bin target when compiling for release

#

Optional. Defaults to "release".

bin-profile-release = "my-release-profile"

The profile to use for the bin target when compiling for debug

#

Optional. Defaults to "debug".

bin-profile-debug = "my-debug-profile"

The target triple to use when compiling the bin target

#

Optional. Env: LEPTOSBINTARGET_TRIPLE

bin-target-triple = "x86_64-unknown-linux-gnu"

The features to use when compiling the lib target

#

Optional. Can be over-ridden with the command line parameter --lib-features

lib-features = ["hydrate"]

If the --no-default-features flag should be used when compiling the lib target

#

Optional. Defaults to false.

lib-default-features = false

The profile to use for the lib target when compiling for release

#

Optional. Defaults to "release".

lib-profile-release = "my-release-profile"

The profile to use for the lib target when compiling for debug

#

Optional. Defaults to "debug".

lib-profile-debug = "my-debug-profile" ```

Site parameters

These parameters can be overridden by setting the corresponding environment variable. They can also be set in a .env file as cargo-leptos reads the first it finds in the package or workspace directory and any parent directory.

```toml

Sets the name of the output js, wasm and css files.

#

Optional, defaults to the lib package name or, in a workspace, the project name. Env: LEPTOSOUTPUTNAME.

output-name = "myproj"

The site root folder is where cargo-leptos generate all output.

NOTE: It is relative to the workspace root when running in a workspace.

WARNING: all content of this folder will be erased on a rebuild.

#

Optional, defaults to "target/site". Env: LEPTOSSITEROOT.

site-root = "target/site"

The site-root relative folder where all compiled output (JS, WASM and CSS) is written.

#

Optional, defaults to "pkg". Env: LEPTOSSITEPKG_DIR.

site-pkg-dir = "pkg"

The source style file. If it ends with .sass or .scss then it will be compiled by dart-sass

into CSS and processed by lightning css. When release is set, then it will also be minified.

#

Optional. Env: LEPTOSSTYLEFILE.

style-file = "style/main.scss"

The tailwind input file.

#

Optional, Activates the tailwind build

tailwind-input-file = "style/tailwind.css"

The tailwind config file.

#

Optional, defaults to "./tailwind.config.js" which if is not present

is generated for you

tailwind-config-file = "./tailwind.config.js"

The browserlist https://browsersl.ist query used for optimizing the CSS.

#

Optional, defaults to "defaults". Env: LEPTOS_BROWSERQUERY.

browserquery = "defaults"

Assets source dir. All files found here will be copied and synchronized to site-root.

The assets-dir cannot have a sub directory with the same name/path as site-pkg-dir.

#

Optional. Env: LEPTOSASSETSDIR.

assets-dir = "assets"

JS source dir. wasm-bindgen has the option to include JS snippets from JS files

with #[wasm_bindgen(module = "/js/foo.js")]. A change in any JS file in this dir

will trigger a rebuild.

#

Optional. Defaults to "src"

js-dir = "src"

The IP and port where the server serves the content. Use it in your server setup.

#

Optional, defaults to 127.0.0.1:3000. Env: LEPTOSSITEADDR.

site-addr = "127.0.0.1:3000"

The port number used by the reload server (only used in watch mode).

#

Optional, defaults 3001. Env: LEPTOSRELOADPORT

reload-port = 3001

The command used for running end-to-end tests. See the section about End-to-end testing.

#

Optional. Env: LEPTOSEND2ENDCMD.

end2end-cmd = "npx playwright test"

The directory from which the end-to-end tests are run.

#

Optional. Env: LEPTOSEND2ENDDIR

end2end-dir = "integration" ```


Environment variables

The following environment variables are set when compiling the lib (front) or bin (server) and when the server is run.

Echoed from the Leptos config:

Directories used when building:

Note when using directories:

End-to-end testing

cargo-leptos provides end-to-end testing support for convenience. It is a simple wrapper around a shell command end2end-cmd that is executed in a specific directory end2end-dir.

The end2end-cmd can be any shell command. For running Playwright it would be npx playwright test.

What it does is equivalent to running this manually:

When testing the setup, please try the above first. If that works but cargo leptos end-to-end doesn't then please create a GitHub ticket.