Krate
Try Krate
Answer

The .krate format: one app file for every desktop

A .krate file holds your app as a WebAssembly component plus a manifest, and the same bytes open on macOS, Windows and Linux through the native Krate app runtime. Each person installs that runtime once; the app starts with no file or network access and asks for what it needs.

Reviewed against Krate 0.5.4. 3 min read

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.

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.

Verify a shared artifact yourself

Start with an app you built or reviewed. Install a compatible runtime on each target machine, copy the same file, record krate --version, inspect permissions and run it:

krate --version
krate run app.krate --dump-caps
krate run app.krate --prompt

Compare the full-file SHA-256 on each host. On macOS use shasum -a 256 app.krate; on Linux use sha256sum app.krate; in Windows PowerShell use Get-FileHash app.krate -Algorithm SHA256. Matching hashes establish identical bytes, not correctness or trust.

Then complete the same meaningful task on each OS: load representative data, interact with the UI, save, close and reopen. Test denied permissions and OS-specific file dialogs. Keep runtime versions, hashes and results together. This is a reproduction procedure, not a claim that every application has already passed that test.

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.

More answers about shipping desktop apps

Build with Krate

Start with the runtime and a project that fits the current APIs. The runtime and CLI are MIT OR Apache-2.0; Studio has a separate license. Check the licensing details and capability limits.