{"library":"node-api-dotnet","title":"Node-API for .NET Interoperability","description":"node-api-dotnet is a JavaScript (Node.js) library that provides high-performance, in-process interoperability with .NET applications. It enables seamless bi-directional communication, allowing JavaScript applications to load .NET assemblies and invoke .NET APIs, and conversely, enabling .NET applications to interact with JavaScript packages and APIs. The package is currently in 'Public Preview' (version 0.9.19), indicating active development with potential for minor breaking API changes in future releases. It differentiates itself by leveraging Node-API (N-API), ensuring broad compatibility across Node.js versions without recompilation and support for other Node-API compatible JavaScript runtimes. Key features include TypeScript type-definition generation for .NET APIs, robust async/await support for .NET Tasks and JavaScript Promises, and efficient handling of data streams, providing a more integrated and performant alternative to inter-process communication solutions for mixed-language applications.","language":"javascript","status":"active","last_verified":"Sun Apr 19","install":{"commands":["npm install node-api-dotnet"],"cli":null},"imports":["import * as dotnet from 'node-api-dotnet';","import * as dotnet from 'node-api-dotnet'; const Console = dotnet.System.Console;","import type { System } from 'node-api-dotnet';"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import * as dotnet from 'node-api-dotnet'; // Using ESM for modern Node.js & TypeScript\n\n// 1. Accessing a static .NET class and method\nconst Console = dotnet.System.Console;\nConsole.WriteLine('Hello from .NET via JavaScript!');\n\n// 2. Accessing a static property (e.g., .NET CLR Version)\n// System.Environment.Version is a common way to get CLR version in .NET\nconst clrVersion = dotnet.System.Environment.Version.ToString();\nconsole.log(`\\n.NET CLR Version: ${clrVersion}`);\n\n// 3. Creating and using an instance of a .NET class (e.g., System.Text.StringBuilder)\nconst StringBuilder = dotnet.System.Text.StringBuilder;\nconst sb = new StringBuilder('Initial string');\nsb.Append(' appended from JS!');\nsb.Append(`\\nCurrent UTC Time: ${new Date().toISOString()}`);\nconst finalString = sb.ToString();\nconsole.log(`\\nStringBuilder output:\\n${finalString}`);\n\n// Note: Async operations are also supported, e.g., for File I/O with .NET Tasks.\n// This example focuses on synchronous interop for brevity.","lang":"typescript","description":"Demonstrates importing the .NET interop module, calling a static .NET method, accessing a static property, and instantiating/using a .NET class (StringBuilder) from JavaScript with TypeScript.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":null}