Smart multi-language Right-to-Left (RTL) support for Cursor IDE chat, Plan files, and Markdown editors. Hebrew, Arabic, and Persian text is automatically right-aligned while English and code blocks stay left-to-right.
- Smart direction detection — analyzes each chat message and applies
dir="rtl"ordir="ltr"per element - Mixed-language support — Hebrew/Arabic/Persian paragraphs align right; English-heavy content stays left
- Code-safe — code blocks, terminals, tool calls, and UI controls remain LTR
- Plan editor support — RTL works in Cursor Plan markdown views
- Markdown editor support — optional RTL in Cursor's native Preview view and the classic side preview (
cursorRtl.mode: Chat and Markdown). The Markdown source/edit view stays LTR so typing is not disrupted. - Status bar indicator — click to enable, disable, or check status; warns if the runtime did not load after a Cursor update
- Auto-reapply — restores the patch automatically after Cursor updates (configurable)
- Tunable mixed-language scoring —
cursorRtl.rtlThresholdcontrols how easily mixed lines become RTL
- Cursor IDE (not VS Code)
- Windows, macOS, or Linux
- Download
cursor-rtl-1.2.6.vsixfrom Releases - Verify SHA256 (see checksums.sha256)
- Install:
cursor --install-extension cursor-rtl-1.2.6.vsixOr press Ctrl+Shift+P → Extensions: Install from VSIX... → select the file.
Search Cursor RTL Chat in Cursor Extensions (after publishing to Open VSX).
git clone https://github.com/Satan2049/cursor-rtl.git
cd cursor-rtl
npm install
npm run release:preparePress F5 in Cursor for development, or install the generated .vsix.
- Ctrl+Shift+P → Cursor RTL: Enable RTL Support
- Confirm the patch dialog
- Fully quit Cursor (File → Exit) and reopen
- Open chat — RTL text aligns automatically
Use the status bar or Settings (cursorRtl.mode): Chat only (default), Chat and Markdown, or Disable (temporary). Remove patch uninstalls the Cursor file patch; it does not uninstall the extension.
| Indicator | Meaning |
|---|---|
RTL: CHAT |
Patch active, chat only |
RTL: CHAT+MD |
Patch active, chat and Markdown |
RTL: DISABLED |
Patch installed, RTL temporarily off |
RTL: NOT INSTALLED |
Patch not applied — click to enable |
RTL: UPDATE NEEDED |
Cursor was updated — click to re-apply |
RTL: NO RUNTIME |
Patch is installed but the workbench RTL script was not detected |
| Command | Action |
|---|---|
Cursor RTL: Enable RTL Support |
Apply the RTL patch |
Cursor RTL: Disable (Keep Patch) |
Temporarily stop RTL without removing the patch |
Cursor RTL: Remove Patch |
Restore original Cursor files |
Cursor RTL: Re-apply After Update |
Re-apply after a Cursor upgrade |
Cursor RTL: Check Status |
Show patch status in Output panel |
Cursor RTL: Toggle Disabled |
Switch between disabled and the last active mode |
| Setting | Default | Description |
|---|---|---|
cursorRtl.mode |
chat |
Chat only, Chat and Markdown, or Disabled (temporary; does not remove the patch) |
cursorRtl.rtlThreshold |
1.5 |
RTL-run weight versus Latin tokens (0.5–4). Higher = mixed lines more often RTL |
cursorRtl.autoReapply |
true |
Auto-reapply patch when Cursor updates overwrite main.js |
cursorRtl.showStatusBar |
true |
Show RTL status in the status bar |
Verify downloads with SHA256:
Get-FileHash -Path cursor-rtl-1.2.6.vsix -Algorithm SHA256Expected hash for v1.2.6:
BFDC4F13B5CBE4AB1962F0861CE9891404B9F5C20EFCB9546E62C078A67B8921
Official checksums: checksums.sha256
VirusTotal page for this build:
https://www.virustotal.com/gui/file/bfdc4f13b5cbe4ab1962f0861ce9891404b9f5c20efcb9546e62c078a67b8921
This extension patches Cursor's main.js to load a small Electron loader. The loader concatenates config, rtl.css, shared direction scoring, and rtl.js, then injects that payload into the workbench so it can:
- Watch the chat DOM for new messages
- Score RTL vs LTR characters per text block (
cursorRtl.rtlThreshold) - Apply
direction: rtl/text-align: startto matching elements - Keep code blocks, Monaco editors, and tool UI in LTR
The same runtime also styles Cursor's native Preview | Markdown editor (without writing dir into ProseMirror-owned DOM). The classic Markdown side preview uses contributed preview CSS/scripts and reads cursor-rtl-mode.json so Chat-only mode does not rewrite user markdown.styles.
Original main.js is backed up before patching. Disabling restores from backup.
Note: Cursor may show an
[Unsupported]warning because the patch modifies internal app files. This is expected for workbench-level RTL injection.
Changes not visible after enabling
- Fully quit Cursor (not just Reload Window) and reopen
- Check Output → Cursor RTL for errors
Permission denied
- Windows: run Cursor as Administrator
- macOS:
sudo chown -R $USER Cursor.app/Contents/Resources/app/out/
RTL stopped after Cursor update
- Click the status bar warning, or run Re-apply After Update
- Enable
cursorRtl.autoReapplyfor automatic restoration - If the bar shows RTL: NO RUNTIME, fully quit Cursor after re-apply so the workbench script can load
Debug log
- Loader writes to
~/cursor-rtl.log
Uninstalling the extension runs a cleanup script that restores main.js from backup if the patch is still active.
The RTL runtime script (resources/rtl.js) is adapted from cursor-ext-rtl (Apache-2.0). See THIRD_PARTY.md.
MIT — see LICENSE.