A zero-dependency, single-file rich text Markdown editor. Edit visually like a word processor — everything is stored as Markdown underneath. Works with plain Web, Vue 3 and React 18 — no build step, no framework required.
Everything you expect from a modern editor — in three small files.
Edit rendered rich text directly — headings look like headings, bold looks bold. The framework serializes everything to clean Markdown underneath.
Headings, bold, italic, strikethrough, inline code, text color, blockquote, lists (bulleted / numbered / task), code blocks, tables, links, images, audio and video.
Paste screenshots directly. Upload to your own backend endpoint or fall back to base64 — configurable with one option.
Insert tables with custom rows/columns via a dialog. Click any image to resize (100% / 75% / 50% / 25%) with HTML round-trip.
View the underlying Markdown source live. Copy to clipboard, or export as pure Markdown, HTML, or mixed Markdown+HTML.
Toggle any toolbar button (copy, view-code, audio, video), character limit with red overflow warning, custom upload endpoint — all via init options.
This is the real editor running on this page — the content below is this editor's own documentation. Select text and use the toolbar, insert tables and images, then hit the code icon to see the Markdown underneath. Nothing is simulated.
Three ways to integrate — all without a build step. Full parameter reference in the Docs.
Put your Markdown inside a mount element, include one script, call ME.init().
<!-- 1. mount element with Markdown/HTML content --> <div id="app"> # Hello This is **bold** text. </div> <!-- 2. load the framework --> <script src="me-editor.js"></script> <script> // 3. initialize — the editor renders and takes over ME.init({ mount: '#app', title: 'ME.js Editor', iconsMode: 'remote', // or 'local' uploadUrl: 'http://localhost:1688/upload', // paste-image upload maxLength: 0 // character cap, 0 = unlimited }); </script>
Include me-vue.js (self-contained), register the plugin, bind with v-model.
<script src="https://unpkg.com/vue@3"></script>
<script src="me-vue.js"></script>
<div id="app">
<me-editor v-model="content" theme="dark" />
</div>
<script>
Vue.createApp({
data: () => ({ content: '# Hello\n\n- item' })
}).use(MEVue).mount('#app');
</script>
Include me-react.js (self-contained), no JSX needed — plain createElement.
<script src="https://unpkg.com/react@18/umd/react.production.min.js"></script>
<script src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js"></script>
<script src="me-react.js"></script>
<script>
const e = React.createElement;
function App() {
const [md, setMd] = React.useState('# Hello');
return e(MEReact.MeEditor, { value: md, onChange: setMd });
}
ReactDOM.createRoot(document.getElementById('root')).render(e(App));
</script>
Single file per flavor — the Vue and React variants include the full engine.