Skip to content

Getting started

Requirements

  • .NET 8 or .NET 10
  • A Jint engine created with UseDevTools()
  • A host loop that keeps servicing the engine, or a LibraryOwned target

Install the package:

bash
dotnet add package Jint.DevTools

Create and publish a target

csharp
using Jint;
using Jint.DevTools;

var engine = new Engine(options => options.UseDevTools());

await using var target = new EngineTarget(engine, new EngineTargetOptions
{
    Title = "Rules engine",
    Url = "rules.js"
});

await using var server = new DevToolsServer(); // loopback, ephemeral port
server.AddTarget(target);
server.Start();

Console.WriteLine($"DevTools: {server.BrowserHttpUrl}");

With the default Port = 0, the operating system chooses a free port. After Start(), use BoundPort, BrowserHttpUrl, or BrowserWebSocketUrl to discover it.

Pump the engine

EngineTarget defaults to ThreadMode.HostOwned. Both script and DevTools commands must run on the engine's owning thread:

csharp
while (!stopping)
{
    target.Pump();
    engine.Tasks.WaitForScheduledWork(TimeSpan.FromMilliseconds(50));
}

engine.Tasks.ProcessTasks() may be used instead of target.Pump(). If the host does not pump, clients receive Engine is not being pumped after CommandTimeout.

Run a named script

Source names make scripts easier to find and breakpoint in a client:

csharp
engine.Execute(
    """
    function total(a, b) {
        return a + b;
    }
    globalThis.result = total(20, 22);
    """,
    "rules.js");

Next, connect a client. For applications without an existing engine loop, see LibraryOwned hosting.