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.