Skip to content

Building

EVAnalyzer is written in Rust (2024 edition) and uses Cargo as its build system.

Requirements

ToolVersion
Rust toolchain1.80 or later
Java JDK11 or later (required for Bio-Formats)
Linux system libraries (GUI)libinput10 libxkbcommon0 libfontconfig1 libgbm1

Clone the repository

Terminal window
git clone https://github.com/evanalyzer/evanalyzer.git
cd evanalyzer

Development toolchain

Terminal window
rustup component add rustfmt
cargo install slint-lsp # language server for .slint UI files
cargo install slint-viewer # live preview of .slint files

Build targets

Linux x86-64

Terminal window
cargo build-linux

Windows x86-64 (cross-compile from Linux)

Terminal window
cargo install cargo-xwin
cargo build-win

Linux ARM64

Terminal window
apt install gcc-aarch64-linux-gnu
rustup target add aarch64-unknown-linux-gnu
cargo build-linux-arm

Build artifacts are placed in target/<target>/release/.

Workspace crates

The workspace is split into focused crates:

CrateDescription
evanalyzer_coreImage I/O (Bio-Formats via JVM), processing algorithms, ROI model, pipeline execution
evanalyzer_cfgProject settings, JSON serialisation, pipeline command configuration
evanalyzer_appApplication handle, shared project state
evanalyzer_guiSlint-based desktop GUI — viewport, histogram, ROI tools, classification panel
evanalyzer_cliCommand-line interface for headless batch analysis
evanalyzer_binBinary 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:

Terminal window
xhost +local:docker

Code coverage

Terminal window
cargo install cargo-llvm-cov
rustup component add llvm-tools-preview
cargo llvm-cov # terminal report
cargo 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

ActionTargetRationale
Pan / drag< 10 msMust feel attached to the cursor
Zoom< 16 msPrevents motion sickness
Channel toggle< 100 msPerceived as instant
Auto-adjust< 200 msAcceptable for a complex calculation