What's new
in Plunk.

Features and improvements we have shipped, newest first. Plunk is open source, so the full commit history is on GitHub.

September 2026

2 updates

Snooze instead of unsubscribing

Contacts can pause your emails for 2 weeks, 1 month, 6 months, or 1 year instead of leaving for good. Plunk resubscribes them automatically when the snooze ends.

Read the docs: Snooze instead of unsubscribing
manage preferencesloopstudio.io

How long should we pause your emails?

Cancel
2 weeks1 month6 months1 year

Snoozed until October 11, 2026

archived: true

Archive campaigns

Hide campaigns and drafts you no longer need from the campaign list. Their stats are kept, and you can restore them.

August 2026

8 updates

MCP server

Connect Claude, Cursor, or any MCP client to your project. Your agent can manage contacts, draft campaigns, and send email, and it asks you to confirm before sending a campaign.

Explore the feature: MCP server
terminal

$ claude mcp add plunk -- npx -y @plunk/mcp

Added stdio MCP server plunk

Unsubscribe ana@example.com

plunk_unsubscribe_contact(email: "ana@example.com")

unsubscribed

Liquid-aware template editor

The editor flags Liquid syntax errors as you type, highlights logic tags, and inserts ready-made if, case, and for blocks from a menu.

Read the docs: Liquid-aware template editor
template editorwelcome

1Hi {{ contact.firstName | upcse }},

undefined filter: upcse

2{%

  • if{% if %} … {% endif %}
  • case{% case %} … {% when %}
  • for{% for %} … {% else %}
CANCELLED → DRAFT

Cancelled campaigns return to draft

Cancelling a campaign drops its unsent emails and turns it back into an editable draft.

contact.unsubscribed

Subscribe and unsubscribe events

Plunk tracks an event whenever a contact subscribes or unsubscribes, so workflows can trigger on it.

RATE_LIMIT_ENABLED=true

API rate limits for self-hosted instances

Turn on rate limits, with burst allowances, for the track, send, and contact endpoints.

List-Unsubscribe-Post

One-click unsubscribe

Marketing emails include the RFC 8058 headers, so the unsubscribe button built into inboxes works without opening a page.

Insert Step

Insert steps anywhere in a workflow

Add a step between two existing steps, or disconnect and reconnect branches, without rebuilding the workflow.

sv

Swedish translations

Unsubscribe and preference pages are now available in Swedish.

July 2026

4 updates

Liquid templating

Subjects and bodies render with LiquidJS, so templates get conditionals, loops, filters, and fallback values on top of plain variables.

Read the docs: Liquid templating
order-shippedliquid

{% for item in order.items %}

{{ item.name }} × {{ item.qty }}

{% endfor %}

Your order is on its way

  • Linen shirt× 2
  • Canvas tote× 1
Precedence: bulk

Headers per email type

Marketing, transactional, and headless emails each get only the standard headers their type calls for.

Idempotency-Key

Idempotency keys for sends and events

Retry requests safely. A key reused within 24 hours is rejected, so the same email or event is never sent twice.

June 2026

3 updates

Tables with filters and bulk actions

Contacts, templates, campaigns, and workflows share one table with sorting, faceted filters, and bulk delete.

campaigns
Search campaignsStatusSent
  • August newsletterSent
  • Win-back, pro usersSent
  • Spring launchSent
2 selectedDelete
ja

Japanese translations

Unsubscribe and preference pages are now available in Japanese.

Ana@X.com → ana@x.com

Normalized contact emails

Differences in letter case or stray whitespace no longer create duplicate contacts.

May 2026

5 updates

Segments built from segments

Filter on membership of another segment, or on events a contact has not triggered recently. A win-back audience takes 2 rules.

Explore the feature: Segments built from segments
segmentwin-back
SegmentmemberOfSegmentPro customers

and

session.startednotTriggeredWithin30 days
Matching contacts1,284
POST /users/{{ contact.id }}

Variables in webhook steps

Use contact and event data in the URL, headers, and body of a workflow webhook step.

Onboarding (Copy)

Duplicate a workflow

Copy a workflow with all its steps and branches, then edit the copy.

subscribed: false

Change subscriptions from a workflow

The Update contact step can now subscribe or unsubscribe the contact.

v=spf1 include:amazonses.com

Free email tools

Check SPF, DKIM, DMARC, and MX records, inspect email headers, or test an email for spam.

April 2026

5 updates

Command palette

Jump to any page, recent item, or project from anywhere in the dashboard.

⌘Kanywhere
loop

Switch project

Loop Studio

Loop Studio (staging)

Recent

Campaign: Loop weekly

Guided onboarding

New projects start with a short checklist based on what you use Plunk for: campaigns, transactional email, or automations.

get startedautomations
  • Verify your domain
  • Fire your first event
  • Create a templatenext
  • Build a workflow
MAX_ATTACHMENT_SIZE_MB

Configurable attachment limits

Self-hosted instances can raise the attachment size and count, up to the 40 MB that SES allows.

emailId

Email IDs on webhook events

Delivery, open, and bounce events include the ID returned by the send request, so you can match each one to its email.

type: HEADLESS

Headless templates

Send your own HTML without the Plunk footer. Unsubscribed contacts are still skipped.

March 2026

3 updates

Multi-branch conditions

A condition step can split into as many branches as you need, like a switch statement, with a default branch for everything else.

Explore the feature: Multi-branch conditions
workflowcondition
Conditiondata.planproPro tipsteamInvite teamdefaultWelcome
zh-CN zh-TW zh-HK

Chinese translations

Unsubscribe and preference pages are now available in Simplified, Traditional, and Hong Kong Chinese.

it

Italian translations

Unsubscribe and preference pages are now available in Italian.

February 2026

5 updates

Inbound email

Receive email at any address on your domain. Senders are added as contacts, and every message triggers an event and a webhook.

Explore the feature: Inbound email
inboundyourdomain.comMX ok
  • Ana Ruizsupport@c_8f21Can you resend my invoice?now
  • Tom Bakkerbilling@c_7d04Updated our VAT number14m
  • Priya Nairhello@c_6b93Loved the changelog1h
POST /hooks/plunk3 delivered
type: STATIC

Static segments

Add contacts to a segment by hand. Its members only change when you change them.

es pl cs

Spanish, Polish, and Czech translations

Unsubscribe and preference pages are now available in Spanish, Polish, and Czech.

trigger: user.upgraded

Change a workflow trigger

Switch an existing workflow to a different trigger event without rebuilding it.

to: team@yourdomain.com

Custom recipients in workflows

Send a workflow email to your team or any other address, not only the contact.

January 2026

5 updates

Inline images

Attach an image with a Content-ID and reference it from your HTML. It appears in the email body instead of as an attachment.

Read the docs: Inline images
receiptcid:logo

attachments: [{ contentId: "logo", … }]

<img src="cid:logo" />

Thanks for your order

Receipt #4021 from Loop Studio

email.bounced

Bounce and complaint filters

Filter the activity feed to bounces and complaints, the events that affect your sending reputation.

pt bg

Portuguese and Bulgarian translations

Unsubscribe and preference pages are now available in Portuguese and Bulgarian.

olderThan 30 days

Older-than segment filter

Match contacts whose date field is more than a set number of days, weeks, or months in the past.

DISABLE_SIGNUPS=true

Disable signups on self-hosted instances

Block new account signups so only existing users can sign in.

December 2025

7 updates

Email previews in activity

Open any sent email from a contact's page or the activity feed to see exactly what they received.

activityana@example.com
  • email.openedWelcome to Loop2m
  • email.deliveredWelcome to LoopPreview

Welcome to Loop

hello@loopstudio.io

Hi Ana, your workspace is ready. Here are three things to try first.

Translated unsubscribe and preference pages

Set a language per project, or per contact with a locale field, and these pages follow it. Plunk supports 16 languages today.

unsubscribe pagelocale: fr

Se désabonner

Ne plus recevoir les e-mails de Loop Studio à l'adresse ana@example.com ?

Se désabonner
enfrdeesnlitptplcsbgsvhijazh-CNzh-TWzh-HK

Security center

See your project's bounce and complaint rates next to Plunk's thresholds, with a warning well before a rate is high enough to disable the project.

securityhealthy
  • Bounce rate, 7 dayswarns at 5%1.2%
  • Complaint rate, 7 dayswarns at 0.075%0.02%

Warnings come well before the limits that disable a project.

POST /v1/verify

Email verification endpoint

Check an address for valid syntax, disposable domains, plus-addressing, and MX records before you add it.

Select all 12,480

Bulk actions on contacts

Select contacts across pages, or every contact at once, then subscribe, unsubscribe, or delete them together.

Duplicate campaign

Campaigns from templates or past campaigns

Start a campaign from a template, or duplicate a campaign you already sent.

<table role="presentation">

HTML code editor

Hand-written HTML templates open in a CodeMirror editor with syntax highlighting and code folding.

Start sending with Plunk.

Free plan: 1,000 emails a month. Paid: $0.001 an email.