Skip to content

integrio-intropy/intropy-framework

Repository files navigation

Intropy.Framework

A type-safe, observable pipeline framework for building system integrations in .NET.

Every pipeline is a chain of typed steps — deserialize, validate, transform, serialize, send — with built-in OpenTelemetry tracing and a result type system that enforces separation between business and technical failures.

Why?

Integrations between systems share the same problems: data needs to be moved, transformed, validated, and the failure modes need to be classified. This failure is a bad payload (business problem — route to a person), that failure is a flaky network call (technical problem — retry). Idempotency, observability, and orderly failure handling all need to be wired up consistently.

Intropy.Framework packages the structure: declare your steps, compose them with a builder, and the framework handles execution, tracing, idempotency hooks, and result classification.

Packages

Package Description
Intropy.Framework.Core Pipeline engine, step abstractions, result types
Intropy.Framework.Blocks Reusable pipeline blocks (Extractor, Loader, Transactional Integration)
Intropy.Framework.Adapters File adapters (SFTP, local, Azure Blob) via Dapr bindings
Intropy.Framework.Hosting Runtime orchestration (Dapr sidecar lifecycle, message subscription, idle timeout)
Intropy.Framework.EventDispatcher Attribute-based CloudEvent routing to typed handlers

For a full Transactional Integration worker, install Blocks and Hosting.

Quick start

dotnet add package Intropy.Framework.Blocks
dotnet add package Intropy.Framework.Hosting
builder.Services.AddIntropyFramework(opts => opts.ComponentName = "order-processor");

builder.Services.AddTransactionalIntegration(opts =>
{
    opts.DaprPubSubName = "pubsub";
    opts.DaprTopicName = "orders";
});

builder.Services.AddSendPipeline<Order, Invoice, Context>("order-to-invoice",
    (pb, sp) => pb
        .WithDeserializer(new OrderDeserializer())
        .WithValidator(new OrderValidator())
        .WithIdempotency(
            sp.GetRequiredService<IIdempotencyServiceClient>(),
            order => order.OrderId,
            order => order.CreatedAt)
        .WithTransformer(new OrderToInvoiceTransformer())
        .WithSerializer(new InvoiceSerializer())
        .WithSender(sp.GetRequiredService<InvoiceApiSender>())
        .WithBusinessIncidents(
            sp.GetRequiredService<IBusinessIncidentServiceClient>(),
            ctx => ctx.Metadata["message_id"]));

var runner = app.Services.GetRequiredService<TransactionalIntegrationRunner>();
return await runner.RunAsync();

See the Getting Started guide for the full walkthrough.

Requirements

  • .NET 10 or later
  • Dapr sidecar (for the Blocks, Adapters, and Hosting packages)

Documentation

Full documentation lives in docs/:

  • Getting Started — build a complete Transactional Integration from scratch
  • Concepts — pipeline execution, result types, step types, observability
  • Core — pipeline engine, builders, step types, and result types
  • Blocks — Transactional Integration, Extractor, Loader
  • Adapters — File adapters via Dapr bindings
  • Event Dispatcher — CloudEvent routing

Build and test

dotnet build Intropy.Framework.slnx
dotnet test Intropy.Framework.slnx

License

MIT © Integrio

About

A type-safe, observable pipeline framework for building system integrations in .NET.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages