| title | Plugin Markdown |
|---|
import { InteractiveDemo } from '@/app/components/InteractiveDemo'; import { PluginLoader } from '@/app/components/PluginLoader';
Markdown renderer with GitHub Flavored Markdown support.
npm install @object-ui/plugin-markdown<PluginLoader plugins={['markdown']}>
// Import once in your app entry point
import '@object-ui/plugin-markdown'
// Use in schemas
const schema = {
type: 'markdown',
content: '# Hello World\n\nThis is **markdown** text with [links](https://example.com).'
}- GitHub Flavored Markdown (tables, task lists, strikethrough)
- XSS protection (sanitized output)
- Code syntax highlighting
- Lazy-loaded (~100-200 KB loads only when rendered)
{
type: 'markdown',
content?: string, // Markdown content
className?: string // Tailwind classes
}
| Property | Type | Default | Description |
|---|---|---|---|
content |
string | '' |
Markdown content to render |
className |
string | '' |
Additional Tailwind CSS classes |
# H1 Header
## H2 Header
### H3 Header
#### H4 Header
##### H5 Header
###### H6 Header**Bold text**
*Italic text*
~~Strikethrough~~
`Inline code`[Link text](https://example.com)
- Unordered item 1
- Unordered item 2
- Nested item
1. Ordered item 1
2. Ordered item 2
1. Nested ordered item- [x] Completed task
- [ ] Incomplete task
- [ ] Another task| Column 1 | Column 2 | Column 3 |
|----------|----------|----------|
| Cell 1 | Cell 2 | Cell 3 |
| Cell 4 | Cell 5 | Cell 6 |```javascript
function hello() {
console.log("Hello, World!");
}
```> This is a blockquote
> It can span multiple lines---
***
___const docSchema = {
type: 'markdown',
content: `
# Getting Started
Welcome to our documentation!
## Installation
Install the package using npm:
\`\`\`bash
npm install our-package
\`\`\`
## Quick Start
1. Import the package
2. Configure your settings
3. Start building!
For more information, see the [API Reference](/docs/api/schema-reference).
`,
className: 'prose prose-lg max-w-none'
}const readmeSchema = {
type: 'markdown',
content: `
# Project Name
[]()
A brief description of the project.
## Features
- ✅ Feature 1
- ✅ Feature 2
- ✅ Feature 3
## Installation
\`\`\`bash
npm install project-name
\`\`\`
## Usage
\`\`\`javascript
import { Component } from 'project-name'
const app = new Component()
app.run()
\`\`\`
## Contributing
Contributions are welcome! Please read our [contributing guidelines](https://github.com/objectstack-ai/objectui/blob/main/CONTRIBUTING.md).
## License
MIT
`,
className: 'prose dark:prose-invert'
}const releaseNotes = {
type: 'markdown',
content: `
# Release Notes - v2.5.0
## 🎉 New Features
- Added dark mode support
- Improved performance by 40%
- New dashboard components
## 🐛 Bug Fixes
- Fixed login redirect issue (#123)
- Resolved memory leak in table component (#456)
## 🔄 Changes
- Updated dependencies
- Improved documentation
- Refactored authentication flow
## ⚠️ Breaking Changes
- Removed deprecated \`oldAPI\` method
- Changed config file format from JSON to YAML
## 📦 Dependencies
| Package | Old Version | New Version |
|---------|------------|-------------|
| react | 18.2.0 | 18.3.0 |
| vite | 4.5.0 | 5.0.0 |
`
}const apiDocs = {
type: 'markdown',
content: `
# API Reference
## Methods
### \`getData(id: string): Promise<Data>\`
Fetches data by ID.
**Parameters:**
- \`id\` (string) - The unique identifier
**Returns:**
- Promise resolving to Data object
**Example:**
\`\`\`typescript
const data = await getData('user-123')
console.log(data.name)
\`\`\`
### \`updateData(id: string, updates: Partial<Data>): Promise<void>\`
Updates existing data.
**Parameters:**
- \`id\` (string) - The unique identifier
- \`updates\` (Partial<Data>) - Fields to update
**Example:**
\`\`\`typescript
await updateData('user-123', { name: 'John Doe' })
\`\`\`
`
}Use Tailwind Typography plugin for better markdown styling:
const schema = {
type: 'markdown',
content: '# My Document\n\nContent here...',
className: 'prose prose-lg prose-slate dark:prose-invert max-w-none'
}Common prose classes:
prose- Base typography stylesprose-sm/prose-lg/prose-xl- Size variantsprose-slate/prose-gray- Color schemesdark:prose-invert- Dark mode supportmax-w-none- Remove max-width constraint
All markdown content is automatically sanitized using rehype-sanitize to prevent XSS attacks:
// Safe - HTML tags are sanitized
const schema = {
type: 'markdown',
content: '**Safe** markdown with <script>alert("XSS")</script>'
}
// The script tag will be removed in the outputThe plugin uses lazy loading to optimize bundle size:
- Initial load: ~0.2 KB (entry point)
- Lazy chunk: ~100-200 KB (loaded when markdown is rendered)
- Includes react-markdown and plugins
import type { MarkdownSchema } from '@object-ui/plugin-markdown'
const markdownSchema: MarkdownSchema = {
type: 'markdown',
content: '# Hello TypeScript!'
}