Napi
High-level Node.js N-API bindings for Rust ✨🦀🚀✨— ⚠️Deprecated in favor of https://github.com/napi-rs/napi-rs ⚠️
[![Travis Build Status][travis-badge]][travis-url] [![AppVeyor Build Status][appveyor-badge]][appveyor-url] The project is written primarily in Rust, distributed under the MIT License license, first published in 2017. Key topics include: addons, n-api, napi, nodejs, rust.
Node.js N-API for Rust! [work in progress]
High-level N-API bindings for Node.js addons written in Rust.
Warning: this is a proof-of-concept implementation that's not intended
for use yet. The project is under initial phase of development, the API is a
quite sketchy and is going to be refactored heavily. If you are interested in
contributing, though, it is super welcome!
The project is covered by a Code of Conduct.
Crates
napi-sys: low-level bindings to N-API generated from
node_api.h
usingbindgen.napi: high-level and rusty wrappers aroundnapi-sys.napi-derive: contains a procedural macro that allows to
construct typesafe structures that represent N-API callback parameters and
automatically validate the arguments that JavaScript code passes in.
Example
Check out the example directory to see the full source code and
project structure of this example. (TODO: initialize the module from Rust too).
lib.rs
rust#[macro_use] extern crate napi; #[macro_use] extern crate napi_derive; use napi::{NapiEnv, NapiNumber, NapiResult, NapiUndefined}; #[derive(NapiArgs)] struct HelloArgs; fn hello<'a>(env: &'a NapiEnv, _: &HelloArgs) -> NapiResult<NapiUndefined<'a>> { println!("Hello from the Rust land!"); NapiUndefined::new(env) } #[derive(NapiArgs)] struct AddArgs<'a> { first: NapiNumber<'a>, second: NapiNumber<'a>, } fn add<'a>(env: &'a NapiEnv, args: &AddArgs<'a>) -> NapiResult<NapiNumber<'a>> { let first = args.first.to_i32()?; let second = args.second.to_i32()?; NapiNumber::from_i32(env, first + second) } napi_callback!(example_hello, hello); napi_callback!(example_add, add);
example.js
javascript'use strict'; const addon = require('./build/Release/example.node'); addon.hello(); console.log(addon.add(1, 2));
Contributors
Showing top 2 contributors by commit count.
