Platform Overview

Ordered integrations with a history you can act on.

NimBus is a .NET integration platform on Azure Service Bus, with session ordering at each receiving endpoint, processing history in SQL Server or Cosmos DB, and an operator console for recovery. Deploy it in your own environment and connect applications through adapters.

Azure Service Bus transport Cosmos DB or SQL Server store Session-ordered Processing history
How a message travels

Published once, routed by type, delivered in order — and recorded at every hop

A publisher drops one event on its endpoint's topic. NimBus's routing rules forward it to whoever consumes that type, delivers it to the handler in session order, and reports every state change to the Resolver.

PublishProducer sendsOne event onto its endpoint topic.
RouteBy event typeRules forward it to each consumer of that type.
OrderPer sessionSame key means strict order, one at a time.
HandleConsumer runsYour handler processes the event.
OutcomeSettledCompleted, or sent down a failure path.
Resolver Every hop reports here — one central, queryable audit of each message's state, from Pending to Completed or Failed.
routing keyed on event type loop-guarded forwards session locks preserve order
What sets it apart

Four things raw Service Bus doesn't hand you

01

Session-ordered processing

Messages sharing a key are handled strictly in order. A poison message blocks only its own session — the rest of the bus keeps moving.

02

The Resolver

One centralized record of every message's outcome, start to finish. The recorded processing history is queryable from the operator console.

03

Operator WebApp

A live console to watch flows and resubmit or skip stuck messages — recover from failures without a redeploy.

04

Declarative topology

You declare endpoints in code. NimBus provisions the topics, subscriptions, and routing rules to match — idempotently.

When a handler fails

Every failure has a defined path — nothing is left ambiguous

The kind of exception decides where the message goes. You configure the retry policy; NimBus routes the rest.

Transient error
A timeout, a 503 — worth trying again.
retry & redeliver
Permanent error
Bad payload, validation, an unrecoverable 4xx.
straight to dead-letter
Unexpected error
Something the handler didn't anticipate.
fail & block the session
Long-running work
Waiting on an external job to finish.
park as pending-handoff
outcome states Pending Completed Failed Deferred Session-blocked
The pieces

The anatomy of a NimBus app

Configure the SDK, storage, pipeline, and receiver hosting through dependency injection. You bring the events and handlers; NimBus brings ordering, routing, storage, and recovery.

EEvents

Plain classes. A [SessionKey] attribute sets the ordering scope for that event.

PEndpoints & Platform

Declare what each endpoint produces and consumes; the Platform is the single source of topology truth.

SPluggable storage

Cosmos DB or SQL Server behind one contract — with a conformance suite keeping them honest.

MPipeline middleware

Logging, metrics, validation — plus circuit-breaker, rate-limiting, and PII masking as opt-ins.

OTransactional outbox

Record outgoing messages in your SQL business transaction; dispatch them after commit. Handlers should remain idempotent.

HHosting & SDK

Run as a Worker or Azure Function.

AddNimBusPublisher / AddNimBusSubscriber

AAgent-ready

A schema registry with REST and MCP surfaces so AI agents can join the bus as first-class participants.

NNotifications

Failures, dead-letters, and session blocks fan out to webhook or email channels.

Standing it up

One command, or your own pipeline

infratopologyapps
  • nb setup chains Bicep infrastructure, topology provisioning, and app deploy in order.
  • GitHub Actions with OIDC federated credentials — no stored secrets.
  • The Resolver runs on Flex Consumption; the management WebApp on App Service.
3 layers
Azure resources, Service Bus topology, and application code — the same three steps whether it's one command from a laptop or a CI pipeline.

Ready to try it?

Try locally Back to Home