Skip to content

Building

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

ToolVersion
Rust toolchain1.80 or later
Java JDK11 or later (required for Bio-Formats)
Linux system libraries (GUI)libinput10 libxkbcommon0 libfontconfig1 libgbm1
Terminal window
git clone https://github.com/evanalyzer/evanalyzer.git
cd evanalyzer
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
Terminal window
cargo build-linux
Terminal window
cargo install cargo-xwin
cargo build-win
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/.

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

If developing inside a Docker devcontainer on Linux, allow X11 forwarding before starting the container:

Terminal window
xhost +local:docker
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)
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