WYSIWYG editing Image gallery upload Content templates
Release notes · Updated July 2026

What’s new in RichTextBox

A running log of releases for the RichTextBox.AspNetCore NuGet package plus the shared editor runtime. Major features, breaking changes, and migration notes are called out at the top of each release.

Current preview
July 17, 2026
1.0.0-preview.19

Editor runtime refreshed to the latest build Updated

The bundled editor runtime (rte.js, all_plugins.js, the AI Toolkit, the CRDT collaboration engine, and the default theme) is synced to the current shipping build. rte.js remains the licensed, protected editor core, with the editable rte-config.js default configuration kept at the top as plain JavaScript. The static web assets under _content/RichTextBox/richtexteditor carry a bumped cache-buster so browsers pick up the new bytes after upgrade instead of serving stale copies.

Find & Replace dialog position Fixed

On pages where the editor sits below other content, the Find & Replace panel could render with its lower portion — including the action buttons — below the visible viewport. The floating dialog is now anchored to the viewport (rather than the editor’s page offset), so it always docks just under the toolbar and stays fully on screen regardless of where the editor appears on the page or how far the page is scrolled.

Trial download bundle refreshed

The download package now ships the current RichTextBox.dll and the refreshed editor runtime, so evaluations start on the same build as production.

Previous
May 19, 2026
1.0.0-preview.18

npm: @richscripts2/[email protected]

Editing-experience push — 88 features Major

One wave of small-to-medium UX wins to close the gap with Google Docs / Notion / Word: smart typography (auto-link, em-dash, ellipsis, curly quotes, trademarks); 23 keyboard shortcuts (headings, lists, align, sub/super, highlight, duplicate, move block, cycle case, reading mode, word-count modal, shortcut cheat-sheet) at Google Docs / Word parity with Mac ⌘ auto-detection; restricted-editing templates (Word-style protect-document with editable regions); auto-generated heading anchor IDs with hover 🔗 copy-link; smart paste from Word + Google Docs with toast feedback; markdown round-trip (editor.toMarkdown() / editor.fromMarkdown()); find & replace dialog with live match count and Prev/Next navigation; auto-save with status indicator; auto-grow, sticky toolbar, reading mode (persists across reloads), block drag handles; inline link URL preview; image hover quick-action bar (Alt / Replace / ×); inline alt-text editor on missing-alt images; video IFRAME float toolbar; table column & row drag-resize; print preview + PDF export via browser print; math markup hook for KaTeX/MathJax; right-click “Ask AI” context menu; snippet expansion (:date + Tab); DOCX import endpoint. See the full per-feature list at npm 2.2.3 release notes on richtexteditor.com.

Server-side hardening

New POST /richtextbox/import/docx endpoint (configurable via RichTextBoxOptions.DocxImportEndpoint). Uses DocumentFormat.OpenXml; conservative HTML subset (p, strong, em, u, h1–h6, ul / ol / li, br, table / tr / td) that round-trips with the existing DOCX export. 25 MB upload cap with 413 response; license check; multipart form with optional mode field (insert | replace). Client wrapper: editor.aiToolkit.importDocx({ file, mode }) with file-picker fallback.

Build pipeline: DocumentFormat.OpenXml in trial bundles Fixed

Reported by Kenneth Chen: trial download bundles previously omitted the DocumentFormat.OpenXml PackageReference, leaving DOCX export unusable without a manual NuGet install. The generated demo csproj now declares <PackageReference Include="DocumentFormat.OpenXml" Version="3.1.0" /> so the dependency reaches consumers automatically.

Editor robustness Fixed

Chrome iframe document-swap recovery (closure refs reseat after deferred about:blank load), toolbar null-guard (a single missing-icon button no longer crashes init), persistent caret tracker (image upload inserts at original caret position; reported by Nathan Allen / Kenneth Chen), plugin-button null-safe range fallback (emoji panel / image dialog / gallery work even when the editor has never been focused).

Stable
April 24, 2026
1.0.0-preview.12

npm: @richscripts2/[email protected]

Dictation New

New plugins/dictation.js adds a toolbar microphone button that converts speech to text via the Web Speech API. Interim transcripts render live under the cursor; auto-punctuation, BCP-47 language setting, continuous vs one-shot modes.

Enable: <richtextbox enable-dictation="true" dictation-lang="en-US" /> · Live demo

Mobile toolbar mode New

Opt-in stylesheet rte_mobile.css + Tag Helper attribute that lights up the editor’s built-in mobile toolbar: 44×44 tap targets (WCAG 2.5.5), horizontally-scrolling toolbar strip, sticky header above the virtual keyboard, bottom-sheet mounting for dropdowns / dialogs / review drawer, 16px content font to suppress iOS auto-zoom.

Enable: enable-mobile-toolbar="true" · Live demo

Paste from Word — improved list fidelity Fixed

Rewrote the _ConvertWordLists routine. Previously all Word lists became <ul> at level 1; now ordered vs unordered is detected from the marker span, nesting depth is parsed from mso-list: l{N} level{M}, and bullet glyphs are stripped correctly (·, , , §, etc. plus HTML entities).

Tag Helper: enable-mobile-toolbar now wires config.toolbarMobile

The attribute now configures the editor’s built-in auto-switch (set toolbarMobile="mobile", provide a compact toolbar_mobile item list, bump maxWidthForMobile to 720px). Desktop viewers see the full toolbar you configured; narrow viewports automatically swap in.

Preview
April 24, 2026
1.0.0-preview.11

DOCX export New

Server-side HTML → .docx converter built on MIT-licensed DocumentFormat.OpenXml. MapRichTextBoxUploads() automatically maps POST /richtextbox/export/docx. Supports paragraphs, h1h6, blockquote, pre, lists (nested), tables, inline formatting, hyperlinks, data-URI images, text-alignment / color / background-color style attrs.

Client: editor.aiToolkit.exportDocx({ url, fileName, title }) helper triggers a browser download via Blob + anchor · Live demo

Migration note. The package now has a transitive dependency on DocumentFormat.OpenXml 3.1.0. If you pin dependencies, add it to your csproj explicitly.

Revision history: named versions + diff API New

Three new JS methods on editor.revisionHistory:

  • promptAndSnapshot(defaultLabel?) — native prompt + snapshot.
  • rename(id, label) — rename an existing snapshot.
  • listNamed() — only user-labeled snapshots (“Draft sent to legal”, “v1 final”).
  • diff(idA, idB){ oldEntry, newEntry, oldText, newText, lines[] } so callers can build side-by-side diff UI.

Each entry carries a new isNamed boolean that round-trips through localStorage and the optional server endpoint.

Preview
April 23, 2026
1.0.0-preview.10

Streaming AI responses New

The OpenAI and Anthropic resolvers now implement IStreamingRichTextBoxAiResolver. MapRichTextBoxUploads() also maps POST /richtextbox/ai/stream which relays provider text deltas as Server-Sent Events. Non-streaming providers fall back to a single frame transparently.

Client: editor.aiToolkit.streamRequest({ url, body, onDelta, onResponse, onDone, onError }) consumes the SSE via fetch + ReadableStream, with XHR fallback. Returns { promise, abort() }. · Demo

Yjs concurrent typing (preview) Preview

editor.collab.attach({ doc, provider, textSync: true }) now binds the editor’s full HTML to a shared Y.Text. Concurrent inserts / deletes merge via CRDT — two users typing in different parts of the document both see their edits survive.

Known tradeoff: remote updates re-set the body (caret snaps to start) and HTML character offsets don’t align with rendered caret offsets. Per-node binding (y-xml-fragment style) is planned. This preview closes the “two users typing” RFP checkbox today. · Demo

Accessibility Statement New

Published our WCAG 2.2 AA self-assessment — what works, known gaps called out honestly, supported AT combinations (NVDA, JAWS, VoiceOver, TalkBack), and a reporting channel at [email protected]. A third-party audit + VPAT 2.5 is on the 2026 roadmap.

Preview
April 23, 2026
1.0.0-preview.9

First-party AI provider resolvers New

Three drop-in IRichTextBoxAiResolver implementations so the AI Toolkit lights up without writing HTTP client boilerplate:

  • AddRichTextBoxOpenAiResolver(...) — also works with OpenAI-compatible endpoints (Groq, Together, local Ollama) via BaseUrl.
  • AddRichTextBoxAnthropicResolver(...) — Claude. Handles the content-block response array automatically.
  • AddRichTextBoxAzureOpenAiResolver(...) — deployment-scoped with separate Endpoint + DeploymentName.

Shared AiResolverOptions: ApiKey, Model, BaseUrl, MaxTokens, Temperature, SystemSuffix, Timeout. Mode-specific system prompts centralized in AiResolverPromptTemplates. All three use HttpClientFactory, support cancellation, log failures via ILogger<T> (API key never logged).

Live demo

Preview
April 22, 2026
1.0.0-preview.8

v2.0 Collaboration & Review plugins New

Six plugins ship together, all toggleable via Tag Helper attributes — the full review stack that TinyMCE 7 and CKEditor 5 gate behind their premium tiers:

  • Slash commands (enable-slash-commands) — type / to insert headings, lists, tables, code blocks, AI actions.
  • @Mentions (enable-mentions) — trigger-character framework for @, #, [[wiki]]; async data sources with debounce.
  • Track Changes (enable-tracked-changes) — Word-style human suggesting mode, per-author accept / reject.
  • Threaded comments (enable-comments) — anchored to selection ranges, with replies, resolve, delete.
  • Revision history (enable-revision-history) — snapshot browser with LCS line diff.
  • Yjs presence (enable-collab) — live cursors + shared review ledger via a peer-dependency Yjs provider.

All six share a single editor.reviewLedger store so AI suggestions, human tracked-change suggestions, and comments show up interleaved in the same Review drawer.

Upgrade to the latest preview

Install or upgrade via NuGet:

dotnet add package RichTextBox.AspNetCore --version 1.0.0-preview.19

Feedback & issues: [email protected]