Hebrew-friendly Markdown Editor for React (RTL, Preview, KaTeX, Syntax Highlighting)
React wrapper for the Hebrew Markdown Editor
A modern, RTL-friendly Markdown editor with live preview, math rendering, and Apple-inspired design — now as a reusable React component.
- ✅ Full Hebrew (RTL) support
- ✅ Live Markdown preview
- ✅ Toolbar with formatting actions
- ✅ Multiple view modes (editor / preview / split)
- ✅ Theme selection + Dark/Light mode
- ✅ Math expressions with KaTeX
- ✅ Syntax highlighting for code blocks
- ✅ Word & character count
- ✅ Export as
.md
- ✅ Print the document
npm install hebrew-markdown-react
Peer dependencies (make sure you already have these installed):
npm install react react-dom
Import the component and use it in your app:
import { HebrewMarkdownEditor } from "hebrew-markdown-react";
import { useState } from "react";
export default function App() {
const [value, setValue] = useState("# שלום עולם 👋");
return (
<div style={{ height: '80vh', width: '100%' }}>
<HebrewMarkdownEditor
value={value}
onChange={(val) => setValue(val)}
onSave={(val) => console.log("Saved:", val)}
showCredits={false}
/>
</div>
);
}
You can set the initial view mode using the VIEW_MODES
constant for type safety:
import { HebrewMarkdownEditor, VIEW_MODES } from "hebrew-markdown-react";
import { useState } from "react";
export default function App() {
const [value, setValue] = useState("# שלום עולם 👋");
return (
<div style={{ height: '80vh', width: '100%' }}>
<HebrewMarkdownEditor
value={value}
onChange={(val) => setValue(val)}
viewMode={VIEW_MODES.EDITOR_ONLY}
/>
</div>
);
}
Available view modes:
VIEW_MODES.SPLIT
- Split view (default)VIEW_MODES.EDITOR_ONLY
- Editor onlyVIEW_MODES.PREVIEW_ONLY
- Preview only
Prop | Type | Default | Description |
---|---|---|---|
value |
string |
"" |
The markdown content of the editor. |
onChange |
(content: string) => void |
– | Callback fired on every content change. |
onSave |
(content: string) => void |
undefined |
If provided, shows a "Save" button in the toolbar and is called when the user saves (Ctrl+S or button). |
height |
string |
"100%" |
The height of the editor container (e.g., "500px" , "80vh" ). The component fills its parent by default. |
className |
string |
"" |
Custom CSS class to apply to the root hmr-container element for custom styling. |
viewMode |
'split' | 'editor-only' | 'preview-only' |
'split' |
The initial view mode of the editor. |
showCredits |
boolean |
true |
Show credit link in the status bar. |
You can override the default styles by targeting the prefixed CSS classes. The root container has the class hmr-container
.
Here's an example of how to change the toolbar background and the primary color:
/* your-custom-styles.css */
.my-custom-editor .hmr-toolbar {
background-color: #f0f0f0;
border-bottom: 1px solid #ccc;
}
.my-custom-editor {
--hmr-primary: #ff5722; /* Change the primary color */
}
Then, apply your custom class via the className
prop:
import "./your-custom-styles.css";
<HebrewMarkdownEditor
className="my-custom-editor"
value={value}
onChange={setValue}
/>
- Requires Node.js 20.19.0 or higher (see
.nvmrc
)
nvm use
- Install dependencies:
npm install
Run Storybook locally to explore and play with the editor:
npm run storybook
Contributions are welcome! 🚀
- Fork the repo
- Create a branch (
git checkout -b feature/awesome
) - Commit changes (
git commit -m "Add awesome feature"
) - Push (
git push origin feature/awesome
) - Open a Pull Request
This project is licensed under the MIT License. See the LICENSE file for details.
- Dor Pascal – Creator of the original Hebrew Markdown Editor
- Ariel Benesh – Creator of the React wrapper (
hebrew-markdown-react
)