What is portable, and what is installed?
The application file stays the same. The runtime is installed for each machine's operating system and CPU. It executes the WebAssembly component and handles permitted host operations. Your users do not need your development toolchain to open a packed app.
This is not a converter for arbitrary Windows executables, native libraries or existing Electron/Tauri packages. The application must use Krate's supported interfaces and a compatible format/API version. See the distribution-model comparison.
Try one file tested on all three systems
Download chart.krate, a bar chart of a week's rainfall. Follow the tested sample instructions to inspect its permissions and run it. The Rust source is available separately.
Full-file SHA-256: 3d290c48f74936d5cdb45ceb0ee945bd0f7b5b0b21f87f79917bced3b4ca73c3.
The same bundle passed automated headless replay and rendering checks on macOS, Windows and Linux in this CI run with source-built runtimes. Each host checks its own reference image; this is CI evidence, not an interactive test.
- macOS: reference image and recorded bundle hash.
- Windows: reference image and recorded bundle hash.
- Linux: reference image and recorded bundle hash.
What is inside a .krate file?
The bundle is a ZIP-based application format, not a renamed executable. Its core entries are manifest.toml and code.wasm. Bundles can also contain assets, source, SDK material and format-specific metadata. The normal authoring workflow carries editable source with the app.
The manifest identifies the app and its requested capabilities. The component calls Krate interfaces described in WIT; the native runtime supplies their implementations. Files, network and other host resources are governed by the capability model.
Read the bundle implementation and interface definitions. Do not put credentials or private inputs in source or assets that will be distributed.
Does one file remove all platform work?
No. Krate maintains native runtime builds. Developers still need to test behavior on target systems, check supported capabilities and manage API/format compatibility. A runtime update may be necessary for apps using newer interfaces.
The benefit is a shared application artifact rather than a separate app package for each OS. OS installation, trust checks and updates still apply to the runtime. The format does not make unsupported APIs available or bypass platform security.
What about size and performance?
Measure three different things: the compiled component, the complete bundle you distribute, and the installed runtime plus app. Source and assets can make the bundle much larger than its component. A shared runtime is not free disk space; its cost is paid once and must appear in first-app comparisons.
The measurement reports identify workloads and accounting boundaries. Do not extrapolate a notes workload into a universal speed, memory or file-size claim.
Check whether your project fits
Krate's aim is software distribution for developers, not a fixed list of toy apps. What determines today's fit is the available API surface: UI, data, networking, media and OS integration. Check the current limits and use the porting guide to inventory dependencies before committing to a migration.
Questions
What does the person opening a .krate need?
The Krate runtime, installed once for their system. After that every .krate opens from the file; they do not need Rust, your source or your build tools.
Can a .krate file run on a phone?
Not today. Krate publishes runtimes for macOS, Windows and Linux, on Intel and ARM. Phones are not supported yet.
Is a .krate the same as a Rust crate?
No. A crate is a Rust package on crates.io. A .krate file is a packaged application: a WebAssembly component, its manifest, and optional source and assets, opened by the Krate runtime.
How do I check that two copies are the same file?
Compare SHA-256 hashes: shasum -a 256 on macOS, sha256sum on Linux, Get-FileHash in Windows PowerShell. Matching hashes mean identical bytes, not that the app is correct.