Documentation

Building from source

Build komorebi.exe yourself on Windows with Rust and the Visual Studio Build Tools, and run the project's checks.

On this page

Komorebi is written in Rust with Slint (Fluent style, software renderer). Other main crates are rusqlite, imap, lettre, mail-parser and keyring-core with the Windows Credential Manager store.

Requirements

  • Windows 10 or 11, x64.
  • Rust. rustup picks the toolchain pinned in rust-toolchain.toml.
  • The Visual Studio Build Tools with the Desktop development with C++ workload: the MSVC linker, the Windows SDK and its rc.exe, which embeds the icon, version information and manifest.

Build and run

git clone https://github.com/RusticStack/komorebi
cd komorebi
cargo build --release --locked
.\target\release\komorebi.exe

komorebi.exe is a single file with the C runtime linked in, so you can copy it anywhere. Its data lives in %LOCALAPPDATA%\komorebi, as the installed app's does.

Checks

The same checks CI runs:

cargo fmt --check
cargo clippy --all-targets --locked -- -D warnings
cargo test --locked
pwsh scripts/check-pins.ps1
cargo deny --locked check licenses advisories

After a release build, target\release\komorebi.exe must be at most 20,500,000 bytes, and its version information shows the Cargo version.

A boot check without your mail

Komorebi can render its window to a file and exit, against a throwaway cache filled with made-up messages, with no network and no access to your passwords:

cargo run --release --locked --example seed -- $env:TEMP\seed.sqlite3 2000
$env:KOMOREBI_OFFLINE = 1; $env:KOMOREBI_DB = "$env:TEMP\seed.sqlite3"
$env:KOMOREBI_SNAPSHOT = "$env:TEMP\boot.bmp"; $env:KOMOREBI_SNAPSHOT_SELECT = 0
$env:KOMOREBI_SNAPSHOT_CHECK = 1; $env:KOMOREBI_TIMING = 1
(Start-Process target\release\komorebi.exe -NoNewWindow -Wait -PassThru).ExitCode

The exit code is 0 when the message list and the reader are not blank. KOMOREBI_TIMING prints the launch timings; the project's budget is 200 ms to the first frame. The screenshots on this site were made the same way.

Contributing

Read CONTRIBUTING.md and the scope and non-goals first. The README's "Translations" section explains how to add a language.