---
title: "Changelog - June, 2026"
description: "Developer documentation for Topol's embeddable white-label email editor and landing page editor (beta). Get practical insights and guidance for integration and optimized user experiences."
url: https://docs.topol.io/changelog/2026-06.html
---

# Changelog - June, 2026

## New Features

Email Storage Config

### DigitalOcean Spaces Storage

**[DigitalOcean Spaces](https://docs.topol.io/email-editor/guide/custom-digitalocean-spaces-storage.html) 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](https://docs.topol.io/email-editor/guide/custom-digitalocean-spaces-storage.html), 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](https://docs.topol.io/email-editor/guide/ai-assistant.html), 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](https://docs.topol.io/email-editor/guide/text-editor-configuration.html#tiptap-editor-configuration), the new `showMergeTagText` option displays a [Merge Tag](https://docs.topol.io/email-editor/guide/merge-tags.html)'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](https://docs.topol.io/email-editor/guide/text-editor-configuration.html#displaying-the-merge-tag-name).

Email Blocks AI

### Product Feed Translation

**Translation now covers the [Product block](https://docs.topol.io/email-editor/guide/products.html) 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](https://docs.topol.io/email-editor/guide/multilingual-templates.html) and the [Product block](https://docs.topol.io/email-editor/guide/products.html) 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](https://docs.topol.io/email-editor/guide/themes.html) 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](https://docs.topol.io/email-editor/guide/themes.html#custom-font).

Email UI/UX Config

### Border Radius Theming

**The [theme](https://docs.topol.io/email-editor/guide/themes.html) 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](https://docs.topol.io/email-editor/guide/themes.html#border-radius).

Email Config

### Granular Role Permissions

**[Roles and permissions](https://docs.topol.io/email-editor/guide/roles-and-permissions.html) 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](https://docs.topol.io/email-editor/guide/roles-and-permissions.html).

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](https://docs.topol.io/email-editor/guide/template-translation.html) 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](https://docs.topol.io/email-editor/guide/template-translation.html) 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](https://docs.topol.io/email-editor/guide/text-editor-configuration.html#tiptap-editor-configuration): 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](https://docs.topol.io/email-editor/guide/text-editor-configuration.html#tiptap-editor-configuration) 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."
