* Add contributing section for jan * Update CONTRIBUTING.md Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com> --------- Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
2.5 KiB
2.5 KiB
Contributing to Tauri Backend
← Back to Main Contributing Guide
Rust backend that handles native system integration, file operations, and process management.
Key Modules
/src/core/app- App state and commands/src/core/downloads- Model download management/src/core/filesystem- File system operations/src/core/mcp- Model Context Protocol/src/core/server- Local API server/src/core/system- System information and utilities/src/core/threads- Conversation management/utils- Shared utility crate (CLI, crypto, HTTP, path utils). Used by plugins and the main backend./plugins- Native Tauri plugins (see plugins guide)
Development
Adding Tauri Commands
#[tauri::command]
async fn my_command(param: String) -> Result<String, String> {
Ok(format!("Processed: {}", param))
}
// Register in lib.rs
tauri::Builder::default()
.invoke_handler(tauri::generate_handler![my_command])
Building & Testing
# Development
yarn tauri dev
# Build
yarn tauri build
# Run tests
cargo test
State Management
#[tauri::command]
async fn get_data(state: State<'_, AppState>) -> Result<Data, Error> {
state.get_data().await
}
Error Handling
#[derive(Debug, thiserror::Error)]
pub enum AppError {
#[error("IO error: {0}")]
Io(#[from] std::io::Error),
}
Debugging
// Enable debug logging
env::set_var("RUST_LOG", "debug");
// Debug print in commands
#[tauri::command]
async fn my_command() -> Result<String, String> {
println!("Command called"); // Shows in terminal
dbg!("Debug info");
Ok("result".to_string())
}
Platform-Specific Notes
Windows: Requires Visual Studio Build Tools
macOS: Needs Xcode command line tools
Linux: May need additional system packages
#[cfg(target_os = "windows")]
use std::os::windows::process::CommandExt;
Common Issues
Build failures: Check Rust toolchain version IPC errors: Ensure command names match frontend calls Permission errors: Update capabilities configuration
Best Practices
- Always use
Result<T, E>for fallible operations - Validate all input from frontend
- Use async for I/O operations
- Follow Rust naming conventions
- Document public APIs
Dependencies
- Tauri - Desktop app framework
- Tokio - Async runtime
- Serde - JSON serialization
- thiserror - Error handling