Docs
Concepts
Exports

Exports

Unlike defining modules in Node.js, we don't need to explicitly register exports like module.exports.xxx = xxx.

The #[napi] macro will automatically generate module registering code for you. This auto registering idea was inspired by node-bindgen (opens in a new tab).

Function

Exporting a function is incredibly simple. Just decorate a normal rust function with #[napi]:

lib.rs
#[napi]
fn sum(a: u32, b: u32) -> u32 {
	a + b
}

Const

lib.rs
#[napi]
pub const DEFAULT_COST: u32 = 12;
index.d.ts
export const DEFAULT_COST: number

Class

See class section for more details.

lib.rs
#[napi(constructor)]
struct Animal {
  pub name: String,
  pub kind: u32,
}
 
#[napi]
impl Animal {
  #[napi]
  pub fn change_name(&mut self, new_name: String) {
    self.name = new_name;
  }
}

Enum

See enum section for more details.

lib.rs
#[napi]
pub enum Kind {
  Dog,
  Cat,
  Duck,
}