156 breaking releases

Uses new Rust 2024

new 0.157.0 Jan 15, 2026
0.155.0 Dec 20, 2025
0.151.0 Oct 30, 2025
0.142.0 Jul 31, 2025
0.9.0 Nov 24, 2022

#1288 in Procedural macros

Download history 1046/week @ 2025-09-25 1060/week @ 2025-10-02 1125/week @ 2025-10-09 1052/week @ 2025-10-16 1104/week @ 2025-10-23 636/week @ 2025-10-30 617/week @ 2025-11-06 884/week @ 2025-11-13 513/week @ 2025-11-20 626/week @ 2025-11-27 768/week @ 2025-12-04 698/week @ 2025-12-11 821/week @ 2025-12-18 359/week @ 2025-12-25 592/week @ 2026-01-01 1135/week @ 2026-01-08

3,022 downloads per month
Used in 24 crates (7 directly)

MIT license

4KB

napi_sym

A proc_macro for Deno's Node-API implementation. It does the following things:

  • Marks the symbol as #[no_mangle] and rewrites it as unsafe extern "C" $name.
  • Asserts that the function symbol is present in symbol_exports.json.
  • Maps deno_napi::Result to raw napi_result.
use deno_napi::Env;
use deno_napi::Error;
use deno_napi::Result;
use deno_napi::napi_value;

#[napi_sym::napi_sym]
fn napi_get_boolean(
  env: *mut Env,
  value: bool,
  result: *mut napi_value,
) -> Result {
  let _env: &mut Env = env.as_mut().ok_or(Error::InvalidArg)?;
  // *result = ...
  Ok(())
}

symbol_exports.json

A file containing the symbols that need to be put into the executable's dynamic symbol table at link-time.

This is done using /DEF: on Windows, -exported_symbol,_ on macOS and --export-dynamic-symbol= on Linux. See cli/build.rs.

On Windows, you need to generate the .def file by running tools/napi/generate_symbols_lists.js.

Dependencies

~0.6–1.6MB
~33K SLoC