Jamdesk Documentation logo

EmailSubscribe

Add a newsletter or changelog signup form to any docs page with the EmailSubscribe component: native capture for seven providers, embeds for the rest.

<EmailSubscribe> puts an email signup form inline on a docs page. With a provider connected in the dashboard, it renders a Jamdesk-hosted form that adds new subscribers to your audience. Without one, it can host another service's paste-in embed. Use it on changelog and release-notes pages.

Quick Start

Connect a provider in the dashboard. Then add the tag with that provider's id:

<EmailSubscribe provider="resend" />

That renders a labeled email field and a Subscribe button. Jamdesk adds each submitted address to the audience you connected. The same tag works for any connected native provider (mailchimp, kit, loops, beehiiv, brevo, or sendgrid).

Add an optional heading and supporting line:

<EmailSubscribe
  provider="resend"
  title="Get release notes"
  description="One email when we ship something new. No spam."
/>

Props

PropTypePurpose
providerstringProvider id: resend, mailchimp, kit, loops, beehiiv, brevo, sendgrid, buttondown, or substack.
titlestringOptional heading shown above the form.
descriptionstringOptional supporting line under the heading.
collapsedbooleanNative providers only. Start as a compact Subscribe button that expands to the full form on click.
usernamestringButtondown / Substack account username (embed-only providers).
snippetstringRaw embed markup from any provider. The escape hatch (see below).
classNamestringExtra CSS class on the wrapper.

Native vs. embed

The provider you pass decides how the form behaves:

  • Native providers (resend, mailchimp, kit, loops, beehiiv, brevo, sendgrid) render a Jamdesk-hosted form. Jamdesk captures the address and adds it through your connected key. These need a provider connected in the dashboard.
  • Embed-only providers (buttondown, substack) render that service's own form or iframe. You connect no key. Pass your username. The visitor submits to the provider directly.

A native provider that isn't connected in the dashboard captures nothing. Connect the provider first.

Embed-only providers

Buttondown and Substack work without a dashboard connection. Pass your account username:

<EmailSubscribe provider="buttondown" username="acme" />
<EmailSubscribe provider="substack" username="acme" />

Escape hatch: paste any embed

Paste any provider's embed markup into snippet. It renders as-is on the published page:

<EmailSubscribe snippet={`<form action="https://example.com/subscribe">...</form>`} />

A snippet runs the provider's own code on your page. Some providers ship a one-time script that won't re-run when a reader navigates between pages without a full reload. Place script-based embeds on a dedicated, directly-loaded page (like your changelog) rather than deep in a navigation flow.

Compact mode

Set collapsed to start the native form as a Subscribe button. Clicking it opens the full field inline, with no page reload:

<EmailSubscribe provider="resend" collapsed title="Subscribe to updates" />

The button's label comes from title. The default is "Subscribe to updates". Compact mode is native-only. Embed providers render their own markup.

Returning subscribers

The browser remembers a reader who subscribed through a native form. On the next visit, the reader sees a short line instead of the form: You're subscribed to the newsletter.

The line has a "Use a different email?" control that reopens the full form. The memory is per-browser. It lives in localStorage, not your audience. Clearing site data or switching browsers shows the form again. Native forms do this with no configuration.

Auto-place on changelog pages

Mount the form on changelog pages without adding the tag by hand. Set the newsletter integration's placement to changelog in docs.json:

{
  "integrations": {
    "newsletter": {
      "provider": "resend",
      "title": "Get release notes",
      "placement": "changelog"
    }
  }
}

The form then mounts on every changelog page (any page with rss: true). Skip it on one page with newsletter: false in that page's frontmatter. A page with a hand-placed <EmailSubscribe> gets no second form.

The full integrations.newsletter block accepts the same fields as the component (provider, title, description, collapsed, username, snippet, height) plus placement (none, the default, or changelog).

The Email Signups card in the dashboard has Form title and Form subtitle inputs. An auto-placed form uses them when docs.json leaves out title and description. Set title/description in docs.json only to override the dashboard copy.

What's Next?

Connect a provider

Set up Resend, Mailchimp, Kit, Loops, beehiiv, Brevo, or SendGrid

Update Component

Write the changelog entries your subscribers hear about