
Security News
Feross on TBPN: How North Korea Hijacked Axios
Socket CEO Feross Aboukhadijeh breaks down how North Korea hijacked Axios and what it means for the future of software supply chain security.
@mdxeditor/source-preview-plugin
Advanced tools
MDXEditor plugin for displaying source code alongside preview in a side-by-side view
MDXEditor plugin for displaying source code editor alongside a rich-text preview in a side-by-side view. Allows seamless switching between rich-text editing and viewing/editing the raw markdown source.
npm install @mdxeditor/source-preview-plugin
pnpm add @mdxeditor/source-preview-plugin
This plugin wraps the MDXEditor with a source code editor that can be toggled alongside the rich-text WYSIWYG editor.
import { MDXEditor } from "@mdxeditor/editor";
import { sourceWithPreviewPlugin } from "@mdxeditor/source-preview-plugin";
import type { SourceEditor } from "@mdxeditor/source-preview-plugin";
// Define your source editor component
const MySourceEditor: SourceEditor = ({ markdown, onChange }) => {
return (
<textarea
value={markdown}
onChange={(e) => onChange(e.target.value)}
style={{ width: "100%", height: "100%", fontFamily: "monospace" }}
/>
);
};
function App() {
return (
<MDXEditor
markdown="# Hello World"
plugins={[
sourceWithPreviewPlugin({
viewMode: "rich-text", // or 'source'
editor: MySourceEditor,
}),
]}
/>
);
}
import { MDXEditor } from "@mdxeditor/editor";
import { sourceWithPreviewPlugin } from "@mdxeditor/source-preview-plugin";
import type { SourceEditor } from "@mdxeditor/source-preview-plugin";
import Editor from "@monaco-editor/react";
const MonacoSourceEditor: SourceEditor = ({ markdown, onChange }) => {
return (
<Editor
height="100%"
defaultLanguage="markdown"
value={markdown}
onChange={(value) => onChange(value || "")}
options={{
minimap: { enabled: false },
lineNumbers: "on",
wordWrap: "on",
}}
/>
);
};
function App() {
return (
<MDXEditor
markdown="# Hello World"
plugins={[
sourceWithPreviewPlugin({
viewMode: "source",
editor: MonacoSourceEditor,
}),
]}
/>
);
}
The plugin accepts the following options:
editor (required): A React component that implements the SourceEditor interface for editing markdown sourceviewMode (optional): Initial view mode, either 'rich-text' or 'source'. Default: 'rich-text'Your source editor component should match this interface:
interface SourceEditorProps {
markdown: string;
onChange: (markdown: string) => void;
}
type SourceEditor = React.ComponentType<SourceEditorProps>;
The component receives:
markdown: The current markdown content as a stringonChange: Callback to update the markdown contentThe plugin uses gurx for reactive state management:
viewMode$: Controls whether the editor is in 'rich-text' or 'source' modesourceEditor$: Stores the source editor componentupdateBothSourceAndMarkdown$: Signal that syncs source and previewWhen in source mode, the rich-text editor becomes read-only, and changes made in the source editor are synchronized back to the preview.
This plugin requires:
react ^18.0.0 || ^19.0.0react-dom ^18.0.0 || ^19.0.0This package is part of the MDXEditor Extras monorepo. See the main repository for contribution guidelines.
MIT
FAQs
MDXEditor plugin for displaying source code alongside preview in a side-by-side view
We found that @mdxeditor/source-preview-plugin demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Socket CEO Feross Aboukhadijeh breaks down how North Korea hijacked Axios and what it means for the future of software supply chain security.

Security News
OpenSSF has issued a high-severity advisory warning open source developers of an active Slack-based campaign using impersonation to deliver malware.

Research
/Security News
Malicious packages published to npm, PyPI, Go Modules, crates.io, and Packagist impersonate developer tooling to fetch staged malware, steal credentials and wallets, and enable remote access.