Text-first UI design tool - Create wireframes and mockups using Markdown syntax
wiremd is a markdown-based UI wireframing tool that lets you create wireframes and mockups using familiar markdown syntax with intuitive extensions. Write your UI designs as text, render them as beautiful wireframes.
- Designer-friendly syntax - No complex DSL to learn, just extended Markdown
- Version control ready - Store your wireframes as plain text in Git
- Fast iteration - Update designs as quickly as you can type
- Collaboration - Review wireframe changes in pull requests
- Developer handoff - Export to HTML or framework components
- No vendor lock-in - Open source MIT license, runs anywhere
Create a contact.md file:
## Contact Form
Name
[_____________________________]{required}
Email
[_____________________________]{type:email required}
Message
[_____________________________]{rows:5}
[Submit]* [Cancel]Generate a wireframe:
wiremd contact.md --style sketchThis renders into a styled HTML wireframe with a form, inputs, and buttons.
Create a features.md file:
## Product Features {.grid-3}
### :rocket: Fast
Lightning quick performance
### :shield: Secure
Bank-level security
### :gear: Flexible
Fully customizableGenerate a wireframe:
wiremd features.md --style sketchThis creates a responsive 3-column grid layout with icons and descriptions.
- ✅ Markdown-first - Valid markdown that degrades gracefully
- ✅ Full markdown support - Headings, text formatting, lists, links, images, blockquotes, code blocks, tables
- ✅ Grid layouts - Responsive multi-column grids (2, 3, 4+ columns) with simple
.grid-Nsyntax - ✅ Visual syntax - Looks like what it renders
- ✅ Fast to write - Intuitive shortcuts for common patterns
- ✅ Extensible - Add classes and attributes as needed
- ✅ Multiple outputs - HTML, JSON, React (JSX/TSX), Tailwind CSS, Figma (via plugin)
- ✅ 7 visual styles - sketch (Balsamiq-inspired), clean, wireframe, tailwind, material, brutal, none
- ✅ Full CLI tool - Watch mode, live-reload dev server, style switching
- ✅ Rich examples - Showcase files demonstrating all styles
- ✅ Framework renderers - React, Tailwind CSS classes (Vue, Svelte coming soon)
- ✅ VS Code extension - Live preview with real-time updates and style switching
This is an open-source MIT-licensed project containing:
src/- Core parser and renderer librarytests/- Comprehensive test suite (48 tests)docs/- Documentation site (Live at akonan.github.io/wiremd)examples/- Example wireframesfigma-plugin/- Figma plugin for importing wiremd designsobsidian-plugin/- Obsidian plugin for live wireframe previewsvscode-extension/- VS Code extension with live preview and style switching
npm install -g wiremdyarn global add wiremdpnpm add -g wiremdbrew install akonan/wiremd/wiremdgit clone https://github.com/akonan/wiremd.git
cd wiremd
npm install
npm run build
npm link# Generate HTML with default sketch style
wiremd wireframe.md
# Output to specific file
wiremd wireframe.md -o output.html
# Use alternative styles
wiremd wireframe.md --style clean # Modern minimal
wiremd wireframe.md --style wireframe # Traditional grayscale
wiremd wireframe.md --style tailwind # Utility-first with purple accents
wiremd wireframe.md --style material # Google Material Design
wiremd wireframe.md --style brutal # Neo-brutalism style
wiremd wireframe.md --style none # Unstyled semantic HTML
# Watch mode with live-reload dev server
wiremd wireframe.md --watch --serve 3000
# Generate different output formats
wiremd wireframe.md --format json # JSON AST output
wiremd wireframe.md --format react # React/JSX component
wiremd wireframe.md --format tailwind # HTML with Tailwind CSS classeswiremd designs can be imported into Figma as fully editable, native Figma designs using the wiremd Figma Plugin.
-
Generate JSON from your wiremd file:
wiremd your-mockup.md --format json -o mockup.json
-
Install the Figma Plugin:
- Open Figma → Plugins → Browse plugins
- Search for "wiremd Importer"
- Click Install
-
Import to Figma:
- Open the wiremd Importer plugin
- Paste your JSON
- Choose a visual theme (Sketch, Clean, Wireframe, or Minimal)
- Click "Import to Figma"
Your wiremd design will appear as a new Figma page with:
- Native Figma frames and text nodes
- Auto-layout for responsive designs
- Fully editable components
- Professional styling based on your chosen theme
- Sketch - Balsamiq-style hand-drawn look (perfect for brainstorming)
- Clean - Modern, polished design (great for presentations)
- Wireframe - Traditional grayscale (ideal for specifications)
- Minimal - Bare-bones styling (customize yourself)
✅ All layout components (containers, grids, navigation) ✅ Form elements (buttons, inputs, selects, checkboxes, radios) ✅ Content (headings, paragraphs, lists, tables, code blocks) ✅ Proper spacing, padding, and auto-layout constraints ✅ Theme-specific styling (colors, fonts, shadows)
See figma-plugin/README.md for complete documentation.
wiremd has a native Obsidian plugin that brings live wireframe previews directly into your notes.
- Live Preview: Automatically render wiremd code blocks as interactive previews in Obsidian
- 7 Visual Styles: Switch between sketch, clean, wireframe, tailwind, material, brutal, or none
- Quick Style Switching: Click the style badge to instantly change preview styles
- Export Functionality: Export wiremd previews as standalone HTML files
- Mobile Optimized: Touch-friendly interface with responsive design
- Command Palette Integration: Access all features via Obsidian commands
-
Clone the plugin into your Obsidian vault's plugins folder:
cd /path/to/your/vault/.obsidian/plugins/ git clone https://github.com/akonan/wiremd-obsidian.git wiremd-preview cd wiremd-preview npm install npm run build
-
Enable the plugin in Obsidian:
- Open Settings → Community Plugins
- Turn off "Safe mode" if needed
- Click "Reload" to refresh the plugins list
- Find "Wiremd Preview" and toggle it on
-
Create wiremd blocks in your notes:
```wiremd ## Login Form Username [____________________________] Password [****************************] [Sign In]{.primary} [Cancel] ```
The plugin will automatically render a live preview with your chosen style!
- Set style - Change the rendering style (7 commands for each style)
- Toggle auto-preview - Enable/disable automatic rendering
- Refresh previews - Manually refresh all wiremd previews
- Export as HTML - Export current wiremd block as standalone HTML
- Export all styles - Export in all 7 styles at once
- Copy to clipboard - Copy rendered HTML to clipboard
See the wiremd-obsidian repository for complete documentation.
import { parse, renderToHTML, renderToJSON, renderToReact, renderToTailwind } from 'wiremd';
// Parse markdown to AST
const ast = parse(`
## Contact Form

Name
[_____________________________]
[Submit]{.primary}
`);
// Render to HTML with visual style
const html = renderToHTML(ast, { style: 'sketch' });
// Render to JSON
const json = renderToJSON(ast, { pretty: true });
// Render to React component (TypeScript)
const reactComponent = renderToReact(ast, {
typescript: true,
componentName: 'ContactForm'
});
// Render to HTML with Tailwind CSS classes
const tailwindHTML = renderToTailwind(ast, { pretty: true });Not sure where to start? → Documentation Guide
| Document | Description | Best For |
|---|---|---|
| Syntax Showcase | Comprehensive interactive guide with live examples | Learning by example, copying patterns |
| Quick Reference | One-page syntax cheat sheet | Quick lookups, experienced users |
| Syntax Guide | User-friendly tutorial with best practices | Structured learning |
| FAQ | Common questions and troubleshooting | Solving problems, known issues |
📖 📚 View Full Documentation → - Complete documentation site with interactive examples
| Document | Description |
|---|---|
| 🌐 Live Documentation Site | Full docs with interactive examples |
| 🚀 Getting Started | Installation and first steps |
| 📝 Syntax Reference | Complete syntax guide |
| 🎮 Interactive Playground | Try wiremd in your browser |
| ⚙️ API Documentation | Programmatic API reference |
| 🔌 Framework Integrations | Next.js, React, Vite, Express |
| 🔧 Troubleshooting | Common issues and solutions |
| 🎨 Live Showcases | Examples in all 7 styles |
| 📂 Example Files | Local wiremd files to explore |
| Document | Description |
|---|---|
| Syntax Specification | Formal specification with parser rules |
| API Documentation (Local) | Local API reference |
| Project Plan | Development roadmap |
| CLAUDE.md | Project overview for AI assistants |
| Document | Description |
|---|---|
| CONTRIBUTING.md | Contribution guidelines |
| TESTING.md | Testing strategy and guidelines |
| CODE_OF_CONDUCT.md | Community guidelines |
| SECURITY.md | Security policy |
- Research existing solutions
- Create test corpus with 20 UI patterns
- Lock v0.1 syntax specification
- Complete TypeScript implementation
- Parser with full syntax support
- AST transformer with 40+ node types
- HTML renderer with 7 visual styles
- JSON output
- 48+ passing tests
- Full-featured CLI tool with watch mode and live-reload
- Rich example showcase demonstrating all styles
- React component renderer (JSX/TSX output)
- Tailwind CSS class renderer
- Documentation site ✅ Live Now!
- npm package publishing
- Framework-specific renderers (Vue, Svelte)
- Interactive web playground with live editor
See Project Plan for full roadmap.
Contributions are welcome! Phase 1-2 are complete with a working parser, renderer, and CLI. Feel free to:
- Report bugs or request features via GitHub Issues
- Submit pull requests for improvements
- Add new visual styles or examples
- Improve documentation
Please check the Project Plan for upcoming features.
# Clone the repository
git clone https://github.com/akonan/wiremd.git
cd wiremd
# Install dependencies
npm install
# Run tests
npm test
# Build
npm run build
# Run type check
npm run typecheckMIT License - See LICENSE for details.
- Issues & Bugs - GitHub Issues
- Discussions - GitHub Discussions
- Security - See SECURITY.md
- Changelog - CHANGELOG.md
Created by akonan
Inspired by:
- Balsamiq - Pioneering rapid wireframing
- Mermaid - Markdown-inspired diagramming
- PlantUML Salt - Text-based GUI mockups
- Markdown-UI - Markdown to UI components
Status: Phase 1-2 Complete (Core + CLI) | Version: 0.1.0 | Node: ≥18.0.0
Made with ❤️ for designers and developers who love plain text