LogoLaunchSaaS

Newsletter

Configure newsletter providers for managing subscriptions

LaunchSaaS provides newsletter support via a split-package design. The core @launchsaas/newsletter package defines the interface; each provider is a separate package that you install only when needed. Register the provider in capabilities.ts — set it to null to disable newsletter features.

Updated: 2026-03-22 - Clarified that broadcast emails are generic and can be triggered from any server-side workflow.

Architecture

@launchsaas/newsletter              ← interface + Newsletter class (always needed)
@launchsaas/newsletter-resend       ← Resend Audiences

You only add the provider package you actually use.

Newsletter is disabled by default (newsletter: null in capabilities.ts). Install @launchsaas/newsletter-resend and configure the provider to enable it.

Setting Up Newsletter

1. Install the provider package

In your app directory, install the provider:

pnpm add @launchsaas/newsletter @launchsaas/newsletter-resend

2. Configure environment variables

Add to your .env file:

RESEND_API_KEY="re_..."
RESEND_FROM_EMAIL="[email protected]"
RESEND_AUDIENCE_NEWSLETTER="audience-id-for-newsletter"

# Optional – waitlist audience
RESEND_AUDIENCE_WAITLIST="audience-id-for-waitlist"

RESEND_API_KEY is shared with the email provider. If you already set it up for transactional email, you don't need to set it again.

3. Register in capabilities.ts

Open your app's src/capabilities.ts and configure the newsletter provider:

// src/capabilities.ts  (your app — apps/launchsaas/src/capabilities.ts)
import { ResendNewsletterProvider } from "@launchsaas/newsletter-resend";

export const capabilities = {
  // set to null to disable newsletter
  newsletter: ResendNewsletterProvider.create(),
  // ...other capabilities
};

4. Create a Resend Audience

  1. Go to Audiences in the Resend Dashboard
  2. Create an audience for newsletter subscriptions
  3. Copy the Audience ID into RESEND_AUDIENCE_NEWSLETTER

If you are setting up the environment for the first time, return to the Environment Setup guide after completing this step.

Using the Newsletter Service

import { capabilities } from "@/capabilities";

const { newsletter } = capabilities;

// Guard: only use if configured
if (newsletter) {
  await newsletter.addContact("[email protected]");
}

// Add a contact to a specific audience
await newsletter?.addContact("[email protected]", "optional-audience-id");

// Remove a contact
await newsletter?.removeContact("[email protected]");

// Send a broadcast to all subscribers
await newsletter?.broadcast({
  subject: "What's New in LaunchSaaS",
  react: MyEmailTemplate({ ... }),
  audienceId: "optional-audience-id", // uses default if omitted
});

Newsletter is server-only. Use it in Server Components, Server Actions, or Route Handlers — never in client components.

Broadcast Emails

The newsletter provider supports broadcast emails delivered to all subscribers in an audience at once. This is more efficient than sending individual emails and can be triggered from Server Actions, Route Handlers, or custom Scheduled Jobs.

Resend's Broadcast API handles large subscriber lists without timeout issues.

Disabling Newsletter

Set newsletter: null in capabilities.ts. When null, all newsletter actions throw NEWSLETTER_NOT_CONFIGURED.

Custom Newsletter Provider

Implement the NewsletterProvider interface and register it:

// packages/newsletter-custom/src/provider.ts
import type {
  BroadcastOptions,
  NewsletterProvider,
} from "@launchsaas/newsletter";

export class CustomNewsletterProvider implements NewsletterProvider {
  readonly name = "custom";

  async addContact(email: string, audienceId?: string): Promise<void> {
    // your implementation
  }

  async removeContact(email: string, audienceId?: string): Promise<void> {
    // your implementation
  }

  async broadcast(options: BroadcastOptions): Promise<void> {
    // your implementation
  }

  static create(): CustomNewsletterProvider {
    return new CustomNewsletterProvider();
  }
}

Register it in capabilities.ts:

// src/capabilities.ts  (apps/launchsaas/src/capabilities.ts)
import { CustomNewsletterProvider } from "@launchsaas/newsletter-custom";

export const capabilities = {
  newsletter: CustomNewsletterProvider.create(),
  // ...other capabilities
};

References

Next Steps