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
| Prop | Type | Purpose |
|---|---|---|
provider | string | Provider id: resend, mailchimp, kit, loops, beehiiv, brevo, sendgrid, buttondown, or substack. |
title | string | Optional heading shown above the form. |
description | string | Optional supporting line under the heading. |
collapsed | boolean | Native providers only. Start as a compact Subscribe button that expands to the full form on click. |
username | string | Buttondown / Substack account username (embed-only providers). |
snippet | string | Raw embed markup from any provider. The escape hatch (see below). |
className | string | Extra 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 yourusername. 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.
