euv-cli
The official CLI tool for the euv UI framework, providing run/build/fmt modes with hot reload and wasm-pack integration.
Installation
cargo install euv-cli
After installation, the CLI binary is named
euv.
Usage
The CLI uses the pattern euv <action> where:
- Action:
run(build + start server),build(build only), orfmt(format euv macros)
All wasm-pack build arguments are transparently forwarded after --.
Run (build + dev server)
# Dev build with dev server
euv run --dev --crate-path ./example --port 80 --www-dir www --index-html ./template.html -- --target web --out-dir www/pkg --out-name euv --no-typescript --no-pack --no-gitignore
# Release build with dev server
euv run --release --crate-path ./example --port 80 --www-dir www --index-html ./template.html -- --target web --out-dir www/pkg --out-name euv --no-typescript --no-pack --no-gitignore
# Dev build for local development
euv run --dev --crate-path ./example --port 80 --www-dir www -- --target web --out-dir www/pkg --out-name euv --no-typescript --no-pack --no-gitignore
# Release build for local development
euv run --release --crate-path ./example --port 80 --www-dir www -- --target web --out-dir www/pkg --out-name euv --no-typescript --no-pack --no-gitignore
Fmt (format euv macros)
Format euv macro invocations (html!, class!, css_vars!, watch!) in Rust source files:
# Format all .rs files in the current directory (recursive)
euv fmt
# Format all .rs files in a specific directory
euv fmt --path ./src
# Format a single file
euv fmt --path src/main.rs
# Check if formatting is needed without modifying files
euv fmt --check
# Check a specific path
euv fmt --path ./src --check
Formatting Rules
- Tag name and
{separated by exactly one space - Attribute name immediately followed by
:, then one space before the value if { expr }/match { expr }/for pattern in { expr }with proper spacing=>inwatch!macros with proper spacing- Content inside expression braces
{ expr }is preserved verbatim; only template-level whitespace is normalized
Fmt Options
| Option | Short | Default | Description |
|---|---|---|---|
--path |
-p |
. |
Path to the directory or file to format |
--check |
false |
Check if formatting is needed without modifying files |
Build (build only)
# Dev build
euv build --dev --crate-path ./example --www-dir www --index-html ./template.html -- --target web --out-dir www/pkg --out-name euv --no-typescript --no-pack --no-gitignore
# Release build
euv build --release --crate-path ./example --www-dir www --index-html ./template.html -- --target web --out-dir www/pkg --out-name euv --no-typescript --no-pack --no-gitignore
# Dev build for local development
euv build --dev --crate-path ./example --www-dir www -- --target web --out-dir www/pkg --out-name euv --no-typescript --no-pack --no-gitignore
# Release build for local development
euv build --release --crate-path ./example --www-dir www -- --target web --out-dir www/pkg --out-name euv --no-typescript --no-pack --no-gitignore
Via Cargo
Run (build + dev server)
cargo run -p euv-cli -- run --dev --crate-path ./example --port 80 --www-dir www --index-html ./template.html -- --target web --out-dir www/pkg --out-name euv --no-typescript --no-pack --no-gitignore
cargo run -p euv-cli -- run --release --crate-path ./example --port 80 --www-dir www --index-html ./template.html -- --target web --out-dir www/pkg --out-name euv --no-typescript --no-pack --no-gitignore
cargo run -p euv-cli -- run --dev --crate-path ./example --port 80 --www-dir www -- --target web --out-dir www/pkg --out-name euv --no-typescript --no-pack --no-gitignore
cargo run -p euv-cli -- run --release --crate-path ./example --port 80 --www-dir www -- --target web --out-dir www/pkg --out-name euv --no-typescript --no-pack --no-gitignore
Build (build only)
cargo run -p euv-cli -- build --dev --crate-path ./example --www-dir www --index-html ./template.html -- --target web --out-dir www/pkg --out-name euv --no-typescript --no-pack --no-gitignore
cargo run -p euv-cli -- build --release --crate-path ./example --www-dir www --index-html ./template.html -- --target web --out-dir www/pkg --out-name euv --no-typescript --no-pack --no-gitignore
cargo run -p euv-cli -- build --dev --crate-path ./example --www-dir www -- --target web --out-dir www/pkg --out-name euv --no-typescript --no-pack --no-gitignore
cargo run -p euv-cli -- build --release --crate-path ./example --www-dir www -- --target web --out-dir www/pkg --out-name euv --no-typescript --no-pack --no-gitignore
Fmt (format euv macros)
# Format euv macros
cargo run -p euv-cli -- fmt --path ./example
# Check formatting
cargo run -p euv-cli -- fmt --check --path ./example
Options
| Option | Short | Default | Description |
|---|---|---|---|
--crate-path |
-c |
. |
Path to the Rust crate containing the WASM application |
--port |
-p |
80 |
Port for the development server |
--www-dir |
www |
Directory name for static assets and generated HTML (relative to crate-path) | |
--index-html |
Path to a custom index.html template file | ||
--dev |
Create a development build (default if no mode specified) | ||
--release |
Create a release build with optimizations | ||
--profiling |
Create a profiling build with optimizations and debug info |
How --www-dir Works
The --www-dir option controls where the CLI looks for and generates static assets:
index.htmlis generated inside{crate-path}/{www-dir}/- WASM artifacts are placed in
{crate-path}/{www-dir}/pkg/by default (unless overridden by--out-dir) .gitignoregenerated bywasm-packin the output directory is automatically removed after build- Dev server serves files under the
/{www-dir}/route prefix - JS import path in
index.htmlis automatically computed relative to the www directory
For example, with --www-dir www:
example/
├── www/ ← static assets directory
│ ├── index.html ← generated HTML
│ └── pkg/ ← WASM build output
│ ├── euv.js
│ └── euv_bg.wasm
wasm-pack Options (transparent passthrough after --)
All wasm-pack build flags are forwarded as-is. Common options:
| Option | Description |
|---|---|
--target |
Target environment: bundler, nodejs, web, no-modules, deno |
--out-dir |
Output directory with a relative path |
--out-name |
Output file names, defaults to package name |
--scope |
The npm scope to use in package.json |
--mode |
Steps to be run: no-install, normal, force |
--no-typescript |
Disable TypeScript declaration file generation |
--weak-refs |
Enable usage of the JS weak references proposal |
--reference-types |
Enable usage of WebAssembly reference types |
--no-pack |
Do not generate a package.json |
--no-opt |
Skip optimization with wasm-opt |
See wasm-pack build --help for the full list of options.
License
This project is licensed under the MIT License. See the LICENSE file for details.
Contributing
Contributions are welcome! Please open an issue or submit a pull request.
Contact
For any inquiries, please reach out to the author at root@ltpp.vip.