When attached to the main function this attribute will adjust it to properly throw errors if they can be.

fn main() -> Result<(), JsValue> {
    Err(JsValue::from("this error message will be thrown"))

The attribute also allows using async fn main() in Cargo binaries.

async fn main() {
    // ...

This attribute is only intended to be used on the main function of binaries or examples. Unlike #[wasm_bindgen(start)], it will not cause an arbitrary function to be executed on start in a library.

The return type support is modeled after Termination. () and Infallible are supported, but Termination itself is not. In order, wasm-bindgen will first detect a Result<(), impl Into<JsValue>> and will throw proper JsValues, Result<(), impl Debug> will convert an error to a string and throw that.