xxxxx
Apache 2.0
Transmitly OSS logo

Transactional communciations that scale with your app.

Design communications once, deliver across Email / SMS / Voice / Push with pipelines, templates, and delivery reports built in.

Channels Email / SMS / Voice / Push
Provider agnostic Swap SMTP, SendGrid, Twilio, Infobip, Firebase
Templates Fluid or Scriban, defined once per intent

Delivery playbook

Pipeline → Provider → Delivery

Define the pipeline

Compose channel + template once per intent.

Pick the provider

Start with SMTP; swap SendGrid, Twilio, Infobip, Firebase in a central location.

Dispatch & observe

Send from your app and collect delivery reports with ease.

Vendor-agnostic, template-friendly, and ready for your stack.

Why teams pick Transmitly

Strategy first

Pipeline-driven delivery

Centralize how each communication is composed and dispatched across channels.

Adapter friendly

No provider lock-in

Switch from SMTP to SendGrid, Twilio or Infobip without touching your business logic.

Visibility

Track every delivery

Capture delivery reports from providers and route them into your logs, alerts, or dashboards.

Get started in minutes

  1. Install
    Bring in Transmitly (and the SMTP provider to start).
  2. Wire a provider
    Add your host, credentials, and defaults.
  3. Declare a pipeline
    Define channels and templates for your intent.
  4. Dispatch
    Send and observe with delivery reports.

dotnet CLI

dotnet add package Transmitly
dotnet add package Transmitly.ChannelProvider.Smtp

Configure & dispatch

using Transmitly;

ICommunicationsClient communicationsClient = new CommunicationsClientBuilder()
    .AddSmtpSupport(options =>
    {
        options.Host = "smtp.example.com";
        options.Port = 587;
        options.UserName = "MySMTPUsername";
        options.Password = "MyPassword";
    })
    .AddPipeline("WelcomeKit", pipeline =>
    {
        pipeline.AddEmail("welcome@my.app".AsIdentityAddress("Welcome Committee"), email =>
        {
            email.Subject.AddStringTemplate("Thanks for creating an account!");
            email.HtmlBody.AddStringTemplate("Check out the <a href=\"https://my.app/getting-started\">Getting Started</a> section to see all the cool things you can do!");
            email.TextBody.AddStringTemplate("Check out the Getting Started (https://my.app/getting-started) section to see all the cool things you can do!");
        });
    })
    .BuildClient();

builder.Services.AddSingleton(communicationsClient);

// Later in your app: dispatch by pipeline name and recipient address
var result = await communicationsClient.DispatchAsync("WelcomeKit", "newuser@example.com", new { });

Swap providers or adjust templates in one place—your app code stays clean. Learn how to change providers.

Samples to the ideas flowing

Kitchen Sink (ASP.NET Core API)

All channels (Email/SMS/Voice/Push) with SMTP, SendGrid, Twilio, Infobip, Firebase, delivery reports, channel-provider restrictions, and Fluid templates.

View sample

Microservices

Extend the communications client with remote/embedded templates, persona filters, multi-tenant “from” resolution, and delivery reports across services.

View sample

Logger provider

A minimal provider that logs all channels—great for local testing and debugging dispatch behavior.

View sample

Product checklist

Operational confidence

Ship with pipelines, delivery reports, and templates defined in one place.

Friendly for builders

Readable APIs, clear defaults, and examples to unblock your team fast.

Community powered

Open source roadmap, issues, and discussions in GitHub to shape what ships next.

Open Source

Start dispatching today

Drop Transmitly into your stack and keep building your app.