crates.io Discord

Build tool for Leptos:

Leptos Logo



Features

Getting started

Install:

cargo install --locked cargo-leptos

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

cargo install --git https://github.com/akesson/cargo-leptos cargo-leptos

Help:

cargo leptos --help

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


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].

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 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 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 ```

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.

The environment variables are also provided by cargo-leptos when building, running and testing.

```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: OUTPUT_NAME.

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 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"

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.

#

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" ```