npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@arnabxd/ntgcalls-napi

v0.3.3

Published

Thread-safe Rust N-API native bindings for libntgcalls

Readme

@arnabxd/ntgcalls-napi

npm Version npm Total Downloads Release CI GitHub Stars

Platform Support

Lint · Biome

Thread-safe Node-API (N-API) native bindings in Rust for libntgcalls (C-shared WebRTC library). Fully compatible with Node.js and Bun.


🚀 Key Features

  • High-Level JS Wrapper: Native bindings wrapped in a clean, standard EventEmitter class.
  • Smart Parameter Mapping: Automatically accepts either a JavaScript number or a bigint for Telegram Chat/User IDs, timestamps, and fingerprints, eliminating manual BigInt conversions.
  • 100% Thread-Safe Callbacks: Translates background native C++ WebRTC thread events into Node.js event-loop tasks crash-free using N-API ThreadsafeFunction.
  • Async Promise-Based API: Non-blocking async operations (create, connect, etc.) delegated to a Tokio threadpool via safe one-shot synchronization channels.
  • RPATH Isolation: Automatically resolves the dynamic dependency libntgcalls relative to the native addon directory using $ORIGIN/lib RPATH (no need for LD_LIBRARY_PATH!).

📦 Installation

npm install @arnabxd/ntgcalls-napi

[!NOTE] The platform-specific binary is automatically downloaded at postinstall time, so compilation is not required under normal use.


🛠️ Prerequisites (For Compiling From Source)

  1. Rust & Cargo:
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  2. libntgcalls: Download the platform-appropriate libntgcalls shared library (libntgcalls.so / libntgcalls.dylib / ntgcalls.dll) from the ntgcalls releases and place it into the ./lib/ folder prior to compilation.

🏗️ Build Instructions

To compile the native binary from source:

npm run build

This runs @napi-rs/cli (napi build --release --dts binding.d.ts) which compiles the Rust crate and outputs ntgcalls.node in the package root.


📚 Quick Start Usage Example

import { NtgCalls } from '@arnabxd/ntgcalls-napi';

const ntg = new NtgCalls();

// Register WebRTC event listeners (Fully typed!)
ntg.on('connection-change', (chatId, kind, state) => {
  console.log(`Connection changed: chat=${chatId}, kind=${kind}, state=${state}`);
});

ntg.on('stream-end', (chatId, streamType, streamDevice) => {
  console.log(`Stream ended: chat=${chatId}, type=${streamType}, device=${streamDevice}`);
});

// Start a WebRTC session (supports either number or bigint!)
const chatId = -1001185324811n; 
const offerSdp = await ntg.create(chatId);

console.log('Generated WebRTC Offer SDP:', offerSdp);

For comprehensive details on all available APIs, data structures, and best practices, check the Client Integration Guide (DOC.md).


🙏 Credits & Acknowledgements

  • ntgcalls — the native C/C++ WebRTC library by the pytgcalls team that this package binds to. All the heavy WebRTC lifting lives in libntgcalls; full credit for that work goes to its authors.
  • TgMusicBot by Ashok Shau — used as a reference for the call lifecycle and signaling flow this wrapper exposes.