Building
EVAnalyzer is written in Rust (2024 edition) and uses Cargo as its build system.
Requirements
| Tool | Version |
|---|---|
| Rust toolchain | 1.80 or later |
| Java JDK | 11 or later (required for Bio-Formats) |
| Linux system libraries (GUI) | libinput10 libxkbcommon0 libfontconfig1 libgbm1 |
Clone the repository
git clone https://github.com/evanalyzer/evanalyzer.gitcd evanalyzerDevelopment toolchain
rustup component add rustfmtcargo install slint-lsp # language server for .slint UI filescargo install slint-viewer # live preview of .slint filesBuild targets
Linux x86-64
cargo build-linuxWindows x86-64 (cross-compile from Linux)
cargo install cargo-xwincargo build-winLinux ARM64
apt install gcc-aarch64-linux-gnurustup target add aarch64-unknown-linux-gnucargo build-linux-armBuild artifacts are placed in target/<target>/release/.
Workspace crates
The workspace is split into focused crates:
| Crate | Description |
|---|---|
evanalyzer_core | Image I/O (Bio-Formats via JVM), processing algorithms, ROI model, pipeline execution |
evanalyzer_cfg | Project settings, JSON serialisation, pipeline command configuration |
evanalyzer_app | Application handle, shared project state |
evanalyzer_gui | Slint-based desktop GUI — viewport, histogram, ROI tools, classification panel |
evanalyzer_cli | Command-line interface for headless batch analysis |
evanalyzer_bin | Binary entry point — launches GUI or CLI depending on arguments |
Previewing the GUI inside a container
If developing inside a Docker devcontainer on Linux, allow X11 forwarding before starting the container:
xhost +local:dockerCode coverage
cargo install cargo-llvm-covrustup component add llvm-tools-preview
cargo llvm-cov # terminal reportcargo llvm-cov --html # HTML report → target/llvm-cov/cargo llvm-cov --lcov --output-path lcov.info # lcov format (e.g. VS Code Coverage Gutters)UI Performance Targets
| Action | Target | Rationale |
|---|---|---|
| Pan / drag | < 10 ms | Must feel attached to the cursor |
| Zoom | < 16 ms | Prevents motion sickness |
| Channel toggle | < 100 ms | Perceived as instant |
| Auto-adjust | < 200 ms | Acceptable for a complex calculation |