[PR #31400] fix(web): disable single tilde strikethrough in markdown rendering #33221

Closed
opened 2026-02-21 20:52:53 -05:00 by yindo · 0 comments
Owner

Original Pull Request: https://github.com/langgenius/dify/pull/31400

State: closed
Merged: Yes


Summary

Configure remark-gfm with singleTilde: false to prevent single tildes (~) from being incorrectly rendered as strikethrough. According to the GFM specification, only double tildes (~~text~~) should create strikethrough formatting.

Root cause: The remark-gfm plugin defaults to singleTilde: true, which allows single tildes to be parsed as strikethrough. While this works on github.com, it's technically prohibited by the GFM spec and causes issues with LLM output.

Example issue: Content like PCB thickness: 0.3~8mm was being incorrectly rendered with 8mm as strikethrough text.

Changes:

  • web/app/components/base/markdown/react-markdown-wrapper.tsx: Add { singleTilde: false } option to RemarkGfm
  • Added test file react-markdown-wrapper.spec.tsx to verify the fix

Fixes #31391

Screenshots

Before After
0.3~8mm renders with strikethrough 0.3~8mm renders as plain text

Checklist

  • This change requires a documentation update, included: Dify Document
  • I understand that this PR may be closed in case there was no previous discussion or issues. (This doesn't apply to typos!)
  • I've added a test for each change that was introduced, and I tried as much as possible to make a single atomic change.
  • I've updated the documentation accordingly.
  • I ran dev/reformat(backend) and cd web && npx lint-staged(frontend) to appease the lint gods
**Original Pull Request:** https://github.com/langgenius/dify/pull/31400 **State:** closed **Merged:** Yes --- ## Summary Configure `remark-gfm` with `singleTilde: false` to prevent single tildes (`~`) from being incorrectly rendered as strikethrough. According to the GFM specification, only double tildes (`~~text~~`) should create strikethrough formatting. **Root cause:** The `remark-gfm` plugin defaults to `singleTilde: true`, which allows single tildes to be parsed as strikethrough. While this works on github.com, it's technically prohibited by the GFM spec and causes issues with LLM output. **Example issue:** Content like `PCB thickness: 0.3~8mm` was being incorrectly rendered with `8mm` as strikethrough text. **Changes:** - `web/app/components/base/markdown/react-markdown-wrapper.tsx`: Add `{ singleTilde: false }` option to RemarkGfm - Added test file `react-markdown-wrapper.spec.tsx` to verify the fix Fixes #31391 ## Screenshots | Before | After | |--------|-------| | `0.3~8mm` renders with strikethrough | `0.3~8mm` renders as plain text | ## Checklist - [ ] This change requires a documentation update, included: [Dify Document](https://github.com/langgenius/dify-docs) - [x] I understand that this PR may be closed in case there was no previous discussion or issues. (This doesn't apply to typos!) - [x] I've added a test for each change that was introduced, and I tried as much as possible to make a single atomic change. - [x] I've updated the documentation accordingly. - [x] I ran `dev/reformat`(backend) and `cd web && npx lint-staged`(frontend) to appease the lint gods
yindo added the pull-request label 2026-02-21 20:52:53 -05:00
yindo closed this issue 2026-02-21 20:52:53 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: langgenius/dify#33221