Skip to content

Changelog - June, 2026

New Features

Email Storage Config

DigitalOcean Spaces Storage

DigitalOcean Spaces is now available as a custom storage provider, alongside AWS S3, Google Cloud Storage, and Cloudflare R2. Spaces is S3-compatible, so uploaded images and cropped files are stored in your own bucket and served from your own endpoint.

Custom storage keeps assets inside infrastructure you control, which supports data residency, cost, and vendor-consolidation requirements. DigitalOcean Spaces can now back the editor's file storage directly, without a separate provider.

Follow the step-by-step DigitalOcean Spaces tutorial, which covers creating the bucket, collecting the region, Origin Endpoint, and access keys, and wiring them into the Plugin settings.

Email AI UI/UX

Grammar & Spelling Check

The new Check grammar action uses AI to fix spelling, grammar, and punctuation in a text block without changing its meaning, tone, structure, or formatting. It is available from the AI context menu on a selected text block, and works in whatever language the text is written in. The template does not need to be multilingual; corrections always stay in the text's own language.

Unlike Improve or Rephrase, which can rewrite copy, Check grammar is a conservative pass that corrects mistakes and leaves the wording intact, a quick proofreading step inside the editor.

The action uses the same OpenAI integration as the AI Assistant, so no extra setup is required if the AI Assistant is already configured.

Email Config UI/UX

Merge Tag Names in the Canvas

With the Tiptap text editor, the new showMergeTagText option displays a Merge Tag's human-readable name in the canvas instead of its raw value. It shows First name rather than *|FIRST_NAME|*, for example. The name resolves from the merge tag catalog at display time, so it works regardless of how the tag was inserted and always reflects the current catalog.

Raw merge tag syntax is precise but hard to read at a glance, especially in a template full of placeholders. The human-readable name makes the canvas easier to scan. The exported HTML is unchanged, since the tag still serializes to its raw value.

This is opt-in and defaults to false. It requires the Tiptap text editor, so set textEditor: "tiptap" and enable it inside the tiptapConfig object in TOPOL_OPTIONS:

ts
textEditor: "tiptap",
tiptapConfig: {
  showMergeTagText: true,
},

For full details, see the documentation.

Email Blocks AI

Product Feed Translation

Translation now covers the Product block in static mode. Translating a multilingual template previously left hand-picked product content in the source language. Each language mutation can now carry its own version of a product feed, so the content chosen for a language is the content that renders.

Product-driven emails were the one place multilingual templates fell short, since product content stayed in the source language regardless of the mutation. Each language now resolves per product: keep the same product and translate its text, or swap in a different product for that language. The two never mix, so a translated slot never pulls stray data from another product.

Nothing new to configure. With Multilingual Templates and the Product block set up, static product feeds translate along with the rest of the template.

Improvements

Email UI/UX Config

Custom Editor Font

The new font option in the theme changes the font used across the editor interface. The interface uses Inter by default; the option points it at any font family and, if needed, loads the font from a stylesheet URL. This affects only the editor's own UI, not the fonts available inside templates.

Setting the interface font matches the editor to the surrounding application's typography, so the embedded Plugin looks consistent rather than using a separate typeface.

Add the font object to the theme configuration. Both keys are optional and work independently:

ts
theme: {
  font: {
    family: "Georgia",
    url: "https://fonts.googleapis.com/css2?family=Georgia&display=swap",
  },
},

A single family passed without a fallback gets sans-serif appended automatically. For full details, see the documentation.

Email UI/UX Config

Border Radius Theming

The theme now exposes a borderRadius object for the roundedness of the interface corners. Each key is optional and accepts any valid CSS border-radius string, from soft rounding down to "0" for fully sharp corners.

Corner rounding is a small but visible part of a design language. Setting it aligns the editor's appearance with the rest of the application, from soft rounded corners to fully squared-off ones.

Add the borderRadius object to the theme configuration:

ts
theme: {
  borderRadius: {
    default: "4px",
  },
},

For full details, see the documentation.

Email Config

Granular Role Permissions

Roles and permissions now fine-tune with a permissions object. Each role still ships with sensible defaults, and individual capabilities override on top of them. An editor can keep everything they can do but lose the ability to delete files, for example. The supported overrides are canLockBlocks, canLockSections, canEditLockedSections, canEditLockedBlocks, and canRemoveFiles.

Each role was previously a fixed bundle, so changing one capability meant switching to a more restrictive role and giving up its other permissions. Per-permission overrides adjust individual capabilities on top of a role without changing the rest.

Add the permissions object alongside the role in TOPOL_OPTIONS. Any omitted key keeps the role's default:

ts
role: "editor",
permissions: {
  canRemoveFiles: false,
},

For full details, see the documentation.

Email Events

onImageDelete Callback

The new onImageDelete callback fires when a user removes files or folders from the image picker. It receives an array of the deleted items, each describing name, type (file or folder), path, and key, so the host application can react, such as cleaning up the same assets in its own media library.

Add the handler to the callbacks object in TOPOL_OPTIONS:

ts
callbacks: {
  onImageDelete(items) {
    // items: { name, type, path, url?, key }[]
  },
},

The callback is purely additive; deletion works exactly as before when no handler is registered.

Email AI UI/UX

Improved Multilingual Template Translation

Template Translation gained several improvements for multilingual templates:

  • Choose the source language. Translating a mutation previously always re-used that mutation's own content and never picked up edits from the primary. Each mutation's translate button now has a source picker, translating from the primary language or any other mutation. Translating from the primary stays a single click.
  • Translate every language at once. A new Translate all button in the language settings translates all mutations from the primary language in one action. It is on by default, with a confirmation step before existing translations are overwritten.
  • Reliable on large templates. Translation now processes content in chunks, so even big multilingual templates translate without hitting request limits.

Choosing the source language means edits in any mutation, not just the primary, can be the basis for translating the others. Bulk translation removes the per-language trigger, which helps most with many language mutations.

No configuration beyond the existing Template Translation setup is required. The source picker appears next to each mutation's translate action, and the Translate all button appears in the language settings, both by default.

Bugfixes

  • Email Fixed an issue where template typography styles (for headings, paragraphs, links, and lists) were not applied to HTML inserted through Merge Tags, because those styles were only added inline to markup that existed at render time.
  • Email Fixed text selection and caret placement in button blocks when using the Tiptap text editor: drag-selecting a button's text no longer deselects on release, and clicking into the middle of the text no longer jumps the caret to the end.
  • Email Fixed a bug where typing into the Tiptap toolbar inputs (text color, background color, and font-size fields) lost focus after the first character, sending the rest of the keystrokes back into the text block.
  • Email Fixed a 500 error from get-html when a multilingual template contained a language entry without a translations object, which surfaced in the editor as "Error occurred while generating preview."