Run node.js and .NET code in-process

Hero Image

The owin project allows running node.js and .NET code in-process. It provides an asynchronous mechanism for calling .NET code from node.js and node.js code from .NET. The owin module takes care of marshaling the data between V8 and CLR and reconciling the threading models.

With owin you can:

  1. Use 24,000+ npm modules for node.js and 11,000+ nuget packages and .NET Framework within a single application.
  2. Combine the benefits of single-threaded node.js and multi-threaded CLR to run applications composed of IO-bound workloads and CPU-bound computations in-process.
  3. Write node.js extensions in C# and .NET Framework instead of C/C++/Win32.
  4. Use excellent CLR debugging tools (e.g. Visual Studio) to debug .NET code in your application.

Owin is based on a prescriptive pattern of a fully asynchronous interop interface shown below. It combines the essential aspects of event-based, async node.js programming model with the modern, TPL based async model that .NET offers:


Check out the owin project on GitHub for in-depth description of the features it offers. Below is simple example that illustrates the gist of the idea.

Hello, world

You need Windows, node.js v0.8.x (tested with 0.8.19), and .NET Framework 4.5 on the machine.

Implemenent a .NET function to be called from node.js in Startup.cs as follows:

   using System.Threading.Tasks;  
namespace Owin.Sample  
    public class Startup  
        public Task<object> Invoke(object input)  
            return Task.FromResult<object>(".NET welcomes " + input.ToString());  

Compile it to Owin.Sample.dll with:

csc /target:library /out:Owin.Sample.dll Startup.cs

Install owin:

npm install owin

Implement the node.js application that will call into the .NET code in server.js:

var owin = require('owin');  
var helloWorld = owin.func('Owin.Sample.dll');  
helloWorld('JavaScript', function (error, result) {  
    if (error) throw error;  

Run the node.js application and enjoy the response generated by .NET code displayed to the console from the node.js callback function:

C:\projects\barebones>node sample.js  
.NET welcomes JavaScript

The sample shows calling a .NET function from node.js, passing a string parameter to it, and receiving a string result via a callback in node.js.


Visit the owin project on GitHub for in-depth documentation. Contributions and derived work welcome!

Check out the previous reincarnation of the owin@0.4.0 project to get a better idea of the scenarios that informed the project in the first place.



Most Recent

24 January 2022
Run Node.js from Google Sheets

Import data from any API or data source to Google Sheets using Node.js, NPM, and Fusebit Connectors.

21 January 2022
Linear and Discord Slash Commands

Learn how to build an interactive Slash Command for a Discord bot that lets users create a new issue in Linear.

19 January 2022
Add Slash Commands to Your Discord Bot!

Slash Commands are an extremely powerful way to provide rich interactivity for members of your Discord server, all you have to do is type “/” and you're ready to use your favorite bot.