REST-like routing over named pipes.

Expose lightweight HTTP-style APIs from background services — without running a full HTTP server. ArgusTransfer brings the ARGUS/1.0 protocol, familiar verbs, status codes, and middleware to .NET inter-process communication on Windows, Linux, and macOS.

Quality Gate Coverage Maintainability Reliability Security Build Status Apache 2.0

What is it?

HTTP for processes that don’t need a web server.

Some services need an internal API but a full HTTP server is too heavy — or simply not allowed. ArgusTransfer gives you the request/response model you already know, transmitted over named pipes in a tight, text-based protocol called ARGUS/1.0. Routing, middleware, dependency injection, streaming bodies: everything you reach for in ASP.NET, sized for background work.

RESTful routing

Typed verbs (GET, POST, PUT, PATCH, DELETE, HEAD), route templates, and parameter constraints — build endpoints the way you build controllers.

Cross-platform IPC

Native named pipes on Windows, Unix domain sockets on Linux and macOS — same code on all three. No TCP socket, no HTTP listener, no firewall surface to harden.

Familiar status codes

Standard 2xx / 4xx / 5xx semantics, automatic 404 on no match, 501 on missing verb — behavior you already reason about.

Middleware pipeline

Compose global and per-endpoint middleware for logging, authorization, correlation, or anything else your handlers shouldn’t care about.

Streaming bodies

Chunked transfer encoding for large or open-ended payloads, with a configurable cap to defend against hostile senders.

.NET 10, modern stack

Built on Microsoft.Extensions.Hosting and DI, async/await throughout, with SBOM and provenance shipped on every release.

In ten lines

A pipe that answers HTTP.

Register a module, host the pipe, and you have a routable endpoint other processes can call.

public class HelloModule : IArgusModule
{
    public void AddRoutes(IArgusRouteBuilder app)
    {
        app.MapGet("/hello", context =>
        {
            context.Response = new ArgusResponse
            {
                StatusCode = ArgusStatusCode.Ok,
                Body       = "Hello from ArgusTransfer!"
            };
            return Task.CompletedTask;
        });
    }
}

See the full quick start →