- Add complete dark mode system with theme context and toggle - Implement dark mode toggle component in navigation menu - Add client-side routing with SSR-safe signal handling - Fix language selector styling for better dark mode compatibility - Add documentation system with mdBook integration - Improve navigation menu with proper external/internal link handling - Add comprehensive project documentation and configuration - Enhance theme system with localStorage persistence - Fix arena panic issues during server-side rendering - Add proper TypeScript configuration and build optimizations 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
4.5 KiB
Leptos Serve Multiple Binary Targets Fix
Problem
When running cargo leptos serve, the following error occurred:
Error:
0: at `/Users/jesusperezlorenzo/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/cargo-leptos-0.2.35/src/lib.rs:43:76`
1: at `/Users/jesusperezlorenzo/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/cargo-leptos-0.2.35/src/config/mod.rs:58:84`
2: Several bin targets found for member "server", please specify which one to use with: [[workspace.metadata.leptos]] bin-target = "name"
Root Cause
The server crate had multiple binary targets:
server(fromsrc/main.rs) - the main application serverconfig_tool(fromsrc/bin/config_tool.rs) - configuration management utility
Cargo-leptos couldn't determine which binary target to use for the leptos serve command.
Solution
1. Added bin-target specification to workspace configuration
In template/Cargo.toml, added the bin-target specification:
[[workspace.metadata.leptos]]
# The name used by wasm-bindgen/cargo-leptos for the JS/WASM bundle. Defaults to the crate name
output-name = "website"
# Specify which binary target to use (fixes multiple bin targets error)
bin-target = "server"
# ... rest of configuration
2. Added explicit binary target definitions
In template/server/Cargo.toml, added explicit binary targets:
# Binary targets
[[bin]]
name = "server"
path = "src/main.rs"
[[bin]]
name = "config_tool"
path = "src/bin/config_tool.rs"
3. Fixed tokio LocalSet runtime issue
Added proper LocalSet configuration to handle leptos local tasks:
In template/server/src/main.rs:
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Create a LocalSet to handle leptos local tasks
let local = tokio::task::LocalSet::new();
local.run_until(run_server()).await
}
async fn run_server() -> Result<(), Box<dyn std::error::Error>> {
// All server logic moved here
// ...
}
4. Fixed WASM compatibility issue
Added the js feature to uuid dependencies for WASM target compatibility:
In template/server/Cargo.toml:
uuid = { version = "1.17", features = ["v4", "serde", "js"], optional = true }
In template/shared/Cargo.toml:
uuid = { version = "1.17", features = ["v4", "serde", "js"] }
Verification
After applying the fixes:
- ✅
cargo leptos serveno longer shows the "Several bin targets found" error - ✅ No more "spawn_local called from outside of a task::LocalSet" runtime panics
- ✅
cargo leptos buildcompletes successfully - ✅ WASM compilation works without uuid randomness errors
- ✅ All project tests continue to pass
Usage
Now you can use cargo-leptos commands without issues:
# Start development server
cargo leptos serve
# Start with custom configuration
cargo leptos serve -- -c config.dev.toml
# Build the project
cargo leptos build
# Build for production
cargo leptos build --release
# Watch for changes
cargo leptos watch
Files Modified
template/Cargo.toml- Addedbin-target = "server"to leptos metadatatemplate/server/src/main.rs- Added LocalSet configuration for leptos runtimetemplate/server/Cargo.toml- Added explicit binary targets and fixed uuid featurestemplate/shared/Cargo.toml- Fixed uuid features for WASM compatibilitytemplate/README.md- Added leptos serve documentationtemplate/docs/LEPTOS_SERVE.md- Created comprehensive leptos documentation
Key Configuration
The critical fix is in the workspace Cargo.toml:
[[workspace.metadata.leptos]]
bin-target = "server" # This line fixes the multiple targets error
bin-package = "server"
lib-package = "client"
This tells cargo-leptos to use the server binary target (from src/main.rs) instead of the config_tool binary when running leptos commands.
Additional Benefits
The fixes provide:
- Clearer project structure documentation
- Better IDE support for binary targets
- More predictable build behavior
- Proper leptos runtime context for local task spawning
- Enhanced error handling and graceful shutdown
Testing
To verify the fix works:
# Should work without errors
cargo leptos serve --help
# Should build successfully
cargo leptos build
# Should start development server
cargo leptos serve -- -c config.dev.toml