jan/src-tauri/CONTRIBUTING.md
Dinh Long Nguyen b0eec07a01
Add contributing section for jan (#6231) (#6232)
* 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>
2025-08-20 10:18:35 +07:00

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