Skip to content

Repository files navigation

Cursor RTL Chat

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.

Extension icon

Features

  • Smart direction detection — analyzes each chat message and applies dir="rtl" or dir="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 scoringcursorRtl.rtlThreshold controls how easily mixed lines become RTL

Requirements

  • Cursor IDE (not VS Code)
  • Windows, macOS, or Linux

Installation

From GitHub Release (recommended)

  1. Download cursor-rtl-1.2.6.vsix from Releases
  2. Verify SHA256 (see checksums.sha256)
  3. Install:
cursor --install-extension cursor-rtl-1.2.6.vsix

Or press Ctrl+Shift+PExtensions: Install from VSIX... → select the file.

From Open VSX

Search Cursor RTL Chat in Cursor Extensions (after publishing to Open VSX).

From source

git clone https://github.com/Satan2049/cursor-rtl.git
cd cursor-rtl
npm install
npm run release:prepare

Press F5 in Cursor for development, or install the generated .vsix.

Usage

  1. Ctrl+Shift+PCursor RTL: Enable RTL Support
  2. Confirm the patch dialog
  3. Fully quit Cursor (File → Exit) and reopen
  4. 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.

Status bar

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

Commands

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

Settings

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.54). 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

Security

Verify downloads with SHA256:

Get-FileHash -Path cursor-rtl-1.2.6.vsix -Algorithm SHA256

Expected hash for v1.2.6:

BFDC4F13B5CBE4AB1962F0861CE9891404B9F5C20EFCB9546E62C078A67B8921

Official checksums: checksums.sha256

VirusTotal page for this build:

https://www.virustotal.com/gui/file/bfdc4f13b5cbe4ab1962f0861ce9891404b9f5c20efcb9546e62c078a67b8921

How it works

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:

  1. Watch the chat DOM for new messages
  2. Score RTL vs LTR characters per text block (cursorRtl.rtlThreshold)
  3. Apply direction: rtl / text-align: start to matching elements
  4. 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.

Troubleshooting

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.autoReapply for 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

Uninstall

Uninstalling the extension runs a cleanup script that restores main.js from backup if the patch is still active.

Third-party components

The RTL runtime script (resources/rtl.js) is adapted from cursor-ext-rtl (Apache-2.0). See THIRD_PARTY.md.

License

MIT — see LICENSE.

About

Full RTL for Cursor chat and markdown

Topics

Resources

Contributing

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages