4.5 KiB
Leptos Starter Template
This is a template demonstrating how to integrate TailwindCSS with the Leptos web framework and the cargo-leptos tool.
If you don't have cargo-leptos
installed you can install it with
cargo install --locked cargo-leptos
Then run
npx tailwindcss -i ./input.css -o ./style/output.css --watch
and
cargo leptos watch
in this directory.
Open browser on http://localhost:3000/
You can begin editing your app at src/app.rs
.
Installing Tailwind
You can install Tailwind using npm
:
npm install -D tailwindcss
If you'd rather not use npm
, you can install the Tailwind binary here.
Adding Tailwind plugins
If you'd like to add Tailwind plugins, such as DaisyUI, you can do the following:
npm install -D daisyui@latest
Then add the plugin to your exports in tailwind.config.js
:
module.exports = {
//...
plugins: [require("daisyui")],
};
And re-run the following to generate the css:
npx tailwindcss -i ./input.css -o ./style/output.css --watch
Setting up with VS Code and Additional Tools
If you're using VS Code, add the following to your settings.json
"emmet.includeLanguages": {
"rust": "html",
"*.rs": "html"
},
"tailwindCSS.includeLanguages": {
"rust": "html",
"*.rs": "html"
},
"files.associations": {
"*.rs": "rust"
},
"editor.quickSuggestions": {
"other": "on",
"comments": "on",
"strings": true
},
"css.validate": false,
Install Tailwind CSS Intellisense.
Install "VS Browser" extension, a browser at the right window.
Allow vscode Ports forward: 3000, 3001.
Notes about Tooling
By default, cargo-leptos
uses nightly
Rust, cargo-generate
, and sass
. If you run into any trouble, you may need to install one or more of these tools.
rustup toolchain install nightly --allow-downgrade
- make sure you have Rust nightlyrustup default nightly
- setup nightly as default, or you can use rust-toolchain file later onrustup target add wasm32-unknown-unknown
- add the ability to compile Rust to WebAssemblycargo install cargo-generate
- installcargo-generate
binary (should be installed automatically in future)npm install -g sass
- installdart-sass
(should be optional in future
Alternatives to cargo-leptos
This crate can be run without cargo-leptos
, using wasm-pack
and cargo
. To do so, you'll need to install some other tools. 0. cargo install wasm-pack
- Edit the
[package.metadata.leptos]
section and setsite-root
to"."
. You'll also want to change the path of the<StyleSheet / >
component in the root component to point towards the CSS file in the root. This tells leptos that the WASM/JS files generated by wasm-pack are available at./pkg
and that the CSS files are no longer processed by cargo-leptos. Building to alternative folders is not supported at this time. You'll also want to edit the call toget_configuration()
to pass inSome(Cargo.toml)
, so that Leptos will read the settings instead of cargo-leptos. If you do so, your file/folder names cannot include dashes.
Server Side Rendering With Hydration
To run it as a server side app with hydration, first you should run
wasm-pack build --target=web --debug --no-default-features --features=hydrate
to generate the WebAssembly to hydrate the HTML delivered from the server.
Then run the server with cargo run
to serve the server side rendered HTML and the WASM bundle for hydration.
cargo run --no-default-features --features=ssr
Note that if your hydration code changes, you will have to rerun the wasm-pack command above before running
cargo run
Client Side Rendering
You'll need to install trunk to client side render this bundle.
cargo install trunk
Then the site can be served withtrunk serve --open
Attribution
Many thanks to GreatGreg for putting together this guide. You can find the original, with added details, here.
Playwright Testing
- Run
cargo make setup
to install dependencies - Run
cargo leptos test
orcargo leptos end-to-end
to run the test