Appearance
Changelog - August, 2026
New Features
Landing Page Editor in Beta
The Landing Page Editor is now in beta, with full public documentation. It is a white-label drag-and-drop page builder that drops into an application through a loader script and a configuration object, and it is the second editor of Topol Plugin alongside the Email Editor. One Topol account and API token covers both.
Each page comes back as JSON and HTML through callbacks, and Topol never stores the result, so where pages live and who may access them stays entirely on your side. Comments, autosaves, and synced sections are built in, each reading and writing through endpoints on your own backend. The interface rebrands through theme, colors, fonts, and localization options, and content blocks can be switched off or replaced with custom ones.
Getting Started covers creating an API key and embedding the editor, and Email Editor vs. Landing Page Editor explains how the two differ. Options may still change while the editor is in beta, so feedback is especially welcome now.
NPM Packages v1 in Alpha
The @topol.io/editor packages go from 0.3.0 to 1.0.0-alpha and cover both editors instead of only the email one. @topol.io/editor exports LandingPageEditor with full TypeScript types for its options, callbacks, and template structure, and the React and Vue packages add a LandingPageEditor component with the complete callback set and programmatic load and save through a ref. The Svelte package picks up the email editor changes without a Landing Page Editor component for now.
The email integration is renamed to EmailEditor. TopolPlugin and the TopolEditor component stay as deprecated aliases, so the upgrade is a rename rather than a rewrite:
diff
- import TopolPlugin from "@topol.io/editor";
+ import { EmailEditor } from "@topol.io/editor";Three changes are worth reviewing in an existing 0.3.0 integration. onSave and onSaveAndClose take two further arguments for multilingual templates, onError gained a responseBody argument for inspecting the failing response, and loader URLs are now canonical defaults rather than build-time environment variables, which fixes a 0.x bug that could emit <script src="undefined">. Existing two-argument handlers keep working.
Install it with npm install @topol.io/editor@alpha. The migration guide covers the full v1 surface, including the new multilingual and control panel methods. The API is not expected to move much before the final release, but pin the exact version while it is in alpha.
Multi-Product Documentation Site
docs.topol.io has been redesigned around two products rather than one. The navbar leads with Email Editor and Landing Page Editor, each carrying its own guide, API reference, and OpenAPI spec, and the Landing Page Editor is marked BETA until it leaves beta.
Search results are badged by product, as Email, Landing Page, or Changelog, so a search for a term both editors share separates them instead of mixing the two.
The email editor pages moved from /guide, /reference, and /template-reference to the same paths under /email-editor/. Every old URL redirects to its new location, so existing links and bookmarks keep working.
Improvements
Right-to-Left Text Direction
Text written in Arabic, Hebrew, or any other right-to-left language now flows in the correct direction in the Tiptap text editor. Each block resolves its own direction from the first letter it contains, so one template can mix both without any setup.
The toolbar's More menu adds Left to right and Right to left buttons for the cases where automatic detection reads a block differently than intended, and clicking the active direction hands it back to automatic. TinyMCE already had right-to-left support through its own directionality plugin.
Bugfixes
- Email Landing Page Fixed the TinyMCE language pack failing to load, which left the Insert/Edit Link dialog in English no matter which editor language was selected.
- Email Landing Page Fixed the editor failing to start with a
400error on host pages that send a strictReferrer-Policy, or that sit behind a CDN or proxy which strips the referrer. The editor no longer depends on the referrer to identify the embedding page. - Email Landing Page Fixed the AI magic pen icon having too little contrast on the light theme.
- Email Fixed hide-on-Outlook not being applied to email templates.
- Email Fixed section backgrounds in Onet.pl and Yahoo, which dropped either the background color or the background image when both were set.
- Email Fixed content marked hide-on-mobile or hide-on-desktop showing up twice in new Outlook for Mac (16.83 and later).
- Email Fixed a non-ASCII character in the styles of rendered email HTML, which broke saving for integrations whose pipelines accept only ASCII output.
- Email Fixed styles bleeding between neighboring elements in previews, test sends, and exported HTML, where two buttons in one row could both take the last hover color set.
- Email Fixed links appearing underlined in new Outlook.
- Email Fixed several problems with inserting saved sections: filling an empty structure could overwrite the structure below it, inserting into the very first structure did nothing, and the language prompt for a multilingual section opened underneath the add-block dialog.
- Email Landing Page Fixed saved blocks, synced sections, and folders not moving back to the root folder. Integrations that host the saved-blocks endpoints themselves now receive
folder_id: nullfor the root. - Email Fixed the hover preview of a saved block set to hide-on-desktop collapsing to a thin line.
- Email Fixed a custom
tinyConfig.link_listdisappearing from the TinyMCE Insert/Edit Link dialog when merge tags are enabled, and a customexternal_pluginsentry being replaced rather than merged. - Email Fixed three Polish translation defects: a File Manager button showing in Dutch, broken grammar on the feed block's apply-to-all toggle, and a shortened Preview label in the top bar.
- Landing Page Fixed four option handling defects:
hideSettingsTabnow hides the Settings tab,textOverrideworks together withlanguage, an out-of-range image quality value falls back to the default, and an unsupportedlanguagecode fails at initialization instead of quietly switching to English.
